summaryrefslogtreecommitdiff
path: root/bcc/type.h
diff options
context:
space:
mode:
Diffstat (limited to 'bcc/type.h')
-rw-r--r--bcc/type.h98
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;