/* Internal type definitions for GDB.
- Copyright (C) 1992-2004, 2006-2012 Free Software Foundation, Inc.
+ Copyright (C) 1992-2014 Free Software Foundation, Inc.
Contributed by Cygnus Support, using pieces from other GDB modules.
enum type_flag_value
{
- TYPE_FLAG_UNSIGNED = (1 << 7),
- TYPE_FLAG_NOSIGN = (1 << 8),
- TYPE_FLAG_STUB = (1 << 9),
- TYPE_FLAG_TARGET_STUB = (1 << 10),
- TYPE_FLAG_STATIC = (1 << 11),
- TYPE_FLAG_PROTOTYPED = (1 << 12),
- TYPE_FLAG_INCOMPLETE = (1 << 13),
- TYPE_FLAG_VARARGS = (1 << 14),
- TYPE_FLAG_VECTOR = (1 << 15),
- TYPE_FLAG_FIXED_INSTANCE = (1 << 16),
- TYPE_FLAG_STUB_SUPPORTED = (1 << 17),
- TYPE_FLAG_GNU_IFUNC = (1 << 18),
+ TYPE_FLAG_UNSIGNED = (1 << 8),
+ TYPE_FLAG_NOSIGN = (1 << 9),
+ TYPE_FLAG_STUB = (1 << 10),
+ TYPE_FLAG_TARGET_STUB = (1 << 11),
+ TYPE_FLAG_STATIC = (1 << 12),
+ TYPE_FLAG_PROTOTYPED = (1 << 13),
+ TYPE_FLAG_INCOMPLETE = (1 << 14),
+ TYPE_FLAG_VARARGS = (1 << 15),
+ TYPE_FLAG_VECTOR = (1 << 16),
+ TYPE_FLAG_FIXED_INSTANCE = (1 << 17),
+ TYPE_FLAG_STUB_SUPPORTED = (1 << 18),
+ TYPE_FLAG_GNU_IFUNC = (1 << 19),
/* Used for error-checking. */
TYPE_FLAG_MIN = TYPE_FLAG_UNSIGNED
TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1 = (1 << 4),
TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2 = (1 << 5),
TYPE_INSTANCE_FLAG_NOTTEXT = (1 << 6),
+ TYPE_INSTANCE_FLAG_RESTRICT = (1 << 7)
};
/* Unsigned integer type. If this is not set for a TYPE_CODE_INT, the
#define TYPE_VOLATILE(t) \
(TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_VOLATILE)
+/* Restrict type. If this is set, the corresponding type has a
+ restrict modifier. */
+
+#define TYPE_RESTRICT(t) \
+ (TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_RESTRICT)
+
/* Instruction-space delimited type. This is for Harvard architectures
which have separate instruction and data address spaces (and perhaps
others).
to reconstruct the rest of the fields). */
unsigned int is_stub:1;
+ /* True if this function is a constructor, false
+ otherwise. */
+ unsigned int is_constructor : 1;
+
/* Unused. */
- unsigned int dummy:4;
+ unsigned int dummy:3;
/* Index into that baseclass's virtual function table,
minus 2; else if static: VOFFSET_STATIC; else: 0. */
}
*fn_fieldlists;
- /* Pointer to information about enclosing scope, if this is a
- local type. If it is not a local type, this is NULL. */
- struct local_type_info
- {
- char *file;
- int line;
- }
- *localtype_ptr;
-
/* typedefs defined inside this class. TYPEDEF_FIELD points to an array of
TYPEDEF_FIELD_COUNT elements. */
struct typedef_field
#define TYPE_FN_FIELD_ARTIFICIAL(thisfn, n) ((thisfn)[n].is_artificial)
#define TYPE_FN_FIELD_ABSTRACT(thisfn, n) ((thisfn)[n].is_abstract)
#define TYPE_FN_FIELD_STUB(thisfn, n) ((thisfn)[n].is_stub)
+#define TYPE_FN_FIELD_CONSTRUCTOR(thisfn, n) ((thisfn)[n].is_constructor)
#define TYPE_FN_FIELD_FCONTEXT(thisfn, n) ((thisfn)[n].fcontext)
#define TYPE_FN_FIELD_VOFFSET(thisfn, n) ((thisfn)[n].voffset-2)
#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_LOCALTYPE_PTR(thistype) (TYPE_CPLUS_SPECIFIC(thistype)->localtype_ptr)
-#define TYPE_LOCALTYPE_FILE(thistype) (TYPE_CPLUS_SPECIFIC(thistype)->localtype_ptr->file)
-#define TYPE_LOCALTYPE_LINE(thistype) (TYPE_CPLUS_SPECIFIC(thistype)->localtype_ptr->line)
-
#define TYPE_TYPEDEF_FIELD_ARRAY(thistype) \
TYPE_CPLUS_SPECIFIC (thistype)->typedef_field
#define TYPE_TYPEDEF_FIELD(thistype, n) \
objfile's architecture is returned. */
extern struct gdbarch *get_type_arch (const struct type *);
+/* This returns the target type (or NULL) of TYPE, also skipping
+ past typedefs. */
+extern struct type *get_target_type (struct type *type);
+
/* Helper function to construct objfile-owned types. */
-extern struct type *init_type (enum type_code, int, int, char *,
+extern struct type *init_type (enum type_code, int, int, const char *,
struct objfile *);
/* Helper functions to construct architecture-owned types. */
extern struct type *make_cv_type (int, int, struct type *, struct type **);
+extern struct type *make_restrict_type (struct type *);
+
extern void replace_type (struct type *, struct type *);
extern int address_space_name_to_int (struct gdbarch *, char *);
extern const char *type_name_no_tag_or_error (struct type *type);
-extern struct type *lookup_struct_elt_type (struct type *, char *, int);
+extern struct type *lookup_struct_elt_type (struct type *, const char *, int);
extern struct type *make_pointer_type (struct type *, struct type **);
extern struct type *create_array_type (struct type *, struct type *,
struct type *);
-extern struct type *lookup_array_range_type (struct type *, int, int);
+extern struct type *lookup_array_range_type (struct type *, LONGEST, LONGEST);
extern struct type *create_string_type (struct type *, struct type *,
struct type *);
-extern struct type *lookup_string_range_type (struct type *, int, int);
+extern struct type *lookup_string_range_type (struct type *, LONGEST, LONGEST);
extern struct type *create_set_type (struct type *, struct type *);
extern struct type *lookup_signed_typename (const struct language_defn *,
struct gdbarch *, const char *);
+extern void get_unsigned_type_max (struct type *, ULONGEST *);
+
+extern void get_signed_type_minmax (struct type *, LONGEST *, LONGEST *);
+
extern struct type *check_typedef (struct type *);
#define CHECK_TYPEDEF(TYPE) \
const struct block *, int);
extern struct type *lookup_template_type (char *, struct type *,
- struct block *);
+ const struct block *);
extern int get_vptr_fieldno (struct type *, struct type **);
extern const struct rank INT_FLOAT_CONVERSION_BADNESS;
/* Badness of conversion of pointer to void pointer. */
extern const struct rank VOID_PTR_CONVERSION_BADNESS;
-/* Badness of conversion of pointer to boolean. */
-extern const struct rank BOOL_PTR_CONVERSION_BADNESS;
+/* Badness of conversion to boolean. */
+extern const struct rank BOOL_CONVERSION_BADNESS;
/* Badness of converting derived to base class. */
extern const struct rank BASE_CONVERSION_BADNESS;
/* Badness of converting from non-reference to reference. */
extern struct type *copy_type (const struct type *type);
+extern int types_equal (struct type *, struct type *);
+
+extern int types_deeply_equal (struct type *, struct type *);
+
#endif /* GDBTYPES_H */