xref: /original-bsd/old/as.tahoe/asscan.h (revision 962d13e9)
1 /*
2  *	Copyright (c) 1982 Regents of the University of California
3  *	@(#)asscan.h 4.9 6/30/83
4  */
5 /*
6  *	The character scanner is called to fill up one token buffer
7  *
8  *	However, once the tokens are filled up by the
9  *	character scanner, they are used in both the first and the second
10  *	pass.  Holes created by .stab removal are replaced
11  *	with 'skip' tokens that direct the second pass to ignore the
12  *	following tokens.
13  */
14 
15 #define TOKBUFLG		4096
16 #define MAXTAHOE			32
17 #define SAFETY			16
18 
19 #define AVAILTOKS		TOKBUFLG -\
20 		sizeof(int) -\
21 		sizeof (struct tokbufdesc *) -\
22 		MAXTAHOE - SAFETY
23 
24 struct tokbufdesc{
25 	int		tok_count;		/*absolute byte length*/
26 	struct		tokbufdesc *tok_next;
27 	char		toks[AVAILTOKS];
28 	char		bufovf[MAXTAHOE + SAFETY];
29 };
30 /*
31  *	Definitions for handling tokens in the intermediate file
32  *	buffers.
33  *
34  *	We want to have the compiler produce the efficient auto increment
35  *	instruction for stepping through the buffer of tokens.  We must
36  *	fool the type checker into thinking that a pointer can point
37  *	to various size things.
38  */
39 
40 typedef int inttoktype;
41 /* typedef char inttoktype; */
42 typedef char bytetoktype;
43 
44 typedef char *ptrall;			/*all uses will be type cast*/
45 typedef u_short lgtype;			/*for storing length of strings or skiping*/
46 /*
47  *	defintions for putting various typed values
48  *	into the intermediate buffers
49  *	ptr will ALWAYS be of type ptrall
50  */
51 
52 #define ptype(type, ptr, val)	\
53 		(ptr) = (char *)((int)((ptr) + sizeof(type)-1)&~(sizeof(type)-1)), \
54 		*(type *)(ptr) = (val),	(ptr) += sizeof(type)
55 
56 #define	pchar(ptr, val)		*(ptr)++  = (val)
57 #define	puchar(ptr, val)	*(ptr)++  = (val)
58 
59 #define	pshort(ptr, val)	ptype (short, ptr, val)
60 #define	plgtype(ptr, val)	ptype (lgtype, ptr, val)
61 #define	pushort(ptr, val)	ptype (u_short, ptr, val)
62 #define	pint(ptr, val)		ptype (int, ptr, val)
63 #define	puint(ptr, val)		ptype (u_int, ptr, val)
64 #define	plong(ptr, val)		ptype (long, ptr, val)
65 #define	pulong(ptr, val)	ptype (u_int, ptr, val)
66 #define	pnumber(ptr, val)	ptype (Bignum, ptr, val)
67 #define	pptr(ptr, val)		ptype (int, ptr, val)
68 #define	popcode(ptr, val)	*(ptr)++  = (val)
69 #define	ptoken(ptr, val)	*(ptr)++  = (val)
70 #define	pskiplg(ptr, val)	ptype (lgtype, ptr, val)
71 
72 
73 #define gtype(type, ptr, val)	\
74 		(ptr) = (char *)((int)((ptr) + sizeof(type)-1)&~(sizeof(type)-1)), \
75 		(val) = *(type *)(ptr)  ,	(ptr) += sizeof(type)
76 
77 #define	gchar(val, ptr)		(val) = *(ptr)++
78 #define	guchar(val, ptr)	(val) = *(ptr)++
79 
80 #define	gshort(val, ptr)	gtype (short, ptr, val)
81 #define	glgtype(ptr, val)	gtype (lgtype, ptr, val)
82 #define	gushort(val, ptr)	gtype (u_short, ptr, val)
83 #define	gint(val, ptr)		gtype (int, ptr, val)
84 #define	guint(val, ptr)		gtype (u_int, ptr, val)
85 #define	glong(val, ptr)		gtype (long, ptr, val)
86 #define	gulong(val, ptr)	gtype (u_int, ptr, val)
87 #define	gnumber(val, ptr)	gtype (Bignum, ptr, val)
88 #define	gptr(val, ptr)		gtype (int, ptr, val)
89 #define	gopcode(val, ptr)	(val) = *(ptr)++
90 #define	gtoken(val, ptr)	(val) = *(ptr)++
91 #define	gskiplg(val, ptr)	gtype (lgtype, ptr, val)
92 
93 
94 extern	ptrall tokptr;	/*the next token to consume, call by copy*/
95 extern	ptrall tokub;	/*current upper bound in the current buffer*/
96