diff options
Diffstat (limited to 'bcc/type.h')
-rw-r--r-- | bcc/type.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/bcc/type.h b/bcc/type.h new file mode 100644 index 0000000..c451283 --- /dev/null +++ b/bcc/type.h @@ -0,0 +1,98 @@ +/* type.h - types for bcc */ + +/* Copyright (C) 1992 Bruce Evans */ + +/* + A type is essentially a "constructor", a size, and a list of pointers + leading to a scalar type. + The type constructors are codes for the scalar types and (), [], *, + struct and union. + The scalar types are char, short, int, long, float and double. + The type lists are triply linked. + + Part of the type structure might look like + + int (int) + = + func <-------> int (int ()) + | = + --> ptr <--> int (int *) + + (the exact structure depends on the order of declarations). + This layout results from the pre-declared (int) and (int ()) followed by + a declaration using (int *). + The sideways link (from func to ptr here) allows all types leading to a + given type to be found. + This allows different declarations of (int *) to be recognised as the same. + Type equivalence is equality of type pointers. +*/ + +/* + flags for scalar types + up to 3 of the flags may be set (none for constructed types) + the 2nd and third flags can only be UNSIGNED or DLONG + UNSIGNED only applies to integral types + DLONG only applies to long and unsigned long types and says that these + are actually longer than an int +*/ + +#define CHAR 0x01 +#define SHORT 0x02 +#define INT 0x04 +#define LONG 0x08 +#define FLOAT 0x10 +#define DOUBLE 0x20 +#define UNSIGNED 0x40 +#define DLONG 0x80 + +#define ISCALAR (CHAR | SHORT | INT | LONG) +#define RSCALAR (FLOAT | DOUBLE) + +/* + flags for type constructor + at most 1 of the flags may be set (none for scalar types) + flags are used for fast testing for array/pointer +*/ + +#define ARRAY 1 +#define FUNCTION 2 +#define POINTER 4 +#define STRUCTU 8 +#define VOID 0x10 + +/* type sizes */ +/* default sizes and long and float sizes are hard-coded into type data */ + +extern uoffset_t ctypesize; +extern uoffset_t dtypesize; +extern uoffset_t ftypesize; +extern uoffset_t itypesize; +extern uoffset_t ptypesize; +extern uoffset_t stypesize; + +/* basic scalar types */ + +EXTERN struct typestruct *dtype; +EXTERN struct typestruct *fltype; +EXTERN struct typestruct *itype; +EXTERN struct typestruct *ltype; +EXTERN struct typestruct *sctype; +EXTERN struct typestruct *stype; +EXTERN struct typestruct *uctype; +EXTERN struct typestruct *uitype; +EXTERN struct typestruct *ultype; +EXTERN struct typestruct *ustype; +EXTERN struct typestruct *vtype; + +/* working type */ + +EXTERN struct typestruct *ctype; + +/* constructed types */ + +EXTERN struct typestruct *fitype; +EXTERN struct typestruct *pctype; + +/* return type of current function */ + +EXTERN struct typestruct *returntype; |