* Copyright (c) 1982 Regents of the University of California
* @(#)asscan.h 4.9 6/30/83
* The character scanner is called to fill up one token buffer
* However, once the tokens are filled up by the
* character scanner, they are used in both the first and the second
* pass. Holes created by .stab removal are replaced
* with 'skip' tokens that direct the second pass to ignore the
#define AVAILTOKS TOKBUFLG -\
sizeof (struct tokbufdesc *) -\
int tok_count
; /*absolute byte length*/
struct tokbufdesc
*tok_next
;
char bufovf
[MAXTAHOE
+ SAFETY
];
* Definitions for handling tokens in the intermediate file
* We want to have the compiler produce the efficient auto increment
* instruction for stepping through the buffer of tokens. We must
* fool the type checker into thinking that a pointer can point
* to various size things.
/* typedef char inttoktype; */
typedef char bytetoktype
;
typedef char *ptrall
; /*all uses will be type cast*/
typedef u_short lgtype
; /*for storing length of strings or skiping*/
* defintions for putting various typed values
* into the intermediate buffers
* ptr will ALWAYS be of type ptrall
#define ptype(type, ptr, val) \
(ptr) = (char *)((int)((ptr) + sizeof(type)-1)&~(sizeof(type)-1)), \
*(type *)(ptr) = (val), (ptr) += sizeof(type)
#define pchar(ptr, val) *(ptr)++ = (val)
#define puchar(ptr, val) *(ptr)++ = (val)
#define pshort(ptr, val) ptype (short, ptr, val)
#define plgtype(ptr, val) ptype (lgtype, ptr, val)
#define pushort(ptr, val) ptype (u_short, ptr, val)
#define pint(ptr, val) ptype (int, ptr, val)
#define puint(ptr, val) ptype (u_int, ptr, val)
#define plong(ptr, val) ptype (long, ptr, val)
#define pulong(ptr, val) ptype (u_int, ptr, val)
#define pnumber(ptr, val) ptype (Bignum, ptr, val)
#define pptr(ptr, val) ptype (int, ptr, val)
#define popcode(ptr, val) *(ptr)++ = (val)
#define ptoken(ptr, val) *(ptr)++ = (val)
#define pskiplg(ptr, val) ptype (lgtype, ptr, val)
#define gtype(type, ptr, val) \
(ptr) = (char *)((int)((ptr) + sizeof(type)-1)&~(sizeof(type)-1)), \
(val) = *(type *)(ptr) , (ptr) += sizeof(type)
#define gchar(val, ptr) (val) = *(ptr)++
#define guchar(val, ptr) (val) = *(ptr)++
#define gshort(val, ptr) gtype (short, ptr, val)
#define glgtype(ptr, val) gtype (lgtype, ptr, val)
#define gushort(val, ptr) gtype (u_short, ptr, val)
#define gint(val, ptr) gtype (int, ptr, val)
#define guint(val, ptr) gtype (u_int, ptr, val)
#define glong(val, ptr) gtype (long, ptr, val)
#define gulong(val, ptr) gtype (u_int, ptr, val)
#define gnumber(val, ptr) gtype (Bignum, ptr, val)
#define gptr(val, ptr) gtype (int, ptr, val)
#define gopcode(val, ptr) (val) = *(ptr)++
#define gtoken(val, ptr) (val) = *(ptr)++
#define gskiplg(val, ptr) gtype (lgtype, ptr, val)
extern ptrall tokptr
; /*the next token to consume, call by copy*/
extern ptrall tokub
; /*current upper bound in the current buffer*/