Sat Nov 7 18:30:20 1998 Peter Schauer <peter.schauer@regent.e-technik.tu-muenchen.de>
[deliverable/binutils-gdb.git] / gdb / gdbtypes.h
index 50caa3c1c429622eb897f43270ba52cce395f340..4c354fecc44180d4cc090568aaa718749b1c5211 100644 (file)
@@ -1,5 +1,5 @@
 /* Internal type definitions for GDB.
 /* Internal type definitions for GDB.
-   Copyright (C) 1992 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1993, 1994, 1996 Free Software Foundation, Inc.
    Contributed by Cygnus Support, using pieces from other GDB modules.
 
 This file is part of GDB.
    Contributed by Cygnus Support, using pieces from other GDB modules.
 
 This file is part of GDB.
@@ -16,7 +16,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #if !defined (GDBTYPES_H)
 #define GDBTYPES_H 1
 
 #if !defined (GDBTYPES_H)
 #define GDBTYPES_H 1
@@ -80,13 +80,15 @@ enum type_code
   TYPE_CODE_FUNC,              /* Function type */
   TYPE_CODE_INT,               /* Integer type */
 
   TYPE_CODE_FUNC,              /* Function type */
   TYPE_CODE_INT,               /* Integer type */
 
-  /* Floating type.  This is *NOT* a complex type.  Complex types, when
-     we have them, will have their own type code (or TYPE_CODE_ERROR if
-     we can parse a complex type but not manipulate it).  There are parts
+  /* Floating type.  This is *NOT* a complex type.  Beware, there are parts
      of GDB which bogusly assume that TYPE_CODE_FLT can mean complex.  */
   TYPE_CODE_FLT,
 
      of GDB which bogusly assume that TYPE_CODE_FLT can mean complex.  */
   TYPE_CODE_FLT,
 
-  /* Void type (values zero length; the length field is ignored).  */
+  /* Void type.  The length field specifies the length (probably always
+     one) which is used in pointer arithmetic involving pointers to
+     this type, but actually dereferencing such a pointer is invalid;
+     a void type has no length and no actual representation in memory
+     or registers.  A pointer to a void type is a generic pointer.  */
   TYPE_CODE_VOID,
 
   TYPE_CODE_SET,               /* Pascal sets */
   TYPE_CODE_VOID,
 
   TYPE_CODE_SET,               /* Pascal sets */
@@ -115,7 +117,12 @@ enum type_code
 
   /* Boolean type.  0 is false, 1 is true, and other values are non-boolean
      (e.g. FORTRAN "logical" used as unsigned int).  */
 
   /* Boolean type.  0 is false, 1 is true, and other values are non-boolean
      (e.g. FORTRAN "logical" used as unsigned int).  */
-  TYPE_CODE_BOOL
+  TYPE_CODE_BOOL,
+
+  /* Fortran */
+  TYPE_CODE_COMPLEX,           /* Complex float */
+
+  TYPE_CODE_TYPEDEF
 };
 
 /* For now allow source to use TYPE_CODE_CLASS for C++ classes, as an
 };
 
 /* For now allow source to use TYPE_CODE_CLASS for C++ classes, as an
@@ -140,12 +147,19 @@ enum type_code
 #define TYPE_FLAG_STUB         (1 << 2)
 
 /* The target type of this type is a stub type, and this type needs to
 #define TYPE_FLAG_STUB         (1 << 2)
 
 /* The target type of this type is a stub type, and this type needs to
-   be updated if it gets un-stubbed in check_stub_type.  Currently only
-   used for arrays, in which TYPE_LENGTH of the array gets set based
-   on the TYPE_LENGTH of the target type.  */
+   be updated if it gets un-stubbed in check_typedef.
+   Used for arrays and ranges, in which TYPE_LENGTH of the array/range
+   gets set based on the TYPE_LENGTH of the target type.
+   Also, set for TYPE_CODE_TYPEDEF. */
 
 #define TYPE_FLAG_TARGET_STUB (1 << 3)
 
 
 #define TYPE_FLAG_TARGET_STUB (1 << 3)
 
