|
|
1.1 root 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*/
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.