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
/* 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
#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)
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;
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;
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;
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.
#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 */
extern struct type *
create_string_type PARAMS ((struct type *, struct type *));
-extern struct type *f77_create_literal_string_type PARAMS ((struct type *,
- struct type *));
-
extern struct type *create_set_type PARAMS ((struct type *, struct type *));
-extern struct type *f77_create_literal_complex_type PARAMS ((struct type *,
- struct type *));
-
extern int chill_varying_type PARAMS ((struct type*));
extern struct type *
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
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