+/* This is a function type which appears to have a prototype.  We need this
+   for function calls in order to tell us if it's necessary to coerce the args,
+   or to just do the standard conversions.  */
+
+#define TYPE_FLAG_PROTOTYPED (1 << 4)
+
 struct type
 {
 
 struct type
 {
 
@@ -173,11 +187,30 @@ struct type
 
   char *tag_name;
 
 
   char *tag_name;
 
-  /* Length, in units of TARGET_CHAR_BIT bits,
-     of storage for a value of this type */
+  /* Length of storage for a value of this type.  Various places pass
+     this to memcpy and such, meaning it must be in units of
+     HOST_CHAR_BIT.  Various other places expect they can calculate
+     addresses by adding it and such, meaning it must be in units of
+     TARGET_CHAR_BIT.  For some DSP targets, in which HOST_CHAR_BIT
+     will (presumably) be 8 and TARGET_CHAR_BIT will be (say) 32, this
+     is a problem.  One fix would be to make this field in bits
+     (requiring that it always be a multiple of HOST_CHAR_BIT and
+     TARGET_CHAR_BIT)--the other choice would be to make it
+     consistently in units of HOST_CHAR_BIT.  */
 
   unsigned length;
 
 
   unsigned length;
 
+  /* FIXME, these should probably be restricted to a Fortran-specific
+     field in some fashion.  */
+#define BOUND_CANNOT_BE_DETERMINED   5
+#define BOUND_BY_REF_ON_STACK        4
+#define BOUND_BY_VALUE_ON_STACK      3
+#define BOUND_BY_REF_IN_REG          2
+#define BOUND_BY_VALUE_IN_REG        1
+#define BOUND_SIMPLE                 0
+  int upper_bound_type;
+  int lower_bound_type;
+
   /* Every type is now associated with a particular objfile, and the
      type is allocated on the type_obstack for that objfile.  One problem
      however, is that there are times when gdb allocates new types while
   /* Every type is now associated with a particular objfile, and the
      type is allocated on the type_obstack for that objfile.  One problem
      however, is that there are times when gdb allocates new types while
@@ -196,6 +229,7 @@ struct type
      For an array type, describes the type of the elements.
      For a function or method type, describes the type of the return value.
      For a range type, describes the type of the full range.
      For an array type, describes the type of the elements.
      For a function or method type, describes the type of the return value.
      For a range type, describes the type of the full range.
+     For a complex type, describes the type of each coordinate.
      Unused otherwise.  */
 
   struct type *target_type;
      Unused otherwise.  */
 
   struct type *target_type;
@@ -211,13 +245,6 @@ struct type
 
   struct type *reference_type;
 
 
   struct type *reference_type;
 
-  /* Type that is a function returning this type.
-     NULL if no such function type is known here.
-     The debugger may add the address of such a type
-     if it has to construct one later.  */
-
-  struct type *function_type;
-
   /* Flags about this type.  */
 
   short flags;
   /* Flags about this type.  */
 
   short flags;
@@ -232,6 +259,7 @@ struct type
      For range types, there are two "fields",
      the minimum and maximum values (both inclusive).
      For enum types, each possible value is described by one "field".
      For range types, there are two "fields",
      the minimum and maximum values (both inclusive).
      For enum types, each possible value is described by one "field".
+     For a function type, a "field" for each parameter type.
      For C++ classes, there is one field for each base class (if it is
      a derived class) plus one field for each class data member.  Member
      functions are recorded elsewhere.
      For C++ classes, there is one field for each base class (if it is
      a derived class) plus one field for each class data member.  Member
      functions are recorded elsewhere.
@@ -244,25 +272,38 @@ struct type
   struct field
     {
 
   struct field
     {
 
-      /* Position of this field, counting in bits from start of
-        containing structure.  For a function type, this is the
-        position in the argument list of this argument.
-        For a range bound or enum value, this is the value itself.
-        (FIXME:  What about ranges larger than host int size?)
-        For BITS_BIG_ENDIAN=1 targets, it is the bit offset to the MSB.
-        For BITS_BIG_ENDIAN=0 targets, it is the bit offset to the LSB. */
 
 
-      int bitpos;
+
+      union field_location
+        {
+         /* Position of this field, counting in bits from start of
+            containing structure.
+            For BITS_BIG_ENDIAN=1 targets, it is the bit offset to the MSB.
+            For BITS_BIG_ENDIAN=0 targets, it is the bit offset to the LSB.
+            For a function type, this is the position in the argument list
+            of this argument.
+            For a range bound or enum value, this is the value itself. */
+
+         int bitpos;
+
+         /* 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;
+         char* physname;
+      } loc;
 
       /* Size of this field, in bits, or zero if not packed.
         For an unpacked field, the field's type's length
 
       /* Size of this field, in bits, or zero if not packed.
         For an unpacked field, the field's type's length
-        says how many bytes the field occupies.  */
-      /* FIXME: This is abused by TYPE_FIELD_STATIC_PHYSNAME to contain 
-        a pointer, so it has to be long.  */
+        says how many bytes the field occupies.
+        A value of -1 or -2 indicates a static field;  -1 means the location
+        is specified by the label loc.physname;  -2 means that loc.physaddr
+        specifies the actual address. */
 
 
-      long bitsize;
+      int bitsize;
 
 
-      /* In a struct or enum type, type of this field.
+      /* In a struct or union type, type of this field.
         In a function type, type of this argument.
         In an array type, the domain-type of the array.  */
 
         In a function type, type of this argument.
         In an array type, the domain-type of the array.  */
 
@@ -275,11 +316,14 @@ struct type
 
     } *fields;
 
 
     } *fields;
 
-  /* For types with virtual functions, VPTR_BASETYPE is the base class which
-     defined the virtual function table pointer.  
+  /* For types with virtual functions (TYPE_CODE_STRUCT), VPTR_BASETYPE
+     is the base class which defined the virtual function table pointer.  
 
 
-     For types that are pointer to member types, VPTR_BASETYPE
-     is the type that this pointer is a member of.
+     For types that are pointer to member types (TYPE_CODE_MEMBER),
+     VPTR_BASETYPE is the type that this pointer is a member of.
+
+     For method types (TYPE_CODE_METHOD), VPTR_BASETYPE is the aggregate
+     type that contains the method.
 
      Unused otherwise.  */
 
 
      Unused otherwise.  */
 
@@ -299,7 +343,11 @@ struct type
   union type_specific
     {
 
   union type_specific
     {
 
-      /* ARG_TYPES is for TYPE_CODE_METHOD and TYPE_CODE_FUNC.  */
+      /* ARG_TYPES is for TYPE_CODE_METHOD.
+        Contains the type of each argument, ending with a void type
+        after the last argument for normal member functions or a NULL
+        pointer after the last argument for functions with variable
+        arguments.  */
 
       struct type **arg_types;
 
 
       struct type **arg_types;
 
@@ -331,7 +379,7 @@ struct cplus_struct_type
 
   short nfn_fields;
 
 
   short nfn_fields;
 
-  /* Number of methods described for this type plus all the
+  /* Number of methods described for this type, not including the
      methods that it derives from.  */
 
   int nfn_fields_total;
      methods that it derives from.  */
 
   int nfn_fields_total;
@@ -405,16 +453,10 @@ struct cplus_struct_type
 
          char *physname;
 
 
          char *physname;
 
-         /* The return value of the method */
+         /* The type of the method.  */
 
          struct type *type;
 
 
          struct type *type;
 
-         /* The argument list.  Only valid if is_stub is clear.  Contains
-            the type of each argument, including `this', and ending with
-            a NULL pointer after the last argument.  */
-
-         struct type **args;
-
          /* For virtual functions.
             First baseclass that defines this virtual function.   */
 
          /* For virtual functions.
             First baseclass that defines this virtual function.   */
 
@@ -466,20 +508,34 @@ allocate_cplus_struct_type PARAMS ((struct type *));
 #define TYPE_TARGET_TYPE(thistype) (thistype)->target_type
 #define TYPE_POINTER_TYPE(thistype) (thistype)->pointer_type
 #define TYPE_REFERENCE_TYPE(thistype) (thistype)->reference_type
 #define TYPE_TARGET_TYPE(thistype) (thistype)->target_type
 #define TYPE_POINTER_TYPE(thistype) (thistype)->pointer_type
 #define TYPE_REFERENCE_TYPE(thistype) (thistype)->reference_type
-#define TYPE_FUNCTION_TYPE(thistype) (thistype)->function_type
+/* Note that if thistype is a TYPEDEF type, you have to call check_typedef.
+   But check_typedef does set the TYPE_LENGTH of the TYPEDEF type,
+   so you only have to call check_typedef once.  Since allocate_value
+   calls check_typedef, TYPE_LENGTH (VALUE_TYPE (X)) is safe.  */
 #define TYPE_LENGTH(thistype) (thistype)->length
 #define TYPE_OBJFILE(thistype) (thistype)->objfile
 #define TYPE_FLAGS(thistype) (thistype)->flags
 #define TYPE_UNSIGNED(thistype) ((thistype)->flags & TYPE_FLAG_UNSIGNED)
 #define TYPE_LENGTH(thistype) (thistype)->length
 #define TYPE_OBJFILE(thistype) (thistype)->objfile
 #define TYPE_FLAGS(thistype) (thistype)->flags
 #define TYPE_UNSIGNED(thistype) ((thistype)->flags & TYPE_FLAG_UNSIGNED)
+/* Note that TYPE_CODE can be TYPE_CODE_TYPEDEF, so if you wan the real
+   type, you need to do TYPE_CODE (check_type (this_type)). */
 #define TYPE_CODE(thistype) (thistype)->code
 #define TYPE_NFIELDS(thistype) (thistype)->nfields
 #define TYPE_FIELDS(thistype) (thistype)->fields
 
 #define TYPE_CODE(thistype) (thistype)->code
 #define TYPE_NFIELDS(thistype) (thistype)->nfields
 #define TYPE_FIELDS(thistype) (thistype)->fields
 
+#define TYPE_INDEX_TYPE(type) TYPE_FIELD_TYPE (type, 0)
 #define TYPE_LOW_BOUND(range_type) TYPE_FIELD_BITPOS (range_type, 0)
 #define TYPE_HIGH_BOUND(range_type) TYPE_FIELD_BITPOS (range_type, 1)
 #define TYPE_LOW_BOUND(range_type) TYPE_FIELD_BITPOS (range_type, 0)
 #define TYPE_HIGH_BOUND(range_type) TYPE_FIELD_BITPOS (range_type, 1)
-/* If TYPE_DUMMY_RANGE is true for a range type, it was allocated
-   by force_to_range_type. */
-#define TYPE_DUMMY_RANGE(type) ((type)->vptr_fieldno)
+
+/* Moto-specific stuff for FORTRAN arrays */
+
+#define TYPE_ARRAY_UPPER_BOUND_TYPE(thistype) (thistype)->upper_bound_type
+#define TYPE_ARRAY_LOWER_BOUND_TYPE(thistype) (thistype)->lower_bound_type
+
+#define TYPE_ARRAY_UPPER_BOUND_VALUE(arraytype) \
+   (TYPE_FIELD_BITPOS((TYPE_FIELD_TYPE((arraytype),0)),1))
+
+#define TYPE_ARRAY_LOWER_BOUND_VALUE(arraytype) \
+   (TYPE_FIELD_BITPOS((TYPE_FIELD_TYPE((arraytype),0)),0))
 
 /* C++ */
 
 
 /* C++ */
 
@@ -495,18 +551,27 @@ allocate_cplus_struct_type PARAMS ((struct type *));
 #define TYPE_BASECLASS(thistype,index) (thistype)->fields[index].type
 #define TYPE_N_BASECLASSES(thistype) TYPE_CPLUS_SPECIFIC(thistype)->n_baseclasses
 #define TYPE_BASECLASS_NAME(thistype,index) (thistype)->fields[index].name
 #define TYPE_BASECLASS(thistype,index) (thistype)->fields[index].type
 #define TYPE_N_BASECLASSES(thistype) TYPE_CPLUS_SPECIFIC(thistype)->n_baseclasses
 #define TYPE_BASECLASS_NAME(thistype,index) (thistype)->fields[index].name
-#define TYPE_BASECLASS_BITPOS(thistype,index) (thistype)->fields[index].bitpos
+#define TYPE_BASECLASS_BITPOS(thistype,index) TYPE_FIELD_BITPOS(thistype,index)
 #define BASETYPE_VIA_PUBLIC(thistype, index) (!TYPE_FIELD_PRIVATE(thistype, index))
 #define BASETYPE_VIA_VIRTUAL(thistype, index) \
   B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (index))
 
 #define BASETYPE_VIA_PUBLIC(thistype, index) (!TYPE_FIELD_PRIVATE(thistype, index))
 #define BASETYPE_VIA_VIRTUAL(thistype, index) \
   B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (index))
 
+#define FIELD_TYPE(thisfld) ((thisfld).type)
+#define FIELD_NAME(thisfld) ((thisfld).name)
+#define FIELD_BITPOS(thisfld) ((thisfld).loc.bitpos)
+#define FIELD_BITSIZE(thisfld) ((thisfld).bitsize)
+#define FIELD_PHYSNAME(thisfld) ((thisfld).loc.physname)
+#define FIELD_PHYSADDR(thisfld) ((thisfld).loc.physaddr)
+#define SET_FIELD_PHYSNAME(thisfld, name) \
+  ((thisfld).bitsize = -1, FIELD_PHYSNAME(thisfld) = (name))
+#define SET_FIELD_PHYSADDR(thisfld, name) \
+  ((thisfld).bitsize = -2, FIELD_PHYSADDR(thisfld) = (name))
 #define TYPE_FIELD(thistype, n) (thistype)->fields[n]
 #define TYPE_FIELD(thistype, n) (thistype)->fields[n]
-#define TYPE_FIELD_TYPE(thistype, n) (thistype)->fields[n].type
-#define TYPE_FIELD_NAME(thistype, n) (thistype)->fields[n].name
-#define TYPE_FIELD_VALUE(thistype, n) (* (int*) &(thistype)->fields[n].type)
-#define TYPE_FIELD_BITPOS(thistype, n) (thistype)->fields[n].bitpos
-#define TYPE_FIELD_BITSIZE(thistype, n) (thistype)->fields[n].bitsize
-#define TYPE_FIELD_PACKED(thistype, n) (thistype)->fields[n].bitsize
+#define TYPE_FIELD_TYPE(thistype, n) FIELD_TYPE(TYPE_FIELD(thistype, n))
+#define TYPE_FIELD_NAME(thistype, n) FIELD_NAME(TYPE_FIELD(thistype, n))
+#define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS(TYPE_FIELD(thistype,n))
+#define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE(TYPE_FIELD(thistype,n))
+#define TYPE_FIELD_PACKED(thistype, n) (FIELD_BITSIZE(TYPE_FIELD(thistype,n))!=0)
 
 #define TYPE_FIELD_PRIVATE_BITS(thistype) \
   TYPE_CPLUS_SPECIFIC(thistype)->private_field_bits
 
 #define TYPE_FIELD_PRIVATE_BITS(thistype) \
   TYPE_CPLUS_SPECIFIC(thistype)->private_field_bits
@@ -536,8 +601,10 @@ allocate_cplus_struct_type PARAMS ((struct type *));
 #define TYPE_FIELD_VIRTUAL(thistype, n) \
        B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (n))
 
 #define TYPE_FIELD_VIRTUAL(thistype, n) \
        B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (n))
 
-#define TYPE_FIELD_STATIC(thistype, n) ((thistype)->fields[n].bitpos == -1)
-#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) ((char *)(thistype)->fields[n].bitsize)
+#define TYPE_FIELD_STATIC(thistype, n) ((thistype)->fields[n].bitsize < 0)
+#define TYPE_FIELD_STATIC_HAS_ADDR(thistype, n) ((thistype)->fields[n].bitsize == -2)
+#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_PHYSNAME(TYPE_FIELD(thistype, n))
+#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_PHYSADDR(TYPE_FIELD(thistype, n))
 
 #define TYPE_FN_FIELDLISTS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists
 #define TYPE_FN_FIELDLIST(thistype, n) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists[n]
 
 #define TYPE_FN_FIELDLISTS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists
 #define TYPE_FN_FIELDLIST(thistype, n) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists[n]
@@ -559,6 +626,7 @@ allocate_cplus_struct_type PARAMS ((struct type *));
 #define TYPE_FN_FIELD_VIRTUAL_P(thisfn, n) ((thisfn)[n].voffset > 1)
 #define TYPE_FN_FIELD_STATIC_P(thisfn, n) ((thisfn)[n].voffset == VOFFSET_STATIC)
 
 #define TYPE_FN_FIELD_VIRTUAL_P(thisfn, n) ((thisfn)[n].voffset > 1)
 #define TYPE_FN_FIELD_STATIC_P(thisfn, n) ((thisfn)[n].voffset == VOFFSET_STATIC)
 
+/* Implicit sizes */
 extern struct type *builtin_type_void;
 extern struct type *builtin_type_char;
 extern struct type *builtin_type_short;
 extern struct type *builtin_type_void;
 extern struct type *builtin_type_char;
 extern struct type *builtin_type_short;
@@ -576,6 +644,20 @@ extern struct type *builtin_type_complex;
 extern struct type *builtin_type_double_complex;
 extern struct type *builtin_type_string;
 
 extern struct type *builtin_type_double_complex;
 extern struct type *builtin_type_string;
 
+/* Explicit sizes - see <intypes.h> for naming schema */
+extern struct type *builtin_type_int8;
+extern struct type *builtin_type_uint8;
+extern struct type *builtin_type_int16;
+extern struct type *builtin_type_uint16;
+extern struct type *builtin_type_int32;
+extern struct type *builtin_type_uint32;
+extern struct type *builtin_type_int64;
+extern struct type *builtin_type_uint64;
+/* start-sanitize-r5900 */
+extern struct type *builtin_type_int128;
+extern struct type *builtin_type_uint128;
+/* end-sanitize-r5900 */
+
 /* This type represents a type that was unrecognized in symbol
    read-in.  */
 
 /* This type represents a type that was unrecognized in symbol
    read-in.  */
 
@@ -600,6 +682,23 @@ extern struct type *builtin_type_chill_long;
 extern struct type *builtin_type_chill_ulong;
 extern struct type *builtin_type_chill_real;
 
 extern struct type *builtin_type_chill_ulong;
 extern struct type *builtin_type_chill_real;
 
+/* Fortran (F77) types */
+
+extern struct type *builtin_type_f_character;
+extern struct type *builtin_type_f_integer;
+extern struct type *builtin_type_f_logical;
+extern struct type *builtin_type_f_logical_s1;
+extern struct type *builtin_type_f_logical_s2;
+extern struct type *builtin_type_f_integer; 
+extern struct type *builtin_type_f_integer_s2;
+extern struct type *builtin_type_f_real;
+extern struct type *builtin_type_f_real_s8;
+extern struct type *builtin_type_f_real_s16;
+extern struct type *builtin_type_f_complex_s8;
+extern struct type *builtin_type_f_complex_s16;
+extern struct type *builtin_type_f_complex_s32;
+extern struct type *builtin_type_f_void;
+
 /* Maximum and minimum values of built-in types */
 
 #define        MAX_OF_TYPE(t)  \
 /* Maximum and minimum values of built-in types */
 
 #define        MAX_OF_TYPE(t)  \
@@ -676,8 +775,9 @@ create_array_type PARAMS ((struct type *, struct type *, struct type *));
 extern struct type *
 create_string_type PARAMS ((struct type *, struct type *));
 
 extern struct type *
 create_string_type PARAMS ((struct type *, struct type *));
 
-extern struct type *
-create_set_type PARAMS ((struct type *, struct type *));
+extern struct type *create_set_type PARAMS ((struct type *, struct type *));
+
+extern int chill_varying_type PARAMS ((struct type*));
 
 extern struct type *
 lookup_unsigned_typename PARAMS ((char *));
 
 extern struct type *
 lookup_unsigned_typename PARAMS ((char *));
@@ -685,8 +785,10 @@ lookup_unsigned_typename PARAMS ((char *));
 extern struct type *
 lookup_signed_typename PARAMS ((char *));
 
 extern struct type *
 lookup_signed_typename PARAMS ((char *));
 
-extern void
-check_stub_type PARAMS ((struct type *));
+extern struct type *
+check_typedef PARAMS ((struct type *));
+
+#define CHECK_TYPEDEF(TYPE) (TYPE) = check_typedef (TYPE)
 
 extern void
 check_stub_method PARAMS ((struct type *, int, int));
 
 extern void
 check_stub_method PARAMS ((struct type *, int, int));
@@ -712,6 +814,10 @@ lookup_fundamental_type PARAMS ((struct objfile *, int));
 extern void
 fill_in_vptr_fieldno PARAMS ((struct type *));
 
 extern void
 fill_in_vptr_fieldno PARAMS ((struct type *));
 
+extern int get_destructor_fn_field PARAMS ((struct type *, int *, int *));
+
+extern int get_discrete_bounds PARAMS ((struct type*, LONGEST*, LONGEST*));
+
 #if MAINTENANCE_CMDS
 extern void recursive_dump_type PARAMS ((struct type *, int));
 #endif
 #if MAINTENANCE_CMDS
 extern void recursive_dump_type PARAMS ((struct type *, int));
 #endif
@@ -721,8 +827,14 @@ extern void recursive_dump_type PARAMS ((struct type *, int));
 extern void
 print_scalar_formatted PARAMS ((char *, struct type *, int, int, GDB_FILE *));
 
 extern void
 print_scalar_formatted PARAMS ((char *, struct type *, int, int, GDB_FILE *));
 
+extern int can_dereference PARAMS ((struct type *));
+
 #if MAINTENANCE_CMDS
 extern void maintenance_print_type PARAMS ((char *, int));
 #endif
 
 #if MAINTENANCE_CMDS
 extern void maintenance_print_type PARAMS ((char *, int));
 #endif
 
+/* typeprint.c */
+
+extern void print_type_scalar PARAMS ((struct type *, LONGEST, GDB_FILE *));
+
 #endif /* GDBTYPES_H */
 #endif /* GDBTYPES_H */
This page took 0.027944 seconds and 4 git commands to generate.