OSDN Git Service

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