#include #include #include #include #include #include #define NEW(p,a) ((p) = allocate(sizeof *(p), (a))) #define NEW0(p,a) memset(NEW((p),(a)), 0, sizeof *(p)) #define isaddrop(op) (specific(op)==ADDRG+P || specific(op)==ADDRL+P \ || specific(op)==ADDRF+P) #define MAXLINE 512 #define BUFSIZE 4096 #define istypename(t,tsym) (kind[t] == CHAR \ || t == ID && tsym && tsym->sclass == TYPEDEF) #define sizeop(n) ((n)<<10) #define generic(op) ((op)&0x3F0) #define specific(op) ((op)&0x3FF) #define opindex(op) (((op)>>4)&0x3F) #define opkind(op) ((op)&~0x3F0) #define opsize(op) ((op)>>10) #define optype(op) ((op)&0xF) #ifdef __LCC__ #ifndef __STDC__ #define __STDC__ #endif #endif #define NELEMS(a) ((int)(sizeof (a)/sizeof ((a)[0]))) #undef roundup #define roundup(x,n) (((x)+((n)-1))&(~((n)-1))) #define mkop(op,ty) (specific((op) + ttob(ty))) #define extend(x,ty) ((x)&(1<<(8*(ty)->size-1)) ? (x)|((~0UL)<<(8*(ty)->size-1)) : (x)&ones(8*(ty)->size)) #define ones(n) ((n)>=8*sizeof (unsigned long) ? ~0UL : ~((~0UL)<<(n))) #define isqual(t) ((t)->op >= CONST) #define unqual(t) (isqual(t) ? (t)->type : (t)) #define isvolatile(t) ((t)->op == VOLATILE \ || (t)->op == CONST+VOLATILE) #define isconst(t) ((t)->op == CONST \ || (t)->op == CONST+VOLATILE) #define isarray(t) (unqual(t)->op == ARRAY) #define isstruct(t) (unqual(t)->op == STRUCT \ || unqual(t)->op == UNION) #define isunion(t) (unqual(t)->op == UNION) #define isfunc(t) (unqual(t)->op == FUNCTION) #define isptr(t) (unqual(t)->op == POINTER) #define ischar(t) ((t)->size == 1 && isint(t)) #define isint(t) (unqual(t)->op == INT \ || unqual(t)->op == UNSIGNED) #define isfloat(t) (unqual(t)->op == FLOAT) #define isarith(t) (unqual(t)->op <= UNSIGNED) #define isunsigned(t) (unqual(t)->op == UNSIGNED) #define isscalar(t) (unqual(t)->op <= POINTER \ || unqual(t)->op == ENUM) #define isenum(t) (unqual(t)->op == ENUM) #define fieldsize(p) (p)->bitsize #define fieldright(p) ((p)->lsb - 1) #define fieldleft(p) (8*(p)->type->size - \ fieldsize(p) - fieldright(p)) #define fieldmask(p) (~(~(unsigned)0<