1 /* Definitions for CPP library.
2 Copyright (C) 1995-2020 Free Software Foundation, Inc.
3 Written by Per Bothner, 1994-95.
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 3, or (at your option) any
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; see the file COPYING3. If not see
17 <http://www.gnu.org/licenses/>.
19 In other words, you are welcome to use, share and improve this program.
20 You are forbidden to forbid anyone else to use, share and improve
21 what you give them. Help stamp out software-hoarding! */
22 #ifndef LIBCPP_CPPLIB_H
23 #define LIBCPP_CPPLIB_H
25 #include <sys/types.h>
29 typedef struct cpp_reader cpp_reader
;
30 typedef struct cpp_buffer cpp_buffer
;
31 typedef struct cpp_options cpp_options
;
32 typedef struct cpp_token cpp_token
;
33 typedef struct cpp_string cpp_string
;
34 typedef struct cpp_hashnode cpp_hashnode
;
35 typedef struct cpp_macro cpp_macro
;
36 typedef struct cpp_callbacks cpp_callbacks
;
37 typedef struct cpp_dir cpp_dir
;
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.
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
47 the same order as their counterparts without the '=', like ">>".
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. */
55 OP(GREATER, ">") /* compare */ \
57 OP(PLUS, "+") /* math */ \
62 OP(AND, "&") /* bit ops */ \
69 OP(AND_AND, "&&") /* logical */ \
73 OP(COMMA, ",") /* grouping */ \
75 OP(CLOSE_PAREN, ")") \
77 OP(EQ_EQ, "==") /* compare */ \
79 OP(GREATER_EQ, ">=") \
81 OP(SPACESHIP, "<=>") \
83 /* These two are unary + / - in preprocessor expressions. */ \
84 OP(PLUS_EQ, "+=") /* math */ \
90 OP(AND_EQ, "&=") /* bit ops */ \
93 OP(RSHIFT_EQ, ">>=") \
94 OP(LSHIFT_EQ, "<<=") \
95 /* Digraphs together, beginning with CPP_FIRST_DIGRAPH. */ \
96 OP(HASH, "#") /* digraphs */ \
98 OP(OPEN_SQUARE, "[") \
99 OP(CLOSE_SQUARE, "]") \
100 OP(OPEN_BRACE, "{") \
101 OP(CLOSE_BRACE, "}") \
102 /* The remainder of the punctuation. Order is not significant. */ \
103 OP(SEMICOLON, ";") /* structure */ \
104 OP(ELLIPSIS, "...") \
105 OP(PLUS_PLUS, "++") /* increment */ \
106 OP(MINUS_MINUS, "--") \
107 OP(DEREF, "->") /* accessors */ \
110 OP(DEREF_STAR, "->*") \
112 OP(ATSIGN, "@") /* used in Objective-C */ \
114 TK(NAME, IDENT) /* word */ \
115 TK(AT_NAME, IDENT) /* @word - Objective-C */ \
116 TK(NUMBER, LITERAL) /* 34_be+ta */ \
118 TK(CHAR, LITERAL) /* 'char' */ \
119 TK(WCHAR, LITERAL) /* L'char' */ \
120 TK(CHAR16, LITERAL) /* u'char' */ \
121 TK(CHAR32, LITERAL) /* U'char' */ \
122 TK(UTF8CHAR, LITERAL) /* u8'char' */ \
123 TK(OTHER, LITERAL) /* stray punctuation */ \
125 TK(STRING, LITERAL) /* "string" */ \
126 TK(WSTRING, LITERAL) /* L"string" */ \
127 TK(STRING16, LITERAL) /* u"string" */ \
128 TK(STRING32, LITERAL) /* U"string" */ \
129 TK(UTF8STRING, LITERAL) /* u8"string" */ \
130 TK(OBJC_STRING, LITERAL) /* @"string" - Objective-C */ \
131 TK(HEADER_NAME, LITERAL) /* <stdio.h> in #include */ \
133 TK(CHAR_USERDEF, LITERAL) /* 'char'_suffix - C++-0x */ \
134 TK(WCHAR_USERDEF, LITERAL) /* L'char'_suffix - C++-0x */ \
135 TK(CHAR16_USERDEF, LITERAL) /* u'char'_suffix - C++-0x */ \
136 TK(CHAR32_USERDEF, LITERAL) /* U'char'_suffix - C++-0x */ \
137 TK(UTF8CHAR_USERDEF, LITERAL) /* u8'char'_suffix - C++-0x */ \
138 TK(STRING_USERDEF, LITERAL) /* "string"_suffix - C++-0x */ \
139 TK(WSTRING_USERDEF, LITERAL) /* L"string"_suffix - C++-0x */ \
140 TK(STRING16_USERDEF, LITERAL) /* u"string"_suffix - C++-0x */ \
141 TK(STRING32_USERDEF, LITERAL) /* U"string"_suffix - C++-0x */ \
142 TK(UTF8STRING_USERDEF,LITERAL) /* u8"string"_suffix - C++-0x */ \
144 TK(COMMENT, LITERAL) /* Only if output comments. */ \
145 /* SPELL_LITERAL happens to DTRT. */ \
146 TK(MACRO_ARG, NONE) /* Macro argument. */ \
147 TK(PRAGMA, NONE) /* Only for deferred pragmas. */ \
148 TK(PRAGMA_EOL, NONE) /* End-of-line for deferred pragmas. */ \
149 TK(PADDING, NONE) /* Whitespace for -E. */
151 #define OP(e, s) CPP_ ## e,
152 #define TK(e, s) CPP_ ## e,
158 /* A token type for keywords, as opposed to ordinary identifiers. */
161 /* Positions in the table. */
162 CPP_LAST_EQ
= CPP_LSHIFT
,
163 CPP_FIRST_DIGRAPH
= CPP_HASH
,
164 CPP_LAST_PUNCTUATOR
= CPP_ATSIGN
,
165 CPP_LAST_CPP_OP
= CPP_LESS_EQ
170 /* C language kind, used when calling cpp_create_reader. */
171 enum c_lang
{CLK_GNUC89
= 0, CLK_GNUC99
, CLK_GNUC11
, CLK_GNUC17
, CLK_GNUC2X
,
172 CLK_STDC89
, CLK_STDC94
, CLK_STDC99
, CLK_STDC11
, CLK_STDC17
,
174 CLK_GNUCXX
, CLK_CXX98
, CLK_GNUCXX11
, CLK_CXX11
,
175 CLK_GNUCXX14
, CLK_CXX14
, CLK_GNUCXX17
, CLK_CXX17
,
176 CLK_GNUCXX20
, CLK_CXX20
, CLK_ASM
};
178 /* Payload of a NUMBER, STRING, CHAR or COMMENT token. */
179 struct GTY(()) cpp_string
{
181 const unsigned char *text
;
184 /* Flags for the cpp_token structure. */
185 #define PREV_WHITE (1 << 0) /* If whitespace before this token. */
186 #define DIGRAPH (1 << 1) /* If it was a digraph. */
187 #define STRINGIFY_ARG (1 << 2) /* If macro argument to be stringified. */
188 #define PASTE_LEFT (1 << 3) /* If on LHS of a ## operator. */
189 #define NAMED_OP (1 << 4) /* C++ named operators. */
190 #define PREV_FALLTHROUGH (1 << 5) /* On a token preceeded by FALLTHROUGH
192 #define BOL (1 << 6) /* Token at beginning of line. */
193 #define PURE_ZERO (1 << 7) /* Single 0 digit, used by the C++ frontend,
195 #define SP_DIGRAPH (1 << 8) /* # or ## token was a digraph. */
196 #define SP_PREV_WHITE (1 << 9) /* If whitespace before a ##
197 operator, or before this token
198 after a # operator. */
199 #define NO_EXPAND (1 << 10) /* Do not macro-expand this token. */
201 /* Specify which field, if any, of the cpp_token union is used. */
203 enum cpp_token_fld_kind
{
205 CPP_TOKEN_FLD_SOURCE
,
207 CPP_TOKEN_FLD_ARG_NO
,
208 CPP_TOKEN_FLD_TOKEN_NO
,
209 CPP_TOKEN_FLD_PRAGMA
,
213 /* A macro argument in the cpp_token union. */
214 struct GTY(()) cpp_macro_arg
{
215 /* Argument number. */
217 /* The original spelling of the macro argument token. */
219 GTY ((nested_ptr (union tree_node
,
220 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
221 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
225 /* An identifier in the cpp_token union. */
226 struct GTY(()) cpp_identifier
{
227 /* The canonical (UTF-8) spelling of the identifier. */
229 GTY ((nested_ptr (union tree_node
,
230 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
231 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
233 /* The original spelling of the identifier. */
235 GTY ((nested_ptr (union tree_node
,
236 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
237 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
241 /* A preprocessing token. This has been carefully packed and should
242 occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts. */
243 struct GTY(()) cpp_token
{
245 /* Location of first char of token, together with range of full token. */
248 ENUM_BITFIELD(cpp_ttype
) type
: CHAR_BIT
; /* token type */
249 unsigned short flags
; /* flags - see above */
254 struct cpp_identifier
GTY ((tag ("CPP_TOKEN_FLD_NODE"))) node
;
256 /* Inherit padding from this token. */
257 cpp_token
* GTY ((tag ("CPP_TOKEN_FLD_SOURCE"))) source
;
259 /* A string, or number. */
260 struct cpp_string
GTY ((tag ("CPP_TOKEN_FLD_STR"))) str
;
262 /* Argument no. (and original spelling) for a CPP_MACRO_ARG. */
263 struct cpp_macro_arg
GTY ((tag ("CPP_TOKEN_FLD_ARG_NO"))) macro_arg
;
265 /* Original token no. for a CPP_PASTE (from a sequence of
266 consecutive paste tokens in a macro expansion). */
267 unsigned int GTY ((tag ("CPP_TOKEN_FLD_TOKEN_NO"))) token_no
;
269 /* Caller-supplied identifier for a CPP_PRAGMA. */
270 unsigned int GTY ((tag ("CPP_TOKEN_FLD_PRAGMA"))) pragma
;
271 } GTY ((desc ("cpp_token_val_index (&%1)"))) val
;
274 /* Say which field is in use. */
275 extern enum cpp_token_fld_kind
cpp_token_val_index (const cpp_token
*tok
);
277 /* A type wide enough to hold any multibyte source character.
278 cpplib's character constant interpreter requires an unsigned type.
279 Also, a typedef for the signed equivalent.
280 The width of this type is capped at 32 bits; there do exist targets
281 where wchar_t is 64 bits, but only in a non-default mode, and there
282 would be no meaningful interpretation for a wchar_t value greater
283 than 2^32 anyway -- the widest wide-character encoding around is
284 ISO 10646, which stops at 2^31. */
285 #if CHAR_BIT * SIZEOF_INT >= 32
286 # define CPPCHAR_SIGNED_T int
287 #elif CHAR_BIT * SIZEOF_LONG >= 32
288 # define CPPCHAR_SIGNED_T long
290 # error "Cannot find a least-32-bit signed integer type"
292 typedef unsigned CPPCHAR_SIGNED_T cppchar_t
;
293 typedef CPPCHAR_SIGNED_T cppchar_signed_t
;
295 /* Style of header dependencies to generate. */
296 enum cpp_deps_style
{ DEPS_NONE
= 0, DEPS_USER
, DEPS_SYSTEM
};
298 /* The possible normalization levels, from most restrictive to least. */
299 enum cpp_normalize_level
{
304 /* In NFC, except for subsequences where being in NFC would make
305 the identifier invalid. */
306 normalized_identifier_C
,
307 /* Not normalized at all. */
313 CMS_none
, /* A regular source file. */
314 CMS_header
, /* Is a directly-specified header file (eg PCH or
316 CMS_user
, /* Search the user INCLUDE path. */
317 CMS_system
, /* Search the system INCLUDE path. */
320 /* This structure is nested inside struct cpp_reader, and
321 carries all the options visible to the command line. */
324 /* The language we're preprocessing. */
327 /* Nonzero means use extra default include directories for C++. */
328 unsigned char cplusplus
;
330 /* Nonzero means handle cplusplus style comments. */
331 unsigned char cplusplus_comments
;
333 /* Nonzero means define __OBJC__, treat @ as a special token, use
334 the OBJC[PLUS]_INCLUDE_PATH environment variable, and allow
338 /* Nonzero means don't copy comments into the output file. */
339 unsigned char discard_comments
;
341 /* Nonzero means don't copy comments into the output file during
343 unsigned char discard_comments_in_macro_exp
;
345 /* Nonzero means process the ISO trigraph sequences. */
346 unsigned char trigraphs
;
348 /* Nonzero means process the ISO digraph sequences. */
349 unsigned char digraphs
;
351 /* Nonzero means to allow hexadecimal floats and LL suffixes. */
352 unsigned char extended_numbers
;
354 /* Nonzero means process u/U prefix literals (UTF-16/32). */
355 unsigned char uliterals
;
357 /* Nonzero means process u8 prefixed character literals (UTF-8). */
358 unsigned char utf8_char_literals
;
360 /* Nonzero means process r/R raw strings. If this is set, uliterals
361 must be set as well. */
362 unsigned char rliterals
;
364 /* Nonzero means print names of header files (-H). */
365 unsigned char print_include_names
;
367 /* Nonzero means complain about deprecated features. */
368 unsigned char cpp_warn_deprecated
;
370 /* Nonzero means warn if slash-star appears in a comment. */
371 unsigned char warn_comments
;
373 /* Nonzero means to warn about __DATA__, __TIME__ and __TIMESTAMP__ usage. */
374 unsigned char warn_date_time
;
376 /* Nonzero means warn if a user-supplied include directory does not
378 unsigned char warn_missing_include_dirs
;
380 /* Nonzero means warn if there are any trigraphs. */
381 unsigned char warn_trigraphs
;
383 /* Nonzero means warn about multicharacter charconsts. */
384 unsigned char warn_multichar
;
386 /* Nonzero means warn about various incompatibilities with
388 unsigned char cpp_warn_traditional
;
390 /* Nonzero means warn about long long numeric constants. */
391 unsigned char cpp_warn_long_long
;
393 /* Nonzero means warn about text after an #endif (or #else). */
394 unsigned char warn_endif_labels
;
396 /* Nonzero means warn about implicit sign changes owing to integer
398 unsigned char warn_num_sign_change
;
400 /* Zero means don't warn about __VA_ARGS__ usage in c89 pedantic mode.
401 Presumably the usage is protected by the appropriate #ifdef. */
402 unsigned char warn_variadic_macros
;
404 /* Nonzero means warn about builtin macros that are redefined or
405 explicitly undefined. */
406 unsigned char warn_builtin_macro_redefined
;
408 /* Different -Wimplicit-fallthrough= levels. */
409 unsigned char cpp_warn_implicit_fallthrough
;
411 /* Nonzero means we should look for header.gcc files that remap file
415 /* Zero means dollar signs are punctuation. */
416 unsigned char dollars_in_ident
;
418 /* Nonzero means UCNs are accepted in identifiers. */
419 unsigned char extended_identifiers
;
421 /* True if we should warn about dollars in identifiers or numbers
422 for this translation unit. */
423 unsigned char warn_dollars
;
425 /* Nonzero means warn if undefined identifiers are evaluated in an #if. */
426 unsigned char warn_undef
;
428 /* Nonzero means warn if "defined" is encountered in a place other than
430 unsigned char warn_expansion_to_defined
;
432 /* Nonzero means warn of unused macros from the main file. */
433 unsigned char warn_unused_macros
;
435 /* Nonzero for the 1999 C Standard, including corrigenda and amendments. */
438 /* Nonzero if we are conforming to a specific C or C++ standard. */
441 /* Nonzero means give all the error messages the ANSI standard requires. */
442 unsigned char cpp_pedantic
;
444 /* Nonzero means we're looking at already preprocessed code, so don't
445 bother trying to do macro expansion and whatnot. */
446 unsigned char preprocessed
;
448 /* Nonzero means we are going to emit debugging logs during
452 /* Nonzero means we are tracking locations of tokens involved in
453 macro expansion. 1 Means we track the location in degraded mode
454 where we do not track locations of tokens resulting from the
455 expansion of arguments of function-like macro. 2 Means we do
456 track all macro expansions. This last option is the one that
457 consumes the highest amount of memory. */
458 unsigned char track_macro_expansion
;
460 /* Nonzero means handle C++ alternate operator names. */
461 unsigned char operator_names
;
463 /* Nonzero means warn about use of C++ alternate operator names. */
464 unsigned char warn_cxx_operator_names
;
466 /* True for traditional preprocessing. */
467 unsigned char traditional
;
469 /* Nonzero for C++ 2011 Standard user-defined literals. */
470 unsigned char user_literals
;
472 /* Nonzero means warn when a string or character literal is followed by a
473 ud-suffix which does not beging with an underscore. */
474 unsigned char warn_literal_suffix
;
476 /* Nonzero means interpret imaginary, fixed-point, or other gnu extension
477 literal number suffixes as user-defined literal number suffixes. */
478 unsigned char ext_numeric_literals
;
480 /* Nonzero means extended identifiers allow the characters specified
482 unsigned char c11_identifiers
;
484 /* Nonzero for C++ 2014 Standard binary constants. */
485 unsigned char binary_constants
;
487 /* Nonzero for C++ 2014 Standard digit separators. */
488 unsigned char digit_separators
;
490 /* Nonzero for C2X decimal floating-point constants. */
491 unsigned char dfp_constants
;
493 /* Nonzero for C++20 __VA_OPT__ feature. */
494 unsigned char va_opt
;
496 /* Nonzero for the '::' token. */
499 /* Nonzero means tokenize C++20 module directives. */
500 unsigned char module_directives
;
502 /* Holds the name of the target (execution) character set. */
503 const char *narrow_charset
;
505 /* Holds the name of the target wide character set. */
506 const char *wide_charset
;
508 /* Holds the name of the input character set. */
509 const char *input_charset
;
511 /* The minimum permitted level of normalization before a warning
512 is generated. See enum cpp_normalize_level. */
515 /* True to warn about precompiled header files we couldn't use. */
516 bool warn_invalid_pch
;
518 /* True if dependencies should be restored from a precompiled header. */
519 bool restore_pch_deps
;
521 /* True if warn about differences between C90 and C99. */
522 signed char cpp_warn_c90_c99_compat
;
524 /* True if warn about differences between C11 and C2X. */
525 signed char cpp_warn_c11_c2x_compat
;
527 /* True if warn about differences between C++98 and C++11. */
528 bool cpp_warn_cxx11_compat
;
530 /* Dependency generation. */
533 /* Style of header dependencies to generate. */
534 enum cpp_deps_style style
;
536 /* Assume missing files are generated files. */
539 /* Generate phony targets for each dependency apart from the first
543 /* Generate dependency info for modules. */
546 /* If true, no dependency is generated on the main file. */
547 bool ignore_main_file
;
549 /* If true, intend to use the preprocessor output (e.g., for compilation)
550 in addition to the dependency info. */
551 bool need_preprocessor_output
;
554 /* Target-specific features set by the front end or client. */
556 /* Precision for target CPP arithmetic, target characters, target
557 ints and target wide characters, respectively. */
558 size_t precision
, char_precision
, int_precision
, wchar_precision
;
560 /* True means chars (wide chars) are unsigned. */
561 bool unsigned_char
, unsigned_wchar
;
563 /* True if the most significant byte in a word has the lowest
564 address in memory. */
565 bool bytes_big_endian
;
567 /* Nonzero means __STDC__ should have the value 0 in system headers. */
568 unsigned char stdc_0_in_system_headers
;
570 /* True disables tokenization outside of preprocessing directives. */
571 bool directives_only
;
573 /* True enables canonicalization of system header file paths. */
574 bool canonical_system_headers
;
576 /* The maximum depth of the nested #include. */
577 unsigned int max_include_depth
;
579 cpp_main_search main_search
: 8;
582 /* Diagnostic levels. To get a diagnostic without associating a
583 position in the translation unit with it, use cpp_error_with_line
584 with a line number of zero. */
586 enum cpp_diagnostic_level
{
587 /* Warning, an error with -Werror. */
589 /* Same as CPP_DL_WARNING, except it is not suppressed in system headers. */
590 CPP_DL_WARNING_SYSHDR
,
591 /* Warning, an error with -pedantic-errors or -Werror. */
595 /* An internal consistency check failed. Prints "internal error: ",
596 otherwise the same as CPP_DL_ERROR. */
598 /* An informative note following a warning. */
604 /* Warning reason codes. Use a reason code of CPP_W_NONE for unclassified
605 warnings and diagnostics that are not warnings. */
607 enum cpp_warning_reason
{
611 CPP_W_MISSING_INCLUDE_DIRS
,
617 CPP_W_NUM_SIGN_CHANGE
,
618 CPP_W_VARIADIC_MACROS
,
619 CPP_W_BUILTIN_MACRO_REDEFINED
,
623 CPP_W_CXX_OPERATOR_NAMES
,
626 CPP_W_WARNING_DIRECTIVE
,
627 CPP_W_LITERAL_SUFFIX
,
630 CPP_W_C90_C99_COMPAT
,
631 CPP_W_C11_C2X_COMPAT
,
633 CPP_W_EXPANSION_TO_DEFINED
636 /* Callback for header lookup for HEADER, which is the name of a
637 source file. It is used as a method of last resort to find headers
638 that are not otherwise found during the normal include processing.
639 The return value is the malloced name of a header to try and open,
640 if any, or NULL otherwise. This callback is called only if the
641 header is otherwise unfound. */
642 typedef const char *(*missing_header_cb
)(cpp_reader
*, const char *header
, cpp_dir
**);
644 /* Call backs to cpplib client. */
647 /* Called when a new line of preprocessed output is started. */
648 void (*line_change
) (cpp_reader
*, const cpp_token
*, int);
650 /* Called when switching to/from a new file.
651 The line_map is for the new file. It is NULL if there is no new file.
652 (In C this happens when done with <built-in>+<command line> and also
653 when done with a main file.) This can be used for resource cleanup. */
654 void (*file_change
) (cpp_reader
*, const line_map_ordinary
*);
656 void (*dir_change
) (cpp_reader
*, const char *);
657 void (*include
) (cpp_reader
*, location_t
, const unsigned char *,
658 const char *, int, const cpp_token
**);
659 void (*define
) (cpp_reader
*, location_t
, cpp_hashnode
*);
660 void (*undef
) (cpp_reader
*, location_t
, cpp_hashnode
*);
661 void (*ident
) (cpp_reader
*, location_t
, const cpp_string
*);
662 void (*def_pragma
) (cpp_reader
*, location_t
);
663 int (*valid_pch
) (cpp_reader
*, const char *, int);
664 void (*read_pch
) (cpp_reader
*, const char *, int, const char *);
665 missing_header_cb missing_header
;
667 /* Context-sensitive macro support. Returns macro (if any) that should
669 cpp_hashnode
* (*macro_to_expand
) (cpp_reader
*, const cpp_token
*);
671 /* Called to emit a diagnostic. This callback receives the
672 translated message. */
673 bool (*diagnostic
) (cpp_reader
*,
674 enum cpp_diagnostic_level
,
675 enum cpp_warning_reason
,
677 const char *, va_list *)
678 ATTRIBUTE_FPTR_PRINTF(5,0);
680 /* Callbacks for when a macro is expanded, or tested (whether
681 defined or not at the time) in #ifdef, #ifndef or "defined". */
682 void (*used_define
) (cpp_reader
*, location_t
, cpp_hashnode
*);
683 void (*used_undef
) (cpp_reader
*, location_t
, cpp_hashnode
*);
684 /* Called before #define and #undef or other macro definition
685 changes are processed. */
686 void (*before_define
) (cpp_reader
*);
687 /* Called whenever a macro is expanded or tested.
688 Second argument is the location of the start of the current expansion. */
689 void (*used
) (cpp_reader
*, location_t
, cpp_hashnode
*);
691 /* Callback to identify whether an attribute exists. */
692 int (*has_attribute
) (cpp_reader
*, bool);
694 /* Callback to determine whether a built-in function is recognized. */
695 int (*has_builtin
) (cpp_reader
*);
697 /* Callback that can change a user lazy into normal macro. */
698 void (*user_lazy_macro
) (cpp_reader
*, cpp_macro
*, unsigned);
700 /* Callback to handle deferred cpp_macros. */
701 cpp_macro
*(*user_deferred_macro
) (cpp_reader
*, location_t
, cpp_hashnode
*);
703 /* Callback to parse SOURCE_DATE_EPOCH from environment. */
704 time_t (*get_source_date_epoch
) (cpp_reader
*);
706 /* Callback for providing suggestions for misspelled directives. */
707 const char *(*get_suggestion
) (cpp_reader
*, const char *, const char *const *);
709 /* Callback for when a comment is encountered, giving the location
710 of the opening slash, a pointer to the content (which is not
711 necessarily 0-terminated), and the length of the content.
712 The content contains the opening slash-star (or slash-slash),
713 and for C-style comments contains the closing star-slash. For
714 C++-style comments it does not include the terminating newline. */
715 void (*comment
) (cpp_reader
*, location_t
, const unsigned char *,
718 /* Callback for filename remapping in __FILE__ and __BASE_FILE__ macro
720 const char *(*remap_filename
) (const char*);
722 /* Maybe translate a #include into something else. Return a
723 cpp_buffer containing the translation if translating. */
724 char *(*translate_include
) (cpp_reader
*, line_maps
*, location_t
,
729 #define INO_T_CPP ino_t ino[3]
731 #define INO_T_CPP ino_t ino
734 /* Chain of directories to look for include files in. */
737 /* NULL-terminated singly-linked list. */
738 struct cpp_dir
*next
;
740 /* NAME of the directory, NUL-terminated. */
744 /* One if a system header, two if a system header that has extern
745 "C" guards for C++. */
748 /* Is this a user-supplied directory? */
749 bool user_supplied_p
;
751 /* The canonicalized NAME as determined by lrealpath. This field
752 is only used by hosts that lack reliable inode numbers. */
753 char *canonical_name
;
755 /* Mapping of file names for this directory for MS-DOS and related
756 platforms. A NULL-terminated array of (from, to) pairs. */
757 const char **name_map
;
759 /* Routine to construct pathname, given the search path name and the
760 HEADER we are trying to find, return a constructed pathname to
761 try and open. If this is NULL, the constructed pathname is as
762 constructed by append_file_to_dir. */
763 char *(*construct
) (const char *header
, cpp_dir
*dir
);
765 /* The C front end uses these to recognize duplicated
766 directories in the search path. */
771 /* The kind of the cpp_macro. */
772 enum cpp_macro_kind
{
773 cmk_macro
, /* An ISO macro (token expansion). */
774 cmk_assert
, /* An assertion. */
775 cmk_traditional
/* A traditional macro (text expansion). */
778 /* Each macro definition is recorded in a cpp_macro structure.
779 Variadic macros cannot occur with traditional cpp. */
780 struct GTY(()) cpp_macro
{
783 /* Parameters, if any. If parameter names use extended identifiers,
784 the original spelling of those identifiers, not the canonical
785 UTF-8 spelling, goes here. */
786 cpp_hashnode
** GTY ((tag ("false"),
787 nested_ptr (union tree_node
,
788 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
789 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL"),
790 length ("%1.paramc"))) params
;
792 /* If this is an assertion, the next one in the chain. */
793 cpp_macro
*GTY ((tag ("true"))) next
;
794 } GTY ((desc ("%1.kind == cmk_assert"))) parm
;
796 /* Definition line number. */
799 /* Number of tokens in body, or bytes for traditional macros. */
800 /* Do we really need 2^32-1 range here? */
803 /* Number of parameters. */
804 unsigned short paramc
;
806 /* Non-zero if this is a user-lazy macro, value provided by user. */
809 /* The kind of this macro (ISO, trad or assert) */
812 /* If a function-like macro. */
813 unsigned int fun_like
: 1;
815 /* If a variadic macro. */
816 unsigned int variadic
: 1;
818 /* If macro defined in system header. */
819 unsigned int syshdr
: 1;
821 /* Nonzero if it has been expanded or had its existence tested. */
822 unsigned int used
: 1;
824 /* Indicate whether the tokens include extra CPP_PASTE tokens at the
825 end to track invalid redefinitions with consecutive CPP_PASTE
827 unsigned int extra_tokens
: 1;
829 /* 1 bits spare (32-bit). 33 on 64-bit target. */
833 /* Trailing array of replacement tokens (ISO), or assertion body value. */
834 cpp_token
GTY ((tag ("false"), length ("%1.count"))) tokens
[1];
836 /* Pointer to replacement text (traditional). See comment at top
837 of cpptrad.c for how traditional function-like macros are
839 const unsigned char *GTY ((tag ("true"))) text
;
840 } GTY ((desc ("%1.kind == cmk_traditional"))) exp
;
843 /* Poisoned identifiers are flagged NODE_POISONED. NODE_OPERATOR (C++
844 only) indicates an identifier that behaves like an operator such as
845 "xor". NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
846 diagnostic may be required for this node. Currently this only
847 applies to __VA_ARGS__, poisoned identifiers, and -Wc++-compat
848 warnings about NODE_OPERATOR. */
850 /* Hash node flags. */
851 #define NODE_OPERATOR (1 << 0) /* C++ named operator. */
852 #define NODE_POISONED (1 << 1) /* Poisoned identifier. */
853 #define NODE_DIAGNOSTIC (1 << 2) /* Possible diagnostic when lexed. */
854 #define NODE_WARN (1 << 3) /* Warn if redefined or undefined. */
855 #define NODE_DISABLED (1 << 4) /* A disabled macro. */
856 #define NODE_USED (1 << 5) /* Dumped with -dU. */
857 #define NODE_CONDITIONAL (1 << 6) /* Conditional macro */
858 #define NODE_WARN_OPERATOR (1 << 7) /* Warn about C++ named operator. */
859 #define NODE_MODULE (1 << 8) /* C++-20 module-related name. */
861 /* Different flavors of hash node. */
864 NT_VOID
= 0, /* Maybe an assert? */
865 NT_MACRO_ARG
, /* A macro arg. */
866 NT_USER_MACRO
, /* A user macro. */
867 NT_BUILTIN_MACRO
, /* A builtin macro. */
868 NT_MACRO_MASK
= NT_USER_MACRO
/* Mask for either macro kind. */
871 /* Different flavors of builtin macro. _Pragma is an operator, but we
872 handle it with the builtin code for efficiency reasons. */
873 enum cpp_builtin_type
875 BT_SPECLINE
= 0, /* `__LINE__' */
876 BT_DATE
, /* `__DATE__' */
877 BT_FILE
, /* `__FILE__' */
878 BT_BASE_FILE
, /* `__BASE_FILE__' */
879 BT_INCLUDE_LEVEL
, /* `__INCLUDE_LEVEL__' */
880 BT_TIME
, /* `__TIME__' */
881 BT_STDC
, /* `__STDC__' */
882 BT_PRAGMA
, /* `_Pragma' operator */
883 BT_TIMESTAMP
, /* `__TIMESTAMP__' */
884 BT_COUNTER
, /* `__COUNTER__' */
885 BT_HAS_ATTRIBUTE
, /* `__has_attribute(x)' */
886 BT_HAS_STD_ATTRIBUTE
, /* `__has_c_attribute(x)' */
887 BT_HAS_BUILTIN
, /* `__has_builtin(x)' */
888 BT_HAS_INCLUDE
, /* `__has_include(x)' */
889 BT_HAS_INCLUDE_NEXT
/* `__has_include_next(x)' */
892 #define CPP_HASHNODE(HNODE) ((cpp_hashnode *) (HNODE))
893 #define HT_NODE(NODE) (&(NODE)->ident)
894 #define NODE_LEN(NODE) HT_LEN (HT_NODE (NODE))
895 #define NODE_NAME(NODE) HT_STR (HT_NODE (NODE))
897 /* The common part of an identifier node shared amongst all 3 C front
898 ends. Also used to store CPP identifiers, which are a superset of
899 identifiers in the grammatical sense. */
901 union GTY(()) _cpp_hashnode_value
{
902 /* Assert (maybe NULL) */
903 cpp_macro
* GTY((tag ("NT_VOID"))) answers
;
904 /* Macro (maybe NULL) */
905 cpp_macro
* GTY((tag ("NT_USER_MACRO"))) macro
;
906 /* Code for a builtin macro. */
907 enum cpp_builtin_type
GTY ((tag ("NT_BUILTIN_MACRO"))) builtin
;
908 /* Macro argument index. */
909 unsigned short GTY ((tag ("NT_MACRO_ARG"))) arg_index
;
912 struct GTY(()) cpp_hashnode
{
913 struct ht_identifier ident
;
914 unsigned int is_directive
: 1;
915 unsigned int directive_index
: 7; /* If is_directive,
916 then index into directive table.
917 Otherwise, a NODE_OPERATOR. */
918 unsigned int rid_code
: 8; /* Rid code - for front ends. */
919 unsigned int flags
: 9; /* CPP flags. */
920 ENUM_BITFIELD(node_type
) type
: 2; /* CPP node type. */
924 /* On a 64-bit system there would be 32-bits of padding to the value
925 field. So placing the deferred index here is not costly. */
926 unsigned deferred
; /* Deferred index, (unless zero). */
928 union _cpp_hashnode_value
GTY ((desc ("%1.type"))) value
;
931 /* A class for iterating through the source locations within a
932 string token (before escapes are interpreted, and before
935 class cpp_string_location_reader
{
937 cpp_string_location_reader (location_t src_loc
,
938 line_maps
*line_table
);
940 source_range
get_next ();
944 int m_offset_per_column
;
947 /* A class for storing the source ranges of all of the characters within
948 a string literal, after escapes are interpreted, and after
951 This is not GTY-marked, as instances are intended to be temporary. */
953 class cpp_substring_ranges
956 cpp_substring_ranges ();
957 ~cpp_substring_ranges ();
959 int get_num_ranges () const { return m_num_ranges
; }
960 source_range
get_range (int idx
) const
962 linemap_assert (idx
< m_num_ranges
);
963 return m_ranges
[idx
];
966 void add_range (source_range range
);
967 void add_n_ranges (int num
, cpp_string_location_reader
&loc_reader
);
970 source_range
*m_ranges
;
975 /* Call this first to get a handle to pass to other functions.
977 If you want cpplib to manage its own hashtable, pass in a NULL
978 pointer. Otherwise you should pass in an initialized hash table
979 that cpplib will share; this technique is used by the C front
981 extern cpp_reader
*cpp_create_reader (enum c_lang
, struct ht
*,
984 /* Reset the cpp_reader's line_map. This is only used after reading a
986 extern void cpp_set_line_map (cpp_reader
*, class line_maps
*);
988 /* Call this to change the selected language standard (e.g. because of
989 command line options). */
990 extern void cpp_set_lang (cpp_reader
*, enum c_lang
);
992 /* Set the include paths. */
993 extern void cpp_set_include_chains (cpp_reader
*, cpp_dir
*, cpp_dir
*, int);
995 /* Call these to get pointers to the options, callback, and deps
996 structures for a given reader. These pointers are good until you
997 call cpp_finish on that reader. You can either edit the callbacks
998 through the pointer returned from cpp_get_callbacks, or set them
999 with cpp_set_callbacks. */
1000 extern cpp_options
*cpp_get_options (cpp_reader
*) ATTRIBUTE_PURE
;
1001 extern cpp_callbacks
*cpp_get_callbacks (cpp_reader
*) ATTRIBUTE_PURE
;
1002 extern void cpp_set_callbacks (cpp_reader
*, cpp_callbacks
*);
1003 extern class mkdeps
*cpp_get_deps (cpp_reader
*) ATTRIBUTE_PURE
;
1005 extern const char *cpp_find_header_unit (cpp_reader
*, const char *file
,
1006 bool angle_p
, location_t
);
1008 /* This function reads the file, but does not start preprocessing. It
1009 returns the name of the original file; this is the same as the
1010 input file, except for preprocessed input. This will generate at
1011 least one file change callback, and possibly a line change callback
1012 too. If there was an error opening the file, it returns NULL. */
1013 extern const char *cpp_read_main_file (cpp_reader
*, const char *,
1014 bool injecting
= false);
1015 extern location_t
cpp_main_loc (const cpp_reader
*);
1017 /* Adjust for the main file to be an include. */
1018 extern void cpp_retrofit_as_include (cpp_reader
*);
1020 /* Set up built-ins with special behavior. Use cpp_init_builtins()
1021 instead unless your know what you are doing. */
1022 extern void cpp_init_special_builtins (cpp_reader
*);
1024 /* Set up built-ins like __FILE__. */
1025 extern void cpp_init_builtins (cpp_reader
*, int);
1027 /* This is called after options have been parsed, and partially
1029 extern void cpp_post_options (cpp_reader
*);
1031 /* Set up translation to the target character set. */
1032 extern void cpp_init_iconv (cpp_reader
*);
1034 /* Call this to finish preprocessing. If you requested dependency
1035 generation, pass an open stream to write the information to,
1036 otherwise NULL. It is your responsibility to close the stream. */
1037 extern void cpp_finish (cpp_reader
*, FILE *deps_stream
);
1039 /* Call this to release the handle at the end of preprocessing. Any
1040 use of the handle after this function returns is invalid. */
1041 extern void cpp_destroy (cpp_reader
*);
1043 extern unsigned int cpp_token_len (const cpp_token
*);
1044 extern unsigned char *cpp_token_as_text (cpp_reader
*, const cpp_token
*);
1045 extern unsigned char *cpp_spell_token (cpp_reader
*, const cpp_token
*,
1046 unsigned char *, bool);
1047 extern void cpp_register_pragma (cpp_reader
*, const char *, const char *,
1048 void (*) (cpp_reader
*), bool);
1049 extern void cpp_register_deferred_pragma (cpp_reader
*, const char *,
1050 const char *, unsigned, bool, bool);
1051 extern int cpp_avoid_paste (cpp_reader
*, const cpp_token
*,
1053 extern const cpp_token
*cpp_get_token (cpp_reader
*);
1054 extern const cpp_token
*cpp_get_token_with_location (cpp_reader
*,
1056 inline bool cpp_user_macro_p (const cpp_hashnode
*node
)
1058 return node
->type
== NT_USER_MACRO
;
1060 inline bool cpp_builtin_macro_p (const cpp_hashnode
*node
)
1062 return node
->type
== NT_BUILTIN_MACRO
;
1064 inline bool cpp_macro_p (const cpp_hashnode
*node
)
1066 return node
->type
& NT_MACRO_MASK
;
1068 inline cpp_macro
*cpp_set_deferred_macro (cpp_hashnode
*node
,
1069 cpp_macro
*forced
= NULL
)
1071 cpp_macro
*old
= node
->value
.macro
;
1073 node
->value
.macro
= forced
;
1074 node
->type
= NT_USER_MACRO
;
1075 node
->flags
&= ~NODE_USED
;
1079 cpp_macro
*cpp_get_deferred_macro (cpp_reader
*, cpp_hashnode
*, location_t
);
1081 /* Returns true if NODE is a function-like user macro. */
1082 inline bool cpp_fun_like_macro_p (cpp_hashnode
*node
)
1084 return cpp_user_macro_p (node
) && node
->value
.macro
->fun_like
;
1087 extern const unsigned char *cpp_macro_definition (cpp_reader
*, cpp_hashnode
*);
1088 extern const unsigned char *cpp_macro_definition (cpp_reader
*, cpp_hashnode
*,
1090 inline location_t
cpp_macro_definition_location (cpp_hashnode
*node
)
1092 const cpp_macro
*macro
= node
->value
.macro
;
1093 return macro
? macro
->line
: 0;
1095 /* Return an idempotent time stamp (possibly from SOURCE_DATE_EPOCH). */
1096 enum class CPP_time_kind
1098 FIXED
= -1, /* Fixed time via source epoch. */
1099 DYNAMIC
= -2, /* Dynamic via time(2). */
1100 UNKNOWN
= -3 /* Wibbly wobbly, timey wimey. */
1102 extern CPP_time_kind
cpp_get_date (cpp_reader
*, time_t *);
1104 extern void _cpp_backup_tokens (cpp_reader
*, unsigned int);
1105 extern const cpp_token
*cpp_peek_token (cpp_reader
*, int);
1107 /* Evaluate a CPP_*CHAR* token. */
1108 extern cppchar_t
cpp_interpret_charconst (cpp_reader
*, const cpp_token
*,
1109 unsigned int *, int *);
1110 /* Evaluate a vector of CPP_*STRING* tokens. */
1111 extern bool cpp_interpret_string (cpp_reader
*,
1112 const cpp_string
*, size_t,
1113 cpp_string
*, enum cpp_ttype
);
1114 extern const char *cpp_interpret_string_ranges (cpp_reader
*pfile
,
1115 const cpp_string
*from
,
1116 cpp_string_location_reader
*,
1118 cpp_substring_ranges
*out
,
1119 enum cpp_ttype type
);
1120 extern bool cpp_interpret_string_notranslate (cpp_reader
*,
1121 const cpp_string
*, size_t,
1122 cpp_string
*, enum cpp_ttype
);
1124 /* Convert a host character constant to the execution character set. */
1125 extern cppchar_t
cpp_host_to_exec_charset (cpp_reader
*, cppchar_t
);
1127 /* Used to register macros and assertions, perhaps from the command line.
1128 The text is the same as the command line argument. */
1129 extern void cpp_define (cpp_reader
*, const char *);
1130 extern void cpp_define_unused (cpp_reader
*, const char *);
1131 extern void cpp_define_formatted (cpp_reader
*pfile
,
1132 const char *fmt
, ...) ATTRIBUTE_PRINTF_2
;
1133 extern void cpp_define_formatted_unused (cpp_reader
*pfile
,
1135 ...) ATTRIBUTE_PRINTF_2
;
1136 extern void cpp_assert (cpp_reader
*, const char *);
1137 extern void cpp_undef (cpp_reader
*, const char *);
1138 extern void cpp_unassert (cpp_reader
*, const char *);
1140 /* Mark a node as a lazily defined macro. */
1141 extern void cpp_define_lazily (cpp_reader
*, cpp_hashnode
*node
, unsigned N
);
1143 /* Undefine all macros and assertions. */
1144 extern void cpp_undef_all (cpp_reader
*);
1146 extern cpp_buffer
*cpp_push_buffer (cpp_reader
*, const unsigned char *,
1148 extern int cpp_defined (cpp_reader
*, const unsigned char *, int);
1150 /* A preprocessing number. Code assumes that any unused high bits of
1151 the double integer are set to zero. */
1153 /* This type has to be equal to unsigned HOST_WIDE_INT, see
1154 gcc/c-family/c-lex.c. */
1155 typedef uint64_t cpp_num_part
;
1156 typedef struct cpp_num cpp_num
;
1161 bool unsignedp
; /* True if value should be treated as unsigned. */
1162 bool overflow
; /* True if the most recent calculation overflowed. */
1165 /* cpplib provides two interfaces for interpretation of preprocessing
1168 cpp_classify_number categorizes numeric constants according to
1169 their field (integer, floating point, or invalid), radix (decimal,
1170 octal, hexadecimal), and type suffixes. */
1172 #define CPP_N_CATEGORY 0x000F
1173 #define CPP_N_INVALID 0x0000
1174 #define CPP_N_INTEGER 0x0001
1175 #define CPP_N_FLOATING 0x0002
1177 #define CPP_N_WIDTH 0x00F0
1178 #define CPP_N_SMALL 0x0010 /* int, float, short _Fract/Accum */
1179 #define CPP_N_MEDIUM 0x0020 /* long, double, long _Fract/_Accum. */
1180 #define CPP_N_LARGE 0x0040 /* long long, long double,
1181 long long _Fract/Accum. */
1183 #define CPP_N_WIDTH_MD 0xF0000 /* machine defined. */
1184 #define CPP_N_MD_W 0x10000
1185 #define CPP_N_MD_Q 0x20000
1187 #define CPP_N_RADIX 0x0F00
1188 #define CPP_N_DECIMAL 0x0100
1189 #define CPP_N_HEX 0x0200
1190 #define CPP_N_OCTAL 0x0400
1191 #define CPP_N_BINARY 0x0800
1193 #define CPP_N_UNSIGNED 0x1000 /* Properties. */
1194 #define CPP_N_IMAGINARY 0x2000
1195 #define CPP_N_DFLOAT 0x4000
1196 #define CPP_N_DEFAULT 0x8000
1198 #define CPP_N_FRACT 0x100000 /* Fract types. */
1199 #define CPP_N_ACCUM 0x200000 /* Accum types. */
1200 #define CPP_N_FLOATN 0x400000 /* _FloatN types. */
1201 #define CPP_N_FLOATNX 0x800000 /* _FloatNx types. */
1203 #define CPP_N_USERDEF 0x1000000 /* C++0x user-defined literal. */
1205 #define CPP_N_WIDTH_FLOATN_NX 0xF0000000 /* _FloatN / _FloatNx value
1206 of N, divided by 16. */
1207 #define CPP_FLOATN_SHIFT 24
1208 #define CPP_FLOATN_MAX 0xF0
1210 /* Classify a CPP_NUMBER token. The return value is a combination of
1211 the flags from the above sets. */
1212 extern unsigned cpp_classify_number (cpp_reader
*, const cpp_token
*,
1213 const char **, location_t
);
1215 /* Return the classification flags for a float suffix. */
1216 extern unsigned int cpp_interpret_float_suffix (cpp_reader
*, const char *,
1219 /* Return the classification flags for an int suffix. */
1220 extern unsigned int cpp_interpret_int_suffix (cpp_reader
*, const char *,
1223 /* Evaluate a token classified as category CPP_N_INTEGER. */
1224 extern cpp_num
cpp_interpret_integer (cpp_reader
*, const cpp_token
*,
1227 /* Sign extend a number, with PRECISION significant bits and all
1228 others assumed clear, to fill out a cpp_num structure. */
1229 cpp_num
cpp_num_sign_extend (cpp_num
, size_t);
1231 /* Output a diagnostic of some kind. */
1232 extern bool cpp_error (cpp_reader
*, enum cpp_diagnostic_level
,
1233 const char *msgid
, ...)
1235 extern bool cpp_warning (cpp_reader
*, enum cpp_warning_reason
,
1236 const char *msgid
, ...)
1238 extern bool cpp_pedwarning (cpp_reader
*, enum cpp_warning_reason
,
1239 const char *msgid
, ...)
1241 extern bool cpp_warning_syshdr (cpp_reader
*, enum cpp_warning_reason reason
,
1242 const char *msgid
, ...)
1245 /* Output a diagnostic with "MSGID: " preceding the
1246 error string of errno. No location is printed. */
1247 extern bool cpp_errno (cpp_reader
*, enum cpp_diagnostic_level
,
1249 /* Similarly, but with "FILENAME: " instead of "MSGID: ", where
1250 the filename is not localized. */
1251 extern bool cpp_errno_filename (cpp_reader
*, enum cpp_diagnostic_level
,
1252 const char *filename
, location_t loc
);
1254 /* Same as cpp_error, except additionally specifies a position as a
1255 (translation unit) physical line and physical column. If the line is
1256 zero, then no location is printed. */
1257 extern bool cpp_error_with_line (cpp_reader
*, enum cpp_diagnostic_level
,
1258 location_t
, unsigned,
1259 const char *msgid
, ...)
1261 extern bool cpp_warning_with_line (cpp_reader
*, enum cpp_warning_reason
,
1262 location_t
, unsigned,
1263 const char *msgid
, ...)
1265 extern bool cpp_pedwarning_with_line (cpp_reader
*, enum cpp_warning_reason
,
1266 location_t
, unsigned,
1267 const char *msgid
, ...)
1269 extern bool cpp_warning_with_line_syshdr (cpp_reader
*, enum cpp_warning_reason
,
1270 location_t
, unsigned,
1271 const char *msgid
, ...)
1274 extern bool cpp_error_at (cpp_reader
* pfile
, enum cpp_diagnostic_level
,
1275 location_t src_loc
, const char *msgid
, ...)
1278 extern bool cpp_error_at (cpp_reader
* pfile
, enum cpp_diagnostic_level
,
1279 rich_location
*richloc
, const char *msgid
, ...)
1283 extern int cpp_ideq (const cpp_token
*, const char *);
1284 extern void cpp_output_line (cpp_reader
*, FILE *);
1285 extern unsigned char *cpp_output_line_to_string (cpp_reader
*,
1286 const unsigned char *);
1287 extern const unsigned char *cpp_alloc_token_string
1288 (cpp_reader
*, const unsigned char *, unsigned);
1289 extern void cpp_output_token (const cpp_token
*, FILE *);
1290 extern const char *cpp_type2name (enum cpp_ttype
, unsigned char flags
);
1291 /* Returns the value of an escape sequence, truncated to the correct
1292 target precision. PSTR points to the input pointer, which is just
1293 after the backslash. LIMIT is how much text we have. WIDE is true
1294 if the escape sequence is part of a wide character constant or
1295 string literal. Handles all relevant diagnostics. */
1296 extern cppchar_t
cpp_parse_escape (cpp_reader
*, const unsigned char ** pstr
,
1297 const unsigned char *limit
, int wide
);
1299 /* Structure used to hold a comment block at a given location in the
1304 /* Text of the comment including the terminators. */
1307 /* source location for the given comment. */
1311 /* Structure holding all comments for a given cpp_reader. */
1315 /* table of comment entries. */
1316 cpp_comment
*entries
;
1318 /* number of actual entries entered in the table. */
1321 /* number of entries allocated currently. */
1323 } cpp_comment_table
;
1325 /* Returns the table of comments encountered by the preprocessor. This
1326 table is only populated when pfile->state.save_comments is true. */
1327 extern cpp_comment_table
*cpp_get_comments (cpp_reader
*);
1331 /* Lookup an identifier in the hashtable. Puts the identifier in the
1332 table if it is not already there. */
1333 extern cpp_hashnode
*cpp_lookup (cpp_reader
*, const unsigned char *,
1336 typedef int (*cpp_cb
) (cpp_reader
*, cpp_hashnode
*, void *);
1337 extern void cpp_forall_identifiers (cpp_reader
*, cpp_cb
, void *);
1340 extern void cpp_scan_nooutput (cpp_reader
*);
1341 extern int cpp_sys_macro_p (cpp_reader
*);
1342 extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *,
1344 extern bool cpp_compare_macros (const cpp_macro
*macro1
,
1345 const cpp_macro
*macro2
);
1348 extern bool cpp_included (cpp_reader
*, const char *);
1349 extern bool cpp_included_before (cpp_reader
*, const char *, location_t
);
1350 extern void cpp_make_system_header (cpp_reader
*, int, int);
1351 extern bool cpp_push_include (cpp_reader
*, const char *);
1352 extern bool cpp_push_default_include (cpp_reader
*, const char *);
1353 extern void cpp_change_file (cpp_reader
*, enum lc_reason
, const char *);
1354 extern const char *cpp_get_path (struct _cpp_file
*);
1355 extern cpp_dir
*cpp_get_dir (struct _cpp_file
*);
1356 extern cpp_buffer
*cpp_get_buffer (cpp_reader
*);
1357 extern struct _cpp_file
*cpp_get_file (cpp_buffer
*);
1358 extern cpp_buffer
*cpp_get_prev (cpp_buffer
*);
1359 extern void cpp_clear_file_cache (cpp_reader
*);
1362 struct save_macro_data
;
1363 extern int cpp_save_state (cpp_reader
*, FILE *);
1364 extern int cpp_write_pch_deps (cpp_reader
*, FILE *);
1365 extern int cpp_write_pch_state (cpp_reader
*, FILE *);
1366 extern int cpp_valid_state (cpp_reader
*, const char *, int);
1367 extern void cpp_prepare_state (cpp_reader
*, struct save_macro_data
**);
1368 extern int cpp_read_state (cpp_reader
*, const char *, FILE *,
1369 struct save_macro_data
*);
1372 extern void cpp_force_token_locations (cpp_reader
*, location_t
);
1373 extern void cpp_stop_forcing_token_locations (cpp_reader
*);
1381 extern void cpp_directive_only_process (cpp_reader
*pfile
,
1383 void (*cb
) (cpp_reader
*,
1388 extern enum cpp_ttype cpp_userdef_string_remove_type
1389 (enum cpp_ttype type
);
1390 extern enum cpp_ttype cpp_userdef_string_add_type
1391 (enum cpp_ttype type
);
1392 extern enum cpp_ttype cpp_userdef_char_remove_type
1393 (enum cpp_ttype type
);
1394 extern enum cpp_ttype cpp_userdef_char_add_type
1395 (enum cpp_ttype type
);
1396 extern bool cpp_userdef_string_p
1397 (enum cpp_ttype type
);
1398 extern bool cpp_userdef_char_p
1399 (enum cpp_ttype type
);
1400 extern const char * cpp_get_userdef_suffix
1401 (const cpp_token
*);
1405 /* A class to manage the state while converting a UTF-8 sequence to cppchar_t
1406 and computing the display width one character at a time. */
1407 class cpp_display_width_computation
{
1409 cpp_display_width_computation (const char *data
, int data_length
,
1411 const char *next_byte () const { return m_next
; }
1412 int bytes_processed () const { return m_next
- m_begin
; }
1413 int bytes_left () const { return m_bytes_left
; }
1414 bool done () const { return !bytes_left (); }
1415 int display_cols_processed () const { return m_display_cols
; }
1417 int process_next_codepoint ();
1418 int advance_display_cols (int n
);
1421 const char *const m_begin
;
1423 size_t m_bytes_left
;
1424 const int m_tabstop
;
1428 /* Convenience functions that are simple use cases for class
1429 cpp_display_width_computation. Tab characters will be expanded to spaces
1430 as determined by TABSTOP. */
1431 int cpp_byte_column_to_display_column (const char *data
, int data_length
,
1432 int column
, int tabstop
);
1433 inline int cpp_display_width (const char *data
, int data_length
,
1436 return cpp_byte_column_to_display_column (data
, data_length
, data_length
,
1439 int cpp_display_column_to_byte_column (const char *data
, int data_length
,
1440 int display_col
, int tabstop
);
1441 int cpp_wcwidth (cppchar_t c
);
1443 #endif /* ! LIBCPP_CPPLIB_H */