3 * (C) Copyright Dec 14 1995, Edmond J. Breen.
\r
4 * ALL RIGHTS RESERVED.
\r
5 * This code may be copied for personal, non-profit use only.
\r
14 /*CUT typeExprStruct*/
\r
15 typedef struct type_expr {
\r
17 unsigned char alias;
\r
24 struct type_expr * nxt;
\r
29 #define setBase(X) do {type_expr * x = X; if(x) x->base=1;} while 0
\r
30 #define nextType(x) (x)->nxt
\r
31 #define setInf(x,y) (x)->u.inf = (y)
\r
32 #define getNumElems(x) (x)->u.sz
\r
33 #define setNumElems(x,y) (x)->u.sz = (y)
\r
35 /* handle qualifers */
\r
36 #define isconst(x) ((x)->qual & q_const)
\r
37 #define isconstp(x) ((x)->qual & q_constp)
\r
38 #define setConst(x) ((x)->qual |= q_const)
\r
39 #define setConstp(x) ((x)->qual |= q_constp)
\r
40 #define unsetConst(x) ((x)->qual &= ~(q_const | q_constp))
\r
41 #define IsTemp(x) ((x)->qual & q_temp)
\r
42 #define SetTemp(x) ((x)->qual |= q_temp)
\r
44 /* test 4 lose of const qualifier */
\r
45 #define ConstIntegrity(x,y) \
\r
46 (!((x)->qual & (q_const | q_constp)) && ((y)->qual & (q_const | q_constp)))
\r
48 void * getInf(type_expr *t);
\r
50 void setAsBaseType(type_expr * t);
\r
51 type_expr *copyBaseType(type_expr * t);
\r
54 type_expr * getcontype(type_expr * t1, type_expr * t2);
\r
55 type_expr * catTypes(type_expr *t1, type_expr *t2);
\r
56 int get_sizeof(type_expr * t);
\r
57 int get_align(type_expr * t);
\r
58 void exchtype(int obj, type_expr * t);
\r
59 type_expr * succType(type_expr *t);
\r
60 type_expr * revtype(type_expr *t);
\r
61 void * freetype(type_expr *t);
\r
62 void setaliases(type_expr *t, char a);
\r
63 void set_bastype(unsigned t, type_expr * typ);
\r
64 char basaliase(type_expr *t);
\r
65 void * basinf(type_expr *t);
\r
66 int bastype(type_expr *t);
\r
68 int sametypes(type_expr *t1, type_expr *t2);
\r
69 type_expr * addtype(unsigned obj,
\r
71 type_expr * transtype(type_expr *t);
\r
72 type_expr * copytype(type_expr *t);
\r
73 int gettype(type_expr *t);
\r
74 int compareConst(type_expr *t1, type_expr *t2);
\r
75 int compatibletypes(type_expr *t1, type_expr * t2);
\r