+union type_owner
+{
+ struct objfile *objfile;
+ struct gdbarch *gdbarch;
+};
+
+union field_location
+{
+ /* * Position of this field, counting in bits from start of
+ containing structure. For gdbarch_bits_big_endian=1
+ targets, it is the bit offset to the MSB. For
+ gdbarch_bits_big_endian=0 targets, it is the bit offset to
+ the LSB. */
+
+ int bitpos;
+
+ /* * Enum value. */
+ LONGEST enumval;
+
+ /* * For a static field, if TYPE_FIELD_STATIC_HAS_ADDR then
+ physaddr is the location (in the target) of the static
+ field. Otherwise, physname is the mangled label of the
+ static field. */
+
+ CORE_ADDR physaddr;
+ const char *physname;
+
+ /* * The field location can be computed by evaluating the
+ following DWARF block. Its DATA is allocated on
+ objfile_obstack - no CU load is needed to access it. */
+
+ struct dwarf2_locexpr_baton *dwarf_block;
+};
+
+struct field
+{
+ union field_location loc;
+
+ /* * For a function or member type, this is 1 if the argument is
+ marked artificial. Artificial arguments should not be shown
+ to the user. For TYPE_CODE_RANGE it is set if the specific
+ bound is not defined. */
+
+ unsigned int artificial : 1;
+
+ /* * Discriminant for union field_location. */
+
+ ENUM_BITFIELD(field_loc_kind) loc_kind : 3;
+
+ /* * Size of this field, in bits, or zero if not packed.
+ If non-zero in an array type, indicates the element size in
+ bits (used only in Ada at the moment).
+ For an unpacked field, the field's type's length
+ says how many bytes the field occupies. */
+
+ unsigned int bitsize : 28;
+
+ /* * In a struct or union type, type of this field.
+ - In a function or member type, type of this argument.
+ - In an array type, the domain-type of the array. */
+
+ struct type *type;
+
+ /* * Name of field, value or argument.
+ NULL for range bounds, array domains, and member function
+ arguments. */
+
+ const char *name;
+};
+
+struct range_bounds
+{
+ /* * Low bound of range. */
+
+ struct dynamic_prop low;
+
+ /* * High bound of range. */
+
+ struct dynamic_prop high;
+
+ /* True if HIGH range bound contains the number of elements in the
+ subrange. This affects how the final hight bound is computed. */
+
+ int flag_upper_bound_is_count : 1;
+
+ /* True if LOW or/and HIGH are resolved into a static bound from
+ a dynamic one. */
+
+ int flag_bound_evaluated : 1;
+};
+
+union type_specific
+{
+ /* * CPLUS_STUFF is for TYPE_CODE_STRUCT. It is initialized to
+ point to cplus_struct_default, a default static instance of a
+ struct cplus_struct_type. */
+
+ struct cplus_struct_type *cplus_stuff;
+
+ /* * GNAT_STUFF is for types for which the GNAT Ada compiler
+ provides additional information. */
+
+ struct gnat_aux_type *gnat_stuff;
+
+ /* * FLOATFORMAT is for TYPE_CODE_FLT. It is a pointer to two
+ floatformat objects that describe the floating-point value
+ that resides within the type. The first is for big endian
+ targets and the second is for little endian targets. */
+
+ const struct floatformat **floatformat;
+
+ /* * For TYPE_CODE_FUNC and TYPE_CODE_METHOD types. */
+
+ struct func_type *func_stuff;
+
+ /* * For types that are pointer to member types (TYPE_CODE_METHODPTR,
+ TYPE_CODE_MEMBERPTR), SELF_TYPE is the type that this pointer
+ is a member of. */
+
+ struct type *self_type;
+};
+