]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/include/cpplib.h
Update C17 option descriptions not to say "expected to be published".
[thirdparty/gcc.git] / libcpp / include / cpplib.h
CommitLineData
7f2935c7 1/* Definitions for CPP library.
85ec4feb 2 Copyright (C) 1995-2018 Free Software Foundation, Inc.
7f2935c7
PB
3 Written by Per Bothner, 1994-95.
4
5This program is free software; you can redistribute it and/or modify it
6under the terms of the GNU General Public License as published by the
748086b7 7Free Software Foundation; either version 3, or (at your option) any
7f2935c7
PB
8later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
748086b7
JJ
16along with this program; see the file COPYING3. If not see
17<http://www.gnu.org/licenses/>.
7f2935c7
PB
18
19 In other words, you are welcome to use, share and improve this program.
20 You are forbidden to forbid anyone else to use, share and improve
21 what you give them. Help stamp out software-hoarding! */
4f4e53dd
PB
22#ifndef LIBCPP_CPPLIB_H
23#define LIBCPP_CPPLIB_H
7f2935c7
PB
24
25#include <sys/types.h>
4f4e53dd 26#include "symtab.h"
d82fc108 27#include "line-map.h"
7f2935c7 28
7f2935c7
PB
29typedef struct cpp_reader cpp_reader;
30typedef struct cpp_buffer cpp_buffer;
31typedef struct cpp_options cpp_options;
1368ee70 32typedef struct cpp_token cpp_token;
bfb9dc7f 33typedef struct cpp_string cpp_string;
a50882dc 34typedef struct cpp_hashnode cpp_hashnode;
93c80368 35typedef struct cpp_macro cpp_macro;
7e96d768 36typedef struct cpp_callbacks cpp_callbacks;
8f9b4009 37typedef struct cpp_dir cpp_dir;
93c80368 38
94d1613b 39struct _cpp_file;
c5a04734 40
f8b954fc
NB
41/* The first three groups, apart from '=', can appear in preprocessor
42 expressions (+= and -= are used to indicate unary + and - resp.).
43 This allows a lookup table to be implemented in _cpp_parse_expr.
c5a04734
ZW
44
45 The first group, to CPP_LAST_EQ, can be immediately followed by an
46 '='. The lexer needs operators ending in '=', like ">>=", to be in
b52dbbf8
SE
47 the same order as their counterparts without the '=', like ">>".
48
49 See the cpp_operator table optab in expr.c if you change the order or
50 add or remove anything in the first group. */
c5a04734 51
21b11495
ZW
52#define TTYPE_TABLE \
53 OP(EQ, "=") \
54 OP(NOT, "!") \
55 OP(GREATER, ">") /* compare */ \
56 OP(LESS, "<") \
57 OP(PLUS, "+") /* math */ \
58 OP(MINUS, "-") \
59 OP(MULT, "*") \
60 OP(DIV, "/") \
61 OP(MOD, "%") \
62 OP(AND, "&") /* bit ops */ \
63 OP(OR, "|") \
64 OP(XOR, "^") \
65 OP(RSHIFT, ">>") \
66 OP(LSHIFT, "<<") \
21b11495
ZW
67 \
68 OP(COMPL, "~") \
69 OP(AND_AND, "&&") /* logical */ \
70 OP(OR_OR, "||") \
71 OP(QUERY, "?") \
72 OP(COLON, ":") \
73 OP(COMMA, ",") /* grouping */ \
74 OP(OPEN_PAREN, "(") \
75 OP(CLOSE_PAREN, ")") \
76 TK(EOF, NONE) \
77 OP(EQ_EQ, "==") /* compare */ \
78 OP(NOT_EQ, "!=") \
79 OP(GREATER_EQ, ">=") \
80 OP(LESS_EQ, "<=") \
81 \
82 /* These two are unary + / - in preprocessor expressions. */ \
83 OP(PLUS_EQ, "+=") /* math */ \
84 OP(MINUS_EQ, "-=") \
85 \
86 OP(MULT_EQ, "*=") \
87 OP(DIV_EQ, "/=") \
88 OP(MOD_EQ, "%=") \
89 OP(AND_EQ, "&=") /* bit ops */ \
90 OP(OR_EQ, "|=") \
91 OP(XOR_EQ, "^=") \
92 OP(RSHIFT_EQ, ">>=") \
93 OP(LSHIFT_EQ, "<<=") \
21b11495
ZW
94 /* Digraphs together, beginning with CPP_FIRST_DIGRAPH. */ \
95 OP(HASH, "#") /* digraphs */ \
96 OP(PASTE, "##") \
97 OP(OPEN_SQUARE, "[") \
98 OP(CLOSE_SQUARE, "]") \
99 OP(OPEN_BRACE, "{") \
100 OP(CLOSE_BRACE, "}") \
101 /* The remainder of the punctuation. Order is not significant. */ \
102 OP(SEMICOLON, ";") /* structure */ \
103 OP(ELLIPSIS, "...") \
104 OP(PLUS_PLUS, "++") /* increment */ \
105 OP(MINUS_MINUS, "--") \
106 OP(DEREF, "->") /* accessors */ \
107 OP(DOT, ".") \
108 OP(SCOPE, "::") \
109 OP(DEREF_STAR, "->*") \
110 OP(DOT_STAR, ".*") \
111 OP(ATSIGN, "@") /* used in Objective-C */ \
112 \
113 TK(NAME, IDENT) /* word */ \
114 TK(AT_NAME, IDENT) /* @word - Objective-C */ \
115 TK(NUMBER, LITERAL) /* 34_be+ta */ \
116 \
117 TK(CHAR, LITERAL) /* 'char' */ \
118 TK(WCHAR, LITERAL) /* L'char' */ \
b6baa67d
KVH
119 TK(CHAR16, LITERAL) /* u'char' */ \
120 TK(CHAR32, LITERAL) /* U'char' */ \
fe95b036 121 TK(UTF8CHAR, LITERAL) /* u8'char' */ \
21b11495
ZW
122 TK(OTHER, LITERAL) /* stray punctuation */ \
123 \
124 TK(STRING, LITERAL) /* "string" */ \
125 TK(WSTRING, LITERAL) /* L"string" */ \
b6baa67d
KVH
126 TK(STRING16, LITERAL) /* u"string" */ \
127 TK(STRING32, LITERAL) /* U"string" */ \
2c6e3f55 128 TK(UTF8STRING, LITERAL) /* u8"string" */ \
21b11495
ZW
129 TK(OBJC_STRING, LITERAL) /* @"string" - Objective-C */ \
130 TK(HEADER_NAME, LITERAL) /* <stdio.h> in #include */ \
131 \
3ce4f9e4
ESR
132 TK(CHAR_USERDEF, LITERAL) /* 'char'_suffix - C++-0x */ \
133 TK(WCHAR_USERDEF, LITERAL) /* L'char'_suffix - C++-0x */ \
134 TK(CHAR16_USERDEF, LITERAL) /* u'char'_suffix - C++-0x */ \
135 TK(CHAR32_USERDEF, LITERAL) /* U'char'_suffix - C++-0x */ \
fe95b036 136 TK(UTF8CHAR_USERDEF, LITERAL) /* u8'char'_suffix - C++-0x */ \
3ce4f9e4
ESR
137 TK(STRING_USERDEF, LITERAL) /* "string"_suffix - C++-0x */ \
138 TK(WSTRING_USERDEF, LITERAL) /* L"string"_suffix - C++-0x */ \
139 TK(STRING16_USERDEF, LITERAL) /* u"string"_suffix - C++-0x */ \
140 TK(STRING32_USERDEF, LITERAL) /* U"string"_suffix - C++-0x */ \
141 TK(UTF8STRING_USERDEF,LITERAL) /* u8"string"_suffix - C++-0x */ \
142 \
21b11495
ZW
143 TK(COMMENT, LITERAL) /* Only if output comments. */ \
144 /* SPELL_LITERAL happens to DTRT. */ \
145 TK(MACRO_ARG, NONE) /* Macro argument. */ \
bc4071dd
RH
146 TK(PRAGMA, NONE) /* Only for deferred pragmas. */ \
147 TK(PRAGMA_EOL, NONE) /* End-of-line for deferred pragmas. */ \
21b11495
ZW
148 TK(PADDING, NONE) /* Whitespace for -E. */
149
150#define OP(e, s) CPP_ ## e,
151#define TK(e, s) CPP_ ## e,
3a2b2c7a 152enum cpp_ttype
c45da1ca 153{
1368ee70 154 TTYPE_TABLE
21b11495
ZW
155 N_TTYPES,
156
083e891e
MP
157 /* A token type for keywords, as opposed to ordinary identifiers. */
158 CPP_KEYWORD,
159
21b11495 160 /* Positions in the table. */
b52dbbf8 161 CPP_LAST_EQ = CPP_LSHIFT,
21b11495 162 CPP_FIRST_DIGRAPH = CPP_HASH,
b52dbbf8 163 CPP_LAST_PUNCTUATOR= CPP_ATSIGN,
21b11495 164 CPP_LAST_CPP_OP = CPP_LESS_EQ
1368ee70 165};
96be6998
ZW
166#undef OP
167#undef TK
1368ee70 168
ecfd72e7 169/* C language kind, used when calling cpp_create_reader. */
c76dc9c3
JM
170enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_GNUC11, CLK_GNUC17,
171 CLK_STDC89, CLK_STDC94, CLK_STDC99, CLK_STDC11, CLK_STDC17,
61949153 172 CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX11, CLK_CXX11,
026a79f7
AS
173 CLK_GNUCXX14, CLK_CXX14, CLK_GNUCXX17, CLK_CXX17,
174 CLK_GNUCXX2A, CLK_CXX2A, CLK_ASM};
dd07b884 175
5d8ebbd8 176/* Payload of a NUMBER, STRING, CHAR or COMMENT token. */
d1b38208 177struct GTY(()) cpp_string {
1368ee70 178 unsigned int len;
f617b8e2 179 const unsigned char *text;
1368ee70
ZW
180};
181
c5a04734 182/* Flags for the cpp_token structure. */
041c3194 183#define PREV_WHITE (1 << 0) /* If whitespace before this token. */
93c80368
NB
184#define DIGRAPH (1 << 1) /* If it was a digraph. */
185#define STRINGIFY_ARG (1 << 2) /* If macro argument to be stringified. */
186#define PASTE_LEFT (1 << 3) /* If on LHS of a ## operator. */
dd07b884 187#define NAMED_OP (1 << 4) /* C++ named operators. */
81fea426
MP
188#define PREV_FALLTHROUGH (1 << 5) /* On a token preceeded by FALLTHROUGH
189 comment. */
4ed5bcfb 190#define BOL (1 << 6) /* Token at beginning of line. */
ab84748a
VR
191#define PURE_ZERO (1 << 7) /* Single 0 digit, used by the C++ frontend,
192 set in c-lex.c. */
aa508502
JM
193#define SP_DIGRAPH (1 << 8) /* # or ## token was a digraph. */
194#define SP_PREV_WHITE (1 << 9) /* If whitespace before a ##
195 operator, or before this token
196 after a # operator. */
81fea426 197#define NO_EXPAND (1 << 10) /* Do not macro-expand this token. */
9e62c811 198
d8044160
GK
199/* Specify which field, if any, of the cpp_token union is used. */
200
201enum cpp_token_fld_kind {
202 CPP_TOKEN_FLD_NODE,
203 CPP_TOKEN_FLD_SOURCE,
204 CPP_TOKEN_FLD_STR,
205 CPP_TOKEN_FLD_ARG_NO,
9a0c6187 206 CPP_TOKEN_FLD_TOKEN_NO,
bc4071dd 207 CPP_TOKEN_FLD_PRAGMA,
d8044160
GK
208 CPP_TOKEN_FLD_NONE
209};
210
9a0c6187
JM
211/* A macro argument in the cpp_token union. */
212struct GTY(()) cpp_macro_arg {
213 /* Argument number. */
214 unsigned int arg_no;
be5ffc59
JM
215 /* The original spelling of the macro argument token. */
216 cpp_hashnode *
217 GTY ((nested_ptr (union tree_node,
218 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
219 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
220 spelling;
9a0c6187
JM
221};
222
223/* An identifier in the cpp_token union. */
224struct GTY(()) cpp_identifier {
225 /* The canonical (UTF-8) spelling of the identifier. */
226 cpp_hashnode *
227 GTY ((nested_ptr (union tree_node,
228 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
229 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
230 node;
be5ffc59
JM
231 /* The original spelling of the identifier. */
232 cpp_hashnode *
233 GTY ((nested_ptr (union tree_node,
234 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
235 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
236 spelling;
9a0c6187
JM
237};
238
1920de47 239/* A preprocessing token. This has been carefully packed and should
644eddaa 240 occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts. */
d1b38208 241struct GTY(()) cpp_token {
ebedc9a3
DM
242 source_location src_loc; /* Location of first char of token,
243 together with range of full token. */
041c3194 244 ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT; /* token type */
aa508502 245 unsigned short flags; /* flags - see above */
041c3194 246
d8044160 247 union cpp_token_u
1368ee70 248 {
d8044160 249 /* An identifier. */
9a0c6187 250 struct cpp_identifier GTY ((tag ("CPP_TOKEN_FLD_NODE"))) node;
d8044160
GK
251
252 /* Inherit padding from this token. */
253 cpp_token * GTY ((tag ("CPP_TOKEN_FLD_SOURCE"))) source;
254
255 /* A string, or number. */
256 struct cpp_string GTY ((tag ("CPP_TOKEN_FLD_STR"))) str;
257
be5ffc59 258 /* Argument no. (and original spelling) for a CPP_MACRO_ARG. */
9a0c6187
JM
259 struct cpp_macro_arg GTY ((tag ("CPP_TOKEN_FLD_ARG_NO"))) macro_arg;
260
261 /* Original token no. for a CPP_PASTE (from a sequence of
262 consecutive paste tokens in a macro expansion). */
263 unsigned int GTY ((tag ("CPP_TOKEN_FLD_TOKEN_NO"))) token_no;
bc4071dd
RH
264
265 /* Caller-supplied identifier for a CPP_PRAGMA. */
266 unsigned int GTY ((tag ("CPP_TOKEN_FLD_PRAGMA"))) pragma;
d8044160 267 } GTY ((desc ("cpp_token_val_index (&%1)"))) val;
7f2935c7
PB
268};
269
d8044160 270/* Say which field is in use. */
c26302d5 271extern enum cpp_token_fld_kind cpp_token_val_index (const cpp_token *tok);
d8044160 272
4268e8bb 273/* A type wide enough to hold any multibyte source character.
625458d0 274 cpplib's character constant interpreter requires an unsigned type.
43839642
ZW
275 Also, a typedef for the signed equivalent.
276 The width of this type is capped at 32 bits; there do exist targets
277 where wchar_t is 64 bits, but only in a non-default mode, and there
278 would be no meaningful interpretation for a wchar_t value greater
279 than 2^32 anyway -- the widest wide-character encoding around is
280 ISO 10646, which stops at 2^31. */
281#if CHAR_BIT * SIZEOF_INT >= 32
625458d0 282# define CPPCHAR_SIGNED_T int
43839642
ZW
283#elif CHAR_BIT * SIZEOF_LONG >= 32
284# define CPPCHAR_SIGNED_T long
625458d0 285#else
43839642 286# error "Cannot find a least-32-bit signed integer type"
625458d0
NB
287#endif
288typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
289typedef CPPCHAR_SIGNED_T cppchar_signed_t;
0d9f234d 290
72bb2c39
BI
291/* Style of header dependencies to generate. */
292enum cpp_deps_style { DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM };
293
50668cf6
GK
294/* The possible normalization levels, from most restrictive to least. */
295enum cpp_normalize_level {
296 /* In NFKC. */
297 normalized_KC = 0,
298 /* In NFC. */
299 normalized_C,
300 /* In NFC, except for subsequences where being in NFC would make
301 the identifier invalid. */
302 normalized_identifier_C,
303 /* Not normalized at all. */
304 normalized_none
305};
306
ae79697b
ZW
307/* This structure is nested inside struct cpp_reader, and
308 carries all the options visible to the command line. */
309struct cpp_options
c50bca08 310{
6ab3e7dd
NB
311 /* Characters between tab stops. */
312 unsigned int tabstop;
313
bdb05a7b
NB
314 /* The language we're preprocessing. */
315 enum c_lang lang;
316
7f2935c7 317 /* Nonzero means use extra default include directories for C++. */
ae79697b 318 unsigned char cplusplus;
7f2935c7 319
6614fd40 320 /* Nonzero means handle cplusplus style comments. */
ae79697b 321 unsigned char cplusplus_comments;
7f2935c7 322
899015a0
TT
323 /* Nonzero means define __OBJC__, treat @ as a special token, use
324 the OBJC[PLUS]_INCLUDE_PATH environment variable, and allow
325 "#import". */
ae79697b 326 unsigned char objc;
7f2935c7 327
564ad5f4 328 /* Nonzero means don't copy comments into the output file. */
ae79697b 329 unsigned char discard_comments;
7f2935c7 330
477cdac7
JT
331 /* Nonzero means don't copy comments into the output file during
332 macro expansion. */
333 unsigned char discard_comments_in_macro_exp;
334
041c3194 335 /* Nonzero means process the ISO trigraph sequences. */
ae79697b 336 unsigned char trigraphs;
7f2935c7 337
9b55f29a
NB
338 /* Nonzero means process the ISO digraph sequences. */
339 unsigned char digraphs;
340
bdb05a7b
NB
341 /* Nonzero means to allow hexadecimal floats and LL suffixes. */
342 unsigned char extended_numbers;
343
b6baa67d
KVH
344 /* Nonzero means process u/U prefix literals (UTF-16/32). */
345 unsigned char uliterals;
346
fe95b036
ESR
347 /* Nonzero means process u8 prefixed character literals (UTF-8). */
348 unsigned char utf8_char_literals;
349
7c1ffff9 350 /* Nonzero means process r/R raw strings. If this is set, uliterals
a48e3dd1
JM
351 must be set as well. */
352 unsigned char rliterals;
353
7f2935c7 354 /* Nonzero means print names of header files (-H). */
ae79697b 355 unsigned char print_include_names;
7f2935c7 356
9fbd3e41 357 /* Nonzero means complain about deprecated features. */
e3339d0f 358 unsigned char cpp_warn_deprecated;
9fbd3e41 359
7f2935c7 360 /* Nonzero means warn if slash-star appears in a comment. */
ae79697b 361 unsigned char warn_comments;
7f2935c7 362
e8ff5196
TB
363 /* Nonzero means to warn about __DATA__, __TIME__ and __TIMESTAMP__ usage. */
364 unsigned char warn_date_time;
365
b02398bd
BE
366 /* Nonzero means warn if a user-supplied include directory does not
367 exist. */
368 unsigned char warn_missing_include_dirs;
369
7f2935c7 370 /* Nonzero means warn if there are any trigraphs. */
ae79697b 371 unsigned char warn_trigraphs;
7f2935c7 372
a5a49440
NB
373 /* Nonzero means warn about multicharacter charconsts. */
374 unsigned char warn_multichar;
375
f9a0e96c
ZW
376 /* Nonzero means warn about various incompatibilities with
377 traditional C. */
e3339d0f 378 unsigned char cpp_warn_traditional;
7f2935c7 379
cd7ab83f 380 /* Nonzero means warn about long long numeric constants. */
e3339d0f 381 unsigned char cpp_warn_long_long;
cd7ab83f 382
909de5da
PE
383 /* Nonzero means warn about text after an #endif (or #else). */
384 unsigned char warn_endif_labels;
385
68e65275
NB
386 /* Nonzero means warn about implicit sign changes owing to integer
387 promotions. */
388 unsigned char warn_num_sign_change;
389
e5b79219
RH
390 /* Zero means don't warn about __VA_ARGS__ usage in c89 pedantic mode.
391 Presumably the usage is protected by the appropriate #ifdef. */
392 unsigned char warn_variadic_macros;
393
c047ce93
SB
394 /* Nonzero means warn about builtin macros that are redefined or
395 explicitly undefined. */
396 unsigned char warn_builtin_macro_redefined;
397
70f6d5e1
JJ
398 /* Different -Wimplicit-fallthrough= levels. */
399 unsigned char cpp_warn_implicit_fallthrough;
400
31031edd
JL
401 /* Nonzero means we should look for header.gcc files that remap file
402 names. */
ae79697b 403 unsigned char remap;
31031edd 404
eebedaa5 405 /* Zero means dollar signs are punctuation. */
ae79697b 406 unsigned char dollars_in_ident;
7f2935c7 407
af15a2fe
JM
408 /* Nonzero means UCNs are accepted in identifiers. */
409 unsigned char extended_identifiers;
410
78b8811a
HPN
411 /* True if we should warn about dollars in identifiers or numbers
412 for this translation unit. */
413 unsigned char warn_dollars;
414
6ac34fdc 415 /* Nonzero means warn if undefined identifiers are evaluated in an #if. */
ae79697b 416 unsigned char warn_undef;
6ac34fdc 417
fb2675cb
PB
418 /* Nonzero means warn if "defined" is encountered in a place other than
419 an #if. */
420 unsigned char warn_expansion_to_defined;
421
a69cbaac
NB
422 /* Nonzero means warn of unused macros from the main file. */
423 unsigned char warn_unused_macros;
424
31948547 425 /* Nonzero for the 1999 C Standard, including corrigenda and amendments. */
ae79697b 426 unsigned char c99;
31948547 427
58551c23
NB
428 /* Nonzero if we are conforming to a specific C or C++ standard. */
429 unsigned char std;
430
7f2935c7 431 /* Nonzero means give all the error messages the ANSI standard requires. */
e3339d0f 432 unsigned char cpp_pedantic;
7f2935c7 433
3773a46b
JM
434 /* Nonzero means we're looking at already preprocessed code, so don't
435 bother trying to do macro expansion and whatnot. */
ae79697b 436 unsigned char preprocessed;
847e697a
TT
437
438 /* Nonzero means we are going to emit debugging logs during
439 preprocessing. */
440 unsigned char debug;
3773a46b 441
92582b75
TT
442 /* Nonzero means we are tracking locations of tokens involved in
443 macro expansion. 1 Means we track the location in degraded mode
444 where we do not track locations of tokens resulting from the
445 expansion of arguments of function-like macro. 2 Means we do
446 track all macro expansions. This last option is the one that
447 consumes the highest amount of memory. */
448 unsigned char track_macro_expansion;
449
644eddaa 450 /* Nonzero means handle C++ alternate operator names. */
be768055 451 unsigned char operator_names;
7e96d768 452
3d8b2a98
ILT
453 /* Nonzero means warn about use of C++ alternate operator names. */
454 unsigned char warn_cxx_operator_names;
455
004cb263
NB
456 /* True for traditional preprocessing. */
457 unsigned char traditional;
458
01187df0 459 /* Nonzero for C++ 2011 Standard user-defined literals. */
3ce4f9e4
ESR
460 unsigned char user_literals;
461
7f5f5f98
OW
462 /* Nonzero means warn when a string or character literal is followed by a
463 ud-suffix which does not beging with an underscore. */
464 unsigned char warn_literal_suffix;
465
a4a0016d
ESR
466 /* Nonzero means interpret imaginary, fixed-point, or other gnu extension
467 literal number suffixes as user-defined literal number suffixes. */
468 unsigned char ext_numeric_literals;
469
d3f4ff8b
JM
470 /* Nonzero means extended identifiers allow the characters specified
471 in C11 and C++11. */
472 unsigned char c11_identifiers;
473
01187df0
JJ
474 /* Nonzero for C++ 2014 Standard binary constants. */
475 unsigned char binary_constants;
476
7057e645
ESR
477 /* Nonzero for C++ 2014 Standard digit separators. */
478 unsigned char digit_separators;
479
fb771b9d
TT
480 /* Nonzero for C++2a __VA_OPT__ feature. */
481 unsigned char va_opt;
482
e6cc3a24
ZW
483 /* Holds the name of the target (execution) character set. */
484 const char *narrow_charset;
485
486 /* Holds the name of the target wide character set. */
487 const char *wide_charset;
488
cf551fba
EC
489 /* Holds the name of the input character set. */
490 const char *input_charset;
491
50668cf6 492 /* The minimum permitted level of normalization before a warning
1ef33fd4
MLI
493 is generated. See enum cpp_normalize_level. */
494 int warn_normalize;
50668cf6 495
783e2989
NB
496 /* True to warn about precompiled header files we couldn't use. */
497 bool warn_invalid_pch;
498
499 /* True if dependencies should be restored from a precompiled header. */
500 bool restore_pch_deps;
501
f3bede71 502 /* True if warn about differences between C90 and C99. */
dd3ff077 503 signed char cpp_warn_c90_c99_compat;
f3bede71 504
fe191308
JM
505 /* True if warn about differences between C++98 and C++11. */
506 bool cpp_warn_cxx11_compat;
507
f4ff5a69
NB
508 /* Dependency generation. */
509 struct
510 {
511 /* Style of header dependencies to generate. */
72bb2c39 512 enum cpp_deps_style style;
f4ff5a69
NB
513
514 /* Assume missing files are generated files. */
515 bool missing_files;
516
517 /* Generate phony targets for each dependency apart from the first
518 one. */
519 bool phony_targets;
182d89a3
NB
520
521 /* If true, no dependency is generated on the main file. */
522 bool ignore_main_file;
74dc6a11
CD
523
524 /* If true, intend to use the preprocessor output (e.g., for compilation)
525 in addition to the dependency info. */
526 bool need_preprocessor_output;
f4ff5a69
NB
527 } deps;
528
44a147ad
NB
529 /* Target-specific features set by the front end or client. */
530
531 /* Precision for target CPP arithmetic, target characters, target
532 ints and target wide characters, respectively. */
533 size_t precision, char_precision, int_precision, wchar_precision;
534
23ff0223
NB
535 /* True means chars (wide chars) are unsigned. */
536 bool unsigned_char, unsigned_wchar;
5279d739 537
e6cc3a24
ZW
538 /* True if the most significant byte in a word has the lowest
539 address in memory. */
540 bool bytes_big_endian;
783e2989 541
5279d739
ZW
542 /* Nonzero means __STDC__ should have the value 0 in system headers. */
543 unsigned char stdc_0_in_system_headers;
21b11495 544
ccfc4c91
OW
545 /* True disables tokenization outside of preprocessing directives. */
546 bool directives_only;
5dc99c46
SB
547
548 /* True enables canonicalization of system header file paths. */
549 bool canonical_system_headers;
ae79697b 550};
7f2935c7 551
c24300ba
DM
552/* Diagnostic levels. To get a diagnostic without associating a
553 position in the translation unit with it, use cpp_error_with_line
554 with a line number of zero. */
555
556enum cpp_diagnostic_level {
557 /* Warning, an error with -Werror. */
558 CPP_DL_WARNING = 0,
559 /* Same as CPP_DL_WARNING, except it is not suppressed in system headers. */
560 CPP_DL_WARNING_SYSHDR,
561 /* Warning, an error with -pedantic-errors or -Werror. */
562 CPP_DL_PEDWARN,
563 /* An error. */
564 CPP_DL_ERROR,
565 /* An internal consistency check failed. Prints "internal error: ",
566 otherwise the same as CPP_DL_ERROR. */
567 CPP_DL_ICE,
568 /* An informative note following a warning. */
569 CPP_DL_NOTE,
570 /* A fatal error. */
571 CPP_DL_FATAL
572};
573
574/* Warning reason codes. Use a reason code of CPP_W_NONE for unclassified
575 warnings and diagnostics that are not warnings. */
576
577enum cpp_warning_reason {
578 CPP_W_NONE = 0,
579 CPP_W_DEPRECATED,
580 CPP_W_COMMENTS,
581 CPP_W_MISSING_INCLUDE_DIRS,
582 CPP_W_TRIGRAPHS,
583 CPP_W_MULTICHAR,
584 CPP_W_TRADITIONAL,
585 CPP_W_LONG_LONG,
586 CPP_W_ENDIF_LABELS,
587 CPP_W_NUM_SIGN_CHANGE,
588 CPP_W_VARIADIC_MACROS,
589 CPP_W_BUILTIN_MACRO_REDEFINED,
590 CPP_W_DOLLARS,
591 CPP_W_UNDEF,
592 CPP_W_UNUSED_MACROS,
593 CPP_W_CXX_OPERATOR_NAMES,
594 CPP_W_NORMALIZE,
595 CPP_W_INVALID_PCH,
596 CPP_W_WARNING_DIRECTIVE,
597 CPP_W_LITERAL_SUFFIX,
598 CPP_W_DATE_TIME,
599 CPP_W_PEDANTIC,
600 CPP_W_C90_C99_COMPAT,
601 CPP_W_CXX11_COMPAT,
602 CPP_W_EXPANSION_TO_DEFINED
603};
604
94d1613b
MS
605/* Callback for header lookup for HEADER, which is the name of a
606 source file. It is used as a method of last resort to find headers
607 that are not otherwise found during the normal include processing.
608 The return value is the malloced name of a header to try and open,
609 if any, or NULL otherwise. This callback is called only if the
610 header is otherwise unfound. */
e3c287c9 611typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **);
94d1613b 612
48c4721e 613/* Call backs to cpplib client. */
7e96d768
NB
614struct cpp_callbacks
615{
97293897 616 /* Called when a new line of preprocessed output is started. */
6cf87ca4 617 void (*line_change) (cpp_reader *, const cpp_token *, int);
4dc299fb
PB
618
619 /* Called when switching to/from a new file.
620 The line_map is for the new file. It is NULL if there is no new file.
621 (In C this happens when done with <built-in>+<command line> and also
622 when done with a main file.) This can be used for resource cleanup. */
0e50b624 623 void (*file_change) (cpp_reader *, const line_map_ordinary *);
4dc299fb 624
b20d9f0c 625 void (*dir_change) (cpp_reader *, const char *);
d0a9fbe1 626 void (*include) (cpp_reader *, source_location, const unsigned char *,
cbc43ae0 627 const char *, int, const cpp_token **);
d0a9fbe1
DS
628 void (*define) (cpp_reader *, source_location, cpp_hashnode *);
629 void (*undef) (cpp_reader *, source_location, cpp_hashnode *);
630 void (*ident) (cpp_reader *, source_location, const cpp_string *);
631 void (*def_pragma) (cpp_reader *, source_location);
6cf87ca4
ZW
632 int (*valid_pch) (cpp_reader *, const char *, int);
633 void (*read_pch) (cpp_reader *, const char *, int, const char *);
94d1613b 634 missing_header_cb missing_header;
178b58b5 635
5950c3c9
BE
636 /* Context-sensitive macro support. Returns macro (if any) that should
637 be expanded. */
638 cpp_hashnode * (*macro_to_expand) (cpp_reader *, const cpp_token *);
639
148e4216
JM
640 /* Called to emit a diagnostic. This callback receives the
641 translated message. */
c24300ba
DM
642 bool (*diagnostic) (cpp_reader *,
643 enum cpp_diagnostic_level,
644 enum cpp_warning_reason,
645 rich_location *,
646 const char *, va_list *)
8a645150 647 ATTRIBUTE_FPTR_PRINTF(5,0);
93d45d9e
JM
648
649 /* Callbacks for when a macro is expanded, or tested (whether
650 defined or not at the time) in #ifdef, #ifndef or "defined". */
d0a9fbe1
DS
651 void (*used_define) (cpp_reader *, source_location, cpp_hashnode *);
652 void (*used_undef) (cpp_reader *, source_location, cpp_hashnode *);
93d45d9e
JM
653 /* Called before #define and #undef or other macro definition
654 changes are processed. */
655 void (*before_define) (cpp_reader *);
3de8a540
AC
656 /* Called whenever a macro is expanded or tested.
657 Second argument is the location of the start of the current expansion. */
658 void (*used) (cpp_reader *, source_location, cpp_hashnode *);
8e680db5 659
42fd12b1
ESR
660 /* Callback to identify whether an attribute exists. */
661 int (*has_attribute) (cpp_reader *);
662
800c0e98
NS
663 /* Callback that can change a user lazy into normal macro. */
664 void (*user_lazy_macro) (cpp_reader *, cpp_macro *, unsigned);
15c98b2e
ES
665
666 /* Callback to parse SOURCE_DATE_EPOCH from environment. */
667 time_t (*get_source_date_epoch) (cpp_reader *);
cb18fd07
DM
668
669 /* Callback for providing suggestions for misspelled directives. */
670 const char *(*get_suggestion) (cpp_reader *, const char *, const char *const *);
05945a1b
DM
671
672 /* Callback for when a comment is encountered, giving the location
673 of the opening slash, a pointer to the content (which is not
674 necessarily 0-terminated), and the length of the content.
675 The content contains the opening slash-star (or slash-slash),
676 and for C-style comments contains the closing star-slash. For
677 C++-style comments it does not include the terminating newline. */
678 void (*comment) (cpp_reader *, source_location, const unsigned char *,
679 size_t);
7365279f
BK
680
681 /* Callback for filename remapping in __FILE__ and __BASE_FILE__ macro
682 expansions. */
683 const char *(*remap_filename) (const char*);
7e96d768
NB
684};
685
0c539b47
DR
686#ifdef VMS
687#define INO_T_CPP ino_t ino[3]
688#else
689#define INO_T_CPP ino_t ino
690#endif
691
5793b276 692/* Chain of directories to look for include files in. */
8f9b4009 693struct cpp_dir
5793b276
NB
694{
695 /* NULL-terminated singly-linked list. */
8f9b4009 696 struct cpp_dir *next;
5793b276 697
8f9b4009 698 /* NAME of the directory, NUL-terminated. */
5793b276
NB
699 char *name;
700 unsigned int len;
701
702 /* One if a system header, two if a system header that has extern
703 "C" guards for C++. */
704 unsigned char sysp;
705
8f5929e1
JJ
706 /* Is this a user-supplied directory? */
707 bool user_supplied_p;
708
709 /* The canonicalized NAME as determined by lrealpath. This field
710 is only used by hosts that lack reliable inode numbers. */
711 char *canonical_name;
712
8f9b4009
NB
713 /* Mapping of file names for this directory for MS-DOS and related
714 platforms. A NULL-terminated array of (from, to) pairs. */
715 const char **name_map;
cf551fba 716
94d1613b
MS
717 /* Routine to construct pathname, given the search path name and the
718 HEADER we are trying to find, return a constructed pathname to
719 try and open. If this is NULL, the constructed pathname is as
720 constructed by append_file_to_dir. */
721 char *(*construct) (const char *header, cpp_dir *dir);
722
5793b276
NB
723 /* The C front end uses these to recognize duplicated
724 directories in the search path. */
0c539b47 725 INO_T_CPP;
5793b276
NB
726 dev_t dev;
727};
728
10f04917
NS
729/* The kind of the cpp_macro. */
730enum cpp_macro_kind {
731 cmk_macro, /* An ISO macro (token expansion). */
3fb558b1 732 cmk_assert, /* An assertion. */
7692e253 733 cmk_traditional /* A traditional macro (text expansion). */
10f04917
NS
734};
735
c5d725c0
NS
736/* Each macro definition is recorded in a cpp_macro structure.
737 Variadic macros cannot occur with traditional cpp. */
738struct GTY(()) cpp_macro {
3fb558b1
NS
739 union cpp_parm_u
740 {
741 /* Parameters, if any. If parameter names use extended identifiers,
742 the original spelling of those identifiers, not the canonical
743 UTF-8 spelling, goes here. */
744 cpp_hashnode ** GTY ((tag ("false"),
745 nested_ptr (union tree_node,
746 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
747 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL"),
748 length ("%1.paramc"))) params;
749
750 /* If this is an assertion, the next one in the chain. */
751 cpp_macro *GTY ((tag ("true"))) next;
752 } GTY ((desc ("%1.kind == cmk_assert"))) parm;
c5d725c0 753
c5d725c0
NS
754 /* Definition line number. */
755 source_location line;
756
3fb558b1
NS
757 /* Number of tokens in body, or bytes for traditional macros. */
758 /* Do we really need 2^32-1 range here? */
c5d725c0
NS
759 unsigned int count;
760
761 /* Number of parameters. */
762 unsigned short paramc;
763
800c0e98
NS
764 /* Non-zero if this is a user-lazy macro, value provided by user. */
765 unsigned char lazy;
766
10f04917
NS
767 /* The kind of this macro (ISO, trad or assert) */
768 unsigned kind : 2;
769
c5d725c0
NS
770 /* If a function-like macro. */
771 unsigned int fun_like : 1;
772
773 /* If a variadic macro. */
774 unsigned int variadic : 1;
775
776 /* If macro defined in system header. */
777 unsigned int syshdr : 1;
778
779 /* Nonzero if it has been expanded or had its existence tested. */
780 unsigned int used : 1;
781
c5d725c0
NS
782 /* Indicate whether the tokens include extra CPP_PASTE tokens at the
783 end to track invalid redefinitions with consecutive CPP_PASTE
784 tokens. */
785 unsigned int extra_tokens : 1;
10f04917
NS
786
787 /* 1 bits spare (32-bit). 33 on 64-bit target. */
788
789 union cpp_exp_u
790 {
791 /* Trailing array of replacement tokens (ISO), or assertion body value. */
792 cpp_token GTY ((tag ("false"), length ("%1.count"))) tokens[1];
793
794 /* Pointer to replacement text (traditional). See comment at top
795 of cpptrad.c for how traditional function-like macros are
796 encoded. */
797 const unsigned char *GTY ((tag ("true"))) text;
798 } GTY ((desc ("%1.kind == cmk_traditional"))) exp;
c5d725c0
NS
799};
800
a570d97f
NS
801/* Poisoned identifiers are flagged NODE_POISONED. NODE_OPERATOR (C++
802 only) indicates an identifier that behaves like an operator such as
803 "xor". NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
93c80368 804 diagnostic may be required for this node. Currently this only
3d8b2a98
ILT
805 applies to __VA_ARGS__, poisoned identifiers, and -Wc++-compat
806 warnings about NODE_OPERATOR. */
93c80368
NB
807
808/* Hash node flags. */
809#define NODE_OPERATOR (1 << 0) /* C++ named operator. */
810#define NODE_POISONED (1 << 1) /* Poisoned identifier. */
a570d97f
NS
811#define NODE_DIAGNOSTIC (1 << 2) /* Possible diagnostic when lexed. */
812#define NODE_WARN (1 << 3) /* Warn if redefined or undefined. */
813#define NODE_DISABLED (1 << 4) /* A disabled macro. */
814#define NODE_USED (1 << 5) /* Dumped with -dU. */
815#define NODE_CONDITIONAL (1 << 6) /* Conditional macro */
816#define NODE_WARN_OPERATOR (1 << 7) /* Warn about C++ named operator. */
93c80368
NB
817
818/* Different flavors of hash node. */
f8f769ea
ZW
819enum node_type
820{
a570d97f
NS
821 NT_VOID = 0, /* Maybe an assert? */
822 NT_MACRO_ARG, /* A macro arg. */
823 NT_USER_MACRO, /* A user macro. */
824 NT_BUILTIN_MACRO, /* A builtin macro. */
825 NT_MACRO_MASK = NT_USER_MACRO /* Mask for either macro kind. */
93c80368
NB
826};
827
644eddaa
NB
828/* Different flavors of builtin macro. _Pragma is an operator, but we
829 handle it with the builtin code for efficiency reasons. */
7e5487a2 830enum cpp_builtin_type
93c80368
NB
831{
832 BT_SPECLINE = 0, /* `__LINE__' */
833 BT_DATE, /* `__DATE__' */
834 BT_FILE, /* `__FILE__' */
835 BT_BASE_FILE, /* `__BASE_FILE__' */
836 BT_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */
837 BT_TIME, /* `__TIME__' */
644eddaa 838 BT_STDC, /* `__STDC__' */
be8ac3e2 839 BT_PRAGMA, /* `_Pragma' operator */
a702045a 840 BT_TIMESTAMP, /* `__TIMESTAMP__' */
8e680db5 841 BT_COUNTER, /* `__COUNTER__' */
800c0e98 842 BT_HAS_ATTRIBUTE /* `__has_attribute__(x)' */
f8f769ea
ZW
843};
844
2a967f3d
NB
845#define CPP_HASHNODE(HNODE) ((cpp_hashnode *) (HNODE))
846#define HT_NODE(NODE) ((ht_identifier *) (NODE))
847#define NODE_LEN(NODE) HT_LEN (&(NODE)->ident)
848#define NODE_NAME(NODE) HT_STR (&(NODE)->ident)
f8f769ea 849
2a967f3d
NB
850/* The common part of an identifier node shared amongst all 3 C front
851 ends. Also used to store CPP identifiers, which are a superset of
852 identifiers in the grammatical sense. */
c3f829c1 853
d1b38208 854union GTY(()) _cpp_hashnode_value {
a570d97f
NS
855 /* Assert (maybe NULL) */
856 cpp_macro * GTY((tag ("NT_VOID"))) answers;
857 /* Macro (never NULL) */
858 cpp_macro * GTY((tag ("NT_USER_MACRO"))) macro;
c3f829c1 859 /* Code for a builtin macro. */
a570d97f 860 enum cpp_builtin_type GTY ((tag ("NT_BUILTIN_MACRO"))) builtin;
c3f829c1 861 /* Macro argument index. */
a570d97f 862 unsigned short GTY ((tag ("NT_MACRO_ARG"))) arg_index;
c3f829c1
GDR
863};
864
d1b38208 865struct GTY(()) cpp_hashnode {
2a967f3d 866 struct ht_identifier ident;
4977bab6 867 unsigned int is_directive : 1;
cf551fba 868 unsigned int directive_index : 7; /* If is_directive,
4977bab6 869 then index into directive table.
71c0e7fc 870 Otherwise, a NODE_OPERATOR. */
2a967f3d 871 unsigned char rid_code; /* Rid code - for front ends. */
a5a35247
NS
872 ENUM_BITFIELD(node_type) type : 2; /* CPP node type. */
873 unsigned int flags : 8; /* CPP flags. */
874
875 /* 6 bits spare (plus another 32 on 64-bit hosts). */
f8f769ea 876
a570d97f 877 union _cpp_hashnode_value GTY ((desc ("%1.type"))) value;
f8f769ea
ZW
878};
879
88fa5555
DM
880/* A class for iterating through the source locations within a
881 string token (before escapes are interpreted, and before
882 concatenation). */
883
884class cpp_string_location_reader {
885 public:
886 cpp_string_location_reader (source_location src_loc,
887 line_maps *line_table);
888
889 source_range get_next ();
890
891 private:
892 source_location m_loc;
893 int m_offset_per_column;
894 line_maps *m_line_table;
895};
896
897/* A class for storing the source ranges of all of the characters within
898 a string literal, after escapes are interpreted, and after
899 concatenation.
900
901 This is not GTY-marked, as instances are intended to be temporary. */
902
903class cpp_substring_ranges
904{
905 public:
906 cpp_substring_ranges ();
907 ~cpp_substring_ranges ();
908
909 int get_num_ranges () const { return m_num_ranges; }
910 source_range get_range (int idx) const
911 {
912 linemap_assert (idx < m_num_ranges);
913 return m_ranges[idx];
914 }
915
916 void add_range (source_range range);
917 void add_n_ranges (int num, cpp_string_location_reader &loc_reader);
918
919 private:
920 source_range *m_ranges;
921 int m_num_ranges;
922 int m_alloc_ranges;
923};
924
b4e46cea
PB
925/* Call this first to get a handle to pass to other functions.
926
927 If you want cpplib to manage its own hashtable, pass in a NULL
928 pointer. Otherwise you should pass in an initialized hash table
929 that cpplib will share; this technique is used by the C front
930 ends. */
50f59cd7
PB
931extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
932 struct line_maps *);
400023a3 933
5ffeb913
TT
934/* Reset the cpp_reader's line_map. This is only used after reading a
935 PCH file. */
936extern void cpp_set_line_map (cpp_reader *, struct line_maps *);
937
f749a36b
NB
938/* Call this to change the selected language standard (e.g. because of
939 command line options). */
6cf87ca4 940extern void cpp_set_lang (cpp_reader *, enum c_lang);
f749a36b 941
5793b276 942/* Set the include paths. */
8f9b4009 943extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
5793b276 944
c6e83800
ZW
945/* Call these to get pointers to the options, callback, and deps
946 structures for a given reader. These pointers are good until you
947 call cpp_finish on that reader. You can either edit the callbacks
7e96d768
NB
948 through the pointer returned from cpp_get_callbacks, or set them
949 with cpp_set_callbacks. */
6cf87ca4 950extern cpp_options *cpp_get_options (cpp_reader *);
6cf87ca4
ZW
951extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
952extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
c6e83800 953extern struct deps *cpp_get_deps (cpp_reader *);
7e96d768 954
8e9ea4d7
PB
955/* This function reads the file, but does not start preprocessing. It
956 returns the name of the original file; this is the same as the
957 input file, except for preprocessed input. This will generate at
958 least one file change callback, and possibly a line change callback
9ac97460 959 too. If there was an error opening the file, it returns NULL. */
8e9ea4d7 960extern const char *cpp_read_main_file (cpp_reader *, const char *);
f5e99456 961
ccfc4c91
OW
962/* Set up built-ins with special behavior. Use cpp_init_builtins()
963 instead unless your know what you are doing. */
964extern void cpp_init_special_builtins (cpp_reader *);
965
c1bad961 966/* Set up built-ins like __FILE__. */
6cf87ca4 967extern void cpp_init_builtins (cpp_reader *, int);
f5e99456 968
4169c321 969/* This is called after options have been parsed, and partially
59e4e217 970 processed. */
4169c321
PB
971extern void cpp_post_options (cpp_reader *);
972
e6cc3a24
ZW
973/* Set up translation to the target character set. */
974extern void cpp_init_iconv (cpp_reader *);
975
f4ff5a69
NB
976/* Call this to finish preprocessing. If you requested dependency
977 generation, pass an open stream to write the information to,
148e4216
JM
978 otherwise NULL. It is your responsibility to close the stream. */
979extern void cpp_finish (cpp_reader *, FILE *deps_stream);
f4ff5a69 980
f5e99456 981/* Call this to release the handle at the end of preprocessing. Any
148e4216 982 use of the handle after this function returns is invalid. */
6cf87ca4 983extern void cpp_destroy (cpp_reader *);
f5e99456 984
6cf87ca4
ZW
985extern unsigned int cpp_token_len (const cpp_token *);
986extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
987extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
47e20491 988 unsigned char *, bool);
6cf87ca4 989extern void cpp_register_pragma (cpp_reader *, const char *, const char *,
b5b3e36a 990 void (*) (cpp_reader *), bool);
bc4071dd
RH
991extern void cpp_register_deferred_pragma (cpp_reader *, const char *,
992 const char *, unsigned, bool, bool);
6cf87ca4
ZW
993extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
994 const cpp_token *);
995extern const cpp_token *cpp_get_token (cpp_reader *);
5ffeb913
TT
996extern const cpp_token *cpp_get_token_with_location (cpp_reader *,
997 source_location *);
3f6677f4
NS
998inline bool cpp_user_macro_p (const cpp_hashnode *node)
999{
a570d97f 1000 return node->type == NT_USER_MACRO;
3f6677f4
NS
1001}
1002inline bool cpp_builtin_macro_p (const cpp_hashnode *node)
1003{
a570d97f 1004 return node->type == NT_BUILTIN_MACRO;
3f6677f4
NS
1005}
1006inline bool cpp_macro_p (const cpp_hashnode *node)
1007{
a570d97f 1008 return node->type & NT_MACRO_MASK;
3f6677f4 1009}
a5a35247 1010
3f6677f4 1011/* Returns true if NODE is a function-like user macro. */
7692e253
NS
1012inline bool cpp_fun_like_macro_p (cpp_hashnode *node)
1013{
1014 return cpp_user_macro_p (node) && node->value.macro->fun_like;
1015}
3f6677f4 1016
6cf87ca4 1017extern const unsigned char *cpp_macro_definition (cpp_reader *,
8e680db5 1018 cpp_hashnode *);
01ada121 1019extern source_location cpp_macro_definition_location (cpp_hashnode *);
6cf87ca4 1020extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
5950c3c9 1021extern const cpp_token *cpp_peek_token (cpp_reader *, int);
041c3194 1022
2c6e3f55 1023/* Evaluate a CPP_*CHAR* token. */
6cf87ca4
ZW
1024extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *,
1025 unsigned int *, int *);
2c6e3f55 1026/* Evaluate a vector of CPP_*STRING* tokens. */
e6cc3a24
ZW
1027extern bool cpp_interpret_string (cpp_reader *,
1028 const cpp_string *, size_t,
b6baa67d 1029 cpp_string *, enum cpp_ttype);
88fa5555
DM
1030extern const char *cpp_interpret_string_ranges (cpp_reader *pfile,
1031 const cpp_string *from,
1032 cpp_string_location_reader *,
1033 size_t count,
1034 cpp_substring_ranges *out,
1035 enum cpp_ttype type);
423e95e2
EC
1036extern bool cpp_interpret_string_notranslate (cpp_reader *,
1037 const cpp_string *, size_t,
b6baa67d 1038 cpp_string *, enum cpp_ttype);
c8a96070 1039
c5ff069d
ZW
1040/* Convert a host character constant to the execution character set. */
1041extern cppchar_t cpp_host_to_exec_charset (cpp_reader *, cppchar_t);
1042
c1bad961 1043/* Used to register macros and assertions, perhaps from the command line.
3d90d290 1044 The text is the same as the command line argument. */
6cf87ca4 1045extern void cpp_define (cpp_reader *, const char *);
28f68625
DF
1046extern void cpp_define_formatted (cpp_reader *pfile,
1047 const char *fmt, ...) ATTRIBUTE_PRINTF_2;
6cf87ca4
ZW
1048extern void cpp_assert (cpp_reader *, const char *);
1049extern void cpp_undef (cpp_reader *, const char *);
1050extern void cpp_unassert (cpp_reader *, const char *);
7f2935c7 1051
800c0e98
NS
1052/* Mark a node as a lazily defined macro. */
1053extern void cpp_define_lazily (cpp_reader *, cpp_hashnode *node, unsigned N);
1054
d1bd0ded
GK
1055/* Undefine all macros and assertions. */
1056extern void cpp_undef_all (cpp_reader *);
1057
6cf87ca4 1058extern cpp_buffer *cpp_push_buffer (cpp_reader *, const unsigned char *,
4dc299fb 1059 size_t, int);
6cf87ca4 1060extern int cpp_defined (cpp_reader *, const unsigned char *, int);
c5a04734 1061
cd7ab83f
NB
1062/* A preprocessing number. Code assumes that any unused high bits of
1063 the double integer are set to zero. */
54da09ee 1064
edf6ddf6 1065/* This type has to be equal to unsigned HOST_WIDE_INT, see
54da09ee 1066 gcc/c-family/c-lex.c. */
edf6ddf6 1067typedef uint64_t cpp_num_part;
cd7ab83f
NB
1068typedef struct cpp_num cpp_num;
1069struct cpp_num
1070{
1071 cpp_num_part high;
1072 cpp_num_part low;
1073 bool unsignedp; /* True if value should be treated as unsigned. */
1074 bool overflow; /* True if the most recent calculation overflowed. */
1075};
1076
1077/* cpplib provides two interfaces for interpretation of preprocessing
1078 numbers.
1079
1080 cpp_classify_number categorizes numeric constants according to
1081 their field (integer, floating point, or invalid), radix (decimal,
1082 octal, hexadecimal), and type suffixes. */
1083
1084#define CPP_N_CATEGORY 0x000F
1085#define CPP_N_INVALID 0x0000
1086#define CPP_N_INTEGER 0x0001
1087#define CPP_N_FLOATING 0x0002
1088
1089#define CPP_N_WIDTH 0x00F0
8204be6c 1090#define CPP_N_SMALL 0x0010 /* int, float, short _Fract/Accum */
ac6b1c67
CF
1091#define CPP_N_MEDIUM 0x0020 /* long, double, long _Fract/_Accum. */
1092#define CPP_N_LARGE 0x0040 /* long long, long double,
1093 long long _Fract/Accum. */
cd7ab83f 1094
c77cd3d1
UB
1095#define CPP_N_WIDTH_MD 0xF0000 /* machine defined. */
1096#define CPP_N_MD_W 0x10000
1097#define CPP_N_MD_Q 0x20000
1098
cd7ab83f
NB
1099#define CPP_N_RADIX 0x0F00
1100#define CPP_N_DECIMAL 0x0100
1101#define CPP_N_HEX 0x0200
1102#define CPP_N_OCTAL 0x0400
f7fd775f 1103#define CPP_N_BINARY 0x0800
cd7ab83f
NB
1104
1105#define CPP_N_UNSIGNED 0x1000 /* Properties. */
1106#define CPP_N_IMAGINARY 0x2000
ad6ed77e 1107#define CPP_N_DFLOAT 0x4000
839a3b8a 1108#define CPP_N_DEFAULT 0x8000
cd7ab83f 1109
ac6b1c67
CF
1110#define CPP_N_FRACT 0x100000 /* Fract types. */
1111#define CPP_N_ACCUM 0x200000 /* Accum types. */
c65699ef
JM
1112#define CPP_N_FLOATN 0x400000 /* _FloatN types. */
1113#define CPP_N_FLOATNX 0x800000 /* _FloatNx types. */
ac6b1c67 1114
3ce4f9e4
ESR
1115#define CPP_N_USERDEF 0x1000000 /* C++0x user-defined literal. */
1116
c65699ef
JM
1117#define CPP_N_WIDTH_FLOATN_NX 0xF0000000 /* _FloatN / _FloatNx value
1118 of N, divided by 16. */
1119#define CPP_FLOATN_SHIFT 24
1120#define CPP_FLOATN_MAX 0xF0
1121
cd7ab83f
NB
1122/* Classify a CPP_NUMBER token. The return value is a combination of
1123 the flags from the above sets. */
3ce4f9e4 1124extern unsigned cpp_classify_number (cpp_reader *, const cpp_token *,
0b2c4be5 1125 const char **, source_location);
3ce4f9e4
ESR
1126
1127/* Return the classification flags for a float suffix. */
a4a0016d
ESR
1128extern unsigned int cpp_interpret_float_suffix (cpp_reader *, const char *,
1129 size_t);
3ce4f9e4
ESR
1130
1131/* Return the classification flags for an int suffix. */
a4a0016d
ESR
1132extern unsigned int cpp_interpret_int_suffix (cpp_reader *, const char *,
1133 size_t);
cd7ab83f
NB
1134
1135/* Evaluate a token classified as category CPP_N_INTEGER. */
6cf87ca4 1136extern cpp_num cpp_interpret_integer (cpp_reader *, const cpp_token *,
3ce4f9e4 1137 unsigned int);
cd7ab83f 1138
ceeedfc1
NB
1139/* Sign extend a number, with PRECISION significant bits and all
1140 others assumed clear, to fill out a cpp_num structure. */
6cf87ca4 1141cpp_num cpp_num_sign_extend (cpp_num, size_t);
ceeedfc1 1142
ebef4e8c 1143/* Output a diagnostic of some kind. */
c24300ba
DM
1144extern bool cpp_error (cpp_reader *, enum cpp_diagnostic_level,
1145 const char *msgid, ...)
ebef4e8c 1146 ATTRIBUTE_PRINTF_3;
c24300ba
DM
1147extern bool cpp_warning (cpp_reader *, enum cpp_warning_reason,
1148 const char *msgid, ...)
87cf0651 1149 ATTRIBUTE_PRINTF_3;
c24300ba
DM
1150extern bool cpp_pedwarning (cpp_reader *, enum cpp_warning_reason,
1151 const char *msgid, ...)
87cf0651 1152 ATTRIBUTE_PRINTF_3;
c24300ba
DM
1153extern bool cpp_warning_syshdr (cpp_reader *, enum cpp_warning_reason reason,
1154 const char *msgid, ...)
87cf0651 1155 ATTRIBUTE_PRINTF_3;
ebef4e8c 1156
6cf87ca4 1157/* Output a diagnostic with "MSGID: " preceding the
ebef4e8c 1158 error string of errno. No location is printed. */
c24300ba
DM
1159extern bool cpp_errno (cpp_reader *, enum cpp_diagnostic_level,
1160 const char *msgid);
46ce03de
JJ
1161/* Similarly, but with "FILENAME: " instead of "MSGID: ", where
1162 the filename is not localized. */
c24300ba
DM
1163extern bool cpp_errno_filename (cpp_reader *, enum cpp_diagnostic_level,
1164 const char *filename, source_location loc);
ebef4e8c
NB
1165
1166/* Same as cpp_error, except additionally specifies a position as a
1167 (translation unit) physical line and physical column. If the line is
1168 zero, then no location is printed. */
c24300ba
DM
1169extern bool cpp_error_with_line (cpp_reader *, enum cpp_diagnostic_level,
1170 source_location, unsigned,
1171 const char *msgid, ...)
87cf0651 1172 ATTRIBUTE_PRINTF_5;
c24300ba
DM
1173extern bool cpp_warning_with_line (cpp_reader *, enum cpp_warning_reason,
1174 source_location, unsigned,
1175 const char *msgid, ...)
87cf0651 1176 ATTRIBUTE_PRINTF_5;
c24300ba
DM
1177extern bool cpp_pedwarning_with_line (cpp_reader *, enum cpp_warning_reason,
1178 source_location, unsigned,
1179 const char *msgid, ...)
87cf0651 1180 ATTRIBUTE_PRINTF_5;
c24300ba
DM
1181extern bool cpp_warning_with_line_syshdr (cpp_reader *, enum cpp_warning_reason,
1182 source_location, unsigned,
1183 const char *msgid, ...)
87cf0651 1184 ATTRIBUTE_PRINTF_5;
f2d5f0cc 1185
c24300ba 1186extern bool cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level,
ac81cf0b
DM
1187 source_location src_loc, const char *msgid, ...)
1188 ATTRIBUTE_PRINTF_4;
1189
c24300ba
DM
1190extern bool cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level,
1191 rich_location *richloc, const char *msgid, ...)
cb18fd07
DM
1192 ATTRIBUTE_PRINTF_4;
1193
28f68625 1194/* In lex.c */
6cf87ca4
ZW
1195extern int cpp_ideq (const cpp_token *, const char *);
1196extern void cpp_output_line (cpp_reader *, FILE *);
5d6342eb
TT
1197extern unsigned char *cpp_output_line_to_string (cpp_reader *,
1198 const unsigned char *);
6cf87ca4 1199extern void cpp_output_token (const cpp_token *, FILE *);
cfc93532 1200extern const char *cpp_type2name (enum cpp_ttype, unsigned char flags);
4268e8bb
NB
1201/* Returns the value of an escape sequence, truncated to the correct
1202 target precision. PSTR points to the input pointer, which is just
1203 after the backslash. LIMIT is how much text we have. WIDE is true
1204 if the escape sequence is part of a wide character constant or
1205 string literal. Handles all relevant diagnostics. */
6cf87ca4
ZW
1206extern cppchar_t cpp_parse_escape (cpp_reader *, const unsigned char ** pstr,
1207 const unsigned char *limit, int wide);
1368ee70 1208
631d0d36
MG
1209/* Structure used to hold a comment block at a given location in the
1210 source code. */
1211
1212typedef struct
1213{
1214 /* Text of the comment including the terminators. */
1215 char *comment;
1216
1217 /* source location for the given comment. */
1218 source_location sloc;
1219} cpp_comment;
1220
1221/* Structure holding all comments for a given cpp_reader. */
1222
1223typedef struct
1224{
1225 /* table of comment entries. */
1226 cpp_comment *entries;
1227
1228 /* number of actual entries entered in the table. */
1229 int count;
1230
1231 /* number of entries allocated currently. */
1232 int allocated;
1233} cpp_comment_table;
1234
1235/* Returns the table of comments encountered by the preprocessor. This
1236 table is only populated when pfile->state.save_comments is true. */
1237extern cpp_comment_table *cpp_get_comments (cpp_reader *);
1238
28f68625 1239/* In hash.c */
2a967f3d
NB
1240
1241/* Lookup an identifier in the hashtable. Puts the identifier in the
1242 table if it is not already there. */
6cf87ca4
ZW
1243extern cpp_hashnode *cpp_lookup (cpp_reader *, const unsigned char *,
1244 unsigned int);
2a967f3d 1245
6cf87ca4
ZW
1246typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *);
1247extern void cpp_forall_identifiers (cpp_reader *, cpp_cb, void *);
926c5678 1248
28f68625 1249/* In macro.c */
6cf87ca4
ZW
1250extern void cpp_scan_nooutput (cpp_reader *);
1251extern int cpp_sys_macro_p (cpp_reader *);
1252extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *,
1253 unsigned int);
6de1e2a9 1254
28f68625 1255/* In files.c */
8f9b4009 1256extern bool cpp_included (cpp_reader *, const char *);
f1e20710 1257extern bool cpp_included_before (cpp_reader *, const char *, source_location);
6cf87ca4 1258extern void cpp_make_system_header (cpp_reader *, int, int);
6cf87ca4 1259extern bool cpp_push_include (cpp_reader *, const char *);
1efcb8c6 1260extern bool cpp_push_default_include (cpp_reader *, const char *);
6cf87ca4 1261extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
94d1613b 1262extern const char *cpp_get_path (struct _cpp_file *);
e3c287c9 1263extern cpp_dir *cpp_get_dir (struct _cpp_file *);
94d1613b
MS
1264extern cpp_buffer *cpp_get_buffer (cpp_reader *);
1265extern struct _cpp_file *cpp_get_file (cpp_buffer *);
1266extern cpp_buffer *cpp_get_prev (cpp_buffer *);
97f6bd40 1267extern void cpp_clear_file_cache (cpp_reader *);
b0699dad 1268
28f68625 1269/* In pch.c */
17211ab5 1270struct save_macro_data;
6cf87ca4
ZW
1271extern int cpp_save_state (cpp_reader *, FILE *);
1272extern int cpp_write_pch_deps (cpp_reader *, FILE *);
1273extern int cpp_write_pch_state (cpp_reader *, FILE *);
1274extern int cpp_valid_state (cpp_reader *, const char *, int);
1275extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **);
1276extern int cpp_read_state (cpp_reader *, const char *, FILE *,
1277 struct save_macro_data *);
17211ab5 1278
e3dfef44
GC
1279/* In lex.c */
1280extern void cpp_force_token_locations (cpp_reader *, source_location *);
1281extern void cpp_stop_forcing_token_locations (cpp_reader *);
1282
3ce4f9e4
ESR
1283/* In expr.c */
1284extern enum cpp_ttype cpp_userdef_string_remove_type
1285 (enum cpp_ttype type);
1286extern enum cpp_ttype cpp_userdef_string_add_type
1287 (enum cpp_ttype type);
1288extern enum cpp_ttype cpp_userdef_char_remove_type
1289 (enum cpp_ttype type);
1290extern enum cpp_ttype cpp_userdef_char_add_type
1291 (enum cpp_ttype type);
1292extern bool cpp_userdef_string_p
1293 (enum cpp_ttype type);
1294extern bool cpp_userdef_char_p
1295 (enum cpp_ttype type);
1296extern const char * cpp_get_userdef_suffix
1297 (const cpp_token *);
1298
4f4e53dd 1299#endif /* ! LIBCPP_CPPLIB_H */