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