]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/cpp/cpp.h
kbdfs: simplfy
[plan9front.git] / sys / src / cmd / cpp / cpp.h
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
13 enum 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
22 enum 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
36 enum { Notinmacro, Inmacro };
37
38 typedef 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
47 typedef 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
54 typedef 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
67 typedef 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
77 typedef 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))
86 extern  unsigned long namebit[077+1];
87
88 enum errtype { WARNING, ERROR, FATAL };
89
90 void    expandlex(void);
91 void    fixlex(void);
92 void    setup(int, char **);
93 #define gettokens cpp_gettokens
94 int     gettokens(Tokenrow *, int);
95 int     comparetokens(Tokenrow *, Tokenrow *);
96 Source  *setsource(char *, int, char *);
97 void    unsetsource(void);
98 void    puttokens(Tokenrow *);
99 void    process(Tokenrow *);
100 void    *dorealloc(void *, int);
101 void    *domalloc(int);
102 void    dofree(void *);
103 void    error(enum errtype, char *, ...);
104 void    flushout(void);
105 int     fillbuf(Source *);
106 int     trigraph(Source *);
107 int     foldline(Source *);
108 Nlist   *lookup(Token *, int);
109 void    control(Tokenrow *);
110 void    dodefine(Tokenrow *);
111 void    doadefine(Tokenrow *, int);
112 void    doinclude(Tokenrow *);
113 void    doif(Tokenrow *, enum kwtype);
114 void    expand(Tokenrow *, Nlist *, int);
115 void    builtin(Tokenrow *, int);
116 int     gatherargs(Tokenrow *, Tokenrow **, int, int *);
117 void    substargs(Nlist *, Tokenrow *, Tokenrow **);
118 void    expandrow(Tokenrow *, char *, int);
119 void    maketokenrow(int, Tokenrow *);
120 Tokenrow *copytokenrow(Tokenrow *, Tokenrow *);
121 Token   *growtokenrow(Tokenrow *);
122 Tokenrow *normtokenrow(Tokenrow *);
123 void    adjustrow(Tokenrow *, int);
124 void    movetokenrow(Tokenrow *, Tokenrow *);
125 void    insertrow(Tokenrow *, int, Tokenrow *);
126 void    peektokens(Tokenrow *, char *);
127 void    doconcat(Tokenrow *);
128 Tokenrow *stringify(Tokenrow *);
129 int     lookuparg(Nlist *, Token *);
130 long    eval(Tokenrow *, int);
131 void    genline(void);
132 void    setempty(Tokenrow *);
133 void    makespace(Tokenrow *);
134 char    *outnum(char *, int);
135 int     digit(int);
136 uchar   *newstring(uchar *, int, int);
137 int     checkhideset(int, Nlist *);
138 void    prhideset(int);
139 int     newhideset(int, Nlist *);
140 int     unionhideset(int, int);
141 void    iniths(void);
142 void    setobjname(char *);
143 void    clearwstab(void);
144 #define rowlen(tokrow)  ((tokrow)->lp - (tokrow)->bp)
145
146 extern  char *outp;
147 extern  Token   nltoken;
148 extern  Source *cursource;
149 extern  char *curtime;
150 extern  int incdepth;
151 extern  int ifdepth;
152 extern  int ifsatisfied[NIF];
153 extern  int Mflag;
154 extern  int nolineinfo;
155 extern  int skipping;
156 extern  int verbose;
157 extern  int Cplusplus;
158 extern  Nlist *kwdefined;
159 extern  Includelist includelist[NINCLUDE];
160 extern  char wd[];