History

initial

rminnich committed 16 years ago

Commit 1fcdf79No parent (first commit)7733 files · +2461126 −-39Browse files

Showing the changes to sys/src/cmd/cpp/cpp.h (1 of 7733 files). Show all

Unified · Split

sys/src/cmd/cpp/cpp.h+160−0
@@ -0,0 +1,160 @@
1#define INS 32768 /* input buffer */
2#define OBS 4096 /* outbut buffer */
3#define NARG 32 /* Max number arguments to a macro */
4#define NINCLUDE 64 /* Max number of include directories (-I) */
5#define NIF 32 /* depth of nesting of #if */
6#ifndef EOF
7#define EOF (-1)
8#endif
9#ifndef NULL
10#define NULL 0
11#endif
12
13enum toktype { END, UNCLASS, NAME, NUMBER, STRING, CCON, NL, WS, DSHARP,
14 EQ, NEQ, LEQ, GEQ, LSH, RSH, LAND, LOR, PPLUS, MMINUS,
15 ARROW, SBRA, SKET, LP, RP, DOT, AND, STAR, PLUS, MINUS,
16 TILDE, NOT, SLASH, PCT, LT, GT, CIRC, OR, QUEST,
17 COLON, ASGN, COMMA, SHARP, SEMIC, CBRA, CKET,
18 ASPLUS, ASMINUS, ASSTAR, ASSLASH, ASPCT, ASCIRC, ASLSH,
19 ASRSH, ASOR, ASAND, ELLIPS,
20 DSHARP1, NAME1, DEFINED, UMINUS };
21
22enum kwtype { KIF, KIFDEF, KIFNDEF, KELIF, KELSE, KENDIF, KINCLUDE, KDEFINE,
23 KUNDEF, KLINE, KERROR, KWARNING, KPRAGMA, KDEFINED,
24 KLINENO, KFILE, KDATE, KTIME, KSTDC, KEVAL };
25
26#define ISDEFINED 01 /* has #defined value */
27#define ISKW 02 /* is PP keyword */
28#define ISUNCHANGE 04 /* can't be #defined in PP */
29#define ISMAC 010 /* builtin macro, e.g. __LINE__ */
30#define ISVARMAC 020 /* variadic macro */
31
32#define EOB 0xFE /* sentinel for end of input buffer */
33#define EOFC 0xFD /* sentinel for end of input file */
34#define XPWS 1 /* token flag: white space to assure token sep. */
35
36enum { Notinmacro, Inmacro };
37
38typedef struct token {
39 unsigned char type;
40 unsigned char flag;
41 unsigned short hideset;
42 unsigned int wslen;
43 unsigned int len;
44 uchar *t;
45} Token;
46
47typedef struct tokenrow {
48 Token *tp; /* current one to scan */
49 Token *bp; /* base (allocated value) */
50 Token *lp; /* last+1 token used */
51 int max; /* number allocated */
52} Tokenrow;
53
54typedef struct source {
55 char *filename; /* name of file of the source */
56 int line; /* current line number */
57 int lineinc; /* adjustment for \\n lines */
58 uchar *inb; /* input buffer */
59 uchar *inp; /* input pointer */
60 uchar *inl; /* end of input */
61 int ins; /* input buffer size */
62 int fd; /* input source */
63 int ifdepth; /* conditional nesting in include */
64 struct source *next; /* stack for #include */
65} Source;
66
67typedef struct nlist {
68 struct nlist *next;
69 uchar *name;
70 int len;
71 Tokenrow *vp; /* value as macro */
72 Tokenrow *ap; /* list of argument names, if any */
73 char val; /* value as preprocessor name */
74 char flag; /* is defined, is pp name */
75} Nlist;
76
77typedef struct includelist {
78 char deleted;
79 char always;
80 char *file;
81} Includelist;
82
83#define new(t) (t *)domalloc(sizeof(t))
84#define quicklook(a,b) (namebit[(a)&077] & (1<<((b)&037)))
85#define quickset(a,b) namebit[(a)&077] |= (1<<((b)&037))
86extern unsigned long namebit[077+1];
87
88enum errtype { WARNING, ERROR, FATAL };
89
90void expandlex(void);
91void fixlex(void);
92void setup(int, char **);
93#define gettokens cpp_gettokens
94int gettokens(Tokenrow *, int);
95int comparetokens(Tokenrow *, Tokenrow *);
96Source *setsource(char *, int, char *);
97void unsetsource(void);
98void puttokens(Tokenrow *);
99void process(Tokenrow *);
100void *dorealloc(void *, int);
101void *domalloc(int);
102void dofree(void *);
103void error(enum errtype, char *, ...);
104void flushout(void);
105int fillbuf(Source *);
106int trigraph(Source *);
107int foldline(Source *);
108Nlist *lookup(Token *, int);
109void control(Tokenrow *);
110void dodefine(Tokenrow *);
111void doadefine(Tokenrow *, int);
112void doinclude(Tokenrow *);
113void doif(Tokenrow *, enum kwtype);
114void expand(Tokenrow *, Nlist *, int);
115void builtin(Tokenrow *, int);
116int gatherargs(Tokenrow *, Tokenrow **, int, int *);
117void substargs(Nlist *, Tokenrow *, Tokenrow **);
118void expandrow(Tokenrow *, char *, int);
119void maketokenrow(int, Tokenrow *);
120Tokenrow *copytokenrow(Tokenrow *, Tokenrow *);
121Token *growtokenrow(Tokenrow *);
122Tokenrow *normtokenrow(Tokenrow *);
123void adjustrow(Tokenrow *, int);
124void movetokenrow(Tokenrow *, Tokenrow *);
125void insertrow(Tokenrow *, int, Tokenrow *);
126void peektokens(Tokenrow *, char *);
127void doconcat(Tokenrow *);
128Tokenrow *stringify(Tokenrow *);
129int lookuparg(Nlist *, Token *);
130long eval(Tokenrow *, int);
131void genline(void);
132void setempty(Tokenrow *);
133void makespace(Tokenrow *);
134char *outnum(char *, int);
135int digit(int);
136uchar *newstring(uchar *, int, int);
137int checkhideset(int, Nlist *);
138void prhideset(int);
139int newhideset(int, Nlist *);
140int unionhideset(int, int);
141void iniths(void);
142void setobjname(char *);
143void clearwstab(void);
144#define rowlen(tokrow) ((tokrow)->lp - (tokrow)->bp)
145
146extern char *outp;
147extern Token nltoken;
148extern Source *cursource;
149extern char *curtime;
150extern int incdepth;
151extern int ifdepth;
152extern int ifsatisfied[NIF];
153extern int Mflag;
154extern int nolineinfo;
155extern int skipping;
156extern int verbose;
157extern int Cplusplus;
158extern Nlist *kwdefined;
159extern Includelist includelist[NINCLUDE];
160extern char wd[];