]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cpplib.h
tree.h (mark_tree_hashtable): New function.
[thirdparty/gcc.git] / gcc / cpplib.h
CommitLineData
7f2935c7 1/* Definitions for CPP library.
e7746130 2 Copyright (C) 1995, 96-99, 2000 Free Software Foundation, Inc.
7f2935c7
PB
3 Written by Per Bothner, 1994-95.
4
5This program is free software; you can redistribute it and/or modify it
6under the terms of the GNU General Public License as published by the
7Free Software Foundation; either version 2, or (at your option) any
8later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program; if not, write to the Free Software
940d9d63 17Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
7f2935c7
PB
18
19 In other words, you are welcome to use, share and improve this program.
20 You are forbidden to forbid anyone else to use, share and improve
21 what you give them. Help stamp out software-hoarding! */
990c642c
JL
22#ifndef __GCC_CPPLIB__
23#define __GCC_CPPLIB__
7f2935c7
PB
24
25#include <sys/types.h>
7f2935c7
PB
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
8b97c5f8
ZW
31/* For complex reasons, cpp_reader is also typedefed in c-pragma.h. */
32#ifndef _C_PRAGMA_H
7f2935c7 33typedef struct cpp_reader cpp_reader;
8b97c5f8 34#endif
7f2935c7
PB
35typedef struct cpp_buffer cpp_buffer;
36typedef struct cpp_options cpp_options;
1368ee70 37typedef struct cpp_token cpp_token;
bfb9dc7f 38typedef struct cpp_string cpp_string;
f8f769ea 39typedef struct cpp_hashnode cpp_hashnode;
93c80368
NB
40typedef struct cpp_pool cpp_pool;
41typedef struct cpp_macro cpp_macro;
42typedef struct cpp_lexer_pos cpp_lexer_pos;
43typedef struct cpp_lookahead cpp_lookahead;
44
45struct directive; /* These are deliberately incomplete. */
46struct answer;
47struct cpp_macro;
48struct macro_args;
49struct cpp_chunk;
50struct file_name_map_list;
51struct htab;
c5a04734
ZW
52
53/* The first two groups, apart from '=', can appear in preprocessor
54 expressions. This allows a lookup table to be implemented in
55 _cpp_parse_expr.
56
57 The first group, to CPP_LAST_EQ, can be immediately followed by an
58 '='. The lexer needs operators ending in '=', like ">>=", to be in
59 the same order as their counterparts without the '=', like ">>". */
60
61/* Positions in the table. */
6fee6033 62#define CPP_LAST_EQ CPP_MAX
c5a04734 63#define CPP_FIRST_DIGRAPH CPP_HASH
9ec7291f 64#define CPP_LAST_PUNCTUATOR CPP_DOT_STAR
1368ee70 65
1368ee70 66#define TTYPE_TABLE \
96be6998
ZW
67 OP(CPP_EQ = 0, "=") \
68 OP(CPP_NOT, "!") \
69 OP(CPP_GREATER, ">") /* compare */ \
70 OP(CPP_LESS, "<") \
71 OP(CPP_PLUS, "+") /* math */ \
72 OP(CPP_MINUS, "-") \
73 OP(CPP_MULT, "*") \
74 OP(CPP_DIV, "/") \
75 OP(CPP_MOD, "%") \
76 OP(CPP_AND, "&") /* bit ops */ \
77 OP(CPP_OR, "|") \
78 OP(CPP_XOR, "^") \
79 OP(CPP_RSHIFT, ">>") \
80 OP(CPP_LSHIFT, "<<") \
92936ecf
ZW
81 OP(CPP_MIN, "<?") /* extension */ \
82 OP(CPP_MAX, ">?") \
c5a04734 83\
96be6998
ZW
84 OP(CPP_COMPL, "~") \
85 OP(CPP_AND_AND, "&&") /* logical */ \
86 OP(CPP_OR_OR, "||") \
87 OP(CPP_QUERY, "?") \
88 OP(CPP_COLON, ":") \
89 OP(CPP_COMMA, ",") /* grouping */ \
90 OP(CPP_OPEN_PAREN, "(") \
91 OP(CPP_CLOSE_PAREN, ")") \
92 OP(CPP_EQ_EQ, "==") /* compare */ \
93 OP(CPP_NOT_EQ, "!=") \
94 OP(CPP_GREATER_EQ, ">=") \
95 OP(CPP_LESS_EQ, "<=") \
1368ee70 96\
96be6998
ZW
97 OP(CPP_PLUS_EQ, "+=") /* math */ \
98 OP(CPP_MINUS_EQ, "-=") \
99 OP(CPP_MULT_EQ, "*=") \
100 OP(CPP_DIV_EQ, "/=") \
101 OP(CPP_MOD_EQ, "%=") \
102 OP(CPP_AND_EQ, "&=") /* bit ops */ \
103 OP(CPP_OR_EQ, "|=") \
104 OP(CPP_XOR_EQ, "^=") \
105 OP(CPP_RSHIFT_EQ, ">>=") \
106 OP(CPP_LSHIFT_EQ, "<<=") \
92936ecf
ZW
107 OP(CPP_MIN_EQ, "<?=") /* extension */ \
108 OP(CPP_MAX_EQ, ">?=") \
c5a04734 109 /* Digraphs together, beginning with CPP_FIRST_DIGRAPH. */ \
96be6998
ZW
110 OP(CPP_HASH, "#") /* digraphs */ \
111 OP(CPP_PASTE, "##") \
112 OP(CPP_OPEN_SQUARE, "[") \
113 OP(CPP_CLOSE_SQUARE, "]") \
114 OP(CPP_OPEN_BRACE, "{") \
115 OP(CPP_CLOSE_BRACE, "}") \
116 /* The remainder of the punctuation. Order is not significant. */ \
117 OP(CPP_SEMICOLON, ";") /* structure */ \
118 OP(CPP_ELLIPSIS, "...") \
96be6998
ZW
119 OP(CPP_PLUS_PLUS, "++") /* increment */ \
120 OP(CPP_MINUS_MINUS, "--") \
121 OP(CPP_DEREF, "->") /* accessors */ \
122 OP(CPP_DOT, ".") \
123 OP(CPP_SCOPE, "::") \
124 OP(CPP_DEREF_STAR, "->*") \
125 OP(CPP_DOT_STAR, ".*") \
1368ee70 126\
96be6998
ZW
127 TK(CPP_NAME, SPELL_IDENT) /* word */ \
128 TK(CPP_INT, SPELL_STRING) /* 23 */ \
129 TK(CPP_FLOAT, SPELL_STRING) /* 3.14159 */ \
130 TK(CPP_NUMBER, SPELL_STRING) /* 34_be+ta */ \
1368ee70 131\
96be6998
ZW
132 TK(CPP_CHAR, SPELL_STRING) /* 'char' */ \
133 TK(CPP_WCHAR, SPELL_STRING) /* L'char' */ \
134 TK(CPP_OTHER, SPELL_CHAR) /* stray punctuation */ \
135\
136 TK(CPP_STRING, SPELL_STRING) /* "string" */ \
137 TK(CPP_WSTRING, SPELL_STRING) /* L"string" */ \
ba89d661 138 TK(CPP_OSTRING, SPELL_STRING) /* @"string" - Objective C */ \
96be6998
ZW
139 TK(CPP_HEADER_NAME, SPELL_STRING) /* <stdio.h> in #include */ \
140\
141 TK(CPP_COMMENT, SPELL_STRING) /* Only if output comments. */ \
142 TK(CPP_MACRO_ARG, SPELL_NONE) /* Macro argument. */ \
93c80368 143 OP(CPP_EOF, "EOL") /* End of line or file. */
1368ee70 144
96be6998
ZW
145#define OP(e, s) e,
146#define TK(e, s) e,
3a2b2c7a 147enum cpp_ttype
c45da1ca 148{
1368ee70
ZW
149 TTYPE_TABLE
150 N_TTYPES
151};
96be6998
ZW
152#undef OP
153#undef TK
1368ee70 154
dd07b884
NB
155/* C language kind, used when calling cpp_reader_init. */
156enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99,
157 CLK_GNUCXX, CLK_CXX98, CLK_OBJC, CLK_OBJCXX, CLK_ASM};
158
93c80368
NB
159/* Multiple-include optimisation. */
160enum mi_state {MI_FAILED = 0, MI_OUTSIDE};
161enum mi_ind {MI_IND_NONE = 0, MI_IND_NOT};
162
bfb9dc7f
ZW
163/* Payload of a NUMBER, FLOAT, STRING, or COMMENT token. */
164struct cpp_string
1368ee70
ZW
165{
166 unsigned int len;
f617b8e2 167 const unsigned char *text;
1368ee70
ZW
168};
169
c5a04734 170/* Flags for the cpp_token structure. */
041c3194 171#define PREV_WHITE (1 << 0) /* If whitespace before this token. */
93c80368
NB
172#define DIGRAPH (1 << 1) /* If it was a digraph. */
173#define STRINGIFY_ARG (1 << 2) /* If macro argument to be stringified. */
174#define PASTE_LEFT (1 << 3) /* If on LHS of a ## operator. */
dd07b884 175#define NAMED_OP (1 << 4) /* C++ named operators. */
93c80368 176#define NO_EXPAND (1 << 5) /* Do not macro-expand this token. */
9e62c811 177
1920de47 178/* A preprocessing token. This has been carefully packed and should
93c80368 179 occupy 12 bytes on 32-bit hosts and 16 bytes on 64-bit hosts. */
1368ee70
ZW
180struct cpp_token
181{
041c3194
ZW
182 ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT; /* token type */
183 unsigned char flags; /* flags - see above */
184
1368ee70
ZW
185 union
186 {
6c53ebff
NB
187 struct cpp_hashnode *node; /* An identifier. */
188 struct cpp_string str; /* A string, or number. */
189 unsigned int arg_no; /* Argument no. for a CPP_MACRO_ARG. */
190 unsigned char c; /* Character represented by CPP_OTHER. */
1368ee70 191 } val;
7f2935c7
PB
192};
193
93c80368
NB
194/* The position of a token in the current file. */
195struct cpp_lexer_pos
196{
197 unsigned int line;
198 unsigned int output_line;
199 unsigned short col;
200};
1368ee70 201
93c80368
NB
202typedef struct cpp_token_with_pos cpp_token_with_pos;
203struct cpp_token_with_pos
1368ee70 204{
93c80368
NB
205 cpp_token token;
206 cpp_lexer_pos pos;
207};
1368ee70 208
93c80368
NB
209/* Token lookahead. */
210struct cpp_lookahead
211{
212 struct cpp_lookahead *next;
213 cpp_token_with_pos *tokens;
214 cpp_lexer_pos pos;
215 unsigned int cur, count, cap;
216};
1368ee70 217
93c80368
NB
218/* Memory pools. */
219struct cpp_pool
220{
221 struct cpp_chunk *cur, *locked;
222 unsigned char *pos; /* Current position. */
223 unsigned int align;
224 unsigned int locks;
225};
041c3194 226
93c80368
NB
227typedef struct toklist toklist;
228struct toklist
229{
230 cpp_token *first;
231 cpp_token *limit;
232};
1368ee70 233
93c80368
NB
234typedef struct cpp_context cpp_context;
235struct cpp_context
236{
237 /* Doubly-linked list. */
238 cpp_context *next, *prev;
041c3194 239
93c80368
NB
240 /* Contexts other than the base context are contiguous tokens.
241 e.g. macro expansions, expanded argument tokens. */
242 struct toklist list;
15dad1d9 243
93c80368
NB
244 /* For a macro context, these are the macro and its arguments. */
245 cpp_macro *macro;
1368ee70 246};
7f2935c7 247
0d9f234d
NB
248/* A standalone character. We may want to make it unsigned for the
249 same reason we use unsigned char - to avoid signedness issues. */
250typedef int cppchar_t;
251
4d9a1b48
ZW
252struct cpp_buffer
253{
7ceb3598
NB
254 const unsigned char *cur; /* current position */
255 const unsigned char *rlimit; /* end of valid data */
7ceb3598 256 const unsigned char *line_base; /* start of current line */
0d9f234d 257 cppchar_t read_ahead; /* read ahead character */
cbcff6df 258 cppchar_t extra_char; /* extra read-ahead for long tokens. */
7f2935c7 259
0d9f234d 260 struct cpp_reader *pfile; /* Owns this buffer. */
4d9a1b48
ZW
261 struct cpp_buffer *prev;
262
0d9f234d
NB
263 const unsigned char *buf; /* entire buffer */
264
7f2935c7 265 /* Filename specified with #line command. */
a9ae4483 266 const char *nominal_fname;
041c3194 267
0b3d776a 268 /* Actual directory of this file, used only for "" includes */
f1a86df6 269 struct file_name_list *actual_dir;
7f2935c7 270
c31a6508 271 /* Pointer into the include table. Used for include_next and
4d9a1b48 272 to record control macros. */
c31a6508 273 struct include_file *inc;
7f2935c7 274
7f2935c7
PB
275 /* Value of if_stack at start of this file.
276 Used to prohibit unmatched #endif (etc) in an include file. */
277 struct if_stack *if_stack;
278
0d9f234d
NB
279 /* Token column position adjustment owing to tabs in whitespace. */
280 unsigned int col_adjust;
281
3a2b2c7a
ZW
282 /* Line number at line_base (above). */
283 unsigned int lineno;
284
4a5b68a2
NB
285 /* Because of the way the lexer works, -Wtrigraphs can sometimes
286 warn twice for the same trigraph. This helps prevent that. */
287 const unsigned char *last_Wtrigraphs;
288
75ec21db
ZW
289 /* True if we have already warned about C++ comments in this file.
290 The warning happens only for C89 extended mode with -pedantic on,
c5a04734
ZW
291 or for -Wtraditional, and only once per file (otherwise it would
292 be far too noisy). */
a5c3cccd
NB
293 unsigned char warned_cplusplus_comments;
294
295 /* True if we don't process trigraphs and escaped newlines. True
296 for preprocessed input, command line directives, and _Pragma
297 buffers. */
298 unsigned char from_stage3;
b528a07e
NB
299
300 /* Temporary storage for pfile->skipping whilst in a directive. */
301 unsigned char was_skipping;
7f2935c7
PB
302};
303
7f2935c7
PB
304/* Maximum nesting of cpp_buffers. We use a static limit, partly for
305 efficiency, and partly to limit runaway recursion. */
306#define CPP_STACK_MAX 200
af453bb0 307
ae79697b
ZW
308/* Values for opts.dump_macros.
309 dump_only means inhibit output of the preprocessed text
310 and instead output the definitions of all user-defined
86702e31 311 macros in a form suitable for use as input to cpp.
ae79697b
ZW
312 dump_names means pass #define and the macro name through to output.
313 dump_definitions means pass the whole definition (plus #define) through
314*/
315enum { dump_none = 0, dump_only, dump_names, dump_definitions };
7f2935c7 316
ae79697b
ZW
317/* This structure is nested inside struct cpp_reader, and
318 carries all the options visible to the command line. */
319struct cpp_options
c50bca08 320{
ae79697b
ZW
321 /* Name of input and output files. */
322 const char *in_fname;
323 const char *out_fname;
194d7493 324
6ab3e7dd
NB
325 /* Characters between tab stops. */
326 unsigned int tabstop;
327
ae79697b
ZW
328 /* Pending options - -D, -U, -A, -I, -ixxx. */
329 struct cpp_pending *pending;
7f2935c7 330
ae79697b
ZW
331 /* File name which deps are being written to. This is 0 if deps are
332 being written to stdout. */
333 const char *deps_file;
0b22d65c 334
ae79697b
ZW
335 /* Target-name to write with the dependency information. */
336 char *deps_target;
7f2935c7 337
ae79697b
ZW
338 /* Search paths for include files. */
339 struct file_name_list *quote_include; /* First dir to search for "file" */
340 struct file_name_list *bracket_include;/* First dir to search for <file> */
7f2935c7 341
ae79697b
ZW
342 /* Map between header names and file names, used only on DOS where
343 file names are limited in length. */
7e2eb697
PB
344 struct file_name_map_list *map_list;
345
ae79697b
ZW
346 /* Directory prefix that should replace `/usr/lib/gcc-lib/TARGET/VERSION'
347 in the standard include file directories. */
348 const char *include_prefix;
349 unsigned int include_prefix_len;
350
6db83155
ZW
351 /* -fleading_underscore sets this to "_". */
352 const char *user_label_prefix;
353
bdb05a7b
NB
354 /* The language we're preprocessing. */
355 enum c_lang lang;
356
7f2935c7 357 /* Non-0 means -v, so print the full set of include dirs. */
ae79697b 358 unsigned char verbose;
7f2935c7
PB
359
360 /* Nonzero means use extra default include directories for C++. */
ae79697b 361 unsigned char cplusplus;
7f2935c7
PB
362
363 /* Nonzero means handle cplusplus style comments */
ae79697b 364 unsigned char cplusplus_comments;
7f2935c7
PB
365
366 /* Nonzero means handle #import, for objective C. */
ae79697b 367 unsigned char objc;
7f2935c7 368
564ad5f4 369 /* Nonzero means don't copy comments into the output file. */
ae79697b 370 unsigned char discard_comments;
7f2935c7 371
041c3194 372 /* Nonzero means process the ISO trigraph sequences. */
ae79697b 373 unsigned char trigraphs;
7f2935c7 374
9b55f29a
NB
375 /* Nonzero means process the ISO digraph sequences. */
376 unsigned char digraphs;
377
bdb05a7b
NB
378 /* Nonzero means to allow hexadecimal floats and LL suffixes. */
379 unsigned char extended_numbers;
380
ae79697b
ZW
381 /* Nonzero means print the names of included files rather than the
382 preprocessed output. 1 means just the #include "...", 2 means
383 #include <...> as well. */
384 unsigned char print_deps;
7f2935c7 385
ae79697b
ZW
386 /* Nonzero if missing .h files in -M output are assumed to be
387 generated files and not errors. */
388 unsigned char print_deps_missing_files;
7f2935c7
PB
389
390 /* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */
ae79697b 391 unsigned char print_deps_append;
7f2935c7
PB
392
393 /* Nonzero means print names of header files (-H). */
ae79697b 394 unsigned char print_include_names;
7f2935c7 395
ae79697b
ZW
396 /* Nonzero means cpp_pedwarn causes a hard error. */
397 unsigned char pedantic_errors;
7f2935c7 398
c1212d2f 399 /* Nonzero means don't print warning messages. */
ae79697b 400 unsigned char inhibit_warnings;
7f2935c7 401
317639a8
BC
402 /* Nonzero means don't suppress warnings from system headers. */
403 unsigned char warn_system_headers;
404
ae79697b
ZW
405 /* Nonzero means don't print error messages. Has no option to
406 select it, but can be set by a user of cpplib (e.g. fix-header). */
407 unsigned char inhibit_errors;
c1212d2f 408
7f2935c7 409 /* Nonzero means warn if slash-star appears in a comment. */
ae79697b 410 unsigned char warn_comments;
7f2935c7
PB
411
412 /* Nonzero means warn if there are any trigraphs. */
ae79697b 413 unsigned char warn_trigraphs;
7f2935c7
PB
414
415 /* Nonzero means warn if #import is used. */
ae79697b 416 unsigned char warn_import;
7f2935c7 417
f9a0e96c
ZW
418 /* Nonzero means warn about various incompatibilities with
419 traditional C. */
07aa0b04 420 unsigned char warn_traditional;
7f2935c7 421
041c3194
ZW
422 /* Nonzero means warn if ## is applied to two tokens that cannot be
423 pasted together. */
424 unsigned char warn_paste;
425
7f2935c7 426 /* Nonzero means turn warnings into errors. */
ae79697b 427 unsigned char warnings_are_errors;
7f2935c7 428
ae79697b
ZW
429 /* Nonzero causes output not to be done, but directives such as
430 #define that have side effects are still obeyed. */
431 unsigned char no_output;
7f2935c7 432
31031edd
JL
433 /* Nonzero means we should look for header.gcc files that remap file
434 names. */
ae79697b 435 unsigned char remap;
31031edd 436
7f2935c7 437 /* Nonzero means don't output line number information. */
ae79697b 438 unsigned char no_line_commands;
7f2935c7 439
ae79697b
ZW
440 /* Nonzero means -I- has been seen, so don't look for #include "foo"
441 the source-file directory. */
442 unsigned char ignore_srcdir;
7f2935c7 443
ae79697b
ZW
444 /* Zero means dollar signs are punctuation. */
445 unsigned char dollars_in_ident;
7f2935c7 446
6ac34fdc 447 /* Nonzero means warn if undefined identifiers are evaluated in an #if. */
ae79697b 448 unsigned char warn_undef;
6ac34fdc 449
31948547 450 /* Nonzero for the 1999 C Standard, including corrigenda and amendments. */
ae79697b 451 unsigned char c99;
31948547 452
7f2935c7 453 /* Nonzero means give all the error messages the ANSI standard requires. */
ae79697b 454 unsigned char pedantic;
7f2935c7 455
3773a46b
JM
456 /* Nonzero means we're looking at already preprocessed code, so don't
457 bother trying to do macro expansion and whatnot. */
ae79697b 458 unsigned char preprocessed;
3773a46b 459
ae79697b
ZW
460 /* Nonzero disables all the standard directories for headers. */
461 unsigned char no_standard_includes;
7f2935c7 462
ae79697b
ZW
463 /* Nonzero disables the C++-specific standard directories for headers. */
464 unsigned char no_standard_cplusplus_includes;
7f2935c7 465
ae79697b
ZW
466 /* Nonzero means dump macros in some fashion - see above. */
467 unsigned char dump_macros;
7f2935c7 468
ae79697b
ZW
469 /* Nonzero means pass all #define and #undef directives which we
470 actually process through to the output stream. This feature is
471 used primarily to allow cc1 to record the #defines and #undefs
472 for the sake of debuggers which understand about preprocessor
473 macros, but it may also be useful with -E to figure out how
474 symbols are defined, and where they are defined. */
475 unsigned char debug_output;
7f2935c7 476
ae79697b
ZW
477 /* Nonzero means pass #include lines through to the output. */
478 unsigned char dump_includes;
7f2935c7 479
ae79697b
ZW
480 /* Print column number in error messages. */
481 unsigned char show_column;
482};
7f2935c7 483
0d9f234d
NB
484struct lexer_state
485{
486 /* Nonzero if first token on line is CPP_HASH. */
487 unsigned char in_directive;
488
0d9f234d
NB
489 /* Nonzero if in a directive that takes angle-bracketed headers. */
490 unsigned char angled_headers;
491
492 /* Nonzero to save comments. Turned off if discard_comments, and in
493 all directives apart from #define. */
494 unsigned char save_comments;
495
4c2b647d
NB
496 /* If nonzero the next token is at the beginning of the line. */
497 unsigned char next_bol;
0d9f234d 498
cbcff6df
NB
499 /* Nonzero if we're mid-comment. */
500 unsigned char lexing_comment;
501
93c80368
NB
502 /* Nonzero if lexing __VA_ARGS__ is valid. */
503 unsigned char va_args_ok;
504
505 /* Nonzero if lexing poisoned identifiers is valid. */
506 unsigned char poisoned_ok;
507
508 /* Nonzero to prevent macro expansion. */
509 unsigned char prevent_expansion;
510
511 /* Nonzero when parsing arguments to a function-like macro. */
512 unsigned char parsing_args;
0d9f234d 513};
0d9f234d 514
93c80368
NB
515/* Special nodes - identifiers with predefined significance. */
516struct spec_nodes
517{
518 cpp_hashnode *n_L; /* L"str" */
519 cpp_hashnode *n_defined; /* defined operator */
a5c3cccd 520 cpp_hashnode *n__Pragma; /* _Pragma operator */
93c80368
NB
521 cpp_hashnode *n__STRICT_ANSI__; /* STDC_0_IN_SYSTEM_HEADERS */
522 cpp_hashnode *n__CHAR_UNSIGNED__; /* plain char is unsigned */
523 cpp_hashnode *n__VA_ARGS__; /* C99 vararg macros */
524};
525
dd07b884 526/* A cpp_reader encapsulates the "state" of a pre-processor run.
ae79697b 527 Applying cpp_get_token repeatedly yields a stream of pre-processor
93c80368 528 tokens. Usually, there is only one cpp_reader object active. */
31031edd 529
ae79697b
ZW
530struct cpp_reader
531{
9e62c811 532 /* Top of buffer stack. */
ae79697b 533 cpp_buffer *buffer;
7f2935c7 534
0d9f234d
NB
535 /* Lexer state. */
536 struct lexer_state state;
537
93c80368
NB
538 /* The position of the last lexed token, last lexed directive, and
539 last macro invocation. */
540 cpp_lexer_pos lexer_pos;
541 cpp_lexer_pos macro_pos;
542 cpp_lexer_pos directive_pos;
543
544 /* Memory pools. */
545 cpp_pool ident_pool; /* For all identifiers, and permanent
546 numbers and strings. */
547 cpp_pool temp_string_pool; /* For temporary numbers and strings. */
548 cpp_pool macro_pool; /* For macro definitions. Permanent. */
549 cpp_pool argument_pool; /* For macro arguments. Temporary. */
550 cpp_pool* string_pool; /* Either temp_string_pool or ident_pool. */
551
552 /* Context stack. */
553 struct cpp_context base_context;
554 struct cpp_context *context;
555
556 /* If in_directive, the directive if known. */
557 const struct directive *directive;
558
559 /* Multiple inlcude optimisation. */
560 enum mi_state mi_state;
561 enum mi_ind mi_if_not_defined;
562 unsigned int mi_lexed;
563 const cpp_hashnode *mi_cmacro;
564 const cpp_hashnode *mi_ind_cmacro;
565
566 /* Token lookahead. */
567 struct cpp_lookahead *la_read; /* Read from this lookahead. */
568 struct cpp_lookahead *la_write; /* Write to this lookahead. */
569 struct cpp_lookahead *la_unused; /* Free store. */
fe6c2db9 570 struct cpp_lookahead *la_saved; /* Backup when entering directive. */
93c80368
NB
571
572 /* Error counter for exit code. */
3a2b2c7a 573 unsigned int errors;
ae79697b 574
0d9f234d
NB
575 /* Line and column where a newline was first seen in a string
576 constant (multi-line strings). */
93c80368
NB
577 cpp_lexer_pos mlstring_pos;
578
579 /* Buffer to hold macro definition string. */
580 unsigned char *macro_buffer;
581 unsigned int macro_buffer_len;
ae79697b
ZW
582
583 /* Current depth in #include directives that use <...>. */
3a2b2c7a 584 unsigned int system_include_depth;
ae79697b 585
93c80368 586 /* Current depth of buffer stack. */
3a2b2c7a 587 unsigned int buffer_stack_depth;
ae79697b 588
fb753f88
JJ
589 /* Current depth in #include directives. */
590 unsigned int include_depth;
591
93c80368 592 /* Hash table of macros and assertions. See cpphash.c. */
ae79697b
ZW
593 struct htab *hashtab;
594
93c80368 595 /* Tree of other included files. See cppfiles.c. */
c31a6508 596 struct splay_tree_s *all_include_files;
ae79697b 597
93c80368
NB
598 /* Chain of `actual directory' file_name_list entries, for ""
599 inclusion. */
ae79697b
ZW
600 struct file_name_list *actual_dirs;
601
602 /* Current maximum length of directory names in the search path
603 for include files. (Altered as we get more of them.) */
604 unsigned int max_include_len;
605
041c3194 606 /* Date and time tokens. Calculated together if either is requested. */
93c80368
NB
607 cpp_token date;
608 cpp_token time;
041c3194 609
ae79697b
ZW
610 /* Buffer of -M output. */
611 struct deps *deps;
612
c71f835b
ZW
613 /* Obstack holding all macro hash nodes. This never shrinks.
614 See cpphash.c */
615 struct obstack *hash_ob;
616
617 /* Obstack holding buffer and conditional structures. This is a
618 real stack. See cpplib.c */
619 struct obstack *buffer_ob;
620
58fea6af
ZW
621 /* Pragma table - dynamic, because a library user can add to the
622 list of recognized pragmas. */
623 struct pragma_entry *pragmas;
624
625 /* Call backs. */
626 struct {
627 void (*enter_file) PARAMS ((cpp_reader *));
628 void (*leave_file) PARAMS ((cpp_reader *));
9ec7291f 629 void (*rename_file) PARAMS ((cpp_reader *));
58fea6af 630 void (*include) PARAMS ((cpp_reader *, const unsigned char *,
93c80368 631 const cpp_token *));
58fea6af
ZW
632 void (*define) PARAMS ((cpp_reader *, cpp_hashnode *));
633 void (*undef) PARAMS ((cpp_reader *, cpp_hashnode *));
634 void (*poison) PARAMS ((cpp_reader *));
93c80368 635 void (*ident) PARAMS ((cpp_reader *, const cpp_string *));
58fea6af
ZW
636 void (*def_pragma) PARAMS ((cpp_reader *));
637 } cb;
638
ae79697b
ZW
639 /* User visible options. */
640 struct cpp_options opts;
641
93c80368
NB
642 /* Special nodes - identifiers with predefined significance to the
643 preprocessor. */
644 struct spec_nodes spec_nodes;
645
ae79697b
ZW
646 /* Nonzero means we have printed (while error reporting) a list of
647 containing files that matches the current status. */
648 unsigned char input_stack_listing_current;
649
ae79697b
ZW
650 /* We're printed a warning recommending against using #import. */
651 unsigned char import_warning;
652
ae79697b
ZW
653 /* True after cpp_start_read completes. Used to inhibit some
654 warnings while parsing the command line. */
655 unsigned char done_initializing;
ea4a453b
ZW
656
657 /* True if we are skipping a failed conditional group. */
658 unsigned char skipping;
f2d5f0cc
ZW
659};
660
ae79697b
ZW
661#define CPP_FATAL_LIMIT 1000
662/* True if we have seen a "fatal" error. */
663#define CPP_FATAL_ERRORS(READER) ((READER)->errors >= CPP_FATAL_LIMIT)
664
ae79697b
ZW
665#define CPP_OPTION(PFILE, OPTION) ((PFILE)->opts.OPTION)
666#define CPP_BUFFER(PFILE) ((PFILE)->buffer)
3a2b2c7a 667#define CPP_BUF_LINE(BUF) ((BUF)->lineno)
0d9f234d 668#define CPP_BUF_COLUMN(BUF, CUR) ((CUR) - (BUF)->line_base + (BUF)->col_adjust)
6ab3e7dd 669#define CPP_BUF_COL(BUF) CPP_BUF_COLUMN(BUF, (BUF)->cur)
ae79697b 670
7f2935c7 671/* Name under which this program was invoked. */
bcc5cac9 672extern const char *progname;
7f2935c7 673
93c80368
NB
674/* The structure of a node in the hash table. The hash table has
675 entries for all identifiers: either macros defined by #define
676 commands (type NT_MACRO), assertions created with #assert
677 (NT_ASSERTION), or neither of the above (NT_VOID). Builtin macros
678 like __LINE__ are flagged NODE_BUILTIN. Poisioned identifiers are
679 flagged NODE_POISONED. NODE_OPERATOR (C++ only) indicates an
680 identifier that behaves like an operator such as "xor".
681 NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
682 diagnostic may be required for this node. Currently this only
683 applies to __VA_ARGS__ and poisoned identifiers. */
684
685/* Hash node flags. */
686#define NODE_OPERATOR (1 << 0) /* C++ named operator. */
687#define NODE_POISONED (1 << 1) /* Poisoned identifier. */
688#define NODE_BUILTIN (1 << 2) /* Builtin macro. */
689#define NODE_DIAGNOSTIC (1 << 3) /* Possible diagnostic when lexed. */
690
691/* Different flavors of hash node. */
f8f769ea
ZW
692enum node_type
693{
93c80368
NB
694 NT_VOID = 0, /* No definition yet. */
695 NT_MACRO, /* A macro of some form. */
696 NT_ASSERTION /* Predicate for #assert. */
697};
698
699/* Different flavors of builtin macro. */
700enum builtin_type
701{
702 BT_SPECLINE = 0, /* `__LINE__' */
703 BT_DATE, /* `__DATE__' */
704 BT_FILE, /* `__FILE__' */
705 BT_BASE_FILE, /* `__BASE_FILE__' */
706 BT_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */
707 BT_TIME, /* `__TIME__' */
708 BT_STDC /* `__STDC__' */
f8f769ea
ZW
709};
710
711/* There is a slot in the hashnode for use by front ends when integrated
712 with cpplib. It holds a tree (see tree.h) but we mustn't drag that
713 header into every user of cpplib.h. cpplib does not do anything with
714 this slot except clear it when a new node is created. */
715union tree_node;
716
717struct cpp_hashnode
718{
dd07b884
NB
719 const unsigned char *name; /* Null-terminated name. */
720 unsigned int hash; /* Cached hash value. */
721 unsigned short length; /* Length of name excluding null. */
722 unsigned short arg_index; /* Macro argument index. */
723 unsigned char directive_index; /* Index into directive table. */
724 ENUM_BITFIELD(node_type) type : 8; /* Node type. */
725 unsigned char flags; /* Node flags. */
f8f769ea 726
041c3194
ZW
727 union
728 {
dd07b884
NB
729 cpp_macro *macro; /* If a macro. */
730 struct answer *answers; /* Answers to an assertion. */
731 enum cpp_ttype operator; /* Code for a named operator. */
732 enum builtin_type builtin; /* Code for a builtin macro. */
f8f769ea
ZW
733 } value;
734
dd07b884 735 union tree_node *fe_value; /* Front end value. */
f8f769ea
ZW
736};
737
93c80368 738extern unsigned int cpp_token_len PARAMS ((const cpp_token *));
dd07b884
NB
739extern unsigned char *cpp_token_as_text PARAMS ((cpp_reader *,
740 const cpp_token *));
93c80368
NB
741extern unsigned char *cpp_spell_token PARAMS ((cpp_reader *, const cpp_token *,
742 unsigned char *));
c154ba66 743extern void cpp_init PARAMS ((void));
88ae23e7 744extern int cpp_handle_options PARAMS ((cpp_reader *, int, char **));
2c0accc9 745extern int cpp_handle_option PARAMS ((cpp_reader *, int, char **));
dd07b884 746extern void cpp_reader_init PARAMS ((cpp_reader *, enum c_lang));
58fea6af
ZW
747
748extern void cpp_register_pragma PARAMS ((cpp_reader *,
749 const char *, const char *,
750 void (*) PARAMS ((cpp_reader *))));
751extern void cpp_register_pragma_space PARAMS ((cpp_reader *, const char *));
752
93c80368
NB
753extern int cpp_start_read PARAMS ((cpp_reader *, const char *));
754extern void cpp_finish PARAMS ((cpp_reader *));
f2d5f0cc 755extern void cpp_cleanup PARAMS ((cpp_reader *));
93c80368
NB
756extern int cpp_avoid_paste PARAMS ((cpp_reader *, const cpp_token *,
757 const cpp_token *));
758extern enum cpp_ttype cpp_can_paste PARAMS ((cpp_reader *, const cpp_token *,
759 const cpp_token *, int *));
760extern void cpp_get_token PARAMS ((cpp_reader *, cpp_token *));
761extern const cpp_lexer_pos *cpp_get_line PARAMS ((cpp_reader *));
762extern const unsigned char *cpp_macro_definition PARAMS ((cpp_reader *,
763 const cpp_hashnode *));
041c3194 764
7ceb3598
NB
765extern void cpp_define PARAMS ((cpp_reader *, const char *));
766extern void cpp_assert PARAMS ((cpp_reader *, const char *));
767extern void cpp_undef PARAMS ((cpp_reader *, const char *));
768extern void cpp_unassert PARAMS ((cpp_reader *, const char *));
7f2935c7 769
711b8824
ZW
770extern cpp_buffer *cpp_push_buffer PARAMS ((cpp_reader *,
771 const unsigned char *, long));
772extern cpp_buffer *cpp_pop_buffer PARAMS ((cpp_reader *));
773extern int cpp_defined PARAMS ((cpp_reader *, const unsigned char *, int));
c5a04734 774
c1212d2f
ZW
775/* N.B. The error-message-printer prototypes have not been nicely
776 formatted because exgettext needs to see 'msgid' on the same line
777 as the name of the function in order to work properly. Only the
778 string argument gets a name in an effort to keep the lines from
779 getting ridiculously oversized. */
780
781extern void cpp_ice PARAMS ((cpp_reader *, const char *msgid, ...))
487a6e06 782 ATTRIBUTE_PRINTF_2;
c1212d2f 783extern void cpp_fatal PARAMS ((cpp_reader *, const char *msgid, ...))
487a6e06 784 ATTRIBUTE_PRINTF_2;
c1212d2f 785extern void cpp_error PARAMS ((cpp_reader *, const char *msgid, ...))
487a6e06 786 ATTRIBUTE_PRINTF_2;
c1212d2f
ZW
787extern void cpp_warning PARAMS ((cpp_reader *, const char *msgid, ...))
788 ATTRIBUTE_PRINTF_2;
789extern void cpp_pedwarn PARAMS ((cpp_reader *, const char *msgid, ...))
790 ATTRIBUTE_PRINTF_2;
791extern void cpp_notice PARAMS ((cpp_reader *, const char *msgid, ...))
792 ATTRIBUTE_PRINTF_2;
793extern void cpp_error_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...))
554fbeef 794 ATTRIBUTE_PRINTF_4;
c1212d2f 795extern void cpp_warning_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...))
487a6e06 796 ATTRIBUTE_PRINTF_4;
c1212d2f 797extern void cpp_pedwarn_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...))
487a6e06 798 ATTRIBUTE_PRINTF_4;
c1212d2f
ZW
799extern void cpp_pedwarn_with_file_and_line PARAMS ((cpp_reader *, const char *, int, int, const char *msgid, ...))
800 ATTRIBUTE_PRINTF_5;
711b8824
ZW
801extern void cpp_error_from_errno PARAMS ((cpp_reader *, const char *));
802extern void cpp_notice_from_errno PARAMS ((cpp_reader *, const char *));
f2d5f0cc
ZW
803
804/* In cpplex.c */
bfb9dc7f
ZW
805extern int cpp_ideq PARAMS ((const cpp_token *,
806 const char *));
93c80368
NB
807extern void cpp_output_line PARAMS ((cpp_reader *, FILE *));
808extern void cpp_output_token PARAMS ((const cpp_token *, FILE *));
809extern const char *cpp_type2name PARAMS ((enum cpp_ttype));
1368ee70 810
f2d5f0cc 811/* In cpphash.c */
93c80368
NB
812extern cpp_hashnode *cpp_lookup PARAMS ((cpp_reader *,
813 const unsigned char *, size_t));
814extern void cpp_forall_identifiers PARAMS ((cpp_reader *,
815 int (*) PARAMS ((cpp_reader *,
926c5678
GK
816 cpp_hashnode *,
817 void *)),
818 void *));
819
58fea6af 820/* In cppmacro.c */
93c80368
NB
821extern void cpp_scan_buffer_nooutput PARAMS ((cpp_reader *));
822extern void cpp_start_lookahead PARAMS ((cpp_reader *));
823extern void cpp_stop_lookahead PARAMS ((cpp_reader *, int));
6de1e2a9 824
add7091b 825/* In cppfiles.c */
711b8824
ZW
826extern int cpp_included PARAMS ((cpp_reader *, const char *));
827extern int cpp_read_file PARAMS ((cpp_reader *, const char *));
828extern void cpp_make_system_header PARAMS ((cpp_reader *, cpp_buffer *, int));
58fea6af 829extern const char *cpp_syshdr_flags PARAMS ((cpp_reader *, cpp_buffer *));
b0699dad 830
93c80368
NB
831/* These are inline functions instead of macros so we can get type
832 checking. */
833typedef unsigned char U_CHAR;
834#define U (const U_CHAR *) /* Intended use: U"string" */
835
836static inline int ustrcmp PARAMS ((const U_CHAR *, const U_CHAR *));
837static inline int ustrncmp PARAMS ((const U_CHAR *, const U_CHAR *,
838 size_t));
839static inline size_t ustrlen PARAMS ((const U_CHAR *));
840static inline U_CHAR *uxstrdup PARAMS ((const U_CHAR *));
841static inline U_CHAR *ustrchr PARAMS ((const U_CHAR *, int));
842static inline int ufputs PARAMS ((const U_CHAR *, FILE *));
843
844static inline int
845ustrcmp (s1, s2)
846 const U_CHAR *s1, *s2;
847{
848 return strcmp ((const char *)s1, (const char *)s2);
849}
850
851static inline int
852ustrncmp (s1, s2, n)
853 const U_CHAR *s1, *s2;
854 size_t n;
855{
856 return strncmp ((const char *)s1, (const char *)s2, n);
857}
858
859static inline size_t
860ustrlen (s1)
861 const U_CHAR *s1;
862{
863 return strlen ((const char *)s1);
864}
865
866static inline U_CHAR *
867uxstrdup (s1)
868 const U_CHAR *s1;
869{
870 return (U_CHAR *) xstrdup ((const char *)s1);
871}
872
873static inline U_CHAR *
874ustrchr (s1, c)
875 const U_CHAR *s1;
876 int c;
877{
878 return (U_CHAR *) strchr ((const char *)s1, c);
879}
880
881static inline int
882ufputs (s, f)
883 const U_CHAR *s;
884 FILE *f;
885{
886 return fputs ((const char *)s, f);
887}
888
7f2935c7
PB
889#ifdef __cplusplus
890}
891#endif
990c642c 892#endif /* __GCC_CPPLIB__ */