]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/include/cpplib.h
libcpp/
[thirdparty/gcc.git] / libcpp / include / cpplib.h
CommitLineData
1d6fa33f 1/* Definitions for CPP library.
457e71e4 2 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3 2004, 2005
2fa871c1 4 Free Software Foundation, Inc.
1d6fa33f 5 Written by Per Bothner, 1994-95.
6
7This program is free software; you can redistribute it and/or modify it
8under the terms of the GNU General Public License as published by the
9Free Software Foundation; either version 2, or (at your option) any
10later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
2656917a 19Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1d6fa33f 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! */
d856c8a6 24#ifndef LIBCPP_CPPLIB_H
25#define LIBCPP_CPPLIB_H
1d6fa33f 26
27#include <sys/types.h>
d856c8a6 28#include "symtab.h"
38692459 29#include "line-map.h"
1d6fa33f 30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
1d6fa33f 35typedef struct cpp_reader cpp_reader;
36typedef struct cpp_buffer cpp_buffer;
37typedef struct cpp_options cpp_options;
50fd6b48 38typedef struct cpp_token cpp_token;
76faa4c0 39typedef struct cpp_string cpp_string;
614e0ab7 40typedef struct cpp_hashnode cpp_hashnode;
79bd622b 41typedef struct cpp_macro cpp_macro;
72b04ca4 42typedef struct cpp_callbacks cpp_callbacks;
1824e2bd 43typedef struct cpp_dir cpp_dir;
79bd622b 44
79bd622b 45struct answer;
065e625b 46struct _cpp_file;
6060326b 47
87215b90 48/* The first three groups, apart from '=', can appear in preprocessor
49 expressions (+= and -= are used to indicate unary + and - resp.).
50 This allows a lookup table to be implemented in _cpp_parse_expr.
6060326b 51
52 The first group, to CPP_LAST_EQ, can be immediately followed by an
53 '='. The lexer needs operators ending in '=', like ">>=", to be in
54 the same order as their counterparts without the '=', like ">>". */
55
d6d3c909 56#define TTYPE_TABLE \
57 OP(EQ, "=") \
58 OP(NOT, "!") \
59 OP(GREATER, ">") /* compare */ \
60 OP(LESS, "<") \
61 OP(PLUS, "+") /* math */ \
62 OP(MINUS, "-") \
63 OP(MULT, "*") \
64 OP(DIV, "/") \
65 OP(MOD, "%") \
66 OP(AND, "&") /* bit ops */ \
67 OP(OR, "|") \
68 OP(XOR, "^") \
69 OP(RSHIFT, ">>") \
70 OP(LSHIFT, "<<") \
71 OP(MIN, "<?") /* extension */ \
72 OP(MAX, ">?") \
73 \
74 OP(COMPL, "~") \
75 OP(AND_AND, "&&") /* logical */ \
76 OP(OR_OR, "||") \
77 OP(QUERY, "?") \
78 OP(COLON, ":") \
79 OP(COMMA, ",") /* grouping */ \
80 OP(OPEN_PAREN, "(") \
81 OP(CLOSE_PAREN, ")") \
82 TK(EOF, NONE) \
83 OP(EQ_EQ, "==") /* compare */ \
84 OP(NOT_EQ, "!=") \
85 OP(GREATER_EQ, ">=") \
86 OP(LESS_EQ, "<=") \
87 \
88 /* These two are unary + / - in preprocessor expressions. */ \
89 OP(PLUS_EQ, "+=") /* math */ \
90 OP(MINUS_EQ, "-=") \
91 \
92 OP(MULT_EQ, "*=") \
93 OP(DIV_EQ, "/=") \
94 OP(MOD_EQ, "%=") \
95 OP(AND_EQ, "&=") /* bit ops */ \
96 OP(OR_EQ, "|=") \
97 OP(XOR_EQ, "^=") \
98 OP(RSHIFT_EQ, ">>=") \
99 OP(LSHIFT_EQ, "<<=") \
100 OP(MIN_EQ, "<?=") /* extension */ \
101 OP(MAX_EQ, ">?=") \
102 /* Digraphs together, beginning with CPP_FIRST_DIGRAPH. */ \
103 OP(HASH, "#") /* digraphs */ \
104 OP(PASTE, "##") \
105 OP(OPEN_SQUARE, "[") \
106 OP(CLOSE_SQUARE, "]") \
107 OP(OPEN_BRACE, "{") \
108 OP(CLOSE_BRACE, "}") \
109 /* The remainder of the punctuation. Order is not significant. */ \
110 OP(SEMICOLON, ";") /* structure */ \
111 OP(ELLIPSIS, "...") \
112 OP(PLUS_PLUS, "++") /* increment */ \
113 OP(MINUS_MINUS, "--") \
114 OP(DEREF, "->") /* accessors */ \
115 OP(DOT, ".") \
116 OP(SCOPE, "::") \
117 OP(DEREF_STAR, "->*") \
118 OP(DOT_STAR, ".*") \
119 OP(ATSIGN, "@") /* used in Objective-C */ \
120 \
121 TK(NAME, IDENT) /* word */ \
122 TK(AT_NAME, IDENT) /* @word - Objective-C */ \
123 TK(NUMBER, LITERAL) /* 34_be+ta */ \
124 \
125 TK(CHAR, LITERAL) /* 'char' */ \
126 TK(WCHAR, LITERAL) /* L'char' */ \
127 TK(OTHER, LITERAL) /* stray punctuation */ \
128 \
129 TK(STRING, LITERAL) /* "string" */ \
130 TK(WSTRING, LITERAL) /* L"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 if deferring pragmas */ \
138 TK(PADDING, NONE) /* Whitespace for -E. */
139
140#define OP(e, s) CPP_ ## e,
141#define TK(e, s) CPP_ ## e,
82831e19 142enum cpp_ttype
d2e850c1 143{
50fd6b48 144 TTYPE_TABLE
d6d3c909 145 N_TTYPES,
146
147 /* Positions in the table. */
148 CPP_LAST_EQ = CPP_MAX,
149 CPP_FIRST_DIGRAPH = CPP_HASH,
150 CPP_LAST_PUNCTUATOR= CPP_DOT_STAR,
151 CPP_LAST_CPP_OP = CPP_LESS_EQ
50fd6b48 152};
7e842f95 153#undef OP
154#undef TK
50fd6b48 155
d862067c 156/* C language kind, used when calling cpp_create_reader. */
fad0ffbb 157enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99,
9f3643d1 158 CLK_GNUCXX, CLK_CXX98, CLK_ASM};
fad0ffbb 159
e484a1cc 160/* Payload of a NUMBER, STRING, CHAR or COMMENT token. */
c39ed964 161struct cpp_string GTY(())
50fd6b48 162{
163 unsigned int len;
e916a356 164 const unsigned char *text;
50fd6b48 165};
166
6060326b 167/* Flags for the cpp_token structure. */
f80e83a9 168#define PREV_WHITE (1 << 0) /* If whitespace before this token. */
79bd622b 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. */
fad0ffbb 172#define NAMED_OP (1 << 4) /* C++ named operators. */
79bd622b 173#define NO_EXPAND (1 << 5) /* Do not macro-expand this token. */
f9b5f742 174#define BOL (1 << 6) /* Token at beginning of line. */
2c63d6c8 175
c39ed964 176/* Specify which field, if any, of the cpp_token union is used. */
177
178enum cpp_token_fld_kind {
179 CPP_TOKEN_FLD_NODE,
180 CPP_TOKEN_FLD_SOURCE,
181 CPP_TOKEN_FLD_STR,
182 CPP_TOKEN_FLD_ARG_NO,
183 CPP_TOKEN_FLD_NONE
184};
185
58dd1ce6 186/* A preprocessing token. This has been carefully packed and should
c7e5d924 187 occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts. */
c39ed964 188struct cpp_token GTY(())
50fd6b48 189{
610625e3 190 source_location src_loc; /* Location of first char of token. */
f80e83a9 191 ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT; /* token type */
192 unsigned char flags; /* flags - see above */
193
c39ed964 194 union cpp_token_u
50fd6b48 195 {
c39ed964 196 /* An identifier. */
197 cpp_hashnode *
198 GTY ((nested_ptr (union tree_node,
199 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
200 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL"),
201 tag ("CPP_TOKEN_FLD_NODE")))
202 node;
203
204 /* Inherit padding from this token. */
205 cpp_token * GTY ((tag ("CPP_TOKEN_FLD_SOURCE"))) source;
206
207 /* A string, or number. */
208 struct cpp_string GTY ((tag ("CPP_TOKEN_FLD_STR"))) str;
209
210 /* Argument no. for a CPP_MACRO_ARG. */
211 unsigned int GTY ((tag ("CPP_TOKEN_FLD_ARG_NO"))) arg_no;
212 } GTY ((desc ("cpp_token_val_index (&%1)"))) val;
1d6fa33f 213};
214
c39ed964 215/* Say which field is in use. */
216extern enum cpp_token_fld_kind cpp_token_val_index (cpp_token *tok);
217
13c457e1 218/* A type wide enough to hold any multibyte source character.
40855b30 219 cpplib's character constant interpreter requires an unsigned type.
69edc0b3 220 Also, a typedef for the signed equivalent.
221 The width of this type is capped at 32 bits; there do exist targets
222 where wchar_t is 64 bits, but only in a non-default mode, and there
223 would be no meaningful interpretation for a wchar_t value greater
224 than 2^32 anyway -- the widest wide-character encoding around is
225 ISO 10646, which stops at 2^31. */
226#if CHAR_BIT * SIZEOF_INT >= 32
40855b30 227# define CPPCHAR_SIGNED_T int
69edc0b3 228#elif CHAR_BIT * SIZEOF_LONG >= 32
229# define CPPCHAR_SIGNED_T long
40855b30 230#else
69edc0b3 231# error "Cannot find a least-32-bit signed integer type"
40855b30 232#endif
233typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
234typedef CPPCHAR_SIGNED_T cppchar_signed_t;
338fa5f7 235
3b298764 236/* Style of header dependencies to generate. */
237enum cpp_deps_style { DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM };
238
bce47149 239/* The possible normalization levels, from most restrictive to least. */
240enum cpp_normalize_level {
241 /* In NFKC. */
242 normalized_KC = 0,
243 /* In NFC. */
244 normalized_C,
245 /* In NFC, except for subsequences where being in NFC would make
246 the identifier invalid. */
247 normalized_identifier_C,
248 /* Not normalized at all. */
249 normalized_none
250};
251
2ff3ad1d 252/* This structure is nested inside struct cpp_reader, and
253 carries all the options visible to the command line. */
254struct cpp_options
e2fba115 255{
3b304865 256 /* Characters between tab stops. */
257 unsigned int tabstop;
258
5db5d057 259 /* The language we're preprocessing. */
260 enum c_lang lang;
261
1d6fa33f 262 /* Nonzero means use extra default include directories for C++. */
2ff3ad1d 263 unsigned char cplusplus;
1d6fa33f 264
8b332087 265 /* Nonzero means handle cplusplus style comments. */
2ff3ad1d 266 unsigned char cplusplus_comments;
1d6fa33f 267
9f3643d1 268 /* Nonzero means define __OBJC__, treat @ as a special token, and
269 use the OBJC[PLUS]_INCLUDE_PATH environment variable. */
2ff3ad1d 270 unsigned char objc;
1d6fa33f 271
0f0b3789 272 /* Nonzero means don't copy comments into the output file. */
2ff3ad1d 273 unsigned char discard_comments;
1d6fa33f 274
d3f7919d 275 /* Nonzero means don't copy comments into the output file during
276 macro expansion. */
277 unsigned char discard_comments_in_macro_exp;
278
f80e83a9 279 /* Nonzero means process the ISO trigraph sequences. */
2ff3ad1d 280 unsigned char trigraphs;
1d6fa33f 281
27fdc0b6 282 /* Nonzero means process the ISO digraph sequences. */
283 unsigned char digraphs;
284
5db5d057 285 /* Nonzero means to allow hexadecimal floats and LL suffixes. */
286 unsigned char extended_numbers;
287
1d6fa33f 288 /* Nonzero means print names of header files (-H). */
2ff3ad1d 289 unsigned char print_include_names;
1d6fa33f 290
2ff3ad1d 291 /* Nonzero means cpp_pedwarn causes a hard error. */
292 unsigned char pedantic_errors;
1d6fa33f 293
9e87fa80 294 /* Nonzero means don't print warning messages. */
2ff3ad1d 295 unsigned char inhibit_warnings;
1d6fa33f 296
922df727 297 /* Nonzero means complain about deprecated features. */
298 unsigned char warn_deprecated;
299
02c09dab 300 /* Nonzero means don't suppress warnings from system headers. */
301 unsigned char warn_system_headers;
302
2ff3ad1d 303 /* Nonzero means don't print error messages. Has no option to
304 select it, but can be set by a user of cpplib (e.g. fix-header). */
305 unsigned char inhibit_errors;
9e87fa80 306
1d6fa33f 307 /* Nonzero means warn if slash-star appears in a comment. */
2ff3ad1d 308 unsigned char warn_comments;
1d6fa33f 309
06fd18c9 310 /* Nonzero means warn if a user-supplied include directory does not
311 exist. */
312 unsigned char warn_missing_include_dirs;
313
1d6fa33f 314 /* Nonzero means warn if there are any trigraphs. */
2ff3ad1d 315 unsigned char warn_trigraphs;
1d6fa33f 316
318fdd81 317 /* Nonzero means warn about multicharacter charconsts. */
318 unsigned char warn_multichar;
319
241e762e 320 /* Nonzero means warn about various incompatibilities with
321 traditional C. */
ef33b55c 322 unsigned char warn_traditional;
1d6fa33f 323
4baf0479 324 /* Nonzero means warn about long long numeric constants. */
325 unsigned char warn_long_long;
326
923acdd5 327 /* Nonzero means warn about text after an #endif (or #else). */
328 unsigned char warn_endif_labels;
329
21d6e4ae 330 /* Nonzero means warn about implicit sign changes owing to integer
331 promotions. */
332 unsigned char warn_num_sign_change;
333
05d51900 334 /* Zero means don't warn about __VA_ARGS__ usage in c89 pedantic mode.
335 Presumably the usage is protected by the appropriate #ifdef. */
336 unsigned char warn_variadic_macros;
337
1d6fa33f 338 /* Nonzero means turn warnings into errors. */
2ff3ad1d 339 unsigned char warnings_are_errors;
1d6fa33f 340
68215e49 341 /* Nonzero means we should look for header.gcc files that remap file
342 names. */
2ff3ad1d 343 unsigned char remap;
68215e49 344
a7dce381 345 /* Zero means dollar signs are punctuation. */
2ff3ad1d 346 unsigned char dollars_in_ident;
1d6fa33f 347
865c4e44 348 /* Nonzero means UCNs are accepted in identifiers. */
349 unsigned char extended_identifiers;
350
f0c2775b 351 /* True if we should warn about dollars in identifiers or numbers
352 for this translation unit. */
353 unsigned char warn_dollars;
354
d6f5f355 355 /* Nonzero means warn if undefined identifiers are evaluated in an #if. */
2ff3ad1d 356 unsigned char warn_undef;
d6f5f355 357
71a7c282 358 /* Nonzero means warn of unused macros from the main file. */
359 unsigned char warn_unused_macros;
360
85fc7e91 361 /* Nonzero for the 1999 C Standard, including corrigenda and amendments. */
2ff3ad1d 362 unsigned char c99;
85fc7e91 363
ed909a09 364 /* Nonzero if we are conforming to a specific C or C++ standard. */
365 unsigned char std;
366
1d6fa33f 367 /* Nonzero means give all the error messages the ANSI standard requires. */
2ff3ad1d 368 unsigned char pedantic;
1d6fa33f 369
4070d785 370 /* Nonzero means we're looking at already preprocessed code, so don't
371 bother trying to do macro expansion and whatnot. */
2ff3ad1d 372 unsigned char preprocessed;
4070d785 373
2ff3ad1d 374 /* Print column number in error messages. */
375 unsigned char show_column;
624a7570 376
c7e5d924 377 /* Nonzero means handle C++ alternate operator names. */
624a7570 378 unsigned char operator_names;
72b04ca4 379
0bb65704 380 /* True for traditional preprocessing. */
381 unsigned char traditional;
382
ebc03810 383 /* Holds the name of the target (execution) character set. */
384 const char *narrow_charset;
385
386 /* Holds the name of the target wide character set. */
387 const char *wide_charset;
388
787c3d1a 389 /* Holds the name of the input character set. */
390 const char *input_charset;
391
bce47149 392 /* The minimum permitted level of normalization before a warning
393 is generated. */
394 enum cpp_normalize_level warn_normalize;
395
65a6d98c 396 /* True to warn about precompiled header files we couldn't use. */
397 bool warn_invalid_pch;
398
399 /* True if dependencies should be restored from a precompiled header. */
400 bool restore_pch_deps;
401
61191376 402 /* Dependency generation. */
403 struct
404 {
405 /* Style of header dependencies to generate. */
3b298764 406 enum cpp_deps_style style;
61191376 407
408 /* Assume missing files are generated files. */
409 bool missing_files;
410
411 /* Generate phony targets for each dependency apart from the first
412 one. */
413 bool phony_targets;
3c556f04 414
415 /* If true, no dependency is generated on the main file. */
416 bool ignore_main_file;
61191376 417 } deps;
418
d932f956 419 /* Target-specific features set by the front end or client. */
420
421 /* Precision for target CPP arithmetic, target characters, target
422 ints and target wide characters, respectively. */
423 size_t precision, char_precision, int_precision, wchar_precision;
424
1ae6ed16 425 /* True means chars (wide chars) are unsigned. */
426 bool unsigned_char, unsigned_wchar;
63994318 427
ebc03810 428 /* True if the most significant byte in a word has the lowest
429 address in memory. */
430 bool bytes_big_endian;
65a6d98c 431
63994318 432 /* Nonzero means __STDC__ should have the value 0 in system headers. */
433 unsigned char stdc_0_in_system_headers;
d6d3c909 434
435 /* True means return pragmas as tokens rather than processing
436 them directly. */
437 bool defer_pragmas;
2ff3ad1d 438};
1d6fa33f 439
065e625b 440/* Callback for header lookup for HEADER, which is the name of a
441 source file. It is used as a method of last resort to find headers
442 that are not otherwise found during the normal include processing.
443 The return value is the malloced name of a header to try and open,
444 if any, or NULL otherwise. This callback is called only if the
445 header is otherwise unfound. */
d6c39c7a 446typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **);
065e625b 447
5c120a72 448/* Call backs to cpplib client. */
72b04ca4 449struct cpp_callbacks
450{
5621a364 451 /* Called when a new line of preprocessed output is started. */
f7fdd7a1 452 void (*line_change) (cpp_reader *, const cpp_token *, int);
64386834 453
454 /* Called when switching to/from a new file.
455 The line_map is for the new file. It is NULL if there is no new file.
456 (In C this happens when done with <built-in>+<command line> and also
457 when done with a main file.) This can be used for resource cleanup. */
f7fdd7a1 458 void (*file_change) (cpp_reader *, const struct line_map *);
64386834 459
e7aa92b2 460 void (*dir_change) (cpp_reader *, const char *);
f7fdd7a1 461 void (*include) (cpp_reader *, unsigned int, const unsigned char *,
f789fe3e 462 const char *, int, const cpp_token **);
f7fdd7a1 463 void (*define) (cpp_reader *, unsigned int, cpp_hashnode *);
464 void (*undef) (cpp_reader *, unsigned int, cpp_hashnode *);
465 void (*ident) (cpp_reader *, unsigned int, const cpp_string *);
466 void (*def_pragma) (cpp_reader *, unsigned int);
467 int (*valid_pch) (cpp_reader *, const char *, int);
468 void (*read_pch) (cpp_reader *, const char *, int, const char *);
065e625b 469 missing_header_cb missing_header;
72b04ca4 470};
471
e69f4d0e 472/* Chain of directories to look for include files in. */
1824e2bd 473struct cpp_dir
e69f4d0e 474{
475 /* NULL-terminated singly-linked list. */
1824e2bd 476 struct cpp_dir *next;
e69f4d0e 477
1824e2bd 478 /* NAME of the directory, NUL-terminated. */
e69f4d0e 479 char *name;
480 unsigned int len;
481
482 /* One if a system header, two if a system header that has extern
483 "C" guards for C++. */
484 unsigned char sysp;
485
1824e2bd 486 /* Mapping of file names for this directory for MS-DOS and related
487 platforms. A NULL-terminated array of (from, to) pairs. */
488 const char **name_map;
787c3d1a 489
065e625b 490 /* Routine to construct pathname, given the search path name and the
491 HEADER we are trying to find, return a constructed pathname to
492 try and open. If this is NULL, the constructed pathname is as
493 constructed by append_file_to_dir. */
494 char *(*construct) (const char *header, cpp_dir *dir);
495
e69f4d0e 496 /* The C front end uses these to recognize duplicated
497 directories in the search path. */
498 ino_t ino;
499 dev_t dev;
06fd18c9 500
501 /* Is this a user-supplied directory? */
502 bool user_supplied_p;
e69f4d0e 503};
504
1d6fa33f 505/* Name under which this program was invoked. */
47cefa47 506extern const char *progname;
1d6fa33f 507
79bd622b 508/* The structure of a node in the hash table. The hash table has
509 entries for all identifiers: either macros defined by #define
510 commands (type NT_MACRO), assertions created with #assert
511 (NT_ASSERTION), or neither of the above (NT_VOID). Builtin macros
d716ce75 512 like __LINE__ are flagged NODE_BUILTIN. Poisoned identifiers are
79bd622b 513 flagged NODE_POISONED. NODE_OPERATOR (C++ only) indicates an
514 identifier that behaves like an operator such as "xor".
515 NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
516 diagnostic may be required for this node. Currently this only
517 applies to __VA_ARGS__ and poisoned identifiers. */
518
519/* Hash node flags. */
520#define NODE_OPERATOR (1 << 0) /* C++ named operator. */
521#define NODE_POISONED (1 << 1) /* Poisoned identifier. */
522#define NODE_BUILTIN (1 << 2) /* Builtin macro. */
523#define NODE_DIAGNOSTIC (1 << 3) /* Possible diagnostic when lexed. */
31ca26b1 524#define NODE_WARN (1 << 4) /* Warn if redefined or undefined. */
c7e5d924 525#define NODE_DISABLED (1 << 5) /* A disabled macro. */
6473f3f4 526#define NODE_MACRO_ARG (1 << 6) /* Used during #define processing. */
79bd622b 527
528/* Different flavors of hash node. */
c4abf88d 529enum node_type
530{
79bd622b 531 NT_VOID = 0, /* No definition yet. */
532 NT_MACRO, /* A macro of some form. */
533 NT_ASSERTION /* Predicate for #assert. */
534};
535
c7e5d924 536/* Different flavors of builtin macro. _Pragma is an operator, but we
537 handle it with the builtin code for efficiency reasons. */
79bd622b 538enum builtin_type
539{
540 BT_SPECLINE = 0, /* `__LINE__' */
541 BT_DATE, /* `__DATE__' */
542 BT_FILE, /* `__FILE__' */
543 BT_BASE_FILE, /* `__BASE_FILE__' */
544 BT_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */
545 BT_TIME, /* `__TIME__' */
c7e5d924 546 BT_STDC, /* `__STDC__' */
547 BT_PRAGMA /* `_Pragma' operator */
c4abf88d 548};
549
0d086e18 550#define CPP_HASHNODE(HNODE) ((cpp_hashnode *) (HNODE))
551#define HT_NODE(NODE) ((ht_identifier *) (NODE))
552#define NODE_LEN(NODE) HT_LEN (&(NODE)->ident)
553#define NODE_NAME(NODE) HT_STR (&(NODE)->ident)
c4abf88d 554
c39ed964 555/* Specify which field, if any, of the union is used. */
556
557enum {
558 NTV_MACRO,
559 NTV_ANSWER,
560 NTV_BUILTIN,
561 NTV_ARGUMENT,
562 NTV_NONE
563};
564
565#define CPP_HASHNODE_VALUE_IDX(HNODE) \
566 ((HNODE.flags & NODE_MACRO_ARG) ? NTV_ARGUMENT \
567 : HNODE.type == NT_MACRO ? ((HNODE.flags & NODE_BUILTIN) \
568 ? NTV_BUILTIN : NTV_MACRO) \
569 : HNODE.type == NT_ASSERTION ? NTV_ANSWER \
570 : NTV_NONE)
571
0d086e18 572/* The common part of an identifier node shared amongst all 3 C front
573 ends. Also used to store CPP identifiers, which are a superset of
574 identifiers in the grammatical sense. */
720aca92 575
576union _cpp_hashnode_value GTY(())
577{
578 /* If a macro. */
579 cpp_macro * GTY((tag ("NTV_MACRO"))) macro;
580 /* Answers to an assertion. */
581 struct answer * GTY ((tag ("NTV_ANSWER"))) answers;
582 /* Code for a builtin macro. */
583 enum builtin_type GTY ((tag ("NTV_BUILTIN"))) builtin;
584 /* Macro argument index. */
585 unsigned short GTY ((tag ("NTV_ARGUMENT"))) arg_index;
586};
587
573aba85 588struct cpp_hashnode GTY(())
c4abf88d 589{
0d086e18 590 struct ht_identifier ident;
805e22b2 591 unsigned int is_directive : 1;
787c3d1a 592 unsigned int directive_index : 7; /* If is_directive,
805e22b2 593 then index into directive table.
6473f3f4 594 Otherwise, a NODE_OPERATOR. */
0d086e18 595 unsigned char rid_code; /* Rid code - for front ends. */
596 ENUM_BITFIELD(node_type) type : 8; /* CPP node type. */
597 unsigned char flags; /* CPP flags. */
c4abf88d 598
720aca92 599 union _cpp_hashnode_value GTY ((desc ("CPP_HASHNODE_VALUE_IDX (%1)"))) value;
c4abf88d 600};
601
568139e4 602/* Call this first to get a handle to pass to other functions.
603
604 If you want cpplib to manage its own hashtable, pass in a NULL
605 pointer. Otherwise you should pass in an initialized hash table
606 that cpplib will share; this technique is used by the C front
607 ends. */
ceec9c13 608extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
609 struct line_maps *);
9bd97637 610
3ae4c9f3 611/* Call this to change the selected language standard (e.g. because of
612 command line options). */
f7fdd7a1 613extern void cpp_set_lang (cpp_reader *, enum c_lang);
3ae4c9f3 614
e69f4d0e 615/* Set the include paths. */
1824e2bd 616extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
e69f4d0e 617
3eb3f293 618/* Call these to get pointers to the options, callback, and deps
619 structures for a given reader. These pointers are good until you
620 call cpp_finish on that reader. You can either edit the callbacks
72b04ca4 621 through the pointer returned from cpp_get_callbacks, or set them
622 with cpp_set_callbacks. */
f7fdd7a1 623extern cpp_options *cpp_get_options (cpp_reader *);
f7fdd7a1 624extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
625extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
3eb3f293 626extern struct deps *cpp_get_deps (cpp_reader *);
72b04ca4 627
d732fcf0 628/* This function reads the file, but does not start preprocessing. It
629 returns the name of the original file; this is the same as the
630 input file, except for preprocessed input. This will generate at
631 least one file change callback, and possibly a line change callback
7c2df241 632 too. If there was an error opening the file, it returns NULL. */
d732fcf0 633extern const char *cpp_read_main_file (cpp_reader *, const char *);
9ceb1c29 634
fc3c7720 635/* Set up built-ins like __FILE__. */
f7fdd7a1 636extern void cpp_init_builtins (cpp_reader *, int);
9ceb1c29 637
c7f96907 638/* This is called after options have been parsed, and partially
7981458e 639 processed. */
c7f96907 640extern void cpp_post_options (cpp_reader *);
641
ebc03810 642/* Set up translation to the target character set. */
643extern void cpp_init_iconv (cpp_reader *);
644
61191376 645/* Call this to finish preprocessing. If you requested dependency
646 generation, pass an open stream to write the information to,
647 otherwise NULL. It is your responsibility to close the stream.
648
649 Returns cpp_errors (pfile). */
f7fdd7a1 650extern int cpp_finish (cpp_reader *, FILE *deps_stream);
61191376 651
9ceb1c29 652/* Call this to release the handle at the end of preprocessing. Any
653 use of the handle after this function returns is invalid. Returns
654 cpp_errors (pfile). */
f7fdd7a1 655extern void cpp_destroy (cpp_reader *);
9ceb1c29 656
72b04ca4 657/* Error count. */
f7fdd7a1 658extern unsigned int cpp_errors (cpp_reader *);
659
660extern unsigned int cpp_token_len (const cpp_token *);
661extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
662extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
bb1fa6bb 663 unsigned char *, bool);
f7fdd7a1 664extern void cpp_register_pragma (cpp_reader *, const char *, const char *,
68bf2ad9 665 void (*) (cpp_reader *), bool);
d6d3c909 666extern void cpp_handle_deferred_pragma (cpp_reader *, const cpp_string *);
f7fdd7a1 667extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
668 const cpp_token *);
669extern const cpp_token *cpp_get_token (cpp_reader *);
670extern const unsigned char *cpp_macro_definition (cpp_reader *,
671 const cpp_hashnode *);
672extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
f80e83a9 673
8330799c 674/* Evaluate a CPP_CHAR or CPP_WCHAR token. */
f7fdd7a1 675extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *,
676 unsigned int *, int *);
ebc03810 677/* Evaluate a vector of CPP_STRING or CPP_WSTRING tokens. */
678extern bool cpp_interpret_string (cpp_reader *,
679 const cpp_string *, size_t,
680 cpp_string *, bool);
7bc95b56 681extern bool cpp_interpret_string_notranslate (cpp_reader *,
682 const cpp_string *, size_t,
683 cpp_string *, bool);
8330799c 684
624d37a6 685/* Convert a host character constant to the execution character set. */
686extern cppchar_t cpp_host_to_exec_charset (cpp_reader *, cppchar_t);
687
fc3c7720 688/* Used to register macros and assertions, perhaps from the command line.
9a85d74b 689 The text is the same as the command line argument. */
f7fdd7a1 690extern void cpp_define (cpp_reader *, const char *);
691extern void cpp_assert (cpp_reader *, const char *);
692extern void cpp_undef (cpp_reader *, const char *);
693extern void cpp_unassert (cpp_reader *, const char *);
1d6fa33f 694
40109983 695/* Undefine all macros and assertions. */
696extern void cpp_undef_all (cpp_reader *);
697
f7fdd7a1 698extern cpp_buffer *cpp_push_buffer (cpp_reader *, const unsigned char *,
64386834 699 size_t, int);
f7fdd7a1 700extern int cpp_defined (cpp_reader *, const unsigned char *, int);
6060326b 701
4baf0479 702/* A preprocessing number. Code assumes that any unused high bits of
703 the double integer are set to zero. */
704typedef unsigned HOST_WIDE_INT cpp_num_part;
705typedef struct cpp_num cpp_num;
706struct cpp_num
707{
708 cpp_num_part high;
709 cpp_num_part low;
710 bool unsignedp; /* True if value should be treated as unsigned. */
711 bool overflow; /* True if the most recent calculation overflowed. */
712};
713
714/* cpplib provides two interfaces for interpretation of preprocessing
715 numbers.
716
717 cpp_classify_number categorizes numeric constants according to
718 their field (integer, floating point, or invalid), radix (decimal,
719 octal, hexadecimal), and type suffixes. */
720
721#define CPP_N_CATEGORY 0x000F
722#define CPP_N_INVALID 0x0000
723#define CPP_N_INTEGER 0x0001
724#define CPP_N_FLOATING 0x0002
725
726#define CPP_N_WIDTH 0x00F0
727#define CPP_N_SMALL 0x0010 /* int, float. */
728#define CPP_N_MEDIUM 0x0020 /* long, double. */
729#define CPP_N_LARGE 0x0040 /* long long, long double. */
730
731#define CPP_N_RADIX 0x0F00
732#define CPP_N_DECIMAL 0x0100
733#define CPP_N_HEX 0x0200
734#define CPP_N_OCTAL 0x0400
735
736#define CPP_N_UNSIGNED 0x1000 /* Properties. */
737#define CPP_N_IMAGINARY 0x2000
738
739/* Classify a CPP_NUMBER token. The return value is a combination of
740 the flags from the above sets. */
f7fdd7a1 741extern unsigned cpp_classify_number (cpp_reader *, const cpp_token *);
4baf0479 742
743/* Evaluate a token classified as category CPP_N_INTEGER. */
f7fdd7a1 744extern cpp_num cpp_interpret_integer (cpp_reader *, const cpp_token *,
745 unsigned int type);
4baf0479 746
f5ec8cb5 747/* Sign extend a number, with PRECISION significant bits and all
748 others assumed clear, to fill out a cpp_num structure. */
f7fdd7a1 749cpp_num cpp_num_sign_extend (cpp_num, size_t);
f5ec8cb5 750
d716ce75 751/* Diagnostic levels. To get a diagnostic without associating a
73328dce 752 position in the translation unit with it, use cpp_error_with_line
753 with a line number of zero. */
754
755/* Warning, an error with -Werror. */
d80d2074 756#define CPP_DL_WARNING 0x00
757/* Same as CPP_DL_WARNING, except it is not suppressed in system headers. */
758#define CPP_DL_WARNING_SYSHDR 0x01
73328dce 759/* Warning, an error with -pedantic-errors or -Werror. */
d80d2074 760#define CPP_DL_PEDWARN 0x02
73328dce 761/* An error. */
d80d2074 762#define CPP_DL_ERROR 0x03
73328dce 763/* An internal consistency check failed. Prints "internal error: ",
d80d2074 764 otherwise the same as CPP_DL_ERROR. */
765#define CPP_DL_ICE 0x04
73328dce 766/* Extracts a diagnostic level from an int. */
d80d2074 767#define CPP_DL_EXTRACT(l) (l & 0xf)
d10cfa8d 768/* Nonzero if a diagnostic level is one of the warnings. */
d80d2074 769#define CPP_DL_WARNING_P(l) (CPP_DL_EXTRACT (l) >= CPP_DL_WARNING \
770 && CPP_DL_EXTRACT (l) <= CPP_DL_PEDWARN)
73328dce 771
73328dce 772/* Output a diagnostic of some kind. */
f7fdd7a1 773extern void cpp_error (cpp_reader *, int, const char *msgid, ...)
73328dce 774 ATTRIBUTE_PRINTF_3;
775
f7fdd7a1 776/* Output a diagnostic with "MSGID: " preceding the
73328dce 777 error string of errno. No location is printed. */
f7fdd7a1 778extern void cpp_errno (cpp_reader *, int, const char *msgid);
73328dce 779
780/* Same as cpp_error, except additionally specifies a position as a
781 (translation unit) physical line and physical column. If the line is
782 zero, then no location is printed. */
610625e3 783extern void cpp_error_with_line (cpp_reader *, int, source_location, unsigned,
a65bda30 784 const char *msgid, ...) ATTRIBUTE_PRINTF_5;
e2f9a79f 785
786/* In cpplex.c */
f7fdd7a1 787extern int cpp_ideq (const cpp_token *, const char *);
788extern void cpp_output_line (cpp_reader *, FILE *);
789extern void cpp_output_token (const cpp_token *, FILE *);
790extern const char *cpp_type2name (enum cpp_ttype);
13c457e1 791/* Returns the value of an escape sequence, truncated to the correct
792 target precision. PSTR points to the input pointer, which is just
793 after the backslash. LIMIT is how much text we have. WIDE is true
794 if the escape sequence is part of a wide character constant or
795 string literal. Handles all relevant diagnostics. */
f7fdd7a1 796extern cppchar_t cpp_parse_escape (cpp_reader *, const unsigned char ** pstr,
797 const unsigned char *limit, int wide);
50fd6b48 798
e2f9a79f 799/* In cpphash.c */
0d086e18 800
801/* Lookup an identifier in the hashtable. Puts the identifier in the
802 table if it is not already there. */
f7fdd7a1 803extern cpp_hashnode *cpp_lookup (cpp_reader *, const unsigned char *,
804 unsigned int);
0d086e18 805
f7fdd7a1 806typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *);
807extern void cpp_forall_identifiers (cpp_reader *, cpp_cb, void *);
7034a61d 808
6cae2504 809/* In cppmacro.c */
f7fdd7a1 810extern void cpp_scan_nooutput (cpp_reader *);
811extern int cpp_sys_macro_p (cpp_reader *);
812extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *,
813 unsigned int);
6d71dc85 814
2e398cc7 815/* In cppfiles.c */
1824e2bd 816extern bool cpp_included (cpp_reader *, const char *);
f7fdd7a1 817extern void cpp_make_system_header (cpp_reader *, int, int);
f7fdd7a1 818extern bool cpp_push_include (cpp_reader *, const char *);
819extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
065e625b 820extern const char *cpp_get_path (struct _cpp_file *);
d6c39c7a 821extern cpp_dir *cpp_get_dir (struct _cpp_file *);
065e625b 822extern cpp_buffer *cpp_get_buffer (cpp_reader *);
823extern struct _cpp_file *cpp_get_file (cpp_buffer *);
824extern cpp_buffer *cpp_get_prev (cpp_buffer *);
94221a92 825
573aba85 826/* In cpppch.c */
827struct save_macro_data;
f7fdd7a1 828extern int cpp_save_state (cpp_reader *, FILE *);
829extern int cpp_write_pch_deps (cpp_reader *, FILE *);
830extern int cpp_write_pch_state (cpp_reader *, FILE *);
831extern int cpp_valid_state (cpp_reader *, const char *, int);
832extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **);
833extern int cpp_read_state (cpp_reader *, const char *, FILE *,
834 struct save_macro_data *);
573aba85 835
1d6fa33f 836#ifdef __cplusplus
837}
838#endif
2a281353 839
d856c8a6 840#endif /* ! LIBCPP_CPPLIB_H */