OSDN Git Service

bf59d016231dc8f817c2516e85bdff263277f020
[pf3gnuchains/gcc-fork.git] / libcpp / include / cpplib.h
1 /* Definitions for CPP library.
2    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3    2004, 2005, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5    Written by Per Bothner, 1994-95.
6
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3, or (at your option) any
10 later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.
20
21  In other words, you are welcome to use, share and improve this program.
22  You are forbidden to forbid anyone else to use, share and improve
23  what you give them.   Help stamp out software-hoarding!  */
24 #ifndef LIBCPP_CPPLIB_H
25 #define LIBCPP_CPPLIB_H
26
27 #include <sys/types.h>
28 #include "symtab.h"
29 #include "line-map.h"
30
31 typedef struct cpp_reader cpp_reader;
32 typedef struct cpp_buffer cpp_buffer;
33 typedef struct cpp_options cpp_options;
34 typedef struct cpp_token cpp_token;
35 typedef struct cpp_string cpp_string;
36 typedef struct cpp_hashnode cpp_hashnode;
37 typedef struct cpp_macro cpp_macro;
38 typedef struct cpp_callbacks cpp_callbacks;
39 typedef struct cpp_dir cpp_dir;
40
41 struct answer;
42 struct _cpp_file;
43
44 /* The first three groups, apart from '=', can appear in preprocessor
45    expressions (+= and -= are used to indicate unary + and - resp.).
46    This allows a lookup table to be implemented in _cpp_parse_expr.
47
48    The first group, to CPP_LAST_EQ, can be immediately followed by an
49    '='.  The lexer needs operators ending in '=', like ">>=", to be in
50    the same order as their counterparts without the '=', like ">>".
51
52    See the cpp_operator table optab in expr.c if you change the order or
53    add or remove anything in the first group.  */
54
55 #define TTYPE_TABLE                                                     \
56   OP(EQ,                "=")                                            \
57   OP(NOT,               "!")                                            \
58   OP(GREATER,           ">")    /* compare */                           \
59   OP(LESS,              "<")                                            \
60   OP(PLUS,              "+")    /* math */                              \
61   OP(MINUS,             "-")                                            \
62   OP(MULT,              "*")                                            \
63   OP(DIV,               "/")                                            \
64   OP(MOD,               "%")                                            \
65   OP(AND,               "&")    /* bit ops */                           \
66   OP(OR,                "|")                                            \
67   OP(XOR,               "^")                                            \
68   OP(RSHIFT,            ">>")                                           \
69   OP(LSHIFT,            "<<")                                           \
70                                                                         \
71   OP(COMPL,             "~")                                            \
72   OP(AND_AND,           "&&")   /* logical */                           \
73   OP(OR_OR,             "||")                                           \
74   OP(QUERY,             "?")                                            \
75   OP(COLON,             ":")                                            \
76   OP(COMMA,             ",")    /* grouping */                          \
77   OP(OPEN_PAREN,        "(")                                            \
78   OP(CLOSE_PAREN,       ")")                                            \
79   TK(EOF,               NONE)                                           \
80   OP(EQ_EQ,             "==")   /* compare */                           \
81   OP(NOT_EQ,            "!=")                                           \
82   OP(GREATER_EQ,        ">=")                                           \
83   OP(LESS_EQ,           "<=")                                           \
84                                                                         \
85   /* These two are unary + / - in preprocessor expressions.  */         \
86   OP(PLUS_EQ,           "+=")   /* math */                              \
87   OP(MINUS_EQ,          "-=")                                           \
88                                                                         \
89   OP(MULT_EQ,           "*=")                                           \
90   OP(DIV_EQ,            "/=")                                           \
91   OP(MOD_EQ,            "%=")                                           \
92   OP(AND_EQ,            "&=")   /* bit ops */                           \
93   OP(OR_EQ,             "|=")                                           \
94   OP(XOR_EQ,            "^=")                                           \
95   OP(RSHIFT_EQ,         ">>=")                                          \
96   OP(LSHIFT_EQ,         "<<=")                                          \
97   /* Digraphs together, beginning with CPP_FIRST_DIGRAPH.  */           \
98   OP(HASH,              "#")    /* digraphs */                          \
99   OP(PASTE,             "##")                                           \
100   OP(OPEN_SQUARE,       "[")                                            \
101   OP(CLOSE_SQUARE,      "]")                                            \
102   OP(OPEN_BRACE,        "{")                                            \
103   OP(CLOSE_BRACE,       "}")                                            \
104   /* The remainder of the punctuation.  Order is not significant.  */   \
105   OP(SEMICOLON,         ";")    /* structure */                         \
106   OP(ELLIPSIS,          "...")                                          \
107   OP(PLUS_PLUS,         "++")   /* increment */                         \
108   OP(MINUS_MINUS,       "--")                                           \
109   OP(DEREF,             "->")   /* accessors */                         \
110   OP(DOT,               ".")                                            \
111   OP(SCOPE,             "::")                                           \
112   OP(DEREF_STAR,        "->*")                                          \
113   OP(DOT_STAR,          ".*")                                           \
114   OP(ATSIGN,            "@")  /* used in Objective-C */                 \
115                                                                         \
116   TK(NAME,              IDENT)   /* word */                             \
117   TK(AT_NAME,           IDENT)   /* @word - Objective-C */              \
118   TK(NUMBER,            LITERAL) /* 34_be+ta  */                        \
119                                                                         \
120   TK(CHAR,              LITERAL) /* 'char' */                           \
121   TK(WCHAR,             LITERAL) /* L'char' */                          \
122   TK(CHAR16,            LITERAL) /* u'char' */                          \
123   TK(CHAR32,            LITERAL) /* U'char' */                          \
124   TK(OTHER,             LITERAL) /* stray punctuation */                \
125                                                                         \
126   TK(STRING,            LITERAL) /* "string" */                         \
127   TK(WSTRING,           LITERAL) /* L"string" */                        \
128   TK(STRING16,          LITERAL) /* u"string" */                        \
129   TK(STRING32,          LITERAL) /* U"string" */                        \
130   TK(UTF8STRING,        LITERAL) /* u8"string" */                       \
131   TK(OBJC_STRING,       LITERAL) /* @"string" - Objective-C */          \
132   TK(HEADER_NAME,       LITERAL) /* <stdio.h> in #include */            \
133                                                                         \
134   TK(CHAR_USERDEF,      LITERAL) /* 'char'_suffix - C++-0x */           \
135   TK(WCHAR_USERDEF,     LITERAL) /* L'char'_suffix - C++-0x */          \
136   TK(CHAR16_USERDEF,    LITERAL) /* u'char'_suffix - C++-0x */          \
137   TK(CHAR32_USERDEF,    LITERAL) /* U'char'_suffix - C++-0x */          \
138   TK(STRING_USERDEF,    LITERAL) /* "string"_suffix - C++-0x */         \
139   TK(WSTRING_USERDEF,   LITERAL) /* L"string"_suffix - C++-0x */        \
140   TK(STRING16_USERDEF,  LITERAL) /* u"string"_suffix - C++-0x */        \
141   TK(STRING32_USERDEF,  LITERAL) /* U"string"_suffix - C++-0x */        \
142   TK(UTF8STRING_USERDEF,LITERAL) /* u8"string"_suffix - C++-0x */       \
143                                                                         \
144   TK(COMMENT,           LITERAL) /* Only if output comments.  */        \
145                                  /* SPELL_LITERAL happens to DTRT.  */  \
146   TK(MACRO_ARG,         NONE)    /* Macro argument.  */                 \
147   TK(PRAGMA,            NONE)    /* Only for deferred pragmas.  */      \
148   TK(PRAGMA_EOL,        NONE)    /* End-of-line for deferred pragmas.  */ \
149   TK(PADDING,           NONE)    /* Whitespace for -E.  */
150
151 #define OP(e, s) CPP_ ## e,
152 #define TK(e, s) CPP_ ## e,
153 enum cpp_ttype
154 {
155   TTYPE_TABLE
156   N_TTYPES,
157
158   /* Positions in the table.  */
159   CPP_LAST_EQ        = CPP_LSHIFT,
160   CPP_FIRST_DIGRAPH  = CPP_HASH,
161   CPP_LAST_PUNCTUATOR= CPP_ATSIGN,
162   CPP_LAST_CPP_OP    = CPP_LESS_EQ
163 };
164 #undef OP
165 #undef TK
166
167 /* C language kind, used when calling cpp_create_reader.  */
168 enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_GNUC11,
169              CLK_STDC89, CLK_STDC94, CLK_STDC99, CLK_STDC11,
170              CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX11, CLK_CXX11, CLK_ASM};
171
172 /* Payload of a NUMBER, STRING, CHAR or COMMENT token.  */
173 struct GTY(()) cpp_string {
174   unsigned int len;
175   const unsigned char *text;
176 };
177
178 /* Flags for the cpp_token structure.  */
179 #define PREV_WHITE      (1 << 0) /* If whitespace before this token.  */
180 #define DIGRAPH         (1 << 1) /* If it was a digraph.  */
181 #define STRINGIFY_ARG   (1 << 2) /* If macro argument to be stringified.  */
182 #define PASTE_LEFT      (1 << 3) /* If on LHS of a ## operator.  */
183 #define NAMED_OP        (1 << 4) /* C++ named operators.  */
184 #define NO_EXPAND       (1 << 5) /* Do not macro-expand this token.  */
185 #define BOL             (1 << 6) /* Token at beginning of line.  */
186 #define PURE_ZERO       (1 << 7) /* Single 0 digit, used by the C++ frontend,
187                                     set in c-lex.c.  */
188 #define SP_DIGRAPH      (1 << 8) /* # or ## token was a digraph.  */
189 #define SP_PREV_WHITE   (1 << 9) /* If whitespace before a ##
190                                     operator, or before this token
191                                     after a # operator.  */
192
193 /* Specify which field, if any, of the cpp_token union is used.  */
194
195 enum cpp_token_fld_kind {
196   CPP_TOKEN_FLD_NODE,
197   CPP_TOKEN_FLD_SOURCE,
198   CPP_TOKEN_FLD_STR,
199   CPP_TOKEN_FLD_ARG_NO,
200   CPP_TOKEN_FLD_TOKEN_NO,
201   CPP_TOKEN_FLD_PRAGMA,
202   CPP_TOKEN_FLD_NONE
203 };
204
205 /* A macro argument in the cpp_token union.  */
206 struct GTY(()) cpp_macro_arg {
207   /* Argument number.  */
208   unsigned int arg_no;
209 };
210
211 /* An identifier in the cpp_token union.  */
212 struct GTY(()) cpp_identifier {
213   /* The canonical (UTF-8) spelling of the identifier.  */
214   cpp_hashnode *
215     GTY ((nested_ptr (union tree_node,
216                 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
217                         "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
218        node;
219 };
220
221 /* A preprocessing token.  This has been carefully packed and should
222    occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts.  */
223 struct GTY(()) cpp_token {
224   source_location src_loc;      /* Location of first char of token.  */
225   ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT;  /* token type */
226   unsigned short flags;         /* flags - see above */
227
228   union cpp_token_u
229   {
230     /* An identifier.  */
231     struct cpp_identifier GTY ((tag ("CPP_TOKEN_FLD_NODE"))) node;
232          
233     /* Inherit padding from this token.  */
234     cpp_token * GTY ((tag ("CPP_TOKEN_FLD_SOURCE"))) source;
235
236     /* A string, or number.  */
237     struct cpp_string GTY ((tag ("CPP_TOKEN_FLD_STR"))) str;
238
239     /* Argument no. for a CPP_MACRO_ARG.  */
240     struct cpp_macro_arg GTY ((tag ("CPP_TOKEN_FLD_ARG_NO"))) macro_arg;
241
242     /* Original token no. for a CPP_PASTE (from a sequence of
243        consecutive paste tokens in a macro expansion).  */
244     unsigned int GTY ((tag ("CPP_TOKEN_FLD_TOKEN_NO"))) token_no;
245
246     /* Caller-supplied identifier for a CPP_PRAGMA.  */
247     unsigned int GTY ((tag ("CPP_TOKEN_FLD_PRAGMA"))) pragma;
248   } GTY ((desc ("cpp_token_val_index (&%1)"))) val;
249 };
250
251 /* Say which field is in use.  */
252 extern enum cpp_token_fld_kind cpp_token_val_index (cpp_token *tok);
253
254 /* A type wide enough to hold any multibyte source character.
255    cpplib's character constant interpreter requires an unsigned type.
256    Also, a typedef for the signed equivalent.
257    The width of this type is capped at 32 bits; there do exist targets
258    where wchar_t is 64 bits, but only in a non-default mode, and there
259    would be no meaningful interpretation for a wchar_t value greater
260    than 2^32 anyway -- the widest wide-character encoding around is
261    ISO 10646, which stops at 2^31.  */
262 #if CHAR_BIT * SIZEOF_INT >= 32
263 # define CPPCHAR_SIGNED_T int
264 #elif CHAR_BIT * SIZEOF_LONG >= 32
265 # define CPPCHAR_SIGNED_T long
266 #else
267 # error "Cannot find a least-32-bit signed integer type"
268 #endif
269 typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
270 typedef CPPCHAR_SIGNED_T cppchar_signed_t;
271
272 /* Style of header dependencies to generate.  */
273 enum cpp_deps_style { DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM };
274
275 /* The possible normalization levels, from most restrictive to least.  */
276 enum cpp_normalize_level {
277   /* In NFKC.  */
278   normalized_KC = 0,
279   /* In NFC.  */
280   normalized_C,
281   /* In NFC, except for subsequences where being in NFC would make
282      the identifier invalid.  */
283   normalized_identifier_C,
284   /* Not normalized at all.  */
285   normalized_none
286 };
287
288 /* This structure is nested inside struct cpp_reader, and
289    carries all the options visible to the command line.  */
290 struct cpp_options
291 {
292   /* Characters between tab stops.  */
293   unsigned int tabstop;
294
295   /* The language we're preprocessing.  */
296   enum c_lang lang;
297
298   /* Nonzero means use extra default include directories for C++.  */
299   unsigned char cplusplus;
300
301   /* Nonzero means handle cplusplus style comments.  */
302   unsigned char cplusplus_comments;
303
304   /* Nonzero means define __OBJC__, treat @ as a special token, use
305      the OBJC[PLUS]_INCLUDE_PATH environment variable, and allow
306      "#import".  */
307   unsigned char objc;
308
309   /* Nonzero means don't copy comments into the output file.  */
310   unsigned char discard_comments;
311
312   /* Nonzero means don't copy comments into the output file during
313      macro expansion.  */
314   unsigned char discard_comments_in_macro_exp;
315
316   /* Nonzero means process the ISO trigraph sequences.  */
317   unsigned char trigraphs;
318
319   /* Nonzero means process the ISO digraph sequences.  */
320   unsigned char digraphs;
321
322   /* Nonzero means to allow hexadecimal floats and LL suffixes.  */
323   unsigned char extended_numbers;
324
325   /* Nonzero means process u/U prefix literals (UTF-16/32).  */
326   unsigned char uliterals;
327
328   /* Nonzero means process r/R raw strings.  If this is set, uliterals
329      must be set as well.  */
330   unsigned char rliterals;
331
332   /* Nonzero means print names of header files (-H).  */
333   unsigned char print_include_names;
334
335   /* Nonzero means complain about deprecated features.  */
336   unsigned char cpp_warn_deprecated;
337
338   /* Nonzero means warn if slash-star appears in a comment.  */
339   unsigned char warn_comments;
340
341   /* Nonzero means warn if a user-supplied include directory does not
342      exist.  */
343   unsigned char warn_missing_include_dirs;
344
345   /* Nonzero means warn if there are any trigraphs.  */
346   unsigned char warn_trigraphs;
347
348   /* Nonzero means warn about multicharacter charconsts.  */
349   unsigned char warn_multichar;
350
351   /* Nonzero means warn about various incompatibilities with
352      traditional C.  */
353   unsigned char cpp_warn_traditional;
354
355   /* Nonzero means warn about long long numeric constants.  */
356   unsigned char cpp_warn_long_long;
357
358   /* Nonzero means warn about text after an #endif (or #else).  */
359   unsigned char warn_endif_labels;
360
361   /* Nonzero means warn about implicit sign changes owing to integer
362      promotions.  */
363   unsigned char warn_num_sign_change;
364
365   /* Zero means don't warn about __VA_ARGS__ usage in c89 pedantic mode.
366      Presumably the usage is protected by the appropriate #ifdef.  */
367   unsigned char warn_variadic_macros;
368
369   /* Nonzero means warn about builtin macros that are redefined or
370      explicitly undefined.  */
371   unsigned char warn_builtin_macro_redefined;
372
373   /* Nonzero means we should look for header.gcc files that remap file
374      names.  */
375   unsigned char remap;
376
377   /* Zero means dollar signs are punctuation.  */
378   unsigned char dollars_in_ident;
379
380   /* Nonzero means UCNs are accepted in identifiers.  */
381   unsigned char extended_identifiers;
382
383   /* True if we should warn about dollars in identifiers or numbers
384      for this translation unit.  */
385   unsigned char warn_dollars;
386
387   /* Nonzero means warn if undefined identifiers are evaluated in an #if.  */
388   unsigned char warn_undef;
389
390   /* Nonzero means warn of unused macros from the main file.  */
391   unsigned char warn_unused_macros;
392
393   /* Nonzero for the 1999 C Standard, including corrigenda and amendments.  */
394   unsigned char c99;
395
396   /* Nonzero if we are conforming to a specific C or C++ standard.  */
397   unsigned char std;
398
399   /* Nonzero means give all the error messages the ANSI standard requires.  */
400   unsigned char cpp_pedantic;
401
402   /* Nonzero means we're looking at already preprocessed code, so don't
403      bother trying to do macro expansion and whatnot.  */
404   unsigned char preprocessed;
405   
406   /* Nonzero means we are going to emit debugging logs during
407      preprocessing.  */
408   unsigned char debug;
409
410   /* Nonzero means we are tracking locations of tokens involved in
411      macro expansion. 1 Means we track the location in degraded mode
412      where we do not track locations of tokens resulting from the
413      expansion of arguments of function-like macro.  2 Means we do
414      track all macro expansions. This last option is the one that
415      consumes the highest amount of memory.  */
416   unsigned char track_macro_expansion;
417
418   /* Nonzero means handle C++ alternate operator names.  */
419   unsigned char operator_names;
420
421   /* Nonzero means warn about use of C++ alternate operator names.  */
422   unsigned char warn_cxx_operator_names;
423
424   /* True for traditional preprocessing.  */
425   unsigned char traditional;
426
427   /* Nonzero for C++ 2011 Standard user-defnied literals.  */
428   unsigned char user_literals;
429
430   /* Holds the name of the target (execution) character set.  */
431   const char *narrow_charset;
432
433   /* Holds the name of the target wide character set.  */
434   const char *wide_charset;
435
436   /* Holds the name of the input character set.  */
437   const char *input_charset;
438
439   /* The minimum permitted level of normalization before a warning
440      is generated.  */
441   enum cpp_normalize_level warn_normalize;
442
443   /* True to warn about precompiled header files we couldn't use.  */
444   bool warn_invalid_pch;
445
446   /* True if dependencies should be restored from a precompiled header.  */
447   bool restore_pch_deps;
448
449   /* Dependency generation.  */
450   struct
451   {
452     /* Style of header dependencies to generate.  */
453     enum cpp_deps_style style;
454
455     /* Assume missing files are generated files.  */
456     bool missing_files;
457
458     /* Generate phony targets for each dependency apart from the first
459        one.  */
460     bool phony_targets;
461
462     /* If true, no dependency is generated on the main file.  */
463     bool ignore_main_file;
464
465     /* If true, intend to use the preprocessor output (e.g., for compilation)
466        in addition to the dependency info.  */
467     bool need_preprocessor_output;
468   } deps;
469
470   /* Target-specific features set by the front end or client.  */
471
472   /* Precision for target CPP arithmetic, target characters, target
473      ints and target wide characters, respectively.  */
474   size_t precision, char_precision, int_precision, wchar_precision;
475
476   /* True means chars (wide chars) are unsigned.  */
477   bool unsigned_char, unsigned_wchar;
478
479   /* True if the most significant byte in a word has the lowest
480      address in memory.  */
481   bool bytes_big_endian;
482
483   /* Nonzero means __STDC__ should have the value 0 in system headers.  */
484   unsigned char stdc_0_in_system_headers;
485
486   /* True disables tokenization outside of preprocessing directives. */
487   bool directives_only;
488 };
489
490 /* Callback for header lookup for HEADER, which is the name of a
491    source file.  It is used as a method of last resort to find headers
492    that are not otherwise found during the normal include processing.
493    The return value is the malloced name of a header to try and open,
494    if any, or NULL otherwise.  This callback is called only if the
495    header is otherwise unfound.  */
496 typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **);
497
498 /* Call backs to cpplib client.  */
499 struct cpp_callbacks
500 {
501   /* Called when a new line of preprocessed output is started.  */
502   void (*line_change) (cpp_reader *, const cpp_token *, int);
503
504   /* Called when switching to/from a new file.
505      The line_map is for the new file.  It is NULL if there is no new file.
506      (In C this happens when done with <built-in>+<command line> and also
507      when done with a main file.)  This can be used for resource cleanup.  */
508   void (*file_change) (cpp_reader *, const struct line_map *);
509
510   void (*dir_change) (cpp_reader *, const char *);
511   void (*include) (cpp_reader *, source_location, const unsigned char *,
512                    const char *, int, const cpp_token **);
513   void (*define) (cpp_reader *, source_location, cpp_hashnode *);
514   void (*undef) (cpp_reader *, source_location, cpp_hashnode *);
515   void (*ident) (cpp_reader *, source_location, const cpp_string *);
516   void (*def_pragma) (cpp_reader *, source_location);
517   int (*valid_pch) (cpp_reader *, const char *, int);
518   void (*read_pch) (cpp_reader *, const char *, int, const char *);
519   missing_header_cb missing_header;
520
521   /* Context-sensitive macro support.  Returns macro (if any) that should
522      be expanded.  */
523   cpp_hashnode * (*macro_to_expand) (cpp_reader *, const cpp_token *);
524
525   /* Called to emit a diagnostic.  This callback receives the
526      translated message.  */
527   bool (*error) (cpp_reader *, int, int, source_location, unsigned int,
528                  const char *, va_list *)
529        ATTRIBUTE_FPTR_PRINTF(6,0);
530
531   /* Callbacks for when a macro is expanded, or tested (whether
532      defined or not at the time) in #ifdef, #ifndef or "defined".  */
533   void (*used_define) (cpp_reader *, source_location, cpp_hashnode *);
534   void (*used_undef) (cpp_reader *, source_location, cpp_hashnode *);
535   /* Called before #define and #undef or other macro definition
536      changes are processed.  */
537   void (*before_define) (cpp_reader *);
538   /* Called whenever a macro is expanded or tested.
539      Second argument is the location of the start of the current expansion.  */
540   void (*used) (cpp_reader *, source_location, cpp_hashnode *);
541
542   /* Callback that can change a user builtin into normal macro.  */
543   bool (*user_builtin_macro) (cpp_reader *, cpp_hashnode *);
544 };
545
546 #ifdef VMS
547 #define INO_T_CPP ino_t ino[3]
548 #else
549 #define INO_T_CPP ino_t ino
550 #endif
551
552 /* Chain of directories to look for include files in.  */
553 struct cpp_dir
554 {
555   /* NULL-terminated singly-linked list.  */
556   struct cpp_dir *next;
557
558   /* NAME of the directory, NUL-terminated.  */
559   char *name;
560   unsigned int len;
561
562   /* One if a system header, two if a system header that has extern
563      "C" guards for C++.  */
564   unsigned char sysp;
565
566   /* Is this a user-supplied directory? */
567   bool user_supplied_p;
568
569   /* The canonicalized NAME as determined by lrealpath.  This field 
570      is only used by hosts that lack reliable inode numbers.  */
571   char *canonical_name;
572
573   /* Mapping of file names for this directory for MS-DOS and related
574      platforms.  A NULL-terminated array of (from, to) pairs.  */
575   const char **name_map;
576
577   /* Routine to construct pathname, given the search path name and the
578      HEADER we are trying to find, return a constructed pathname to
579      try and open.  If this is NULL, the constructed pathname is as
580      constructed by append_file_to_dir.  */
581   char *(*construct) (const char *header, cpp_dir *dir);
582
583   /* The C front end uses these to recognize duplicated
584      directories in the search path.  */
585   INO_T_CPP;
586   dev_t dev;
587 };
588
589 /* The structure of a node in the hash table.  The hash table has
590    entries for all identifiers: either macros defined by #define
591    commands (type NT_MACRO), assertions created with #assert
592    (NT_ASSERTION), or neither of the above (NT_VOID).  Builtin macros
593    like __LINE__ are flagged NODE_BUILTIN.  Poisoned identifiers are
594    flagged NODE_POISONED.  NODE_OPERATOR (C++ only) indicates an
595    identifier that behaves like an operator such as "xor".
596    NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
597    diagnostic may be required for this node.  Currently this only
598    applies to __VA_ARGS__, poisoned identifiers, and -Wc++-compat
599    warnings about NODE_OPERATOR.  */
600
601 /* Hash node flags.  */
602 #define NODE_OPERATOR   (1 << 0)        /* C++ named operator.  */
603 #define NODE_POISONED   (1 << 1)        /* Poisoned identifier.  */
604 #define NODE_BUILTIN    (1 << 2)        /* Builtin macro.  */
605 #define NODE_DIAGNOSTIC (1 << 3)        /* Possible diagnostic when lexed.  */
606 #define NODE_WARN       (1 << 4)        /* Warn if redefined or undefined.  */
607 #define NODE_DISABLED   (1 << 5)        /* A disabled macro.  */
608 #define NODE_MACRO_ARG  (1 << 6)        /* Used during #define processing.  */
609 #define NODE_USED       (1 << 7)        /* Dumped with -dU.  */
610 #define NODE_CONDITIONAL (1 << 8)       /* Conditional macro */
611 #define NODE_WARN_OPERATOR (1 << 9)     /* Warn about C++ named operator.  */
612
613 /* Different flavors of hash node.  */
614 enum node_type
615 {
616   NT_VOID = 0,     /* No definition yet.  */
617   NT_MACRO,        /* A macro of some form.  */
618   NT_ASSERTION     /* Predicate for #assert.  */
619 };
620
621 /* Different flavors of builtin macro.  _Pragma is an operator, but we
622    handle it with the builtin code for efficiency reasons.  */
623 enum cpp_builtin_type
624 {
625   BT_SPECLINE = 0,              /* `__LINE__' */
626   BT_DATE,                      /* `__DATE__' */
627   BT_FILE,                      /* `__FILE__' */
628   BT_BASE_FILE,                 /* `__BASE_FILE__' */
629   BT_INCLUDE_LEVEL,             /* `__INCLUDE_LEVEL__' */
630   BT_TIME,                      /* `__TIME__' */
631   BT_STDC,                      /* `__STDC__' */
632   BT_PRAGMA,                    /* `_Pragma' operator */
633   BT_TIMESTAMP,                 /* `__TIMESTAMP__' */
634   BT_COUNTER,                   /* `__COUNTER__' */
635   BT_FIRST_USER,                /* User defined builtin macros.  */
636   BT_LAST_USER = BT_FIRST_USER + 31
637 };
638
639 #define CPP_HASHNODE(HNODE)     ((cpp_hashnode *) (HNODE))
640 #define HT_NODE(NODE)           ((ht_identifier *) (NODE))
641 #define NODE_LEN(NODE)          HT_LEN (&(NODE)->ident)
642 #define NODE_NAME(NODE)         HT_STR (&(NODE)->ident)
643
644 /* Specify which field, if any, of the union is used.  */
645
646 enum {
647   NTV_MACRO,
648   NTV_ANSWER,
649   NTV_BUILTIN,
650   NTV_ARGUMENT,
651   NTV_NONE
652 };
653
654 #define CPP_HASHNODE_VALUE_IDX(HNODE)                           \
655   ((HNODE.flags & NODE_MACRO_ARG) ? NTV_ARGUMENT                \
656    : HNODE.type == NT_MACRO ? ((HNODE.flags & NODE_BUILTIN)     \
657                                ? NTV_BUILTIN : NTV_MACRO)       \
658    : HNODE.type == NT_ASSERTION ? NTV_ANSWER                    \
659    : NTV_NONE)
660
661 /* The common part of an identifier node shared amongst all 3 C front
662    ends.  Also used to store CPP identifiers, which are a superset of
663    identifiers in the grammatical sense.  */
664
665 union GTY(()) _cpp_hashnode_value {
666   /* If a macro.  */
667   cpp_macro * GTY((tag ("NTV_MACRO"))) macro;
668   /* Answers to an assertion.  */
669   struct answer * GTY ((tag ("NTV_ANSWER"))) answers;
670   /* Code for a builtin macro.  */
671   enum cpp_builtin_type GTY ((tag ("NTV_BUILTIN"))) builtin;
672   /* Macro argument index.  */
673   unsigned short GTY ((tag ("NTV_ARGUMENT"))) arg_index;
674 };
675
676 struct GTY(()) cpp_hashnode {
677   struct ht_identifier ident;
678   unsigned int is_directive : 1;
679   unsigned int directive_index : 7;     /* If is_directive,
680                                            then index into directive table.
681                                            Otherwise, a NODE_OPERATOR.  */
682   unsigned char rid_code;               /* Rid code - for front ends.  */
683   ENUM_BITFIELD(node_type) type : 6;    /* CPP node type.  */
684   unsigned int flags : 10;              /* CPP flags.  */
685
686   union _cpp_hashnode_value GTY ((desc ("CPP_HASHNODE_VALUE_IDX (%1)"))) value;
687 };
688
689 /* Call this first to get a handle to pass to other functions.
690
691    If you want cpplib to manage its own hashtable, pass in a NULL
692    pointer.  Otherwise you should pass in an initialized hash table
693    that cpplib will share; this technique is used by the C front
694    ends.  */
695 extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
696                                       struct line_maps *);
697
698 /* Reset the cpp_reader's line_map.  This is only used after reading a
699    PCH file.  */
700 extern void cpp_set_line_map (cpp_reader *, struct line_maps *);
701
702 /* Call this to change the selected language standard (e.g. because of
703    command line options).  */
704 extern void cpp_set_lang (cpp_reader *, enum c_lang);
705
706 /* Set the include paths.  */
707 extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
708
709 /* Call these to get pointers to the options, callback, and deps
710    structures for a given reader.  These pointers are good until you
711    call cpp_finish on that reader.  You can either edit the callbacks
712    through the pointer returned from cpp_get_callbacks, or set them
713    with cpp_set_callbacks.  */
714 extern cpp_options *cpp_get_options (cpp_reader *);
715 extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
716 extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
717 extern struct deps *cpp_get_deps (cpp_reader *);
718
719 /* This function reads the file, but does not start preprocessing.  It
720    returns the name of the original file; this is the same as the
721    input file, except for preprocessed input.  This will generate at
722    least one file change callback, and possibly a line change callback
723    too.  If there was an error opening the file, it returns NULL.  */
724 extern const char *cpp_read_main_file (cpp_reader *, const char *);
725
726 /* Set up built-ins with special behavior.  Use cpp_init_builtins()
727    instead unless your know what you are doing.  */
728 extern void cpp_init_special_builtins (cpp_reader *);
729
730 /* Set up built-ins like __FILE__.  */
731 extern void cpp_init_builtins (cpp_reader *, int);
732
733 /* This is called after options have been parsed, and partially
734    processed.  */
735 extern void cpp_post_options (cpp_reader *);
736
737 /* Set up translation to the target character set.  */
738 extern void cpp_init_iconv (cpp_reader *);
739
740 /* Call this to finish preprocessing.  If you requested dependency
741    generation, pass an open stream to write the information to,
742    otherwise NULL.  It is your responsibility to close the stream.  */
743 extern void cpp_finish (cpp_reader *, FILE *deps_stream);
744
745 /* Call this to release the handle at the end of preprocessing.  Any
746    use of the handle after this function returns is invalid.  */
747 extern void cpp_destroy (cpp_reader *);
748
749 extern unsigned int cpp_token_len (const cpp_token *);
750 extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
751 extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
752                                        unsigned char *, bool);
753 extern void cpp_register_pragma (cpp_reader *, const char *, const char *,
754                                  void (*) (cpp_reader *), bool);
755 extern void cpp_register_deferred_pragma (cpp_reader *, const char *,
756                                           const char *, unsigned, bool, bool);
757 extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
758                             const cpp_token *);
759 extern const cpp_token *cpp_get_token (cpp_reader *);
760 extern const cpp_token *cpp_get_token_with_location (cpp_reader *,
761                                                      source_location *);
762 extern const unsigned char *cpp_macro_definition (cpp_reader *,
763                                                   cpp_hashnode *);
764 extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
765 extern const cpp_token *cpp_peek_token (cpp_reader *, int);
766
767 /* Evaluate a CPP_*CHAR* token.  */
768 extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *,
769                                           unsigned int *, int *);
770 /* Evaluate a vector of CPP_*STRING* tokens.  */
771 extern bool cpp_interpret_string (cpp_reader *,
772                                   const cpp_string *, size_t,
773                                   cpp_string *, enum cpp_ttype);
774 extern bool cpp_interpret_string_notranslate (cpp_reader *,
775                                               const cpp_string *, size_t,
776                                               cpp_string *, enum cpp_ttype);
777
778 /* Convert a host character constant to the execution character set.  */
779 extern cppchar_t cpp_host_to_exec_charset (cpp_reader *, cppchar_t);
780
781 /* Used to register macros and assertions, perhaps from the command line.
782    The text is the same as the command line argument.  */
783 extern void cpp_define (cpp_reader *, const char *);
784 extern void cpp_define_formatted (cpp_reader *pfile, 
785                                   const char *fmt, ...) ATTRIBUTE_PRINTF_2;
786 extern void cpp_assert (cpp_reader *, const char *);
787 extern void cpp_undef (cpp_reader *, const char *);
788 extern void cpp_unassert (cpp_reader *, const char *);
789
790 /* Undefine all macros and assertions.  */
791 extern void cpp_undef_all (cpp_reader *);
792
793 extern cpp_buffer *cpp_push_buffer (cpp_reader *, const unsigned char *,
794                                     size_t, int);
795 extern int cpp_defined (cpp_reader *, const unsigned char *, int);
796
797 /* A preprocessing number.  Code assumes that any unused high bits of
798    the double integer are set to zero.  */
799 typedef unsigned HOST_WIDE_INT cpp_num_part;
800 typedef struct cpp_num cpp_num;
801 struct cpp_num
802 {
803   cpp_num_part high;
804   cpp_num_part low;
805   bool unsignedp;  /* True if value should be treated as unsigned.  */
806   bool overflow;   /* True if the most recent calculation overflowed.  */
807 };
808
809 /* cpplib provides two interfaces for interpretation of preprocessing
810    numbers.
811
812    cpp_classify_number categorizes numeric constants according to
813    their field (integer, floating point, or invalid), radix (decimal,
814    octal, hexadecimal), and type suffixes.  */
815
816 #define CPP_N_CATEGORY  0x000F
817 #define CPP_N_INVALID   0x0000
818 #define CPP_N_INTEGER   0x0001
819 #define CPP_N_FLOATING  0x0002
820
821 #define CPP_N_WIDTH     0x00F0
822 #define CPP_N_SMALL     0x0010  /* int, float, shrot _Fract/Accum  */
823 #define CPP_N_MEDIUM    0x0020  /* long, double, long _Fract/_Accum.  */
824 #define CPP_N_LARGE     0x0040  /* long long, long double,
825                                    long long _Fract/Accum.  */
826
827 #define CPP_N_WIDTH_MD  0xF0000 /* machine defined.  */
828 #define CPP_N_MD_W      0x10000
829 #define CPP_N_MD_Q      0x20000
830
831 #define CPP_N_RADIX     0x0F00
832 #define CPP_N_DECIMAL   0x0100
833 #define CPP_N_HEX       0x0200
834 #define CPP_N_OCTAL     0x0400
835 #define CPP_N_BINARY    0x0800
836
837 #define CPP_N_UNSIGNED  0x1000  /* Properties.  */
838 #define CPP_N_IMAGINARY 0x2000
839 #define CPP_N_DFLOAT    0x4000
840 #define CPP_N_DEFAULT   0x8000
841
842 #define CPP_N_FRACT     0x100000 /* Fract types.  */
843 #define CPP_N_ACCUM     0x200000 /* Accum types.  */
844
845 #define CPP_N_USERDEF   0x1000000 /* C++0x user-defined literal.  */
846
847 /* Classify a CPP_NUMBER token.  The return value is a combination of
848    the flags from the above sets.  */
849 extern unsigned cpp_classify_number (cpp_reader *, const cpp_token *,
850                                      const char **);
851
852 /* Return the classification flags for a float suffix.  */
853 extern unsigned int cpp_interpret_float_suffix (const char *, size_t);
854
855 /* Return the classification flags for an int suffix.  */
856 extern unsigned int cpp_interpret_int_suffix (const char *, size_t);
857
858 /* Evaluate a token classified as category CPP_N_INTEGER.  */
859 extern cpp_num cpp_interpret_integer (cpp_reader *, const cpp_token *,
860                                       unsigned int);
861
862 /* Sign extend a number, with PRECISION significant bits and all
863    others assumed clear, to fill out a cpp_num structure.  */
864 cpp_num cpp_num_sign_extend (cpp_num, size_t);
865
866 /* Diagnostic levels.  To get a diagnostic without associating a
867    position in the translation unit with it, use cpp_error_with_line
868    with a line number of zero.  */
869
870 enum {
871   /* Warning, an error with -Werror.  */
872   CPP_DL_WARNING = 0,
873   /* Same as CPP_DL_WARNING, except it is not suppressed in system headers.  */
874   CPP_DL_WARNING_SYSHDR,
875   /* Warning, an error with -pedantic-errors or -Werror.  */
876   CPP_DL_PEDWARN,
877   /* An error.  */
878   CPP_DL_ERROR,
879   /* An internal consistency check failed.  Prints "internal error: ",
880      otherwise the same as CPP_DL_ERROR.  */
881   CPP_DL_ICE,
882   /* An informative note following a warning.  */
883   CPP_DL_NOTE,
884   /* A fatal error.  */
885   CPP_DL_FATAL
886 };
887
888 /* Warning reason codes. Use a reason code of zero for unclassified warnings
889    and errors that are not warnings.  */
890 enum {
891   CPP_W_NONE = 0,
892   CPP_W_DEPRECATED,
893   CPP_W_COMMENTS,
894   CPP_W_MISSING_INCLUDE_DIRS,
895   CPP_W_TRIGRAPHS,
896   CPP_W_MULTICHAR,
897   CPP_W_TRADITIONAL,
898   CPP_W_LONG_LONG,
899   CPP_W_ENDIF_LABELS,
900   CPP_W_NUM_SIGN_CHANGE,
901   CPP_W_VARIADIC_MACROS,
902   CPP_W_BUILTIN_MACRO_REDEFINED,
903   CPP_W_DOLLARS,
904   CPP_W_UNDEF,
905   CPP_W_UNUSED_MACROS,
906   CPP_W_CXX_OPERATOR_NAMES,
907   CPP_W_NORMALIZE,
908   CPP_W_INVALID_PCH,
909   CPP_W_WARNING_DIRECTIVE
910 };
911
912 /* Output a diagnostic of some kind.  */
913 extern bool cpp_error (cpp_reader *, int, const char *msgid, ...)
914   ATTRIBUTE_PRINTF_3;
915 extern bool cpp_warning (cpp_reader *, int, const char *msgid, ...)
916   ATTRIBUTE_PRINTF_3;
917 extern bool cpp_pedwarning (cpp_reader *, int, const char *msgid, ...)
918   ATTRIBUTE_PRINTF_3;
919 extern bool cpp_warning_syshdr (cpp_reader *, int, const char *msgid, ...)
920   ATTRIBUTE_PRINTF_3;
921
922 /* Output a diagnostic with "MSGID: " preceding the
923    error string of errno.  No location is printed.  */
924 extern bool cpp_errno (cpp_reader *, int, const char *msgid);
925
926 /* Same as cpp_error, except additionally specifies a position as a
927    (translation unit) physical line and physical column.  If the line is
928    zero, then no location is printed.  */
929 extern bool cpp_error_with_line (cpp_reader *, int, source_location,
930                                  unsigned, const char *msgid, ...)
931   ATTRIBUTE_PRINTF_5;
932 extern bool cpp_warning_with_line (cpp_reader *, int, source_location,
933                                    unsigned, const char *msgid, ...)
934   ATTRIBUTE_PRINTF_5;
935 extern bool cpp_pedwarning_with_line (cpp_reader *, int, source_location,
936                                       unsigned, const char *msgid, ...)
937   ATTRIBUTE_PRINTF_5;
938 extern bool cpp_warning_with_line_syshdr (cpp_reader *, int, source_location,
939                                           unsigned, const char *msgid, ...)
940   ATTRIBUTE_PRINTF_5;
941
942 /* In lex.c */
943 extern int cpp_ideq (const cpp_token *, const char *);
944 extern void cpp_output_line (cpp_reader *, FILE *);
945 extern unsigned char *cpp_output_line_to_string (cpp_reader *,
946                                                  const unsigned char *);
947 extern void cpp_output_token (const cpp_token *, FILE *);
948 extern const char *cpp_type2name (enum cpp_ttype, unsigned char flags);
949 /* Returns the value of an escape sequence, truncated to the correct
950    target precision.  PSTR points to the input pointer, which is just
951    after the backslash.  LIMIT is how much text we have.  WIDE is true
952    if the escape sequence is part of a wide character constant or
953    string literal.  Handles all relevant diagnostics.  */
954 extern cppchar_t cpp_parse_escape (cpp_reader *, const unsigned char ** pstr,
955                                    const unsigned char *limit, int wide);
956
957 /* Structure used to hold a comment block at a given location in the
958    source code.  */
959
960 typedef struct
961 {
962   /* Text of the comment including the terminators.  */
963   char *comment;
964
965   /* source location for the given comment.  */
966   source_location sloc;
967 } cpp_comment;
968
969 /* Structure holding all comments for a given cpp_reader.  */
970
971 typedef struct
972 {
973   /* table of comment entries.  */
974   cpp_comment *entries;
975
976   /* number of actual entries entered in the table.  */
977   int count;
978
979   /* number of entries allocated currently.  */
980   int allocated;
981 } cpp_comment_table;
982
983 /* Returns the table of comments encountered by the preprocessor. This
984    table is only populated when pfile->state.save_comments is true. */
985 extern cpp_comment_table *cpp_get_comments (cpp_reader *);
986
987 /* In hash.c */
988
989 /* Lookup an identifier in the hashtable.  Puts the identifier in the
990    table if it is not already there.  */
991 extern cpp_hashnode *cpp_lookup (cpp_reader *, const unsigned char *,
992                                  unsigned int);
993
994 typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *);
995 extern void cpp_forall_identifiers (cpp_reader *, cpp_cb, void *);
996
997 /* In macro.c */
998 extern void cpp_scan_nooutput (cpp_reader *);
999 extern int  cpp_sys_macro_p (cpp_reader *);
1000 extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *,
1001                                         unsigned int);
1002
1003 /* In files.c */
1004 extern bool cpp_included (cpp_reader *, const char *);
1005 extern bool cpp_included_before (cpp_reader *, const char *, source_location);
1006 extern void cpp_make_system_header (cpp_reader *, int, int);
1007 extern bool cpp_push_include (cpp_reader *, const char *);
1008 extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
1009 extern const char *cpp_get_path (struct _cpp_file *);
1010 extern cpp_dir *cpp_get_dir (struct _cpp_file *);
1011 extern cpp_buffer *cpp_get_buffer (cpp_reader *);
1012 extern struct _cpp_file *cpp_get_file (cpp_buffer *);
1013 extern cpp_buffer *cpp_get_prev (cpp_buffer *);
1014 extern void cpp_clear_file_cache (cpp_reader *);
1015
1016 /* In pch.c */
1017 struct save_macro_data;
1018 extern int cpp_save_state (cpp_reader *, FILE *);
1019 extern int cpp_write_pch_deps (cpp_reader *, FILE *);
1020 extern int cpp_write_pch_state (cpp_reader *, FILE *);
1021 extern int cpp_valid_state (cpp_reader *, const char *, int);
1022 extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **);
1023 extern int cpp_read_state (cpp_reader *, const char *, FILE *,
1024                            struct save_macro_data *);
1025
1026 /* In lex.c */
1027 extern void cpp_force_token_locations (cpp_reader *, source_location *);
1028 extern void cpp_stop_forcing_token_locations (cpp_reader *);
1029
1030 /* In expr.c */
1031 extern enum cpp_ttype cpp_userdef_string_remove_type
1032   (enum cpp_ttype type);
1033 extern enum cpp_ttype cpp_userdef_string_add_type
1034   (enum cpp_ttype type);
1035 extern enum cpp_ttype cpp_userdef_char_remove_type
1036   (enum cpp_ttype type);
1037 extern enum cpp_ttype cpp_userdef_char_add_type
1038   (enum cpp_ttype type);
1039 extern bool cpp_userdef_string_p
1040   (enum cpp_ttype type);
1041 extern bool cpp_userdef_char_p
1042   (enum cpp_ttype type);
1043 extern const char * cpp_get_userdef_suffix
1044   (const cpp_token *);
1045
1046 #endif /* ! LIBCPP_CPPLIB_H */