]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/2a/a.h
?a, cc: fix buffer overflows in built-in preprocessor (macbody)
[plan9front.git] / sys / src / cmd / 2a / a.h
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include "../2c/2.out.h"
5 #include "../cc/compat.h"
6
7 typedef struct  Sym     Sym;
8 typedef struct  Ref     Ref;
9 typedef struct  Gen     Gen;
10 typedef struct  Io      Io;
11 typedef struct  Hist    Hist;
12 typedef struct  Addr    Addr;
13 typedef struct  Gen2    Gen2;
14
15 #define MAXALIGN        7
16 #define FPCHIP          1
17 #define NSYMB           500
18 #define BUFSIZ          8192
19 #define HISTSZ          20
20 #define NINCLUDE        10
21 #define NHUNK           10000
22 #define EOF             (-1)
23 #define IGN             (-2)
24 #define GETC()          ((--fi.c < 0)? filbuf(): *fi.p++ & 0xff)
25 #define NHASH           503
26 #define STRINGSZ        200
27 #define NMACRO          10
28
29 struct  Sym
30 {
31         Sym*    link;
32         Ref*    ref;
33         char*   macro;
34         long    value;
35         ushort  type;
36         char    *name;
37         char    sym;
38 };
39 #define S       ((Sym*)0)
40
41 struct  Ref
42 {
43         int     class;
44 };
45
46 EXTERN struct
47 {
48         char*   p;
49         int     c;
50 } fi;
51
52 struct  Io
53 {
54         Io*     link;
55         char    b[BUFSIZ];
56         char*   p;
57         short   c;
58         short   f;
59 };
60 #define I       ((Io*)0)
61
62 EXTERN  struct
63 {
64         Sym*    sym;
65         short   type;
66 } h[NSYM];
67
68 struct  Addr
69 {
70         Sym*    sym;
71         long    offset;
72         short   type;
73 };
74 struct  Gen
75 {
76         Addr;
77         double  dval;
78         char    sval[8];
79         long    displace;
80         short   type;
81         short   index;
82         short   scale;
83         short   field;
84 };
85 struct  Gen2
86 {
87         Gen     from;
88         Gen     to;
89 };
90
91 struct  Hist
92 {
93         Hist*   link;
94         char*   name;
95         long    line;
96         long    offset;
97 };
98 #define H       ((Hist*)0)
99
100 enum
101 {
102         CLAST,
103         CMACARG,
104         CMACRO,
105         CPREPROC
106 };
107
108 EXTERN  char    debug[256];
109 EXTERN  Sym*    hash[NHASH];
110 EXTERN  char*   Dlist[30];
111 EXTERN  int     nDlist;
112 EXTERN  Hist*   ehist;
113 EXTERN  int     newflag;
114 EXTERN  Hist*   hist;
115 EXTERN  char*   include[NINCLUDE];
116 EXTERN  Io*     iofree;
117 EXTERN  Io*     ionext;
118 EXTERN  Io*     iostack;
119 EXTERN  long    lineno;
120 EXTERN  int     nerrors;
121 EXTERN  int     ninclude;
122 EXTERN  Gen     nullgen;
123 EXTERN  char*   outfile;
124 EXTERN  int     pass;
125 EXTERN  char*   pathname;
126 EXTERN  long    pc;
127 EXTERN  int     peekc;
128 EXTERN  int     sym;
129 EXTERN  char    symb[NSYMB];
130 EXTERN  int     thechar;
131 EXTERN  char*   thestring;
132 EXTERN  Biobuf  obuf;
133
134 void    errorexit(void);
135 void    pushio(void);
136 void    newio(void);
137 void    newfile(char*, int);
138 Sym*    slookup(char*);
139 Sym*    lookup(void);
140 void    syminit(Sym*);
141 long    yylex(void);
142 int     getc(void);
143 int     getnsc(void);
144 void    unget(int);
145 int     escchar(int);
146 void    cinit(void);
147 void    pinit(char*);
148 void    cclean(void);
149 int     isreg(Gen*);
150 void    outcode(int, Gen2*);
151 void    outhist(void);
152 void    zaddr(Gen*, int);
153 void    zname(char*, int, int);
154 void    ieeedtod(Ieee*, double);
155 int     filbuf(void);
156 Sym*    getsym(void);
157 void    domacro(void);
158 void    macund(void);
159 void    macdef(void);
160 void    macexpand(Sym*, char*, int);
161 void    macinc(void);
162 void    macprag(void);
163 void    maclin(void);
164 void    macif(int);
165 void    macend(void);
166 void    dodefine(char*);
167 void    prfile(long);
168 void    linehist(char*, int);
169 void    yyerror(char*, ...);
170 int     yyparse(void);
171 void    setinclude(char*);
172 int     assemble(char*);