]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/1a/a.h
?a, cc: fix buffer overflows in built-in preprocessor (macbody)
[plan9front.git] / sys / src / cmd / 1a / 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   field;
82 };
83 struct  Gen2
84 {
85         Gen     from;
86         Gen     to;
87 };
88
89 struct  Hist
90 {
91         Hist*   link;
92         char*   name;
93         long    line;
94         long    offset;
95 };
96 #define H       ((Hist*)0)
97
98 enum
99 {
100         CLAST,
101         CMACARG,
102         CMACRO,
103         CPREPROC,
104 };
105
106 EXTERN  char    debug[256];
107 EXTERN  Sym*    hash[NHASH];
108 EXTERN  char*   Dlist[30];
109 EXTERN  int     nDlist;
110 EXTERN  Hist*   ehist;
111 EXTERN  int     newflag;
112 EXTERN  Hist*   hist;
113 EXTERN  char*   include[NINCLUDE];
114 EXTERN  Io*     iofree;
115 EXTERN  Io*     ionext;
116 EXTERN  Io*     iostack;
117 EXTERN  long    lineno;
118 EXTERN  int     nerrors;
119 EXTERN  int     ninclude;
120 EXTERN  Gen     nullgen;
121 EXTERN  char*   outfile;
122 EXTERN  int     pass;
123 EXTERN  char*   pathname;
124 EXTERN  long    pc;
125 EXTERN  int     peekc;
126 EXTERN  int     sym;
127 EXTERN  char    symb[NSYMB];
128 EXTERN  int     thechar;
129 EXTERN  char*   thestring;
130 EXTERN  Biobuf  obuf;
131
132 int     assemble(char*);
133 void    errorexit(void);
134 void    pushio(void);
135 void    newio(void);
136 void    newfile(char*, int);
137 Sym*    slookup(char*);
138 Sym*    lookup(void);
139 void    syminit(Sym*);
140 long    yylex(void);
141 int     getc(void);
142 int     getnsc(void);
143 void    unget(int);
144 int     escchar(int);
145 void    cinit(void);
146 void    pinit(char*);
147 void    cclean(void);
148 int     isreg(Gen*);
149 void    outcode(int, Gen2*);
150 void    outhist(void);
151 void    zaddr(Gen*, int);
152 void    zname(char*, int, int);
153 void    ieeedtod(Ieee*, double);
154 int     filbuf(void);
155 Sym*    getsym(void);
156 void    domacro(void);
157 void    macund(void);
158 void    macdef(void);
159 void    macexpand(Sym*, char*, int);
160 void    macinc(void);
161 void    macprag(void);
162 void    maclin(void);
163 void    macif(int);
164 void    macend(void);
165 void    dodefine(char*);
166 void    prfile(long);
167 void    linehist(char*, int);
168 void    yyerror(char*, ...);
169 int     yyparse(void);
170 void    setinclude(char*);
171 int     assemble(char*);