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