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