123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /* $Header$ */
- /* internal type representation */
- /* structure for struct/union elements */
- struct fields {
- long fld_pos; /* position of field */
- long fld_bitsize; /* size in bits */
- struct type *fld_type; /* type of field */
- char *fld_name; /* name of field */
- };
- /* structure for enumeration literals */
- struct literal {
- long lit_val; /* value of literal */
- char *lit_name; /* name of literal */
- };
- /* structure for parameters */
- struct param {
- struct type *par_type; /* type of parameter */
- char par_kind; /* kind of parameter ('p', 'i', or 'v') */
- };
- typedef struct type {
- short ty_class;
- #define T_SUBRANGE 1
- #define T_ARRAY 2
- #define T_STRUCT 3
- #define T_UNION 4
- #define T_ENUM 5
- #define T_POINTER 6
- #define T_FILE 7
- #define T_PROCEDURE 8
- #define T_SET 9
- #define T_REAL 10
- #define T_INTEGER 11
- #define T_VOID 12
- #define T_UNSIGNED 13
- #define T_STRING 14 /* only for string constants ... */
- #define T_INCOMPLETE 100
- short ty_flags;
- #define T_CROSS 0x0001
- long ty_size;
- struct symbol *ty_sym;
- union {
- /* cross references */
- char *typ_tag;
- #define ty_tag ty_v.typ_tag
- /* procedures/functions: */
- struct {
- int typ_nparams;
- struct type *typ_retval;
- struct param *typ_params;
- long typ_nbparams;
- } ty_proc;
- #define ty_nparams ty_v.ty_proc.typ_nparams
- #define ty_retval ty_v.ty_proc.typ_retval
- #define ty_params ty_v.ty_proc.typ_params
- #define ty_nbparams ty_v.ty_proc.typ_nbparams
- /* pointers, files: */
- struct type *typ_ptrto;
- #define ty_ptrto ty_v.typ_ptrto
- #define ty_fileof ty_v.typ_ptrto
- /* arrays: */
- struct {
- long typ_lb, typ_hb;
- struct type *typ_index;
- struct type *typ_elements;
- } ty_array;
- #define ty_lb ty_v.ty_array.typ_lb
- #define ty_hb ty_v.ty_array.typ_hb
- #define ty_index ty_v.ty_array.typ_index
- #define ty_elements ty_v.ty_array.typ_elements
- /* subranges: */
- struct {
- long typ_low, typ_up;
- int typ_A;
- struct type *typ_base;
- } ty_subrange;
- #define ty_A ty_v.ty_subrange.typ_A
- #define ty_low ty_v.ty_subrange.typ_low
- #define ty_up ty_v.ty_subrange.typ_up
- #define ty_base ty_v.ty_subrange.typ_base
- /* structures/unions: */
- struct {
- unsigned typ_nfields; /* number of field structures */
- struct fields *typ_fields;
- } ty_struct;
- #define ty_nfields ty_v.ty_struct.typ_nfields
- #define ty_fields ty_v.ty_struct.typ_fields
- /* enumerations: */
- struct {
- unsigned typ_nenums; /* number of enumeration literals */
- struct literal *typ_literals;
- } ty_enum;
- #define ty_nenums ty_v.ty_enum.typ_nenums
- #define ty_literals ty_v.ty_enum.typ_literals
- /* bit sets: */
- struct {
- struct type *typ_setbase; /* base type of set elements */
- long typ_setlow; /* low bound */
- } ty_set;
- #define ty_setbase ty_v.ty_set.typ_setbase
- #define ty_setlow ty_v.ty_set.typ_setlow
- } ty_v;
- } t_type, *p_type;
- /* ALLOCDEF "type" 50 */
- extern p_type
- subrange_type(),
- array_type(),
- *tp_lookup();
- extern long
- param_size(),
- compute_size();
- extern p_type char_type, uchar_type, bool_type, int_type,
- long_type, double_type, string_type;
- extern p_type void_type, incomplete_type;
- extern long int_size, pointer_size, long_size, double_size;
|