]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/internal.h
Update copyright years.
[thirdparty/gcc.git] / libcpp / internal.h
CommitLineData
88ae23e7 1/* Part of CPP library.
83ffe9cd 2 Copyright (C) 1997-2023 Free Software Foundation, Inc.
4283012f
JL
3
4This program is free software; you can redistribute it and/or modify it
5under the terms of the GNU General Public License as published by the
748086b7 6Free Software Foundation; either version 3, or (at your option) any
4283012f
JL
7later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
748086b7
JJ
15along with this program; see the file COPYING3. If not see
16<http://www.gnu.org/licenses/>. */
4283012f 17
88ae23e7 18/* This header defines all the internal data structures and functions
4f4e53dd
PB
19 that need to be visible across files. It should not be used outside
20 cpplib. */
88ae23e7 21
4f4e53dd
PB
22#ifndef LIBCPP_INTERNAL_H
23#define LIBCPP_INTERNAL_H
bb52fa7f 24
4f4e53dd 25#include "symtab.h"
abcd1775 26#include "cpplib.h"
2a967f3d 27
968e08d6 28#if HAVE_ICONV
e6cc3a24
ZW
29#include <iconv.h>
30#else
31#define HAVE_ICONV 0
32typedef int iconv_t; /* dummy */
33#endif
34
4851089f
ILT
35#ifdef __cplusplus
36extern "C" {
37#endif
38
2a967f3d 39struct directive; /* Deliberately incomplete. */
af0d16cd 40struct pending_option;
87ed109f 41struct op;
a8016863 42struct _cpp_strbuf;
6b88314c
ZW
43
44typedef bool (*convert_f) (iconv_t, const unsigned char *, size_t,
a8016863 45 struct _cpp_strbuf *);
6b88314c
ZW
46struct cset_converter
47{
48 convert_f func;
49 iconv_t cd;
b6baa67d 50 int width;
eccec868
JM
51 const char* from;
52 const char* to;
6b88314c 53};
8121d2c3 54
4268e8bb
NB
55#define BITS_PER_CPPCHAR_T (CHAR_BIT * sizeof (cppchar_t))
56
93c80368
NB
57/* Test if a sign is valid within a preprocessing number. */
58#define VALID_SIGN(c, prevc) \
59 (((c) == '+' || (c) == '-') && \
60 ((prevc) == 'e' || (prevc) == 'E' \
bdb05a7b
NB
61 || (((prevc) == 'p' || (prevc) == 'P') \
62 && CPP_OPTION (pfile, extended_numbers))))
93c80368 63
7057e645
ESR
64#define DIGIT_SEP(c) ((c) == '\'' && CPP_OPTION (pfile, digit_separators))
65
8121d2c3
NB
66#define CPP_OPTION(PFILE, OPTION) ((PFILE)->opts.OPTION)
67#define CPP_BUFFER(PFILE) ((PFILE)->buffer)
26aea073 68#define CPP_BUF_COLUMN(BUF, CUR) ((CUR) - (BUF)->line_base)
8121d2c3
NB
69#define CPP_BUF_COL(BUF) CPP_BUF_COLUMN(BUF, (BUF)->cur)
70
12f9df4e 71#define CPP_INCREMENT_LINE(PFILE, COLS_HINT) do { \
99b1c316 72 const class line_maps *line_table = PFILE->line_table; \
0e50b624 73 const struct line_map_ordinary *map = \
46427374 74 LINEMAPS_LAST_ORDINARY_MAP (line_table); \
1bb64668 75 linenum_type line = SOURCE_LINE (map, line_table->highest_line); \
500bee0a 76 linemap_line_start (PFILE->line_table, line + 1, COLS_HINT); \
12f9df4e
PB
77 } while (0)
78
c70f6ed3
NB
79/* Host alignment handling. */
80struct dummy
81{
82 char c;
83 union
84 {
85 double d;
86 int *p;
87 } u;
88};
89
90#define DEFAULT_ALIGNMENT offsetof (struct dummy, u)
91#define CPP_ALIGN2(size, align) (((size) + ((align) - 1)) & ~((align) - 1))
92#define CPP_ALIGN(size) CPP_ALIGN2 (size, DEFAULT_ALIGNMENT)
93
3f6677f4
NS
94#define _cpp_mark_macro_used(NODE) \
95 (cpp_user_macro_p (NODE) ? (NODE)->value.macro->used = 1 : 0)
a69cbaac 96
644eddaa 97/* A generic memory buffer, and operations on it. */
b8af0ca5
NB
98typedef struct _cpp_buff _cpp_buff;
99struct _cpp_buff
100{
101 struct _cpp_buff *next;
ece54d54 102 unsigned char *base, *cur, *limit;
b8af0ca5
NB
103};
104
6cf87ca4
ZW
105extern _cpp_buff *_cpp_get_buff (cpp_reader *, size_t);
106extern void _cpp_release_buff (cpp_reader *, _cpp_buff *);
107extern void _cpp_extend_buff (cpp_reader *, _cpp_buff **, size_t);
108extern _cpp_buff *_cpp_append_extend_buff (cpp_reader *, _cpp_buff *, size_t);
109extern void _cpp_free_buff (_cpp_buff *);
110extern unsigned char *_cpp_aligned_alloc (cpp_reader *, size_t);
111extern unsigned char *_cpp_unaligned_alloc (cpp_reader *, size_t);
644eddaa 112
8c3b2693 113#define BUFF_ROOM(BUFF) (size_t) ((BUFF)->limit - (BUFF)->cur)
ece54d54
NB
114#define BUFF_FRONT(BUFF) ((BUFF)->cur)
115#define BUFF_LIMIT(BUFF) ((BUFF)->limit)
b8af0ca5 116
ba133c96 117/* #include types. */
a0be978a
NS
118enum include_type
119 {
120 /* Directive-based including mechanisms. */
121 IT_INCLUDE, /* #include */
122 IT_INCLUDE_NEXT, /* #include_next */
123 IT_IMPORT, /* #import */
124
125 /* Non-directive including mechanisms. */
126 IT_CMDLINE, /* -include */
127 IT_DEFAULT, /* forced header */
6bf2ff0d 128 IT_MAIN, /* main, start on line 1 */
d1c566d7
NS
129 IT_PRE_MAIN, /* main, but there will be a preamble before line
130 1 */
b0d11f1e
NS
131
132 IT_DIRECTIVE_HWM = IT_IMPORT + 1, /* Directives below this. */
68710ac7 133 IT_HEADER_HWM = IT_DEFAULT + 1 /* Header files below this. */
a0be978a 134 };
ba133c96 135
4ed5bcfb 136union utoken
8121d2c3 137{
4ed5bcfb
NB
138 const cpp_token *token;
139 const cpp_token **ptoken;
8121d2c3
NB
140};
141
5d8ebbd8 142/* A "run" of tokens; part of a chain of runs. */
5fddcffc
NB
143typedef struct tokenrun tokenrun;
144struct tokenrun
145{
bdcbe496 146 tokenrun *next, *prev;
5fddcffc
NB
147 cpp_token *base, *limit;
148};
149
82eda77e 150/* Accessor macros for struct cpp_context. */
79ba5e3b
NB
151#define FIRST(c) ((c)->u.iso.first)
152#define LAST(c) ((c)->u.iso.last)
153#define CUR(c) ((c)->u.trad.cur)
154#define RLIMIT(c) ((c)->u.trad.rlimit)
82eda77e 155
92582b75
TT
156/* This describes some additional data that is added to the macro
157 token context of type cpp_context, when -ftrack-macro-expansion is
158 on. */
159typedef struct
160{
161 /* The node of the macro we are referring to. */
162 cpp_hashnode *macro_node;
163 /* This buffer contains an array of virtual locations. The virtual
164 location at index 0 is the virtual location of the token at index
165 0 in the current instance of cpp_context; similarly for all the
166 other virtual locations. */
620e594b 167 location_t *virt_locs;
92582b75
TT
168 /* This is a pointer to the current virtual location. This is used
169 to iterate over the virtual locations while we iterate over the
170 tokens they belong to. */
620e594b 171 location_t *cur_virt_loc;
92582b75
TT
172} macro_context;
173
174/* The kind of tokens carried by a cpp_context. */
175enum context_tokens_kind {
176 /* This is the value of cpp_context::tokens_kind if u.iso.first
177 contains an instance of cpp_token **. */
178 TOKENS_KIND_INDIRECT,
179 /* This is the value of cpp_context::tokens_kind if u.iso.first
180 contains an instance of cpp_token *. */
181 TOKENS_KIND_DIRECT,
182 /* This is the value of cpp_context::tokens_kind when the token
183 context contains tokens resulting from macro expansion. In that
184 case struct cpp_context::macro points to an instance of struct
185 macro_context. This is used only when the
186 -ftrack-macro-expansion flag is on. */
187 TOKENS_KIND_EXTENDED
188};
189
8121d2c3
NB
190typedef struct cpp_context cpp_context;
191struct cpp_context
192{
193 /* Doubly-linked list. */
194 cpp_context *next, *prev;
195
82eda77e
NB
196 union
197 {
198 /* For ISO macro expansion. Contexts other than the base context
199 are contiguous tokens. e.g. macro expansions, expanded
200 argument tokens. */
201 struct
202 {
203 union utoken first;
204 union utoken last;
205 } iso;
206
207 /* For traditional macro expansion. */
208 struct
209 {
c812785a
RS
210 const unsigned char *cur;
211 const unsigned char *rlimit;
82eda77e
NB
212 } trad;
213 } u;
8121d2c3 214
1e013d2e 215 /* If non-NULL, a buffer used for storage related to this context.
c9e7a609 216 When the context is popped, the buffer is released. */
1e013d2e
NB
217 _cpp_buff *buff;
218
92582b75
TT
219 /* If tokens_kind is TOKEN_KIND_EXTENDED, then (as we thus are in a
220 macro context) this is a pointer to an instance of macro_context.
221 Otherwise if tokens_kind is *not* TOKEN_KIND_EXTENDED, then, if
222 we are in a macro context, this is a pointer to an instance of
223 cpp_hashnode, representing the name of the macro this context is
224 for. If we are not in a macro context, then this is just NULL.
225 Note that when tokens_kind is TOKEN_KIND_EXTENDED, the memory
226 used by the instance of macro_context pointed to by this member
227 is de-allocated upon de-allocation of the instance of struct
228 cpp_context. */
229 union
230 {
231 macro_context *mc;
232 cpp_hashnode *macro;
233 } c;
4ed5bcfb 234
92582b75
TT
235 /* This determines the type of tokens held by this context. */
236 enum context_tokens_kind tokens_kind;
8121d2c3
NB
237};
238
239struct lexer_state
240{
056f95ec
NS
241 /* 1 if we're handling a directive. 2 if it's an include-like
242 directive. */
8121d2c3
NB
243 unsigned char in_directive;
244
a8d0ddaf
ZW
245 /* Nonzero if in a directive that will handle padding tokens itself.
246 #include needs this to avoid problems with computed include and
247 spacing between tokens. */
248 unsigned char directive_wants_padding;
249
cef0d199
NB
250 /* True if we are skipping a failed conditional group. */
251 unsigned char skipping;
252
8121d2c3
NB
253 /* Nonzero if in a directive that takes angle-bracketed headers. */
254 unsigned char angled_headers;
255
d97371e0
NB
256 /* Nonzero if in a #if or #elif directive. */
257 unsigned char in_expression;
258
8121d2c3
NB
259 /* Nonzero to save comments. Turned off if discard_comments, and in
260 all directives apart from #define. */
261 unsigned char save_comments;
262
fb771b9d 263 /* Nonzero if lexing __VA_ARGS__ and __VA_OPT__ are valid. */
8121d2c3
NB
264 unsigned char va_args_ok;
265
266 /* Nonzero if lexing poisoned identifiers is valid. */
267 unsigned char poisoned_ok;
268
269 /* Nonzero to prevent macro expansion. */
df383483 270 unsigned char prevent_expansion;
8121d2c3
NB
271
272 /* Nonzero when parsing arguments to a function-like macro. */
273 unsigned char parsing_args;
87ed109f 274
c6e83800
ZW
275 /* Nonzero if prevent_expansion is true only because output is
276 being discarded. */
277 unsigned char discarding_output;
278
87ed109f
NB
279 /* Nonzero to skip evaluating part of an expression. */
280 unsigned int skip_eval;
bc4071dd 281
7cf3f604 282 /* Nonzero when tokenizing a deferred pragma. */
bc4071dd
RH
283 unsigned char in_deferred_pragma;
284
c9c3d5f2
NS
285 /* Count to token that is a header-name. */
286 unsigned char directive_file_token;
287
bc4071dd
RH
288 /* Nonzero if the deferred pragma being handled allows macro expansion. */
289 unsigned char pragma_allow_expansion;
a6e0d593
JJ
290
291 /* Nonzero if _Pragma should not be interpreted. */
292 unsigned char ignore__Pragma;
8121d2c3
NB
293};
294
295/* Special nodes - identifiers with predefined significance. */
296struct spec_nodes
297{
8121d2c3 298 cpp_hashnode *n_defined; /* defined operator */
037313ae
ZW
299 cpp_hashnode *n_true; /* C++ keyword true */
300 cpp_hashnode *n_false; /* C++ keyword false */
8121d2c3 301 cpp_hashnode *n__VA_ARGS__; /* C99 vararg macros */
fb771b9d 302 cpp_hashnode *n__VA_OPT__; /* C++ vararg macros */
c9c3d5f2
NS
303
304 enum {M_EXPORT, M_MODULE, M_IMPORT, M__IMPORT, M_HWM};
305
306 /* C++20 modules, only set when module_directives is in effect.
307 incoming variants [0], outgoing ones [1] */
308 cpp_hashnode *n_modules[M_HWM][2];
8121d2c3
NB
309};
310
26aea073
NB
311typedef struct _cpp_line_note _cpp_line_note;
312struct _cpp_line_note
313{
314 /* Location in the clean line the note refers to. */
c812785a 315 const unsigned char *pos;
26aea073 316
41c32c98
NB
317 /* Type of note. The 9 'from' trigraph characters represent those
318 trigraphs, '\\' an escaped newline, ' ' an escaped newline with
00a81b8b
JM
319 intervening space, 0 represents a note that has already been handled,
320 and anything else is invalid. */
41c32c98 321 unsigned int type;
26aea073
NB
322};
323
5d8ebbd8 324/* Represents the contents of a file cpplib has read in. */
27e2564a
NB
325struct cpp_buffer
326{
c812785a
RS
327 const unsigned char *cur; /* Current location. */
328 const unsigned char *line_base; /* Start of current physical line. */
329 const unsigned char *next_line; /* Start of to-be-cleaned logical line. */
cf551fba 330
c812785a
RS
331 const unsigned char *buf; /* Entire character buffer. */
332 const unsigned char *rlimit; /* Writable byte at end of file. */
28937f11
JJ
333 const unsigned char *to_free; /* Pointer that should be freed when
334 popping the buffer. */
26aea073 335
c812785a
RS
336 _cpp_line_note *notes; /* Array of notes. */
337 unsigned int cur_note; /* Next note to process. */
338 unsigned int notes_used; /* Number of notes. */
339 unsigned int notes_cap; /* Size of allocated array. */
27e2564a 340
27e2564a
NB
341 struct cpp_buffer *prev;
342
8f9b4009
NB
343 /* Pointer into the file table; non-NULL if this is a file buffer.
344 Used for include_next and to record control macros. */
345 struct _cpp_file *file;
27e2564a 346
be8ac3e2
GZ
347 /* Saved value of __TIMESTAMP__ macro - date and time of last modification
348 of the assotiated file. */
349 const unsigned char *timestamp;
350
27e2564a
NB
351 /* Value of if_stack at start of this file.
352 Used to prohibit unmatched #endif (etc) in an include file. */
353 struct if_stack *if_stack;
354
26aea073 355 /* True if we need to get the next clean line. */
a0be978a 356 bool need_line : 1;
27e2564a
NB
357
358 /* True if we have already warned about C++ comments in this file.
359 The warning happens only for C89 extended mode with -pedantic on,
360 or for -Wtraditional, and only once per file (otherwise it would
361 be far too noisy). */
a0be978a 362 bool warned_cplusplus_comments : 1;
27e2564a
NB
363
364 /* True if we don't process trigraphs and escaped newlines. True
365 for preprocessed input, command line directives, and _Pragma
366 buffers. */
a0be978a 367 bool from_stage3 : 1;
27e2564a 368
22234f56
PB
369 /* At EOF, a buffer is automatically popped. If RETURN_AT_EOF is
370 true, a CPP_EOF token is then returned. Otherwise, the next
371 token from the enclosing buffer is returned. */
a0be978a 372 bool return_at_eof : 1;
ba133c96 373
12f9df4e 374 /* One for a system header, two for a C system header file that therefore
9ac97460 375 needs to be extern "C" protected in C++, and zero otherwise. */
12f9df4e
PB
376 unsigned char sysp;
377
591e15a1
NB
378 /* The directory of the this buffer's file. Its NAME member is not
379 allocated, so we don't need to worry about freeing it. */
8f9b4009 380 struct cpp_dir dir;
004cb263 381
cf551fba
EC
382 /* Descriptor for converting from the input character set to the
383 source character set. */
384 struct cset_converter input_cset_desc;
27e2564a
NB
385};
386
17e7cb85
KT
387/* The list of saved macros by push_macro pragma. */
388struct def_pragma_macro {
389 /* Chain element to previous saved macro. */
390 struct def_pragma_macro *next;
391 /* Name of the macro. */
392 char *name;
393 /* The stored macro content. */
d6874138
KT
394 unsigned char *definition;
395
396 /* Definition line number. */
620e594b 397 location_t line;
d6874138
KT
398 /* If macro defined in system header. */
399 unsigned int syshdr : 1;
400 /* Nonzero if it has been expanded or had its existence tested. */
401 unsigned int used : 1;
402
403 /* Mark if we save an undefined macro. */
404 unsigned int is_undef : 1;
aa23e73b
JJ
405 /* Nonzero if it was a builtin macro. */
406 unsigned int is_builtin : 1;
17e7cb85
KT
407};
408
8121d2c3
NB
409/* A cpp_reader encapsulates the "state" of a pre-processor run.
410 Applying cpp_get_token repeatedly yields a stream of pre-processor
411 tokens. Usually, there is only one cpp_reader object active. */
8121d2c3
NB
412struct cpp_reader
413{
414 /* Top of buffer stack. */
415 cpp_buffer *buffer;
416
d97371e0
NB
417 /* Overlaid buffer (can be different after processing #include). */
418 cpp_buffer *overlaid_buffer;
419
8121d2c3
NB
420 /* Lexer state. */
421 struct lexer_state state;
422
67821e3a 423 /* Source line tracking. */
99b1c316 424 class line_maps *line_table;
1444f2ed 425
50410426 426 /* The line of the '#' of the current directive. */
620e594b 427 location_t directive_line;
8121d2c3 428
b8af0ca5 429 /* Memory buffers. */
8c3b2693 430 _cpp_buff *a_buff; /* Aligned permanent storage. */
ece54d54
NB
431 _cpp_buff *u_buff; /* Unaligned permanent storage. */
432 _cpp_buff *free_buffs; /* Free buffer chain. */
b8af0ca5 433
8121d2c3
NB
434 /* Context stack. */
435 struct cpp_context base_context;
436 struct cpp_context *context;
437
438 /* If in_directive, the directive if known. */
439 const struct directive *directive;
440
21b11495
ZW
441 /* Token generated while handling a directive, if any. */
442 cpp_token directive_result;
443
5ffeb913
TT
444 /* When expanding a macro at top-level, this is the location of the
445 macro invocation. */
620e594b 446 location_t invocation_location;
5ffeb913 447
f8abc9ba
DS
448 /* This is the node representing the macro being expanded at
449 top-level. The value of this data member is valid iff
a0be978a 450 cpp_in_macro_expansion_p() returns TRUE. */
f8abc9ba
DS
451 cpp_hashnode *top_most_macro_node;
452
828a7f76
DS
453 /* Nonzero if we are about to expand a macro. Note that if we are
454 really expanding a macro, the function macro_of_context returns
455 the macro being expanded and this flag is set to false. Client
a0be978a 456 code should use the function cpp_in_macro_expansion_p to know if we
828a7f76
DS
457 are either about to expand a macro, or are actually expanding
458 one. */
459 bool about_to_expand_macro_p;
5ffeb913 460
5793b276 461 /* Search paths for include files. */
8f9b4009
NB
462 struct cpp_dir *quote_include; /* "" */
463 struct cpp_dir *bracket_include; /* <> */
464 struct cpp_dir no_search_path; /* No path. */
465
49634b3a
NB
466 /* Chain of all hashed _cpp_file instances. */
467 struct _cpp_file *all_files;
8f9b4009 468
4dc299fb
PB
469 struct _cpp_file *main_file;
470
8f9b4009 471 /* File and directory hash table. */
bf42e45b 472 struct htab *file_hash;
a23ee064 473 struct htab *dir_hash;
97f6bd40 474 struct file_hash_entry_pool *file_hash_entries;
8f9b4009 475
0b4cafec
ILT
476 /* Negative path lookup hash table. */
477 struct htab *nonexistent_file_hash;
478 struct obstack nonexistent_file_ob;
479
8f9b4009
NB
480 /* Nonzero means don't look for #include "foo" the source-file
481 directory. */
482 bool quote_ignores_source_dir;
483
83a00410 484 /* Nonzero if any file has contained #pragma once or #import has
49634b3a
NB
485 been used. */
486 bool seen_once_only;
5793b276 487
6356f892 488 /* Multiple include optimization. */
8121d2c3
NB
489 const cpp_hashnode *mi_cmacro;
490 const cpp_hashnode *mi_ind_cmacro;
6d18adbc 491 bool mi_valid;
8121d2c3 492
5fddcffc
NB
493 /* Lexing. */
494 cpp_token *cur_token;
495 tokenrun base_run, *cur_run;
bdcbe496 496 unsigned int lookaheads;
5fddcffc 497
da7d8304 498 /* Nonzero prevents the lexer from re-using the token runs. */
5fddcffc
NB
499 unsigned int keep_tokens;
500
8121d2c3
NB
501 /* Buffer to hold macro definition string. */
502 unsigned char *macro_buffer;
503 unsigned int macro_buffer_len;
504
6b88314c
ZW
505 /* Descriptor for converting from the source character set to the
506 execution character set. */
507 struct cset_converter narrow_cset_desc;
e6cc3a24 508
2c6e3f55
JJ
509 /* Descriptor for converting from the source character set to the
510 UTF-8 execution character set. */
511 struct cset_converter utf8_cset_desc;
512
b6baa67d
KVH
513 /* Descriptor for converting from the source character set to the
514 UTF-16 execution character set. */
515 struct cset_converter char16_cset_desc;
516
517 /* Descriptor for converting from the source character set to the
518 UTF-32 execution character set. */
519 struct cset_converter char32_cset_desc;
520
6b88314c
ZW
521 /* Descriptor for converting from the source character set to the
522 wide execution character set. */
523 struct cset_converter wide_cset_desc;
e6cc3a24 524
278c4662 525 /* Date and time text. Calculated together if either is requested. */
c812785a
RS
526 const unsigned char *date;
527 const unsigned char *time;
8121d2c3 528
4b5f564a
NS
529 /* Time stamp, set idempotently lazily. */
530 time_t time_stamp;
531 int time_stamp_kind; /* Or errno. */
174f6622 532
5abe05b4 533 /* A token forcing paste avoidance, and one demarking macro arguments. */
4ed5bcfb 534 cpp_token avoid_paste;
5abe05b4 535 cpp_token endarg;
4ed5bcfb 536
e53b6e56 537 /* Opaque handle to the dependencies of mkdeps.cc. */
99b1c316 538 class mkdeps *deps;
8121d2c3
NB
539
540 /* Obstack holding all macro hash nodes. This never shrinks.
e53b6e56 541 See identifiers.cc */
2a967f3d 542 struct obstack hash_ob;
8121d2c3
NB
543
544 /* Obstack holding buffer and conditional structures. This is a
e53b6e56 545 real stack. See directives.cc. */
2a967f3d 546 struct obstack buffer_ob;
8121d2c3
NB
547
548 /* Pragma table - dynamic, because a library user can add to the
549 list of recognized pragmas. */
550 struct pragma_entry *pragmas;
551
48c4721e 552 /* Call backs to cpplib client. */
8121d2c3
NB
553 struct cpp_callbacks cb;
554
df383483 555 /* Identifier hash table. */
2a967f3d
NB
556 struct ht *hash_table;
557
87ed109f
NB
558 /* Expression parser stack. */
559 struct op *op_stack, *op_limit;
560
8121d2c3
NB
561 /* User visible options. */
562 struct cpp_options opts;
563
564 /* Special nodes - identifiers with predefined significance to the
565 preprocessor. */
566 struct spec_nodes spec_nodes;
567
2a967f3d 568 /* Whether cpplib owns the hashtable. */
8f9b4009 569 bool our_hashtable;
004cb263 570
1a76916c
NB
571 /* Traditional preprocessing output buffer (a logical line). */
572 struct
573 {
c812785a
RS
574 unsigned char *base;
575 unsigned char *limit;
576 unsigned char *cur;
620e594b 577 location_t first_line;
1a76916c
NB
578 } out;
579
e53b6e56 580 /* Used for buffer overlays by traditional.cc. */
c812785a 581 const unsigned char *saved_cur, *saved_rlimit, *saved_line_base;
12f9df4e 582
17211ab5
GK
583 /* A saved list of the defined macros, for dependency checking
584 of precompiled headers. */
585 struct cpp_savedstate *savedstate;
a702045a
OW
586
587 /* Next value of __COUNTER__ macro. */
588 unsigned int counter;
631d0d36
MG
589
590 /* Table of comments, when state.save_comments is true. */
591 cpp_comment_table comments;
17e7cb85
KT
592
593 /* List of saved macros by push_macro. */
594 struct def_pragma_macro *pushed_macros;
e3dfef44 595
f3f6029d 596 /* If non-zero, the lexer will use this location for the next token
e3dfef44 597 instead of getting a location from the linemap. */
620e594b 598 location_t forced_token_location;
9844497a
NS
599
600 /* Location identifying the main source file -- intended to be line
601 zero of said file. */
602 location_t main_loc;
51c50026
MP
603
604 /* Returns true iff we should warn about UTF-8 bidirectional control
605 characters. */
606 bool warn_bidi_p () const
607 {
ae36f839
MP
608 return (CPP_OPTION (this, cpp_warn_bidirectional)
609 & (bidirectional_unpaired|bidirectional_any));
51c50026 610 }
8121d2c3
NB
611};
612
f6bbde28 613/* Character classes. Based on the more primitive macros in safe-ctype.h.
88ae23e7 614 If the definition of `numchar' looks odd to you, please look up the
91fcd158
NB
615 definition of a pp-number in the C standard [section 6.4.8 of C99].
616
617 In the unlikely event that characters other than \r and \n enter
e53b6e56 618 the set is_vspace, the macro handle_newline() in lex.cc must be
91fcd158 619 updated. */
ae79697b 620#define _dollar_ok(x) ((x) == '$' && CPP_OPTION (pfile, dollars_in_ident))
88ae23e7 621
f6bbde28
ZW
622#define is_idchar(x) (ISIDNUM(x) || _dollar_ok(x))
623#define is_numchar(x) ISIDNUM(x)
624#define is_idstart(x) (ISIDST(x) || _dollar_ok(x))
625#define is_numstart(x) ISDIGIT(x)
626#define is_hspace(x) ISBLANK(x)
627#define is_vspace(x) IS_VSPACE(x)
628#define is_nvspace(x) IS_NVSPACE(x)
629#define is_space(x) IS_SPACE_OR_NUL(x)
88ae23e7 630
18f5df94
JJ
631#define SEEN_EOL() (pfile->cur_token[-1].type == CPP_EOF)
632
f6bbde28 633/* This table is constant if it can be initialized at compile time,
88ae23e7
ZW
634 which is the case if cpp was compiled with GCC >=2.7, or another
635 compiler that supports C99. */
61d0346d 636#if HAVE_DESIGNATED_INITIALIZERS
61d0346d 637extern const unsigned char _cpp_trigraph_map[UCHAR_MAX + 1];
88ae23e7 638#else
61d0346d 639extern unsigned char _cpp_trigraph_map[UCHAR_MAX + 1];
88ae23e7
ZW
640#endif
641
c5d725c0
NS
642#if !defined (HAVE_UCHAR) && !defined (IN_GCC)
643typedef unsigned char uchar;
644#endif
645
646#define UC (const uchar *) /* Intended use: UC"string" */
647
bf425849 648/* Accessors. */
88ae23e7 649
bf425849
NS
650inline int
651_cpp_in_system_header (cpp_reader *pfile)
12f9df4e
PB
652{
653 return pfile->buffer ? pfile->buffer->sysp : 0;
654}
e3339d0f
JM
655#define CPP_PEDANTIC(PF) CPP_OPTION (PF, cpp_pedantic)
656#define CPP_WTRADITIONAL(PF) CPP_OPTION (PF, cpp_warn_traditional)
88ae23e7 657
bf425849
NS
658/* Return true if we're in the main file (unless it's considered to be
659 an include file in its own right. */
660inline int
661_cpp_in_main_source_file (cpp_reader *pfile)
705e2d28 662{
9844497a
NS
663 return (!CPP_OPTION (pfile, main_search)
664 && pfile->buffer->file == pfile->main_file);
705e2d28
TT
665}
666
ad1a3914
NS
667/* True if NODE is a macro for the purposes of ifdef, defined etc. */
668inline bool _cpp_defined_macro_p (cpp_hashnode *node)
669{
670 /* Do not treat conditional macros as being defined. This is due to
671 the powerpc port using conditional macros for 'vector', 'bool',
672 and 'pixel' to act as conditional keywords. This messes up tests
673 like #ifndef bool. */
674 return cpp_macro_p (node) && !(node->flags & NODE_CONDITIONAL);
675}
676
e53b6e56 677/* In macro.cc */
13f93cf5
NS
678extern bool _cpp_notify_macro_use (cpp_reader *pfile, cpp_hashnode *node,
679 location_t);
680inline bool _cpp_maybe_notify_macro_use (cpp_reader *pfile, cpp_hashnode *node,
e9a2e208 681 location_t loc)
3f6677f4
NS
682{
683 if (!(node->flags & NODE_USED))
13f93cf5
NS
684 return _cpp_notify_macro_use (pfile, node, loc);
685 return true;
3f6677f4 686}
10f04917 687extern cpp_macro *_cpp_new_macro (cpp_reader *, cpp_macro_kind, void *);
6cf87ca4
ZW
688extern void _cpp_free_definition (cpp_hashnode *);
689extern bool _cpp_create_definition (cpp_reader *, cpp_hashnode *);
690extern void _cpp_pop_context (cpp_reader *);
691extern void _cpp_push_text_context (cpp_reader *, cpp_hashnode *,
c812785a 692 const unsigned char *, size_t);
729a01f7 693extern bool _cpp_save_parameter (cpp_reader *, unsigned, cpp_hashnode *,
be5ffc59 694 cpp_hashnode *);
729a01f7 695extern void _cpp_unsave_parameters (cpp_reader *, unsigned);
6cf87ca4
ZW
696extern bool _cpp_arguments_ok (cpp_reader *, cpp_macro *, const cpp_hashnode *,
697 unsigned int);
c812785a 698extern const unsigned char *_cpp_builtin_macro_text (cpp_reader *,
64824205 699 cpp_hashnode *,
620e594b 700 location_t = 0);
bc4071dd
RH
701extern int _cpp_warn_if_unused_macro (cpp_reader *, cpp_hashnode *, void *);
702extern void _cpp_push_token_context (cpp_reader *, cpp_hashnode *,
703 const cpp_token *, unsigned int);
5950c3c9 704extern void _cpp_backup_tokens_direct (cpp_reader *, unsigned int);
bc4071dd 705
e53b6e56 706/* In identifiers.cc */
0823efed 707extern void _cpp_init_hashtable (cpp_reader *, cpp_hash_table *);
6cf87ca4 708extern void _cpp_destroy_hashtable (cpp_reader *);
bb52fa7f 709
e53b6e56 710/* In files.cc */
4623a6f2
NS
711enum _cpp_find_file_kind
712 { _cpp_FFK_NORMAL, _cpp_FFK_FAKE, _cpp_FFK_PRE_INCLUDE, _cpp_FFK_HAS_INCLUDE };
6568f34b 713extern _cpp_file *_cpp_find_file (cpp_reader *, const char *, cpp_dir *,
4623a6f2 714 int angle, _cpp_find_file_kind, location_t);
4dc299fb 715extern bool _cpp_find_failed (_cpp_file *);
49634b3a 716extern void _cpp_mark_file_once_only (cpp_reader *, struct _cpp_file *);
1f9db692
NS
717extern const char *_cpp_find_header_unit (cpp_reader *, const char *file,
718 bool angle_p, location_t);
6cf87ca4 719extern void _cpp_fake_include (cpp_reader *, const char *);
b0d11f1e 720extern bool _cpp_stack_file (cpp_reader *, _cpp_file*, include_type, location_t);
8f9b4009 721extern bool _cpp_stack_include (cpp_reader *, const char *, int,
620e594b 722 enum include_type, location_t);
6cf87ca4
ZW
723extern int _cpp_compare_file_date (cpp_reader *, const char *, int);
724extern void _cpp_report_missing_guards (cpp_reader *);
8f9b4009
NB
725extern void _cpp_init_files (cpp_reader *);
726extern void _cpp_cleanup_files (cpp_reader *);
28937f11
JJ
727extern void _cpp_pop_file_buffer (cpp_reader *, struct _cpp_file *,
728 const unsigned char *);
73e61092
GK
729extern bool _cpp_save_file_entries (cpp_reader *pfile, FILE *f);
730extern bool _cpp_read_file_entries (cpp_reader *, FILE *);
b492b686 731extern const char *_cpp_get_file_name (_cpp_file *);
be8ac3e2 732extern struct stat *_cpp_get_file_stat (_cpp_file *);
a15f7cb8
ESR
733extern bool _cpp_has_header (cpp_reader *, const char *, int,
734 enum include_type);
88ae23e7 735
e53b6e56 736/* In expr.cc */
d750887f 737extern bool _cpp_parse_expr (cpp_reader *, bool);
6cf87ca4 738extern struct op *_cpp_expand_op_stack (cpp_reader *);
88ae23e7 739
e53b6e56 740/* In lex.cc */
6cf87ca4
ZW
741extern void _cpp_process_line_notes (cpp_reader *, int);
742extern void _cpp_clean_line (cpp_reader *);
743extern bool _cpp_get_fresh_line (cpp_reader *);
744extern bool _cpp_skip_block_comment (cpp_reader *);
745extern cpp_token *_cpp_temp_token (cpp_reader *);
746extern const cpp_token *_cpp_lex_token (cpp_reader *);
747extern cpp_token *_cpp_lex_direct (cpp_reader *);
be5ffc59 748extern unsigned char *_cpp_spell_ident_ucns (unsigned char *, cpp_hashnode *);
6cf87ca4
ZW
749extern int _cpp_equiv_tokens (const cpp_token *, const cpp_token *);
750extern void _cpp_init_tokenrun (tokenrun *, unsigned int);
17e7cb85 751extern cpp_hashnode *_cpp_lex_identifier (cpp_reader *, const char *);
ad2305ad 752extern int _cpp_remaining_tokens_num_in_context (cpp_context *);
b0c084b7 753extern void _cpp_init_lexer (void);
10f04917
NS
754static inline void *_cpp_reserve_room (cpp_reader *pfile, size_t have,
755 size_t extra)
756{
757 if (BUFF_ROOM (pfile->a_buff) < (have + extra))
758 _cpp_extend_buff (pfile, &pfile->a_buff, extra);
759 return BUFF_FRONT (pfile->a_buff);
760}
761extern void *_cpp_commit_buff (cpp_reader *pfile, size_t size);
45b966db 762
e53b6e56 763/* In init.cc. */
6cf87ca4 764extern void _cpp_maybe_push_include_file (cpp_reader *);
cfc93532 765extern const char *cpp_named_operator2name (enum cpp_ttype type);
aa23e73b
JJ
766extern void _cpp_restore_special_builtin (cpp_reader *pfile,
767 struct def_pragma_macro *);
d7bc7a98 768
e53b6e56 769/* In directives.cc */
6cf87ca4 770extern int _cpp_test_assertion (cpp_reader *, unsigned int *);
a0be978a 771extern int _cpp_handle_directive (cpp_reader *, bool);
6cf87ca4
ZW
772extern void _cpp_define_builtin (cpp_reader *, const char *);
773extern char ** _cpp_save_pragma_names (cpp_reader *);
774extern void _cpp_restore_pragma_names (cpp_reader *, char **);
620e594b 775extern int _cpp_do__Pragma (cpp_reader *, location_t);
6cf87ca4
ZW
776extern void _cpp_init_directives (cpp_reader *);
777extern void _cpp_init_internal_pragmas (cpp_reader *);
778extern void _cpp_do_file_change (cpp_reader *, enum lc_reason, const char *,
1bb64668 779 linenum_type, unsigned int);
6cf87ca4 780extern void _cpp_pop_buffer (cpp_reader *);
a15f7cb8 781extern char *_cpp_bracket_include (cpp_reader *);
12cf91fe 782
e53b6e56 783/* In errors.cc */
bd5e882c
DM
784extern location_t cpp_diagnostic_get_current_location (cpp_reader *);
785
e53b6e56 786/* In traditional.cc. */
fb136e35 787extern bool _cpp_scan_out_logical_line (cpp_reader *, cpp_macro *, bool);
6cf87ca4 788extern bool _cpp_read_logical_line_trad (cpp_reader *);
c812785a
RS
789extern void _cpp_overlay_buffer (cpp_reader *pfile, const unsigned char *,
790 size_t);
6cf87ca4 791extern void _cpp_remove_overlay (cpp_reader *);
10f04917 792extern cpp_macro *_cpp_create_trad_definition (cpp_reader *);
6cf87ca4
ZW
793extern bool _cpp_expansions_different_trad (const cpp_macro *,
794 const cpp_macro *);
c812785a
RS
795extern unsigned char *_cpp_copy_replacement_text (const cpp_macro *,
796 unsigned char *);
6cf87ca4 797extern size_t _cpp_replacement_text_len (const cpp_macro *);
004cb263 798
e53b6e56 799/* In charset.cc. */
50668cf6
GK
800
801/* The normalization state at this point in the sequence.
802 It starts initialized to all zeros, and at the end
803 'level' is the normalization level of the sequence. */
804
805struct normalize_state
806{
d3f4ff8b 807 /* The previous starter character. */
50668cf6 808 cppchar_t previous;
d3f4ff8b
JM
809 /* The combining class of the previous character (whether or not a
810 starter). */
50668cf6
GK
811 unsigned char prev_class;
812 /* The lowest normalization level so far. */
813 enum cpp_normalize_level level;
814};
815#define INITIAL_NORMALIZE_STATE { 0, 0, normalized_KC }
816#define NORMALIZE_STATE_RESULT(st) ((st)->level)
817
d3f4ff8b 818/* We saw a character C that matches ISIDNUM(), update a
50668cf6 819 normalize_state appropriately. */
d3f4ff8b
JM
820#define NORMALIZE_STATE_UPDATE_IDNUM(st, c) \
821 ((st)->previous = (c), (st)->prev_class = 0)
50668cf6 822
fbb22910
PC
823extern bool _cpp_valid_ucn (cpp_reader *, const unsigned char **,
824 const unsigned char *, int,
825 struct normalize_state *state,
88fa5555
DM
826 cppchar_t *,
827 source_range *char_range,
828 cpp_string_location_reader *loc_reader);
7d112d66
LH
829
830extern bool _cpp_valid_utf8 (cpp_reader *pfile,
831 const uchar **pstr,
832 const uchar *limit,
833 int identifier_pos,
834 struct normalize_state *nst,
835 cppchar_t *cp);
836
6b88314c 837extern void _cpp_destroy_iconv (cpp_reader *);
c812785a
RS
838extern unsigned char *_cpp_convert_input (cpp_reader *, const char *,
839 unsigned char *, size_t, size_t,
688e7a53 840 const unsigned char **, off_t *);
16dd5cfe 841extern const char *_cpp_default_encoding (void);
47e20491
GK
842extern cpp_hashnode * _cpp_interpret_identifier (cpp_reader *pfile,
843 const unsigned char *id,
844 size_t len);
1613e52b 845
c31a6508 846/* Utility routines and macros. */
c812785a 847#define DSC(str) (const unsigned char *)str, sizeof str - 1
c31a6508 848
8121d2c3
NB
849/* These are inline functions instead of macros so we can get type
850 checking. */
c812785a
RS
851static inline int ustrcmp (const unsigned char *, const unsigned char *);
852static inline int ustrncmp (const unsigned char *, const unsigned char *,
853 size_t);
854static inline size_t ustrlen (const unsigned char *);
0c1dace3
PC
855static inline const unsigned char *uxstrdup (const unsigned char *);
856static inline const unsigned char *ustrchr (const unsigned char *, int);
c812785a 857static inline int ufputs (const unsigned char *, FILE *);
8121d2c3 858
be0f1e54
PB
859/* Use a const char for the second parameter since it is usually a literal. */
860static inline int ustrcspn (const unsigned char *, const char *);
861
8121d2c3 862static inline int
c812785a 863ustrcmp (const unsigned char *s1, const unsigned char *s2)
8121d2c3
NB
864{
865 return strcmp ((const char *)s1, (const char *)s2);
866}
867
868static inline int
c812785a 869ustrncmp (const unsigned char *s1, const unsigned char *s2, size_t n)
8121d2c3
NB
870{
871 return strncmp ((const char *)s1, (const char *)s2, n);
872}
873
be0f1e54
PB
874static inline int
875ustrcspn (const unsigned char *s1, const char *s2)
876{
877 return strcspn ((const char *)s1, s2);
878}
879
8121d2c3 880static inline size_t
c812785a 881ustrlen (const unsigned char *s1)
8121d2c3
NB
882{
883 return strlen ((const char *)s1);
884}
885
0c1dace3 886static inline const unsigned char *
c812785a 887uxstrdup (const unsigned char *s1)
8121d2c3 888{
0c1dace3 889 return (const unsigned char *) xstrdup ((const char *)s1);
8121d2c3
NB
890}
891
0c1dace3 892static inline const unsigned char *
c812785a 893ustrchr (const unsigned char *s1, int c)
8121d2c3 894{
0c1dace3 895 return (const unsigned char *) strchr ((const char *)s1, c);
8121d2c3
NB
896}
897
898static inline int
c812785a 899ufputs (const unsigned char *s, FILE *f)
8121d2c3
NB
900{
901 return fputs ((const char *)s, f);
902}
903
e53b6e56 904/* In line-map.cc. */
46427374
TT
905
906/* Create and return a virtual location for a token that is part of a
907 macro expansion-list at a macro expansion point. See the comment
908 inside struct line_map_macro to see what an expansion-list exactly
909 is.
910
911 A call to this function must come after a call to
912 linemap_enter_macro.
913
914 MAP is the map into which the source location is created. TOKEN_NO
915 is the index of the token in the macro replacement-list, starting
916 at number 0.
917
918 ORIG_LOC is the location of the token outside of this macro
919 expansion. If the token comes originally from the macro
920 definition, it is the locus in the macro definition; otherwise it
921 is a location in the context of the caller of this macro expansion
922 (which is a virtual location or a source location if the caller is
923 itself a macro expansion or not).
924
925 MACRO_DEFINITION_LOC is the location in the macro definition,
926 either of the token itself or of a macro parameter that it
927 replaces. */
620e594b
DM
928location_t linemap_add_macro_token (const line_map_macro *,
929 unsigned int,
930 location_t,
931 location_t);
46427374
TT
932
933/* Return the source line number corresponding to source location
934 LOCATION. SET is the line map set LOCATION comes from. If
935 LOCATION is the location of token that is part of the
936 expansion-list of a macro expansion return the line number of the
937 macro expansion point. */
99b1c316 938int linemap_get_expansion_line (class line_maps *,
620e594b 939 location_t);
46427374
TT
940
941/* Return the path of the file corresponding to source code location
942 LOCATION.
943
944 If LOCATION is the location of a token that is part of the
945 replacement-list of a macro expansion return the file path of the
946 macro expansion point.
947
948 SET is the line map set LOCATION comes from. */
99b1c316 949const char* linemap_get_expansion_filename (class line_maps *,
620e594b 950 location_t);
46427374 951
bd5e882c
DM
952/* A subclass of rich_location for emitting a diagnostic
953 at the current location of the reader, but flagging
954 it with set_escape_on_output (true). */
955class encoding_rich_location : public rich_location
956{
957 public:
958 encoding_rich_location (cpp_reader *pfile)
959 : rich_location (pfile->line_table,
960 cpp_diagnostic_get_current_location (pfile))
961 {
962 set_escape_on_output (true);
963 }
964
965 encoding_rich_location (cpp_reader *pfile, location_t loc)
966 : rich_location (pfile->line_table, loc)
967 {
968 set_escape_on_output (true);
969 }
970};
971
4851089f
ILT
972#ifdef __cplusplus
973}
974#endif
975
4f4e53dd 976#endif /* ! LIBCPP_INTERNAL_H */