12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
- /* $Id$ */
- /* TYPE DESCRIPTOR */
- #include "nobitfield.h"
- #include "dbsymtab.h"
- struct type {
- struct type *next; /* used for ARRAY and for qualifiers */
- short tp_fund; /* fundamental type */
- char tp_unsigned;
- char tp_typequal; /* type qualifier */
- int tp_align;
- arith tp_size; /* -1 if declared but not defined */
- struct type *tp_pointer; /* to POINTER */
- struct type *tp_array; /* to ARRAY */
- #ifdef DBSYMTAB
- int tp_dbindex;
- #endif
- #if 0
- /* This field is not needed now; see comment in function_of() routine. */
- struct type *tp_function; /* to FUNCTION */
- #endif
- union {
- struct {
- struct idf *tp__idf; /* name of STRUCT, UNION or ENUM */
- struct sdef *tp__sdef; /* to first selector */
- } tp_istagged; /* used with STRUCT, UNION & ENUM */
- struct {
- /* tp__up: from FIELD, POINTER, ARRAY or FUNCTION to fund. */
- struct type *tp__up;
- union {
- arith tp__nel; /* # of elements for array */
- /* tp__field: field descriptor if fund == FIELD */
- struct field *tp__field;
- struct {
- /* prototype list (pseudoproto for old_style def) */
- struct proto *tp__proto;
- struct proto *tp__pseudoproto;
- } tp_isfunc;
- } tp_f; /* FIELD or FUNCTION */
- } tp_nottagged; /* used with POINTER, FIELD, ARRAY & FUNCTION */
- } tp_union;
- };
- #define tp_idf tp_union.tp_istagged.tp__idf
- #define tp_sdef tp_union.tp_istagged.tp__sdef
- #define tp_up tp_union.tp_nottagged.tp__up
- #define tp_field tp_union.tp_nottagged.tp_f.tp__field
- #define tp_nel tp_union.tp_nottagged.tp_f.tp__nel
- #define tp_proto tp_union.tp_nottagged.tp_f.tp_isfunc.tp__proto
- #define tp_pseudoproto tp_union.tp_nottagged.tp_f.tp_isfunc.tp__pseudoproto
- /* Type qualifiers. Note: TQ_VOLATILE and TQ_CONST can be
- 'ored' to specify: extern const volatile int a;
- */
- #define TQ_VOLATILE 0x01
- #define TQ_CONST 0x02
- extern struct type
- *create_type(), *standard_type(), *construct_type(), *pointer_to(),
- *array_of(), *function_of(), *promoted_type();
- #ifndef NOBITFIELD
- extern struct type *field_of();
- #endif /* NOBITFIELD */
- extern struct type
- *schar_type, *uchar_type,
- *short_type, *ushort_type,
- *word_type, *uword_type,
- *int_type, *uint_type,
- *long_type, *ulong_type,
- *float_type, *double_type, *lngdbl_type,
- *void_type,
- *string_type, *funint_type, *error_type;
- extern struct type *pa_type; /* type.c */
- extern arith size_of_type(), align();
- /* ALLOCDEF "type" 50 */
|