languages using a common representation defined in gdbtypes.h.
The main data structure is main_type; it consists of a code (such
- as TYPE_CODE_ENUM for enumeration types), a number of
+ as #TYPE_CODE_ENUM for enumeration types), a number of
generally-useful fields such as the printable name, and finally a
- field type_specific that is a union of info specific to particular
- languages or other special cases (such as calling convention).
+ field main_type::type_specific that is a union of info specific to
+ particular languages or other special cases (such as calling
+ convention).
- The available type codes are defined in enum type_code. The enum
+ The available type codes are defined in enum #type_code. The enum
includes codes both for types that are common across a variety
of languages, and for types that are language-specific.
- Most accesses to type fields go through macros such as TYPE_CODE
- and TYPE_FN_FIELD_CONST. These are written such that they can be
- used as both rvalues and lvalues.
+ Most accesses to type fields go through macros such as
+ #TYPE_CODE(thistype) and #TYPE_FN_FIELD_CONST(thisfn, n). These are
+ written such that they can be used as both rvalues and lvalues.
*/
#include "hashtab.h"
TYPE_CODE_RANGE, /**< Range (integers within spec'd bounds). */
/* * A string type which is like an array of character but prints
- differently (at least for (the deleted) CHILL). It does not
- contain a length field as Pascal strings (for many Pascals,
- anyway) do; if we want to deal with such strings, we should use
- a new type code. */
+ differently. It does not contain a length field as Pascal
+ strings (for many Pascals, anyway) do; if we want to deal with
+ such strings, we should use a new type code. */
TYPE_CODE_STRING,
/* * Unknown type. The length field is valid if we were able to
TYPE_CODE_MODULE, /**< Fortran module. */
/* * Internal function type. */
- TYPE_CODE_INTERNAL_FUNCTION
- };
-
-/* * 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. */
+ TYPE_CODE_INTERNAL_FUNCTION,
-#define TYPE_CODE_CLASS TYPE_CODE_STRUCT
+ /* * Methods implemented in extension languages. */
+ TYPE_CODE_XMETHOD
+ };
/* * Some constants representing each bit field in the main_type. See
the bit-field-specific macros, below, for documentation of each
struct func_type *func_stuff;
} type_specific;
+
+ /* * Contains a location description value for the current type. Evaluating
+ this field yields to the location of the data for an object. */
+
+ struct dynamic_prop *data_location;
};
/* * A ``struct type'' describes a particular instance of a type, with
#define TYPE_LOW_BOUND_KIND(range_type) \
TYPE_RANGE_DATA(range_type)->low.kind
+/* Attribute accessors for the type data location. */
+#define TYPE_DATA_LOCATION(thistype) \
+ TYPE_MAIN_TYPE(thistype)->data_location
+#define TYPE_DATA_LOCATION_BATON(thistype) \
+ TYPE_DATA_LOCATION (thistype)->data.baton
+#define TYPE_DATA_LOCATION_ADDR(thistype) \
+ TYPE_DATA_LOCATION (thistype)->data.const_val
+#define TYPE_DATA_LOCATION_KIND(thistype) \
+ TYPE_DATA_LOCATION (thistype)->kind
+
/* Moto-specific stuff for FORTRAN arrays. */
#define TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED(arraytype) \
/* * This type is used to represent a GDB internal function. */
struct type *internal_fn;
+
+ /* * This type is used to represent an xmethod. */
+ struct type *xmethod;
};
/* * Return the type table for the specified architecture. */