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