Back out change to signals.exp (test_handle_all_print): Add setup_xfail for "alpha...
[deliverable/binutils-gdb.git] / gdb / gdbtypes.h
index 918e1a67aae6128d39309291f1ac8ff1b1ad7f50..59313d799fd4f5c06f2bb2f5736256d0345782b0 100644 (file)
@@ -1,5 +1,5 @@
 /* Internal type definitions for GDB.
-   Copyright (C) 1992 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
    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
-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
@@ -121,8 +121,8 @@ enum type_code
 
   /* Fortran */
   TYPE_CODE_COMPLEX,           /* Complex float */
-  TYPE_CODE_LITERAL_COMPLEX,   /* */
-  TYPE_CODE_LITERAL_STRING     /* */
+
+  TYPE_CODE_TYPEDEF
 };
 
 /* For now allow source to use TYPE_CODE_CLASS for C++ classes, as an
@@ -147,9 +147,10 @@ enum type_code
 #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)
 
@@ -180,8 +181,16 @@ struct type
 
   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;
 
@@ -214,6 +223,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 a complex type, describes the type of each coordinate.
      Unused otherwise.  */
 
   struct type *target_type;
@@ -229,13 +239,6 @@ struct 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;
@@ -250,6 +253,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 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.
@@ -349,7 +353,7 @@ struct cplus_struct_type
 
   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;
@@ -485,20 +489,23 @@ 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_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)
+/* 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_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)
-/* 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 */
 
@@ -723,8 +730,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_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 *));
@@ -732,8 +740,10 @@ lookup_unsigned_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));
@@ -759,6 +769,8 @@ lookup_fundamental_type PARAMS ((struct objfile *, int));
 extern void
 fill_in_vptr_fieldno PARAMS ((struct type *));
 
+extern int get_discrete_bounds PARAMS ((struct type*, LONGEST*, LONGEST*));
+
 #if MAINTENANCE_CMDS
 extern void recursive_dump_type PARAMS ((struct type *, int));
 #endif
This page took 0.026626 seconds and 4 git commands to generate.