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