OSDN Git Service

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