summaryrefslogtreecommitdiff
path: root/gdb/gdbtypes.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/gdbtypes.h')
-rw-r--r--gdb/gdbtypes.h408
1 files changed, 280 insertions, 128 deletions
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 981dbec4b7c..62844e91498 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -130,28 +130,9 @@ enum type_code
TYPE_CODE_TEMPLATE_ARG /* C++ template arg */
};
-
-/* For now allow source to use TYPE_CODE_CLASS for C++ classes, as an
- alias for TYPE_CODE_STRUCT. This is for DWARF, which has a distinct
- "class" attribute. Perhaps we should actually have a separate TYPE_CODE
- so that we can print "class" or "struct" depending on what the debug
- info said. It's not clear we should bother. */
-
-#define TYPE_CODE_CLASS TYPE_CODE_STRUCT
-
+#define TYPE_CODE_CLASS TYPE_CODE_STRUCT
/* Some bits for the type's flags word. */
-/* Unsigned integer type. If this is not set for a TYPE_CODE_INT, the
- type is signed (unless TYPE_FLAG_NOSIGN (below) is set). */
-
-#define TYPE_FLAG_UNSIGNED (1 << 0)
-
-/* No sign for this type. In C++, "char", "signed char", and "unsigned
- char" are distinct types; so we need an extra flag to indicate the
- absence of a sign! */
-
-#define TYPE_FLAG_NOSIGN (1 << 1)
-
/* This appears in a type's flags word if it is a stub type (e.g., if
someone referenced a type that wasn't defined in a source file
via (struct sir_not_appearing_in_this_film *)). */
@@ -203,8 +184,17 @@ enum type_code
#define TYPE_FLAG_INCOMPLETE (1 << 8)
-
-struct type
+enum sign_type
+ {
+ /* Signed integer type */
+ ST_signed,
+ /* Unsigned integer type */
+ ST_unsigned,
+ /* No sign for this type. Needed for C++, where char, unsigned char, and signed char
+ are all distinct types.*/
+ ST_nosign
+ };
+struct common_type
{
/* Code for kind of type */
@@ -216,7 +206,7 @@ struct type
This is used for printing only, except by poorly designed C++ code.
For looking up a name, look for a symbol in the VAR_NAMESPACE. */
- char *name;
+ const char *name;
/* Tag name for this type, or NULL if none. This means that the
name of the type consists of a keyword followed by the tag name.
@@ -244,17 +234,6 @@ struct type
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
@@ -297,12 +276,33 @@ struct type
/* Flags about this type. */
- int flags;
+ short flags;
/* Number of fields described for this type */
short nfields;
+ /* 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 (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. */
+
+ struct type *vptr_basetype;
+
+ /* Field number of the virtual function table pointer in
+ VPTR_BASETYPE. If -1, we were unable to find the virtual
+ function table pointer in initial symbol reading, and
+ fill_in_vptr_fieldno should be called to find it if possible.
+
+ Unused if this type does not have virtual functions. */
+
+ int vptr_fieldno;
/* For structure and union types, a description of each field.
For set and pascal array types, there is one "field",
whose type is the domain type of the set or array.
@@ -368,28 +368,6 @@ struct type
}
*fields;
- /* 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 (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. */
-
- struct type *vptr_basetype;
-
- /* Field number of the virtual function table pointer in
- VPTR_BASETYPE. If -1, we were unable to find the virtual
- function table pointer in initial symbol reading, and
- fill_in_vptr_fieldno should be called to find it if possible.
-
- Unused if this type does not have virtual functions. */
-
- int vptr_fieldno;
-
/* Slot to point to additional language-specific fields of this type. */
union type_specific
@@ -408,13 +386,152 @@ struct type
cplus_struct_type. */
struct cplus_struct_type *cplus_stuff;
+ struct fortran_struct_type *fortran_stuff;
}
type_specific;
};
+/* TYPEFIX: types with names will eventually be derived from a named_type struct. No decision
+ on whether named_types will also have tag names or not. */
+struct void_type
+{
+ struct common_type ctype;
+};
+#define VOID_TYPE_CAST(type) ((struct void_type *)(type))
+struct boolean_type
+{
+ struct common_type ctype;
+};
+#define BOOLEAN_TYPE_CAST(type) ((struct boolean_type *)(type))
+struct signed_type_base
+{
+ struct common_type ctype;
+ enum sign_type sign;
+};
+#define SIGNED_TYPE_CAST(type) ((struct signed_type_base *)(type))
+#define SIGNED_TYPE_SIGN(type) (SIGNED_TYPE_CAST(type)->sign)
+struct integer_type
+{
+ struct signed_type_base base;
+};
+#define INTEGER_TYPE_CAST(type) ((struct integer_type *)(type))
+struct character_type
+{
+ struct signed_type_base base;
+};
+#define CHARACTER_TYPE_CAST(type) ((struct character_type *)(type))
+
+struct range_type
+{
+ struct common_type ctype;
+ struct type *index_type;
+ int lower_bound;
+ int upper_bound;
+};
+#define RANGE_TYPE_CAST(type) ((struct range_type *)(type))
+#define RANGE_INDEX_TYPE(type) (RANGE_TYPE_CAST(type)->index_type)
+#define RANGE_LOWER_BOUND(type) (RANGE_TYPE_CAST(type)->lower_bound)
+#define RANGE_UPPER_BOUND(type) (RANGE_TYPE_CAST(type)->upper_bound)
+struct array_type
+{
+ struct common_type ctype;
+ struct type *element_type;
+ struct range_type *range_type;
+};
+#define ARRAY_TYPE_CAST(type) ((struct array_type *)(type))
+#define ARRAY_ELEMENT_TYPE(type) (ARRAY_TYPE_CAST(type)->element_type)
+#define ARRAY_RANGE_TYPE(type) (ARRAY_TYPE_CAST(type)->range_type)
+struct set_type
+{
+ struct common_type ctype;
+ struct range_type *range_type;
+};
+#define SET_TYPE_CAST(type) ((struct set_type *)(type))
+#define SET_RANGE_TYPE(type) (SET_TYPE_CAST(type)->range_type)
+
+/* DJB - 05-31-01
+ * Do pointers need to be signed, also?
+ * Do they need a length?
+ * We've always been assuming they have one length.
+ * We can change that now without breaking anything else.
+ */
+struct pointer_type
+{
+ struct common_type ctype;
+ struct type *target_type;
+};
+#define POINTER_TYPE_CAST(type) ((struct pointer_type *)(type))
+#define POINTER_TARGET_TYPE(type) (POINTER_TYPE_CAST(type)->target_type)
+#define TYPE_CAN_BE_SIGNED(type) (TYPE_CODE (type) == TYPE_CODE_INT \
+ || TYPE_CODE (type) == TYPE_CODE_CHAR \
+ || TYPE_CODE (type) == TYPE_CODE_ENUM)
+
+struct enum_pair
+{
+ const char *name;
+ int value;
+};
+struct enum_type
+{
+ struct signed_type_base base;
+ unsigned int nvalues;
+ struct enum_pair *values;
+};
+#define ENUM_TYPE_CAST(type) ((struct enum_type *)(type))
+#define ENUM_NUM_VALUES(type) (ENUM_TYPE_CAST(type)->nvalues)
+#define ENUM_VALUES(type) (ENUM_TYPE_CAST(type)->values)
+#define ENUM_VALUE_NAME(type, i) (ENUM_VALUES(type)[i].name)
+#define ENUM_VALUE_VALUE(type, i) (ENUM_VALUES(type)[i].value)
+
+
+struct argument_pair
+{
+ unsigned char position;
+ struct type *type;
+};
+
+struct function_type
+{
+ struct common_type ctype;
+ struct type *return_value;
+ unsigned char narguments;
+ struct argument_pair *arguments;
+ unsigned char is_varargs:1;
+};
+#define FUNCTION_TYPE_CAST(type) ((struct function_type *)(type))
+#define FUNCTION_RETURN_VALUE(type) (FUNCTION_TYPE_CAST(type)->return_value)
+#define FUNCTION_NUM_ARGUMENTS(type) (FUNCTION_TYPE_CAST(type)->narguments)
+#define FUNCTION_ARGUMENTS(type) (FUNCTION_TYPE_CAST(type)->arguments)
+#define FUNCTION_ARGUMENT_POS(type, i) (FUNCTION_ARGUMENTS(type)[i].position)
+#define FUNCTION_ARGUMENT_TYPE(thetype, i) (FUNCTION_ARGUMENTS(thetype)[i].type)
+#define FUNCTION_IS_VARARGS(type) (FUNCTION_TYPE_CAST(type)->is_varargs)
#define NULL_TYPE ((struct type *) 0)
-
+struct type
+{
+ struct common_type ctype;
+};
+enum bound_type
+ {
+ BT_cannot_be_determined,
+ BT_by_ref_on_stack,
+ BT_by_value_on_stack,
+ BT_by_ref_in_reg,
+ BT_by_value_in_reg,
+ BT_simple
+ };
+struct fortran_struct_type
+{
+ enum bound_type upper_bound_type;
+ enum bound_type lower_bound_type;
+};
+enum declared_type
+ {
+ DT_class,
+ DT_struct,
+ DT_union,
+ DT_template
+ };
/* C++ language-specific information for TYPE_CODE_STRUCT and TYPE_CODE_UNION
nodes. */
@@ -425,7 +542,7 @@ struct cplus_struct_type
the struct type). I think only the `type' field of such a field has
any meaning. */
- short n_baseclasses;
+ unsigned char n_baseclasses;
/* Number of methods with unique names. All overloaded methods with
the same name count only once. */
@@ -444,12 +561,7 @@ struct cplus_struct_type
but we keep track of the real declaration so we can give
the correct information on "ptype". (Note: TEMPLATE may not
belong in this list...) */
-
-#define DECLARED_TYPE_CLASS 0
-#define DECLARED_TYPE_UNION 1
-#define DECLARED_TYPE_STRUCT 2
-#define DECLARED_TYPE_TEMPLATE 3
- short declared_type; /* One of the above codes */
+ enum declared_type declared_type; /* One of the above codes */
/* For derived classes, the number of base classes is given by n_baseclasses
and virtual_field_bits is a bit vector containing one bit per base class.
@@ -583,7 +695,7 @@ struct cplus_struct_type
* is a name. "type" will typically just point to a "struct type" with
* the placeholder TYPE_CODE_TEMPLATE_ARG type.
*/
- short ntemplate_args;
+ unsigned char ntemplate_args;
struct template_arg
{
char *name;
@@ -619,7 +731,7 @@ struct cplus_struct_type
*/
struct runtime_info
{
- short has_vtable;
+ unsigned char has_vtable;
struct type *primary_base;
struct type **virtual_base_list;
}
@@ -650,6 +762,18 @@ struct badness_vector
int *rank;
};
+/* The default value of TYPE_FORTRAN_SPECIFIC(T) points to the
+ this shared static structure. */
+
+extern const struct fortran_struct_type fortran_struct_default;
+
+extern void allocate_fortran_struct_type (struct type *);
+
+#define INIT_FORTRAN_SPECIFIC(type) \
+ (TYPE_FORTRAN_SPECIFIC(type)=(struct fortran_struct_type*)&fortran_struct_default)
+#define ALLOCATE_FORTRAN_STRUCT_TYPE(type) allocate_fortran_struct_type (type)
+#define HAVE_FORTRAN_STRUCT(type) \
+ (TYPE_FORTRAN_SPECIFIC(type) != &fortran_struct_default)
/* The default value of TYPE_CPLUS_SPECIFIC(T) points to the
this shared static structure. */
@@ -661,42 +785,38 @@ extern void allocate_cplus_struct_type (struct type *);
(TYPE_CPLUS_SPECIFIC(type)=(struct cplus_struct_type*)&cplus_struct_default)
#define ALLOCATE_CPLUS_STRUCT_TYPE(type) allocate_cplus_struct_type (type)
#define HAVE_CPLUS_STRUCT(type) \
- (TYPE_CPLUS_SPECIFIC(type) != &cplus_struct_default)
-
-#define TYPE_NAME(thistype) (thistype)->name
-#define TYPE_TAG_NAME(type) ((type)->tag_name)
-#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_CV_TYPE(thistype) (thistype)->cv_type
+ (TYPE_CPLUS_SPECIFIC(type) && (TYPE_CPLUS_SPECIFIC(type) != &cplus_struct_default))
+
+#define TYPE_NAME(thistype) (thistype)->ctype.name
+#define TYPE_TAG_NAME(thistype) ((thistype)->ctype.tag_name)
+#define TYPE_TARGET_TYPE(thistype) (thistype)->ctype.target_type
+#define TYPE_POINTER_TYPE(thistype) (thistype)->ctype.pointer_type
+#define TYPE_REFERENCE_TYPE(thistype) (thistype)->ctype.reference_type
+#define TYPE_CV_TYPE(thistype) (thistype)->ctype.cv_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_NOSIGN(thistype) ((thistype)->flags & TYPE_FLAG_NOSIGN)
-#define TYPE_CONST(thistype) ((thistype)->flags & TYPE_FLAG_CONST)
-#define TYPE_VOLATILE(thistype) ((thistype)->flags & TYPE_FLAG_VOLATILE)
-#define TYPE_INCOMPLETE(thistype) ((thistype)->flags & TYPE_FLAG_INCOMPLETE)
+#define TYPE_LENGTH(thistype) (thistype)->ctype.length
+#define TYPE_OBJFILE(thistype) (thistype)->ctype.objfile
+#define TYPE_FLAGS(thistype) (thistype)->ctype.flags
+#define TYPE_UNSIGNED(thistype) (SIGNED_TYPE_SIGN (thistype) == ST_unsigned)
+#define TYPE_NOSIGN(thistype) (SIGNED_TYPE_SIGN (thistype) == ST_nosign)
+#define TYPE_CONST(thistype) (TYPE_FLAGS(thistype) & TYPE_FLAG_CONST)
+#define TYPE_VOLATILE(thistype) (TYPE_FLAGS(thistype) & TYPE_FLAG_VOLATILE)
+#define TYPE_INCOMPLETE(thistype) (TYPE_FLAGS(thistype) & TYPE_FLAG_INCOMPLETE)
/* 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)->ctype.code
+#define TYPE_NFIELDS(thistype) (thistype)->ctype.nfields
+#define TYPE_FIELDS(thistype) (thistype)->ctype.fields
#define TYPE_TEMPLATE_ARGS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->template_args
#define TYPE_INSTANTIATIONS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->instantiations
-#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)
-
/* 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_TYPE(thistype) TYPE_FORTRAN_SPECIFIC(thistype)->upper_bound_type
+#define TYPE_ARRAY_LOWER_BOUND_TYPE(thistype) TYPE_FORTRAN_SPECIFIC(thistype)->lower_bound_type
#define TYPE_ARRAY_UPPER_BOUND_VALUE(arraytype) \
(TYPE_FIELD_BITPOS((TYPE_FIELD_TYPE((arraytype),0)),1))
@@ -706,21 +826,22 @@ extern void allocate_cplus_struct_type (struct type *);
/* C++ */
-#define TYPE_VPTR_BASETYPE(thistype) (thistype)->vptr_basetype
-#define TYPE_DOMAIN_TYPE(thistype) (thistype)->vptr_basetype
-#define TYPE_VPTR_FIELDNO(thistype) (thistype)->vptr_fieldno
+#define TYPE_VPTR_BASETYPE(thistype) (thistype)->ctype.vptr_basetype
+#define TYPE_DOMAIN_TYPE(thistype) (thistype)->ctype.vptr_basetype
+#define TYPE_VPTR_FIELDNO(thistype) (thistype)->ctype.vptr_fieldno
#define TYPE_FN_FIELDS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->fn_fields
#define TYPE_NFN_FIELDS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->nfn_fields
#define TYPE_NFN_FIELDS_TOTAL(thistype) TYPE_CPLUS_SPECIFIC(thistype)->nfn_fields_total
#define TYPE_NTEMPLATE_ARGS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->ntemplate_args
#define TYPE_NINSTANTIATIONS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->ninstantiations
#define TYPE_DECLARED_TYPE(thistype) TYPE_CPLUS_SPECIFIC(thistype)->declared_type
-#define TYPE_TYPE_SPECIFIC(thistype) (thistype)->type_specific
-#define TYPE_ARG_TYPES(thistype) (thistype)->type_specific.arg_types
-#define TYPE_CPLUS_SPECIFIC(thistype) (thistype)->type_specific.cplus_stuff
-#define TYPE_BASECLASS(thistype,index) (thistype)->fields[index].type
+#define TYPE_TYPE_SPECIFIC(thistype) (thistype)->ctype.type_specific
+#define TYPE_ARG_TYPES(thistype) (thistype)->ctype.type_specific.arg_types
+#define TYPE_FORTRAN_SPECIFIC(thistype) (thistype)->ctype.type_specific.fortran_stuff
+#define TYPE_CPLUS_SPECIFIC(thistype) (thistype)->ctype.type_specific.cplus_stuff
+#define TYPE_BASECLASS(thistype,index) (thistype)->ctype.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_NAME(thistype,index) (thistype)->ctype.fields[index].name
#define TYPE_BASECLASS_BITPOS(thistype,index) TYPE_FIELD_BITPOS(thistype,index)
#define BASETYPE_VIA_PUBLIC(thistype, index) \
((!TYPE_FIELD_PRIVATE(thistype, index)) && (!TYPE_FIELD_PROTECTED(thistype, index)))
@@ -739,7 +860,7 @@ extern void allocate_cplus_struct_type (struct type *);
((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)->ctype.fields[n]
#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))
@@ -777,8 +898,8 @@ extern void allocate_cplus_struct_type (struct type *);
(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \
: B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (n)))
-#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(thistype, n) (FIELD_BITSIZE(TYPE_FIELD(thistype,n)) < 0)
+#define TYPE_FIELD_STATIC_HAS_ADDR(thistype, n) (FIELD_BITSIZE(TYPE_FIELD(thistype, n)) == -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))
@@ -955,6 +1076,54 @@ extern struct type *builtin_type_f_void;
? obstack_alloc (&TYPE_OBJFILE (t) -> type_obstack, size) \
: xmalloc (size))
+/* List of types that share structures, and reasoning:
+
+Reference type, pointer type, both are struct pointer_type's.
+
+IMHO, this is okay because references and pointers *are* the same
+thing in reality, they just have slightly different semantics.
+These different semantics are handled by looking at the type code.
+Nothing else different about them, so there is no reason to make a
+reference_type struct.
+
+Not that anyone is stopping anyone from doing it.
+:)
+
+String type, array type, both are struct array_type's.
+
+TYPE_CODE_STRING in GDB has always been a type that is an array with a
+different type code. This makes sense, seeing as how a string is just
+an array of chars (or unsigned shorts, or whatever, depending on your
+character set). Thus, I see no reason to make a struct string_type,
+as it would be an exact duplicate of struct array_type.
+
+*/
+
+extern struct void_type *make_void_type (struct objfile *, const char *);
+extern struct boolean_type *make_boolean_type (struct objfile *, const char *);
+extern struct character_type *make_character_type (struct objfile *,
+ const char *,
+ unsigned int,
+ enum sign_type);
+extern struct integer_type *make_integer_type (struct objfile *, const char *,
+ unsigned int, enum sign_type);
+extern struct pointer_type *make_reference_type (struct objfile *,
+ struct type *);
+extern struct pointer_type *make_pointer_type (struct objfile *,
+ struct type *);
+extern struct array_type *make_array_type (struct objfile *,
+ struct type *, struct range_type *);
+extern struct range_type *make_range_type (struct objfile *,
+ struct type *, int, int);
+extern struct set_type *make_set_type (struct objfile *,
+ struct range_type *);
+extern struct array_type *make_string_type (struct objfile *,
+ struct range_type *);
+extern struct enum_type *make_enum_type (struct objfile *, unsigned int,
+ struct enum_pair **);
+extern struct function_type *make_function_type (struct objfile *, struct type *,
+ unsigned char, struct argument_pair **,
+ unsigned char);
extern struct type *alloc_type (struct objfile *);
extern struct type *init_type (enum type_code, int, int, char *,
@@ -962,8 +1131,6 @@ extern struct type *init_type (enum type_code, int, int, char *,
extern struct type *lookup_reference_type (struct type *);
-extern struct type *make_reference_type (struct type *, struct type **);
-
extern struct type *make_cv_type (int, int, struct type *, struct type **);
extern struct type *lookup_member_type (struct type *, struct type *);
@@ -977,33 +1144,20 @@ smash_to_member_type (struct type *, struct type *, struct type *);
extern struct type *allocate_stub_method (struct type *);
-extern char *type_name_no_tag (const struct type *);
+extern const char *type_name_no_tag (const struct type *);
extern struct type *lookup_struct_elt_type (struct type *, char *, int);
-extern struct type *make_pointer_type (struct type *, struct type **);
-
extern struct type *lookup_pointer_type (struct type *);
-extern struct type *make_function_type (struct type *, struct type **);
-
-extern struct type *lookup_function_type (struct type *);
-
-extern struct type *create_range_type (struct type *, struct type *, int,
- int);
-
-extern struct type *create_array_type (struct type *, struct type *,
- struct type *);
-
-extern struct type *create_string_type (struct type *, struct type *);
-
-extern struct type *create_set_type (struct type *, struct type *);
+//extern struct type *make_function_type (struct type *, struct type **);
+//extern struct type *lookup_function_type (struct type *);
extern int chill_varying_type (struct type *);
-extern struct type *lookup_unsigned_typename (char *);
+extern struct type *lookup_unsigned_typename (const char *);
-extern struct type *lookup_signed_typename (char *);
+extern struct type *lookup_signed_typename (const char *);
extern struct type *check_typedef (struct type *);
@@ -1011,15 +1165,15 @@ extern struct type *check_typedef (struct type *);
extern void check_stub_method (struct type *, int, int);
-extern struct type *lookup_primitive_typename (char *);
+extern struct type *lookup_primitive_typename (const char *);
extern char *gdb_mangle_name (struct type *, int, int);
extern struct type *builtin_type (char **);
-extern struct type *lookup_typename (char *, struct block *, int);
+extern struct type *lookup_typename (const char *, struct block *, int);
-extern struct type *lookup_template_type (char *, struct type *,
+extern struct type *lookup_template_type (const char *, struct type *,
struct block *);
extern struct type *lookup_fundamental_type (struct objfile *, int);
@@ -1028,8 +1182,6 @@ extern void fill_in_vptr_fieldno (struct type *);
extern int get_destructor_fn_field (struct type *, int *, int *);
-extern int get_discrete_bounds (struct type *, LONGEST *, LONGEST *);
-
extern int is_ancestor (struct type *, struct type *);
extern int has_vtable (struct type *);