xref: /netbsd-src/external/gpl3/gcc/dist/libcpp/include/cpplib.h (revision a536ee5124e62c9a0051a252f7833dc8f50f44c9)
1 /* Definitions for CPP library.
2    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3    2004, 2005, 2007, 2008, 2009
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(COMMENT,		LITERAL) /* Only if output comments.  */	\
135 				 /* SPELL_LITERAL happens to DTRT.  */	\
136   TK(MACRO_ARG,		NONE)	 /* Macro argument.  */			\
137   TK(PRAGMA,		NONE)	 /* Only for deferred pragmas.  */	\
138   TK(PRAGMA_EOL,	NONE)	 /* End-of-line for deferred pragmas.  */ \
139   TK(PADDING,		NONE)	 /* Whitespace for -E.	*/
140 
141 #define OP(e, s) CPP_ ## e,
142 #define TK(e, s) CPP_ ## e,
143 enum cpp_ttype
144 {
145   TTYPE_TABLE
146   N_TTYPES,
147 
148   /* Positions in the table.  */
149   CPP_LAST_EQ        = CPP_LSHIFT,
150   CPP_FIRST_DIGRAPH  = CPP_HASH,
151   CPP_LAST_PUNCTUATOR= CPP_ATSIGN,
152   CPP_LAST_CPP_OP    = CPP_LESS_EQ
153 };
154 #undef OP
155 #undef TK
156 
157 /* C language kind, used when calling cpp_create_reader.  */
158 enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99,
159 	     CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX0X, CLK_CXX0X, CLK_ASM};
160 
161 /* Payload of a NUMBER, STRING, CHAR or COMMENT token.  */
162 struct GTY(()) cpp_string {
163   unsigned int len;
164   const unsigned char *text;
165 };
166 
167 /* Flags for the cpp_token structure.  */
168 #define PREV_WHITE	(1 << 0) /* If whitespace before this token.  */
169 #define DIGRAPH		(1 << 1) /* If it was a digraph.  */
170 #define STRINGIFY_ARG	(1 << 2) /* If macro argument to be stringified.  */
171 #define PASTE_LEFT	(1 << 3) /* If on LHS of a ## operator.  */
172 #define NAMED_OP	(1 << 4) /* C++ named operators.  */
173 #define NO_EXPAND	(1 << 5) /* Do not macro-expand this token.  */
174 #define BOL		(1 << 6) /* Token at beginning of line.  */
175 #define PURE_ZERO	(1 << 7) /* Single 0 digit, used by the C++ frontend,
176 				    set in c-lex.c.  */
177 #define SP_DIGRAPH	(1 << 8) /* # or ## token was a digraph.  */
178 #define SP_PREV_WHITE	(1 << 9) /* If whitespace before a ##
179 				    operator, or before this token
180 				    after a # operator.  */
181 
182 /* Specify which field, if any, of the cpp_token union is used.  */
183 
184 enum cpp_token_fld_kind {
185   CPP_TOKEN_FLD_NODE,
186   CPP_TOKEN_FLD_SOURCE,
187   CPP_TOKEN_FLD_STR,
188   CPP_TOKEN_FLD_ARG_NO,
189   CPP_TOKEN_FLD_TOKEN_NO,
190   CPP_TOKEN_FLD_PRAGMA,
191   CPP_TOKEN_FLD_NONE
192 };
193 
194 /* A macro argument in the cpp_token union.  */
195 struct GTY(()) cpp_macro_arg {
196   /* Argument number.  */
197   unsigned int arg_no;
198 };
199 
200 /* An identifier in the cpp_token union.  */
201 struct GTY(()) cpp_identifier {
202   /* The canonical (UTF-8) spelling of the identifier.  */
203   cpp_hashnode *
204     GTY ((nested_ptr (union tree_node,
205 		"%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
206 			"%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
207        node;
208 };
209 
210 /* A preprocessing token.  This has been carefully packed and should
211    occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts.  */
212 struct GTY(()) cpp_token {
213   source_location src_loc;	/* Location of first char of token.  */
214   ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT;  /* token type */
215   unsigned short flags;		/* flags - see above */
216 
217   union cpp_token_u
218   {
219     /* An identifier.  */
220     struct cpp_identifier GTY ((tag ("CPP_TOKEN_FLD_NODE"))) node;
221 
222     /* Inherit padding from this token.  */
223     cpp_token * GTY ((tag ("CPP_TOKEN_FLD_SOURCE"))) source;
224 
225     /* A string, or number.  */
226     struct cpp_string GTY ((tag ("CPP_TOKEN_FLD_STR"))) str;
227 
228     /* Argument no. for a CPP_MACRO_ARG.  */
229     struct cpp_macro_arg GTY ((tag ("CPP_TOKEN_FLD_ARG_NO"))) macro_arg;
230 
231     /* Original token no. for a CPP_PASTE (from a sequence of
232        consecutive paste tokens in a macro expansion).  */
233     unsigned int GTY ((tag ("CPP_TOKEN_FLD_TOKEN_NO"))) token_no;
234 
235     /* Caller-supplied identifier for a CPP_PRAGMA.  */
236     unsigned int GTY ((tag ("CPP_TOKEN_FLD_PRAGMA"))) pragma;
237   } GTY ((desc ("cpp_token_val_index (&%1)"))) val;
238 };
239 
240 /* Say which field is in use.  */
241 extern enum cpp_token_fld_kind cpp_token_val_index (cpp_token *tok);
242 
243 /* A type wide enough to hold any multibyte source character.
244    cpplib's character constant interpreter requires an unsigned type.
245    Also, a typedef for the signed equivalent.
246    The width of this type is capped at 32 bits; there do exist targets
247    where wchar_t is 64 bits, but only in a non-default mode, and there
248    would be no meaningful interpretation for a wchar_t value greater
249    than 2^32 anyway -- the widest wide-character encoding around is
250    ISO 10646, which stops at 2^31.  */
251 #if CHAR_BIT * SIZEOF_INT >= 32
252 # define CPPCHAR_SIGNED_T int
253 #elif CHAR_BIT * SIZEOF_LONG >= 32
254 # define CPPCHAR_SIGNED_T long
255 #else
256 # error "Cannot find a least-32-bit signed integer type"
257 #endif
258 typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
259 typedef CPPCHAR_SIGNED_T cppchar_signed_t;
260 
261 /* Style of header dependencies to generate.  */
262 enum cpp_deps_style { DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM };
263 
264 /* The possible normalization levels, from most restrictive to least.  */
265 enum cpp_normalize_level {
266   /* In NFKC.  */
267   normalized_KC = 0,
268   /* In NFC.  */
269   normalized_C,
270   /* In NFC, except for subsequences where being in NFC would make
271      the identifier invalid.  */
272   normalized_identifier_C,
273   /* Not normalized at all.  */
274   normalized_none
275 };
276 
277 /* This structure is nested inside struct cpp_reader, and
278    carries all the options visible to the command line.  */
279 struct cpp_options
280 {
281   /* Characters between tab stops.  */
282   unsigned int tabstop;
283 
284   /* The language we're preprocessing.  */
285   enum c_lang lang;
286 
287   /* Nonzero means use extra default include directories for C++.  */
288   unsigned char cplusplus;
289 
290   /* Nonzero means handle cplusplus style comments.  */
291   unsigned char cplusplus_comments;
292 
293   /* Nonzero means define __OBJC__, treat @ as a special token, use
294      the OBJC[PLUS]_INCLUDE_PATH environment variable, and allow
295      "#import".  */
296   unsigned char objc;
297 
298   /* Nonzero means don't copy comments into the output file.  */
299   unsigned char discard_comments;
300 
301   /* Nonzero means don't copy comments into the output file during
302      macro expansion.  */
303   unsigned char discard_comments_in_macro_exp;
304 
305   /* Nonzero means process the ISO trigraph sequences.  */
306   unsigned char trigraphs;
307 
308   /* Nonzero means process the ISO digraph sequences.  */
309   unsigned char digraphs;
310 
311   /* Nonzero means to allow hexadecimal floats and LL suffixes.  */
312   unsigned char extended_numbers;
313 
314   /* Nonzero means process u/U prefix literals (UTF-16/32).  */
315   unsigned char uliterals;
316 
317   /* Nonzero means print names of header files (-H).  */
318   unsigned char print_include_names;
319 
320   /* Nonzero means complain about deprecated features.  */
321   unsigned char warn_deprecated;
322 
323   /* Nonzero means warn if slash-star appears in a comment.  */
324   unsigned char warn_comments;
325 
326   /* Nonzero means warn if a user-supplied include directory does not
327      exist.  */
328   unsigned char warn_missing_include_dirs;
329 
330   /* Nonzero means warn if there are any trigraphs.  */
331   unsigned char warn_trigraphs;
332 
333   /* Nonzero means warn about multicharacter charconsts.  */
334   unsigned char warn_multichar;
335 
336   /* Nonzero means warn about various incompatibilities with
337      traditional C.  */
338   unsigned char warn_traditional;
339 
340   /* Nonzero means warn about long long numeric constants.  */
341   unsigned char warn_long_long;
342 
343   /* Nonzero means warn about text after an #endif (or #else).  */
344   unsigned char warn_endif_labels;
345 
346   /* Nonzero means warn about implicit sign changes owing to integer
347      promotions.  */
348   unsigned char warn_num_sign_change;
349 
350   /* Zero means don't warn about __VA_ARGS__ usage in c89 pedantic mode.
351      Presumably the usage is protected by the appropriate #ifdef.  */
352   unsigned char warn_variadic_macros;
353 
354   /* Nonzero means warn about builtin macros that are redefined or
355      explicitly undefined.  */
356   unsigned char warn_builtin_macro_redefined;
357 
358   /* Nonzero means we should look for header.gcc files that remap file
359      names.  */
360   unsigned char remap;
361 
362   /* Zero means dollar signs are punctuation.  */
363   unsigned char dollars_in_ident;
364 
365   /* Nonzero means UCNs are accepted in identifiers.  */
366   unsigned char extended_identifiers;
367 
368   /* True if we should warn about dollars in identifiers or numbers
369      for this translation unit.  */
370   unsigned char warn_dollars;
371 
372   /* Nonzero means warn if undefined identifiers are evaluated in an #if.  */
373   unsigned char warn_undef;
374 
375   /* Nonzero means warn of unused macros from the main file.  */
376   unsigned char warn_unused_macros;
377 
378   /* Nonzero for the 1999 C Standard, including corrigenda and amendments.  */
379   unsigned char c99;
380 
381   /* Nonzero if we are conforming to a specific C or C++ standard.  */
382   unsigned char std;
383 
384   /* Nonzero means give all the error messages the ANSI standard requires.  */
385   unsigned char pedantic;
386 
387   /* Nonzero means we're looking at already preprocessed code, so don't
388      bother trying to do macro expansion and whatnot.  */
389   unsigned char preprocessed;
390 
391   /* Print column number in error messages.  */
392   unsigned char show_column;
393 
394   /* Nonzero means handle C++ alternate operator names.  */
395   unsigned char operator_names;
396 
397   /* Nonzero means warn about use of C++ alternate operator names.  */
398   unsigned char warn_cxx_operator_names;
399 
400   /* True for traditional preprocessing.  */
401   unsigned char traditional;
402 
403   /* Holds the name of the target (execution) character set.  */
404   const char *narrow_charset;
405 
406   /* Holds the name of the target wide character set.  */
407   const char *wide_charset;
408 
409   /* Holds the name of the input character set.  */
410   const char *input_charset;
411 
412   /* The minimum permitted level of normalization before a warning
413      is generated.  */
414   enum cpp_normalize_level warn_normalize;
415 
416   /* True to warn about precompiled header files we couldn't use.  */
417   bool warn_invalid_pch;
418 
419   /* True if dependencies should be restored from a precompiled header.  */
420   bool restore_pch_deps;
421 
422   /* Dependency generation.  */
423   struct
424   {
425     /* Style of header dependencies to generate.  */
426     enum cpp_deps_style style;
427 
428     /* Assume missing files are generated files.  */
429     bool missing_files;
430 
431     /* Generate phony targets for each dependency apart from the first
432        one.  */
433     bool phony_targets;
434 
435     /* If true, no dependency is generated on the main file.  */
436     bool ignore_main_file;
437 
438     /* If true, intend to use the preprocessor output (e.g., for compilation)
439        in addition to the dependency info.  */
440     bool need_preprocessor_output;
441   } deps;
442 
443   /* Target-specific features set by the front end or client.  */
444 
445   /* Precision for target CPP arithmetic, target characters, target
446      ints and target wide characters, respectively.  */
447   size_t precision, char_precision, int_precision, wchar_precision;
448 
449   /* True means chars (wide chars) are unsigned.  */
450   bool unsigned_char, unsigned_wchar;
451 
452   /* True if the most significant byte in a word has the lowest
453      address in memory.  */
454   bool bytes_big_endian;
455 
456   /* Nonzero means __STDC__ should have the value 0 in system headers.  */
457   unsigned char stdc_0_in_system_headers;
458 
459   /* True disables tokenization outside of preprocessing directives. */
460   bool directives_only;
461 };
462 
463 /* Callback for header lookup for HEADER, which is the name of a
464    source file.  It is used as a method of last resort to find headers
465    that are not otherwise found during the normal include processing.
466    The return value is the malloced name of a header to try and open,
467    if any, or NULL otherwise.  This callback is called only if the
468    header is otherwise unfound.  */
469 typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **);
470 
471 /* Call backs to cpplib client.  */
472 struct cpp_callbacks
473 {
474   /* Called when a new line of preprocessed output is started.  */
475   void (*line_change) (cpp_reader *, const cpp_token *, int);
476 
477   /* Called when switching to/from a new file.
478      The line_map is for the new file.  It is NULL if there is no new file.
479      (In C this happens when done with <built-in>+<command line> and also
480      when done with a main file.)  This can be used for resource cleanup.  */
481   void (*file_change) (cpp_reader *, const struct line_map *);
482 
483   void (*dir_change) (cpp_reader *, const char *);
484   void (*include) (cpp_reader *, unsigned int, const unsigned char *,
485 		   const char *, int, const cpp_token **);
486   void (*define) (cpp_reader *, unsigned int, cpp_hashnode *);
487   void (*undef) (cpp_reader *, unsigned int, cpp_hashnode *);
488   void (*ident) (cpp_reader *, unsigned int, const cpp_string *);
489   void (*def_pragma) (cpp_reader *, unsigned int);
490   int (*valid_pch) (cpp_reader *, const char *, int);
491   void (*read_pch) (cpp_reader *, const char *, int, const char *);
492   missing_header_cb missing_header;
493 
494   /* Context-sensitive macro support.  Returns macro (if any) that should
495      be expanded.  */
496   cpp_hashnode * (*macro_to_expand) (cpp_reader *, const cpp_token *);
497 
498   /* Called to emit a diagnostic.  This callback receives the
499      translated message.  */
500   bool (*error) (cpp_reader *, int, source_location, unsigned int,
501 		 const char *, va_list *)
502        ATTRIBUTE_FPTR_PRINTF(5,0);
503 
504   /* Callbacks for when a macro is expanded, or tested (whether
505      defined or not at the time) in #ifdef, #ifndef or "defined".  */
506   void (*used_define) (cpp_reader *, unsigned int, cpp_hashnode *);
507   void (*used_undef) (cpp_reader *, unsigned int, cpp_hashnode *);
508   /* Called before #define and #undef or other macro definition
509      changes are processed.  */
510   void (*before_define) (cpp_reader *);
511   /* Called whenever a macro is expanded or tested.
512      Second argument is the location of the start of the current expansion.  */
513   void (*used) (cpp_reader *, source_location, cpp_hashnode *);
514 };
515 
516 #ifdef VMS
517 #define INO_T_CPP ino_t ino[3]
518 #else
519 #define INO_T_CPP ino_t ino
520 #endif
521 
522 /* Chain of directories to look for include files in.  */
523 struct cpp_dir
524 {
525   /* NULL-terminated singly-linked list.  */
526   struct cpp_dir *next;
527 
528   /* NAME of the directory, NUL-terminated.  */
529   char *name;
530   unsigned int len;
531 
532   /* One if a system header, two if a system header that has extern
533      "C" guards for C++.  */
534   unsigned char sysp;
535 
536   /* Is this a user-supplied directory? */
537   bool user_supplied_p;
538 
539   /* The canonicalized NAME as determined by lrealpath.  This field
540      is only used by hosts that lack reliable inode numbers.  */
541   char *canonical_name;
542 
543   /* Mapping of file names for this directory for MS-DOS and related
544      platforms.  A NULL-terminated array of (from, to) pairs.  */
545   const char **name_map;
546 
547   /* Routine to construct pathname, given the search path name and the
548      HEADER we are trying to find, return a constructed pathname to
549      try and open.  If this is NULL, the constructed pathname is as
550      constructed by append_file_to_dir.  */
551   char *(*construct) (const char *header, cpp_dir *dir);
552 
553   /* The C front end uses these to recognize duplicated
554      directories in the search path.  */
555   INO_T_CPP;
556   dev_t dev;
557 };
558 
559 /* The structure of a node in the hash table.  The hash table has
560    entries for all identifiers: either macros defined by #define
561    commands (type NT_MACRO), assertions created with #assert
562    (NT_ASSERTION), or neither of the above (NT_VOID).  Builtin macros
563    like __LINE__ are flagged NODE_BUILTIN.  Poisoned identifiers are
564    flagged NODE_POISONED.  NODE_OPERATOR (C++ only) indicates an
565    identifier that behaves like an operator such as "xor".
566    NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
567    diagnostic may be required for this node.  Currently this only
568    applies to __VA_ARGS__, poisoned identifiers, and -Wc++-compat
569    warnings about NODE_OPERATOR.  */
570 
571 /* Hash node flags.  */
572 #define NODE_OPERATOR	(1 << 0)	/* C++ named operator.  */
573 #define NODE_POISONED	(1 << 1)	/* Poisoned identifier.  */
574 #define NODE_BUILTIN	(1 << 2)	/* Builtin macro.  */
575 #define NODE_DIAGNOSTIC (1 << 3)	/* Possible diagnostic when lexed.  */
576 #define NODE_WARN	(1 << 4)	/* Warn if redefined or undefined.  */
577 #define NODE_DISABLED	(1 << 5)	/* A disabled macro.  */
578 #define NODE_MACRO_ARG	(1 << 6)	/* Used during #define processing.  */
579 #define NODE_USED	(1 << 7)	/* Dumped with -dU.  */
580 #define NODE_CONDITIONAL (1 << 8)	/* Conditional macro */
581 #define NODE_WARN_OPERATOR (1 << 9)	/* Warn about C++ named operator.  */
582 
583 /* Different flavors of hash node.  */
584 enum node_type
585 {
586   NT_VOID = 0,	   /* No definition yet.  */
587   NT_MACRO,	   /* A macro of some form.  */
588   NT_ASSERTION	   /* Predicate for #assert.  */
589 };
590 
591 /* Different flavors of builtin macro.  _Pragma is an operator, but we
592    handle it with the builtin code for efficiency reasons.  */
593 enum cpp_builtin_type
594 {
595   BT_SPECLINE = 0,		/* `__LINE__' */
596   BT_DATE,			/* `__DATE__' */
597   BT_FILE,			/* `__FILE__' */
598   BT_BASE_FILE,			/* `__BASE_FILE__' */
599   BT_INCLUDE_LEVEL,		/* `__INCLUDE_LEVEL__' */
600   BT_TIME,			/* `__TIME__' */
601   BT_STDC,			/* `__STDC__' */
602   BT_PRAGMA,			/* `_Pragma' operator */
603   BT_TIMESTAMP,			/* `__TIMESTAMP__' */
604   BT_COUNTER			/* `__COUNTER__' */
605 };
606 
607 #define CPP_HASHNODE(HNODE)	((cpp_hashnode *) (HNODE))
608 #define HT_NODE(NODE)		((ht_identifier *) (NODE))
609 #define NODE_LEN(NODE)		HT_LEN (&(NODE)->ident)
610 #define NODE_NAME(NODE)		HT_STR (&(NODE)->ident)
611 
612 /* Specify which field, if any, of the union is used.  */
613 
614 enum {
615   NTV_MACRO,
616   NTV_ANSWER,
617   NTV_BUILTIN,
618   NTV_ARGUMENT,
619   NTV_NONE
620 };
621 
622 #define CPP_HASHNODE_VALUE_IDX(HNODE)				\
623   ((HNODE.flags & NODE_MACRO_ARG) ? NTV_ARGUMENT		\
624    : HNODE.type == NT_MACRO ? ((HNODE.flags & NODE_BUILTIN) 	\
625 			       ? NTV_BUILTIN : NTV_MACRO)	\
626    : HNODE.type == NT_ASSERTION ? NTV_ANSWER			\
627    : NTV_NONE)
628 
629 /* The common part of an identifier node shared amongst all 3 C front
630    ends.  Also used to store CPP identifiers, which are a superset of
631    identifiers in the grammatical sense.  */
632 
633 union GTY(()) _cpp_hashnode_value {
634   /* If a macro.  */
635   cpp_macro * GTY((tag ("NTV_MACRO"))) macro;
636   /* Answers to an assertion.  */
637   struct answer * GTY ((tag ("NTV_ANSWER"))) answers;
638   /* Code for a builtin macro.  */
639   enum cpp_builtin_type GTY ((tag ("NTV_BUILTIN"))) builtin;
640   /* Macro argument index.  */
641   unsigned short GTY ((tag ("NTV_ARGUMENT"))) arg_index;
642 };
643 
644 struct GTY(()) cpp_hashnode {
645   struct ht_identifier ident;
646   unsigned int is_directive : 1;
647   unsigned int directive_index : 7;	/* If is_directive,
648 					   then index into directive table.
649 					   Otherwise, a NODE_OPERATOR.  */
650   unsigned char rid_code;		/* Rid code - for front ends.  */
651   ENUM_BITFIELD(node_type) type : 6;	/* CPP node type.  */
652   unsigned int flags : 10;		/* CPP flags.  */
653 
654   union _cpp_hashnode_value GTY ((desc ("CPP_HASHNODE_VALUE_IDX (%1)"))) value;
655 };
656 
657 /* Call this first to get a handle to pass to other functions.
658 
659    If you want cpplib to manage its own hashtable, pass in a NULL
660    pointer.  Otherwise you should pass in an initialized hash table
661    that cpplib will share; this technique is used by the C front
662    ends.  */
663 extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
664 				      struct line_maps *);
665 
666 /* Reset the cpp_reader's line_map.  This is only used after reading a
667    PCH file.  */
668 extern void cpp_set_line_map (cpp_reader *, struct line_maps *);
669 
670 /* Call this to change the selected language standard (e.g. because of
671    command line options).  */
672 extern void cpp_set_lang (cpp_reader *, enum c_lang);
673 
674 /* Set the include paths.  */
675 extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
676 
677 /* Provide src:dst pair for __FILE__ remapping.  */
678 extern void add_cpp_remap_path (const char *);
679 
680 /* Call these to get pointers to the options, callback, and deps
681    structures for a given reader.  These pointers are good until you
682    call cpp_finish on that reader.  You can either edit the callbacks
683    through the pointer returned from cpp_get_callbacks, or set them
684    with cpp_set_callbacks.  */
685 extern cpp_options *cpp_get_options (cpp_reader *);
686 extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
687 extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
688 extern struct deps *cpp_get_deps (cpp_reader *);
689 
690 /* This function reads the file, but does not start preprocessing.  It
691    returns the name of the original file; this is the same as the
692    input file, except for preprocessed input.  This will generate at
693    least one file change callback, and possibly a line change callback
694    too.  If there was an error opening the file, it returns NULL.  */
695 extern const char *cpp_read_main_file (cpp_reader *, const char *);
696 
697 /* Set up built-ins with special behavior.  Use cpp_init_builtins()
698    instead unless your know what you are doing.  */
699 extern void cpp_init_special_builtins (cpp_reader *);
700 
701 /* Set up built-ins like __FILE__.  */
702 extern void cpp_init_builtins (cpp_reader *, int);
703 
704 /* This is called after options have been parsed, and partially
705    processed.  */
706 extern void cpp_post_options (cpp_reader *);
707 
708 /* Set up translation to the target character set.  */
709 extern void cpp_init_iconv (cpp_reader *);
710 
711 /* Call this to finish preprocessing.  If you requested dependency
712    generation, pass an open stream to write the information to,
713    otherwise NULL.  It is your responsibility to close the stream.  */
714 extern void cpp_finish (cpp_reader *, FILE *deps_stream);
715 
716 /* Call this to release the handle at the end of preprocessing.  Any
717    use of the handle after this function returns is invalid.  */
718 extern void cpp_destroy (cpp_reader *);
719 
720 extern unsigned int cpp_token_len (const cpp_token *);
721 extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
722 extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
723 				       unsigned char *, bool);
724 extern void cpp_register_pragma (cpp_reader *, const char *, const char *,
725 				 void (*) (cpp_reader *), bool);
726 extern void cpp_register_deferred_pragma (cpp_reader *, const char *,
727 					  const char *, unsigned, bool, bool);
728 extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
729 			    const cpp_token *);
730 extern const cpp_token *cpp_get_token (cpp_reader *);
731 extern const cpp_token *cpp_get_token_with_location (cpp_reader *,
732 						     source_location *);
733 extern const unsigned char *cpp_macro_definition (cpp_reader *,
734 						  const cpp_hashnode *);
735 extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
736 extern const cpp_token *cpp_peek_token (cpp_reader *, int);
737 
738 /* Evaluate a CPP_*CHAR* token.  */
739 extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *,
740 					  unsigned int *, int *);
741 /* Evaluate a vector of CPP_*STRING* tokens.  */
742 extern bool cpp_interpret_string (cpp_reader *,
743 				  const cpp_string *, size_t,
744 				  cpp_string *, enum cpp_ttype);
745 extern bool cpp_interpret_string_notranslate (cpp_reader *,
746 					      const cpp_string *, size_t,
747 					      cpp_string *, enum cpp_ttype);
748 
749 /* Convert a host character constant to the execution character set.  */
750 extern cppchar_t cpp_host_to_exec_charset (cpp_reader *, cppchar_t);
751 
752 /* Used to register macros and assertions, perhaps from the command line.
753    The text is the same as the command line argument.  */
754 extern void cpp_define (cpp_reader *, const char *);
755 extern void cpp_define_formatted (cpp_reader *pfile,
756 				  const char *fmt, ...) ATTRIBUTE_PRINTF_2;
757 extern void cpp_assert (cpp_reader *, const char *);
758 extern void cpp_undef (cpp_reader *, const char *);
759 extern void cpp_unassert (cpp_reader *, const char *);
760 
761 extern cpp_macro *cpp_push_definition (cpp_reader *, const char *);
762 extern void cpp_pop_definition (cpp_reader *, const char *, cpp_macro *);
763 
764 /* Undefine all macros and assertions.  */
765 extern void cpp_undef_all (cpp_reader *);
766 
767 extern cpp_buffer *cpp_push_buffer (cpp_reader *, const unsigned char *,
768 				    size_t, int);
769 extern int cpp_defined (cpp_reader *, const unsigned char *, int);
770 
771 /* A preprocessing number.  Code assumes that any unused high bits of
772    the double integer are set to zero.  */
773 typedef unsigned HOST_WIDE_INT cpp_num_part;
774 typedef struct cpp_num cpp_num;
775 struct cpp_num
776 {
777   cpp_num_part high;
778   cpp_num_part low;
779   bool unsignedp;  /* True if value should be treated as unsigned.  */
780   bool overflow;   /* True if the most recent calculation overflowed.  */
781 };
782 
783 /* cpplib provides two interfaces for interpretation of preprocessing
784    numbers.
785 
786    cpp_classify_number categorizes numeric constants according to
787    their field (integer, floating point, or invalid), radix (decimal,
788    octal, hexadecimal), and type suffixes.  */
789 
790 #define CPP_N_CATEGORY  0x000F
791 #define CPP_N_INVALID	0x0000
792 #define CPP_N_INTEGER	0x0001
793 #define CPP_N_FLOATING	0x0002
794 
795 #define CPP_N_WIDTH	0x00F0
796 #define CPP_N_SMALL	0x0010	/* int, float, shrot _Fract/Accum  */
797 #define CPP_N_MEDIUM	0x0020	/* long, double, long _Fract/_Accum.  */
798 #define CPP_N_LARGE	0x0040	/* long long, long double,
799 				   long long _Fract/Accum.  */
800 
801 #define CPP_N_WIDTH_MD	0xF0000	/* machine defined.  */
802 #define CPP_N_MD_W	0x10000
803 #define CPP_N_MD_Q	0x20000
804 
805 #define CPP_N_RADIX	0x0F00
806 #define CPP_N_DECIMAL	0x0100
807 #define CPP_N_HEX	0x0200
808 #define CPP_N_OCTAL	0x0400
809 #define CPP_N_BINARY	0x0800
810 
811 #define CPP_N_UNSIGNED	0x1000	/* Properties.  */
812 #define CPP_N_IMAGINARY	0x2000
813 #define CPP_N_DFLOAT	0x4000
814 #define CPP_N_DEFAULT	0x8000
815 
816 #define CPP_N_FRACT	0x100000 /* Fract types.  */
817 #define CPP_N_ACCUM	0x200000 /* Accum types.  */
818 
819 /* Classify a CPP_NUMBER token.  The return value is a combination of
820    the flags from the above sets.  */
821 extern unsigned cpp_classify_number (cpp_reader *, const cpp_token *);
822 
823 /* Evaluate a token classified as category CPP_N_INTEGER.  */
824 extern cpp_num cpp_interpret_integer (cpp_reader *, const cpp_token *,
825 				      unsigned int type);
826 
827 /* Sign extend a number, with PRECISION significant bits and all
828    others assumed clear, to fill out a cpp_num structure.  */
829 cpp_num cpp_num_sign_extend (cpp_num, size_t);
830 
831 /* Diagnostic levels.  To get a diagnostic without associating a
832    position in the translation unit with it, use cpp_error_with_line
833    with a line number of zero.  */
834 
835 /* Warning, an error with -Werror.  */
836 #define CPP_DL_WARNING		0x00
837 /* Same as CPP_DL_WARNING, except it is not suppressed in system headers.  */
838 #define CPP_DL_WARNING_SYSHDR	0x01
839 /* Warning, an error with -pedantic-errors or -Werror.  */
840 #define CPP_DL_PEDWARN		0x02
841 /* An error.  */
842 #define CPP_DL_ERROR		0x03
843 /* An internal consistency check failed.  Prints "internal error: ",
844    otherwise the same as CPP_DL_ERROR.  */
845 #define CPP_DL_ICE		0x04
846 /* An informative note following a warning.  */
847 #define CPP_DL_NOTE		0x05
848 /* A fatal error.  */
849 #define CPP_DL_FATAL		0x06
850 
851 /* Output a diagnostic of some kind.  */
852 extern bool cpp_error (cpp_reader *, int, const char *msgid, ...)
853   ATTRIBUTE_PRINTF_3;
854 
855 /* Output a diagnostic with "MSGID: " preceding the
856    error string of errno.  No location is printed.  */
857 extern bool cpp_errno (cpp_reader *, int, const char *msgid);
858 
859 /* Same as cpp_error, except additionally specifies a position as a
860    (translation unit) physical line and physical column.  If the line is
861    zero, then no location is printed.  */
862 extern bool cpp_error_with_line (cpp_reader *, int, source_location, unsigned,
863 				 const char *msgid, ...) ATTRIBUTE_PRINTF_5;
864 
865 /* In lex.c */
866 extern int cpp_ideq (const cpp_token *, const char *);
867 extern void cpp_output_line (cpp_reader *, FILE *);
868 extern unsigned char *cpp_output_line_to_string (cpp_reader *,
869 						 const unsigned char *);
870 extern void cpp_output_token (const cpp_token *, FILE *);
871 extern const char *cpp_type2name (enum cpp_ttype, unsigned char flags);
872 /* Returns the value of an escape sequence, truncated to the correct
873    target precision.  PSTR points to the input pointer, which is just
874    after the backslash.  LIMIT is how much text we have.  WIDE is true
875    if the escape sequence is part of a wide character constant or
876    string literal.  Handles all relevant diagnostics.  */
877 extern cppchar_t cpp_parse_escape (cpp_reader *, const unsigned char ** pstr,
878 				   const unsigned char *limit, int wide);
879 
880 /* Structure used to hold a comment block at a given location in the
881    source code.  */
882 
883 typedef struct
884 {
885   /* Text of the comment including the terminators.  */
886   char *comment;
887 
888   /* source location for the given comment.  */
889   source_location sloc;
890 } cpp_comment;
891 
892 /* Structure holding all comments for a given cpp_reader.  */
893 
894 typedef struct
895 {
896   /* table of comment entries.  */
897   cpp_comment *entries;
898 
899   /* number of actual entries entered in the table.  */
900   int count;
901 
902   /* number of entries allocated currently.  */
903   int allocated;
904 } cpp_comment_table;
905 
906 /* Returns the table of comments encountered by the preprocessor. This
907    table is only populated when pfile->state.save_comments is true. */
908 extern cpp_comment_table *cpp_get_comments (cpp_reader *);
909 
910 /* In hash.c */
911 
912 /* Lookup an identifier in the hashtable.  Puts the identifier in the
913    table if it is not already there.  */
914 extern cpp_hashnode *cpp_lookup (cpp_reader *, const unsigned char *,
915 				 unsigned int);
916 
917 typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *);
918 extern void cpp_forall_identifiers (cpp_reader *, cpp_cb, void *);
919 
920 /* In macro.c */
921 extern void cpp_scan_nooutput (cpp_reader *);
922 extern int  cpp_sys_macro_p (cpp_reader *);
923 extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *,
924 					unsigned int);
925 
926 /* In files.c */
927 extern bool cpp_included (cpp_reader *, const char *);
928 extern bool cpp_included_before (cpp_reader *, const char *, source_location);
929 extern void cpp_make_system_header (cpp_reader *, int, int);
930 extern bool cpp_push_include (cpp_reader *, const char *);
931 extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
932 extern const char *cpp_get_path (struct _cpp_file *);
933 extern cpp_dir *cpp_get_dir (struct _cpp_file *);
934 extern cpp_buffer *cpp_get_buffer (cpp_reader *);
935 extern struct _cpp_file *cpp_get_file (cpp_buffer *);
936 extern cpp_buffer *cpp_get_prev (cpp_buffer *);
937 extern void cpp_clear_file_cache (cpp_reader *);
938 
939 /* In pch.c */
940 struct save_macro_data;
941 extern int cpp_save_state (cpp_reader *, FILE *);
942 extern int cpp_write_pch_deps (cpp_reader *, FILE *);
943 extern int cpp_write_pch_state (cpp_reader *, FILE *);
944 extern int cpp_valid_state (cpp_reader *, const char *, int);
945 extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **);
946 extern int cpp_read_state (cpp_reader *, const char *, FILE *,
947 			   struct save_macro_data *);
948 
949 #endif /* ! LIBCPP_CPPLIB_H */
950