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"
#define TYPE_OBJFILE(t) (TYPE_OBJFILE_OWNED(t)? TYPE_OWNER(t).objfile : NULL)
/* * True if this type was declared using the "class" keyword. This is
- only valid for C++ structure types, and only used for displaying
- the type. If false, the structure was declared as a "struct". */
+ only valid for C++ structure and enum types. If false, a structure
+ was declared as a "struct"; if true it was declared "class". For
+ enum types, this is true when "enum class" or "enum struct" was
+ used to declare the type.. */
#define TYPE_DECLARED_CLASS(t) (TYPE_MAIN_TYPE (t)->flag_declared_class)
/* * High bound of range. */
struct dynamic_prop high;
+
+ /* True if HIGH range bound contains the number of elements in the
+ subrange. This affects how the final hight bound is computed. */
+
+ int flag_upper_bound_is_count : 1;
+
+ /* True if LOW or/and HIGH are resolved into a static bound from
+ a dynamic one. */
+
+ int flag_bound_evaluated : 1;
} *bounds;
} flds_bnds;
#define TYPE_VPTR_BASETYPE(thistype) TYPE_MAIN_TYPE(thistype)->vptr_basetype
#define TYPE_DOMAIN_TYPE(thistype) TYPE_MAIN_TYPE(thistype)->vptr_basetype
#define TYPE_VPTR_FIELDNO(thistype) TYPE_MAIN_TYPE(thistype)->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_SPECIFIC_FIELD(thistype) \
TYPE_MAIN_TYPE(thistype)->type_specific_field