]> gcc.gnu.org Git - gcc.git/blame - gcc/cpplib.c
add pr number to last commit
[gcc.git] / gcc / cpplib.c
CommitLineData
a949941c 1/* CPP Library. (Directive handling.)
5e7b4e25 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
d9221e01 3 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
4c8cc616 4 Contributed by Per Bothner, 1994-95.
d8bfa78c 5 Based on CCCP program by Paul Rubin, June 1986
7f2935c7
PB
6 Adapted to ANSI C, Richard Stallman, Jan 1987
7
8This program is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 2, or (at your option) any
11later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
956d6950 20Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
7f2935c7 21
956d6950 22#include "config.h"
b04cd507 23#include "system.h"
956d6950
JL
24#include "cpplib.h"
25#include "cpphash.h"
c71f835b 26#include "obstack.h"
7f2935c7 27
93c80368
NB
28/* Chained list of answers to an assertion. */
29struct answer
30{
31 struct answer *next;
32 unsigned int count;
33 cpp_token first[1];
34};
35
88ae23e7
ZW
36/* Stack of conditionals currently in progress
37 (including both successful and failing conditionals). */
88ae23e7
ZW
38struct if_stack
39{
40 struct if_stack *next;
50410426 41 unsigned int line; /* Line where condition started. */
93c80368 42 const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
cef0d199
NB
43 bool skip_elses; /* Can future #else / #elif be skipped? */
44 bool was_skipping; /* If were skipping on entry. */
6cf87ca4 45 int type; /* Most recent conditional for diagnostics. */
88ae23e7 46};
88ae23e7 47
a5da89c6 48/* Contains a registered pragma or pragma namespace. */
6cf87ca4 49typedef void (*pragma_cb) (cpp_reader *);
a5da89c6
NB
50struct pragma_entry
51{
52 struct pragma_entry *next;
4b115ff0 53 const cpp_hashnode *pragma; /* Name and length. */
a5da89c6
NB
54 int is_nspace;
55 union {
56 pragma_cb handler;
57 struct pragma_entry *space;
58 } u;
59};
60
93c80368
NB
61/* Values for the origin field of struct directive. KANDR directives
62 come from traditional (K&R) C. STDC89 directives come from the
63 1989 C standard. EXTENSION directives are extensions. */
64#define KANDR 0
65#define STDC89 1
66#define EXTENSION 2
67
68/* Values for the flags field of struct directive. COND indicates a
69 conditional; IF_COND an opening conditional. INCL means to treat
70 "..." and <...> as q-char and h-char sequences respectively. IN_I
71 means this directive should be handled even if -fpreprocessed is in
1a76916c
NB
72 effect (these are the directives with callback hooks).
73
d97371e0 74 EXPAND is set on directives that are always macro-expanded. */
93c80368
NB
75#define COND (1 << 0)
76#define IF_COND (1 << 1)
77#define INCL (1 << 2)
78#define IN_I (1 << 3)
1a76916c 79#define EXPAND (1 << 4)
93c80368
NB
80
81/* Defines one #-directive, including how to handle it. */
6cf87ca4 82typedef void (*directive_handler) (cpp_reader *);
93c80368
NB
83typedef struct directive directive;
84struct directive
85{
86 directive_handler handler; /* Function to handle directive. */
562a5c27 87 const uchar *name; /* Name of directive. */
93c80368
NB
88 unsigned short length; /* Length of name. */
89 unsigned char origin; /* Origin of directive. */
90 unsigned char flags; /* Flags describing this directive. */
91};
92
1316f1f7
ZW
93/* Forward declarations. */
94
6cf87ca4
ZW
95static void skip_rest_of_line (cpp_reader *);
96static void check_eol (cpp_reader *);
97static void start_directive (cpp_reader *);
98static void prepare_directive_trad (cpp_reader *);
99static void end_directive (cpp_reader *, int);
100static void directive_diagnostics (cpp_reader *, const directive *, int);
101static void run_directive (cpp_reader *, int, const char *, size_t);
102static char *glue_header_name (cpp_reader *);
103static const char *parse_include (cpp_reader *, int *);
104static void push_conditional (cpp_reader *, int, int, const cpp_hashnode *);
105static unsigned int read_flag (cpp_reader *, unsigned int);
6cf87ca4
ZW
106static int strtoul_for_line (const uchar *, unsigned int, unsigned long *);
107static void do_diagnostic (cpp_reader *, int, int);
108static cpp_hashnode *lex_macro_node (cpp_reader *);
d1bd0ded 109static int undefine_macros (cpp_reader *, cpp_hashnode *, void *);
6cf87ca4
ZW
110static void do_include_common (cpp_reader *, enum include_type);
111static struct pragma_entry *lookup_pragma_entry (struct pragma_entry *,
112 const cpp_hashnode *);
113static struct pragma_entry *insert_pragma_entry (cpp_reader *,
114 struct pragma_entry **,
115 const cpp_hashnode *,
116 pragma_cb);
117static int count_registered_pragmas (struct pragma_entry *);
118static char ** save_registered_pragmas (struct pragma_entry *, char **);
119static char ** restore_registered_pragmas (cpp_reader *, struct pragma_entry *,
120 char **);
121static void do_pragma_once (cpp_reader *);
122static void do_pragma_poison (cpp_reader *);
123static void do_pragma_system_header (cpp_reader *);
124static void do_pragma_dependency (cpp_reader *);
125static void do_linemarker (cpp_reader *);
126static const cpp_token *get_token_no_padding (cpp_reader *);
127static const cpp_token *get__Pragma_string (cpp_reader *);
128static void destringize_and_run (cpp_reader *, const cpp_string *);
129static int parse_answer (cpp_reader *, struct answer **, int);
130static cpp_hashnode *parse_assertion (cpp_reader *, struct answer **, int);
131static struct answer ** find_answer (cpp_hashnode *, const struct answer *);
132static void handle_assertion (cpp_reader *, const char *, int);
d481b69b 133
168d3732
ZW
134/* This is the table of directive handlers. It is ordered by
135 frequency of occurrence; the numbers at the end are directive
136 counts from all the source code I have lying around (egcs and libc
137 CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
93c80368
NB
138 pcmcia-cs-3.0.9). This is no longer important as directive lookup
139 is now O(1). All extensions other than #warning and #include_next
140 are deprecated. The name is where the extension appears to have
141 come from. */
168d3732 142
93c80368
NB
143#define DIRECTIVE_TABLE \
144D(define, T_DEFINE = 0, KANDR, IN_I) /* 270554 */ \
d97371e0 145D(include, T_INCLUDE, KANDR, INCL | EXPAND) /* 52262 */ \
93c80368
NB
146D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \
147D(ifdef, T_IFDEF, KANDR, COND | IF_COND) /* 22000 */ \
1a76916c 148D(if, T_IF, KANDR, COND | IF_COND | EXPAND) /* 18162 */ \
93c80368
NB
149D(else, T_ELSE, KANDR, COND) /* 9863 */ \
150D(ifndef, T_IFNDEF, KANDR, COND | IF_COND) /* 9675 */ \
151D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \
1a76916c
NB
152D(line, T_LINE, KANDR, EXPAND) /* 2465 */ \
153D(elif, T_ELIF, STDC89, COND | EXPAND) /* 610 */ \
93c80368
NB
154D(error, T_ERROR, STDC89, 0) /* 475 */ \
155D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \
156D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \
d97371e0 157D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL | EXPAND) /* 19 */ \
93c80368 158D(ident, T_IDENT, EXTENSION, IN_I) /* 11 */ \
d97371e0 159D(import, T_IMPORT, EXTENSION, INCL | EXPAND) /* 0 ObjC */ \
93c80368
NB
160D(assert, T_ASSERT, EXTENSION, 0) /* 0 SVR4 */ \
161D(unassert, T_UNASSERT, EXTENSION, 0) /* 0 SVR4 */ \
74d06cf2 162D(sccs, T_SCCS, EXTENSION, 0) /* 0 SVR4? */
07aa0b04 163
168d3732
ZW
164/* Use the table to generate a series of prototypes, an enum for the
165 directive names, and an array of directive handlers. */
166
6cf87ca4 167#define D(name, t, o, f) static void do_##name (cpp_reader *);
168d3732
ZW
168DIRECTIVE_TABLE
169#undef D
170
041c3194 171#define D(n, tag, o, f) tag,
168d3732
ZW
172enum
173{
174 DIRECTIVE_TABLE
175 N_DIRECTIVES
7f2935c7 176};
168d3732
ZW
177#undef D
178
041c3194 179#define D(name, t, origin, flags) \
9a238586
KG
180{ do_##name, (const uchar *) #name, \
181 sizeof #name - 1, origin, flags },
93c80368 182static const directive dtable[] =
168d3732
ZW
183{
184DIRECTIVE_TABLE
185};
186#undef D
187#undef DIRECTIVE_TABLE
7f2935c7 188
dcc229e5
ZW
189/* Wrapper struct directive for linemarkers.
190 The origin is more or less true - the original K+R cpp
191 did use this notation in its preprocessed output. */
192static const directive linemarker_dir =
193{
194 do_linemarker, U"#", 1, KANDR, IN_I
195};
196
1a76916c 197#define SEEN_EOL() (pfile->cur_token[-1].type == CPP_EOF)
67821e3a 198
93c80368
NB
199/* Skip any remaining tokens in a directive. */
200static void
6cf87ca4 201skip_rest_of_line (cpp_reader *pfile)
c5a04734 202{
93c80368 203 /* Discard all stacked contexts. */
8128cccf 204 while (pfile->context->prev)
93c80368
NB
205 _cpp_pop_context (pfile);
206
b528a07e 207 /* Sweep up all tokens remaining on the line. */
345894b4
NB
208 if (! SEEN_EOL ())
209 while (_cpp_lex_token (pfile)->type != CPP_EOF)
210 ;
93c80368 211}
c5a04734 212
93c80368
NB
213/* Ensure there are no stray tokens at the end of a directive. */
214static void
6cf87ca4 215check_eol (cpp_reader *pfile)
93c80368 216{
345894b4 217 if (! SEEN_EOL () && _cpp_lex_token (pfile)->type != CPP_EOF)
0527bc4e 218 cpp_error (pfile, CPP_DL_PEDWARN, "extra tokens at end of #%s directive",
ebef4e8c 219 pfile->directive->name);
93c80368
NB
220}
221
fe6c2db9
NB
222/* Called when entering a directive, _Pragma or command-line directive. */
223static void
6cf87ca4 224start_directive (cpp_reader *pfile)
93c80368 225{
7f2f1a66
NB
226 /* Setup in-directive state. */
227 pfile->state.in_directive = 1;
228 pfile->state.save_comments = 0;
229
93c80368 230 /* Some handlers need the position of the # for diagnostics. */
8bbbef34 231 pfile->directive_line = pfile->line;
fe6c2db9
NB
232}
233
234/* Called when leaving a directive, _Pragma or command-line directive. */
235static void
6cf87ca4 236end_directive (cpp_reader *pfile, int skip_line)
fe6c2db9 237{
1a76916c
NB
238 if (CPP_OPTION (pfile, traditional))
239 {
d97371e0
NB
240 /* Revert change of prepare_directive_trad. */
241 pfile->state.prevent_expansion--;
242
b66377c1 243 if (pfile->directive != &dtable[T_DEFINE])
1a76916c
NB
244 _cpp_remove_overlay (pfile);
245 }
fe6c2db9 246 /* We don't skip for an assembler #. */
b66377c1 247 else if (skip_line)
67821e3a
NB
248 {
249 skip_rest_of_line (pfile);
bdcbe496
NB
250 if (!pfile->keep_tokens)
251 {
252 pfile->cur_run = &pfile->base_run;
253 pfile->cur_token = pfile->base_run.base;
254 }
67821e3a 255 }
fe6c2db9
NB
256
257 /* Restore state. */
fe6c2db9
NB
258 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
259 pfile->state.in_directive = 0;
d97371e0 260 pfile->state.in_expression = 0;
fe6c2db9
NB
261 pfile->state.angled_headers = 0;
262 pfile->directive = 0;
263}
264
1a76916c
NB
265/* Prepare to handle the directive in pfile->directive. */
266static void
6cf87ca4 267prepare_directive_trad (cpp_reader *pfile)
1a76916c 268{
951a0766 269 if (pfile->directive != &dtable[T_DEFINE])
1a76916c 270 {
b66377c1
NB
271 bool no_expand = (pfile->directive
272 && ! (pfile->directive->flags & EXPAND));
974c43f1 273 bool was_skipping = pfile->state.skipping;
1a76916c 274
d97371e0
NB
275 pfile->state.in_expression = (pfile->directive == &dtable[T_IF]
276 || pfile->directive == &dtable[T_ELIF]);
45f2492c
NB
277 if (pfile->state.in_expression)
278 pfile->state.skipping = false;
279
1a76916c
NB
280 if (no_expand)
281 pfile->state.prevent_expansion++;
43839642 282 _cpp_scan_out_logical_line (pfile, NULL);
1a76916c
NB
283 if (no_expand)
284 pfile->state.prevent_expansion--;
45f2492c 285
974c43f1 286 pfile->state.skipping = was_skipping;
1a76916c
NB
287 _cpp_overlay_buffer (pfile, pfile->out.base,
288 pfile->out.cur - pfile->out.base);
289 }
d97371e0
NB
290
291 /* Stop ISO C from expanding anything. */
292 pfile->state.prevent_expansion++;
1a76916c
NB
293}
294
da7d8304 295/* Output diagnostics for a directive DIR. INDENTED is nonzero if
18a9d8ff 296 the '#' was indented. */
18a9d8ff 297static void
6cf87ca4 298directive_diagnostics (cpp_reader *pfile, const directive *dir, int indented)
18a9d8ff 299{
dcc229e5
ZW
300 /* Issue -pedantic warnings for extensions. */
301 if (CPP_PEDANTIC (pfile)
302 && ! pfile->state.skipping
303 && dir->origin == EXTENSION)
0527bc4e 304 cpp_error (pfile, CPP_DL_PEDWARN, "#%s is a GCC extension", dir->name);
dcc229e5
ZW
305
306 /* Traditionally, a directive is ignored unless its # is in
307 column 1. Therefore in code intended to work with K+R
308 compilers, directives added by C89 must have their #
309 indented, and directives present in traditional C must not.
310 This is true even of directives in skipped conditional
311 blocks. #elif cannot be used at all. */
312 if (CPP_WTRADITIONAL (pfile))
18a9d8ff 313 {
dcc229e5 314 if (dir == &dtable[T_ELIF])
0527bc4e 315 cpp_error (pfile, CPP_DL_WARNING,
ebef4e8c 316 "suggest not using #elif in traditional C");
dcc229e5 317 else if (indented && dir->origin == KANDR)
0527bc4e 318 cpp_error (pfile, CPP_DL_WARNING,
ebef4e8c
NB
319 "traditional C ignores #%s with the # indented",
320 dir->name);
dcc229e5 321 else if (!indented && dir->origin != KANDR)
0527bc4e 322 cpp_error (pfile, CPP_DL_WARNING,
ebef4e8c
NB
323 "suggest hiding #%s from traditional C with an indented #",
324 dir->name);
18a9d8ff
NB
325 }
326}
327
da7d8304 328/* Check if we have a known directive. INDENTED is nonzero if the
18a9d8ff
NB
329 '#' of the directive was indented. This function is in this file
330 to save unnecessarily exporting dtable etc. to cpplex.c. Returns
da7d8304 331 nonzero if the line of tokens has been handled, zero if we should
18a9d8ff 332 continue processing the line. */
fe6c2db9 333int
6cf87ca4 334_cpp_handle_directive (cpp_reader *pfile, int indented)
fe6c2db9 335{
fe6c2db9 336 const directive *dir = 0;
345894b4 337 const cpp_token *dname;
e808ec9c 338 bool was_parsing_args = pfile->state.parsing_args;
fe6c2db9
NB
339 int skip = 1;
340
e808ec9c
NB
341 if (was_parsing_args)
342 {
343 if (CPP_OPTION (pfile, pedantic))
0527bc4e 344 cpp_error (pfile, CPP_DL_PEDWARN,
e808ec9c
NB
345 "embedding a directive within macro arguments is not portable");
346 pfile->state.parsing_args = 0;
347 pfile->state.prevent_expansion = 0;
348 }
fe6c2db9 349 start_directive (pfile);
345894b4 350 dname = _cpp_lex_token (pfile);
0d9f234d 351
345894b4 352 if (dname->type == CPP_NAME)
0d9f234d 353 {
4977bab6
ZW
354 if (dname->val.node->is_directive)
355 dir = &dtable[dname->val.node->directive_index];
0d9f234d 356 }
05713b80 357 /* We do not recognize the # followed by a number extension in
18a9d8ff 358 assembler code. */
345894b4 359 else if (dname->type == CPP_NUMBER && CPP_OPTION (pfile, lang) != CLK_ASM)
0d9f234d 360 {
dcc229e5
ZW
361 dir = &linemarker_dir;
362 if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed)
363 && ! pfile->state.skipping)
0527bc4e 364 cpp_error (pfile, CPP_DL_PEDWARN,
ebef4e8c 365 "style of line directive is a GCC extension");
93c80368 366 }
0d9f234d 367
93c80368
NB
368 if (dir)
369 {
18a9d8ff
NB
370 /* If we have a directive that is not an opening conditional,
371 invalidate any control macro. */
372 if (! (dir->flags & IF_COND))
373 pfile->mi_valid = false;
374
375 /* Kluge alert. In order to be sure that code like this
376
377 #define HASH #
378 HASH define foo bar
379
380 does not cause '#define foo bar' to get executed when
381 compiled with -save-temps, we recognize directives in
382 -fpreprocessed mode only if the # is in column 1. cppmacro.c
a1f300c0 383 puts a space in front of any '#' at the start of a macro. */
18a9d8ff
NB
384 if (CPP_OPTION (pfile, preprocessed)
385 && (indented || !(dir->flags & IN_I)))
6d4587f7 386 {
18a9d8ff
NB
387 skip = 0;
388 dir = 0;
6d4587f7
ZW
389 }
390 else
93c80368 391 {
18a9d8ff
NB
392 /* In failed conditional groups, all non-conditional
393 directives are ignored. Before doing that, whether
394 skipping or not, we should lex angle-bracketed headers
395 correctly, and maybe output some diagnostics. */
396 pfile->state.angled_headers = dir->flags & INCL;
a8d0ddaf 397 pfile->state.directive_wants_padding = dir->flags & INCL;
18a9d8ff
NB
398 if (! CPP_OPTION (pfile, preprocessed))
399 directive_diagnostics (pfile, dir, indented);
400 if (pfile->state.skipping && !(dir->flags & COND))
401 dir = 0;
93c80368
NB
402 }
403 }
345894b4 404 else if (dname->type == CPP_EOF)
18a9d8ff
NB
405 ; /* CPP_EOF is the "null directive". */
406 else
93c80368
NB
407 {
408 /* An unknown directive. Don't complain about it in assembly
409 source: we don't know where the comments are, and # may
410 introduce assembler pseudo-ops. Don't complain about invalid
411 directives in skipped conditional groups (6.10 p4). */
bdb05a7b 412 if (CPP_OPTION (pfile, lang) == CLK_ASM)
18a9d8ff
NB
413 skip = 0;
414 else if (!pfile->state.skipping)
0527bc4e 415 cpp_error (pfile, CPP_DL_ERROR, "invalid preprocessing directive #%s",
345894b4 416 cpp_token_as_text (pfile, dname));
0d9f234d
NB
417 }
418
d1a58688
NB
419 pfile->directive = dir;
420 if (CPP_OPTION (pfile, traditional))
421 prepare_directive_trad (pfile);
422
18a9d8ff 423 if (dir)
6cf87ca4 424 pfile->directive->handler (pfile);
18a9d8ff
NB
425 else if (skip == 0)
426 _cpp_backup_tokens (pfile, 1);
427
428 end_directive (pfile, skip);
e808ec9c
NB
429 if (was_parsing_args)
430 {
431 /* Restore state when within macro args. */
432 pfile->state.parsing_args = 2;
433 pfile->state.prevent_expansion = 1;
e808ec9c 434 }
fe6c2db9 435 return skip;
041c3194 436}
7f2935c7 437
93c80368 438/* Directive handler wrapper used by the command line option
26aea073 439 processor. BUF is \n terminated. */
93c80368 440static void
6cf87ca4 441run_directive (cpp_reader *pfile, int dir_no, const char *buf, size_t count)
3fdc651f 442{
562a5c27 443 cpp_push_buffer (pfile, (const uchar *) buf, count,
40de9f76 444 /* from_stage3 */ true);
8bfb1467
NB
445 /* Disgusting hack. */
446 if (dir_no == T_PRAGMA)
8f9b4009 447 pfile->buffer->file = pfile->buffer->prev->file;
0bda4760 448 start_directive (pfile);
26aea073
NB
449
450 /* This is a short-term fix to prevent a leading '#' being
451 interpreted as a directive. */
452 _cpp_clean_line (pfile);
453
f71aebba 454 pfile->directive = &dtable[dir_no];
1a76916c
NB
455 if (CPP_OPTION (pfile, traditional))
456 prepare_directive_trad (pfile);
6cf87ca4 457 pfile->directive->handler (pfile);
0bda4760 458 end_directive (pfile, 1);
8bfb1467 459 if (dir_no == T_PRAGMA)
8f9b4009 460 pfile->buffer->file = NULL;
ef6e958a 461 _cpp_pop_buffer (pfile);
93c80368
NB
462}
463
464/* Checks for validity the macro name in #define, #undef, #ifdef and
465 #ifndef directives. */
041c3194 466static cpp_hashnode *
6cf87ca4 467lex_macro_node (cpp_reader *pfile)
041c3194 468{
1a76916c 469 const cpp_token *token = _cpp_lex_token (pfile);
ea4a453b 470
92936ecf 471 /* The token immediately after #define must be an identifier. That
b8363a24
ZW
472 identifier may not be "defined", per C99 6.10.8p4.
473 In C++, it may not be any of the "named operators" either,
474 per C++98 [lex.digraph], [lex.key].
475 Finally, the identifier may not have been poisoned. (In that case
1d63a28a 476 the lexer has issued the error message for us.) */
cbc69f84 477
1a76916c
NB
478 if (token->type == CPP_NAME)
479 {
480 cpp_hashnode *node = token->val.node;
92936ecf 481
1a76916c 482 if (node == pfile->spec_nodes.n_defined)
0527bc4e 483 cpp_error (pfile, CPP_DL_ERROR,
1a76916c
NB
484 "\"defined\" cannot be used as a macro name");
485 else if (! (node->flags & NODE_POISONED))
486 return node;
ba89d661 487 }
1a76916c 488 else if (token->flags & NAMED_OP)
0527bc4e 489 cpp_error (pfile, CPP_DL_ERROR,
cbc69f84 490 "\"%s\" cannot be used as a macro name as it is an operator in C++",
1a76916c
NB
491 NODE_NAME (token->val.node));
492 else if (token->type == CPP_EOF)
0527bc4e 493 cpp_error (pfile, CPP_DL_ERROR, "no macro name given in #%s directive",
1a76916c
NB
494 pfile->directive->name);
495 else
0527bc4e 496 cpp_error (pfile, CPP_DL_ERROR, "macro names must be identifiers");
07aa0b04 497
cbc69f84 498 return NULL;
7f2935c7 499}
7f2935c7 500
93c80368 501/* Process a #define directive. Most work is done in cppmacro.c. */
711b8824 502static void
6cf87ca4 503do_define (cpp_reader *pfile)
7f2935c7 504{
93c80368 505 cpp_hashnode *node = lex_macro_node (pfile);
ff2b53ef 506
93c80368
NB
507 if (node)
508 {
1d63a28a
NB
509 /* If we have been requested to expand comments into macros,
510 then re-enable saving of comments. */
511 pfile->state.save_comments =
512 ! CPP_OPTION (pfile, discard_comments_in_macro_exp);
513
93c80368
NB
514 if (_cpp_create_definition (pfile, node))
515 if (pfile->cb.define)
6cf87ca4 516 pfile->cb.define (pfile, pfile->directive_line, node);
93c80368 517 }
041c3194
ZW
518}
519
5d8ebbd8 520/* Handle #undef. Mark the identifier NT_VOID in the hash table. */
711b8824 521static void
6cf87ca4 522do_undef (cpp_reader *pfile)
041c3194 523{
df383483 524 cpp_hashnode *node = lex_macro_node (pfile);
9e62c811 525
45f2492c 526 if (node)
9e62c811 527 {
58fea6af 528 if (pfile->cb.undef)
6cf87ca4 529 pfile->cb.undef (pfile, pfile->directive_line, node);
9e62c811 530
45f2492c
NB
531 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified
532 identifier is not currently defined as a macro name. */
533 if (node->type == NT_MACRO)
534 {
535 if (node->flags & NODE_WARN)
536 cpp_error (pfile, CPP_DL_WARNING,
537 "undefining \"%s\"", NODE_NAME (node));
9e62c811 538
45f2492c
NB
539 if (CPP_OPTION (pfile, warn_unused_macros))
540 _cpp_warn_if_unused_macro (pfile, node, NULL);
a69cbaac 541
45f2492c
NB
542 _cpp_free_definition (node);
543 }
9e62c811 544 }
45f2492c 545
93c80368 546 check_eol (pfile);
7f2935c7
PB
547}
548
d1bd0ded
GK
549/* Undefine a single macro/assertion/whatever. */
550
551static int
cf551fba 552undefine_macros (cpp_reader *pfile, cpp_hashnode *h,
d1bd0ded
GK
553 void *data_p ATTRIBUTE_UNUSED)
554{
555 switch (h->type)
556 {
557 case NT_VOID:
558 break;
cf551fba 559
d1bd0ded
GK
560 case NT_MACRO:
561 if (pfile->cb.undef)
562 (*pfile->cb.undef) (pfile, pfile->directive_line, h);
563
564 if (CPP_OPTION (pfile, warn_unused_macros))
565 _cpp_warn_if_unused_macro (pfile, h, NULL);
566
938d968e 567 /* And fall through.... */
d1bd0ded
GK
568 case NT_ASSERTION:
569 _cpp_free_definition (h);
570 break;
571
572 default:
573 abort ();
574 }
575 h->flags &= ~NODE_POISONED;
576 return 1;
577}
578
579/* Undefine all macros and assertions. */
580
581void
582cpp_undef_all (cpp_reader *pfile)
583{
584 cpp_forall_identifiers (pfile, undefine_macros, NULL);
585}
586
587
93c80368
NB
588/* Helper routine used by parse_include. Reinterpret the current line
589 as an h-char-sequence (< ... >); we are looking at the first token
74eb4b3e
NB
590 after the <. Returns a malloced filename. */
591static char *
6cf87ca4 592glue_header_name (cpp_reader *pfile)
93c80368 593{
4ed5bcfb 594 const cpp_token *token;
74eb4b3e 595 char *buffer;
2450e0b8 596 size_t len, total_len = 0, capacity = 1024;
93c80368
NB
597
598 /* To avoid lexed tokens overwriting our glued name, we can only
599 allocate from the string pool once we've lexed everything. */
74eb4b3e 600 buffer = xmalloc (capacity);
93c80368
NB
601 for (;;)
602 {
a8d0ddaf 603 token = get_token_no_padding (pfile);
93c80368 604
74eb4b3e 605 if (token->type == CPP_GREATER)
93c80368 606 break;
74eb4b3e
NB
607 if (token->type == CPP_EOF)
608 {
0527bc4e 609 cpp_error (pfile, CPP_DL_ERROR, "missing terminating > character");
74eb4b3e
NB
610 break;
611 }
93c80368 612
59325650 613 len = cpp_token_len (token) + 2; /* Leading space, terminating \0. */
2450e0b8 614 if (total_len + len > capacity)
93c80368 615 {
2450e0b8 616 capacity = (capacity + len) * 2;
74eb4b3e 617 buffer = xrealloc (buffer, capacity);
93c80368
NB
618 }
619
4ed5bcfb 620 if (token->flags & PREV_WHITE)
2450e0b8 621 buffer[total_len++] = ' ';
93c80368 622
74eb4b3e
NB
623 total_len = (cpp_spell_token (pfile, token, (uchar *) &buffer[total_len])
624 - (uchar *) buffer);
93c80368 625 }
041c3194 626
74eb4b3e
NB
627 buffer[total_len] = '\0';
628 return buffer;
93c80368 629}
7f2935c7 630
74eb4b3e
NB
631/* Returns the file name of #include, #include_next, #import and
632 #pragma dependency. The string is malloced and the caller should
633 free it. Returns NULL on error. */
634static const char *
6cf87ca4 635parse_include (cpp_reader *pfile, int *pangle_brackets)
7f2935c7 636{
74eb4b3e 637 char *fname;
4ed5bcfb 638 const cpp_token *header;
7f2935c7 639
93c80368 640 /* Allow macro expansion. */
a8d0ddaf 641 header = get_token_no_padding (pfile);
74eb4b3e 642 if (header->type == CPP_STRING || header->type == CPP_HEADER_NAME)
7f2935c7 643 {
6338b358
NB
644 fname = xmalloc (header->val.str.len - 1);
645 memcpy (fname, header->val.str.text + 1, header->val.str.len - 2);
646 fname[header->val.str.len - 2] = '\0';
74eb4b3e 647 *pangle_brackets = header->type == CPP_HEADER_NAME;
7f2935c7 648 }
74eb4b3e 649 else if (header->type == CPP_LESS)
7f2935c7 650 {
74eb4b3e
NB
651 fname = glue_header_name (pfile);
652 *pangle_brackets = 1;
653 }
654 else
655 {
656 const unsigned char *dir;
657
658 if (pfile->directive == &dtable[T_PRAGMA])
659 dir = U"pragma dependency";
660 else
661 dir = pfile->directive->name;
0527bc4e 662 cpp_error (pfile, CPP_DL_ERROR, "#%s expects \"FILENAME\" or <FILENAME>",
74eb4b3e
NB
663 dir);
664
4ed5bcfb 665 return NULL;
7f2935c7 666 }
7f2935c7 667
3963c2e0 668 check_eol (pfile);
74eb4b3e 669 return fname;
168d3732 670}
3caee4a8 671
ba133c96 672/* Handle #include, #include_next and #import. */
711b8824 673static void
6cf87ca4 674do_include_common (cpp_reader *pfile, enum include_type type)
168d3732 675{
74eb4b3e
NB
676 const char *fname;
677 int angle_brackets;
678
679 fname = parse_include (pfile, &angle_brackets);
680 if (!fname)
3963c2e0 681 return;
7f2935c7 682
3963c2e0 683 /* Prevent #include recursion. */
50f59cd7 684 if (pfile->line_table->depth >= CPP_STACK_MAX)
0527bc4e 685 cpp_error (pfile, CPP_DL_ERROR, "#include nested too deeply");
74eb4b3e 686 else
09b82253 687 {
74eb4b3e
NB
688 /* Get out of macro context, if we are. */
689 skip_rest_of_line (pfile);
09b82253 690
74eb4b3e 691 if (pfile->cb.include)
6cf87ca4
ZW
692 pfile->cb.include (pfile, pfile->directive_line,
693 pfile->directive->name, fname, angle_brackets);
3963c2e0 694
8f9b4009 695 _cpp_stack_include (pfile, fname, angle_brackets, type);
74eb4b3e 696 }
3963c2e0 697
fad205ff 698 free ((void *) fname);
168d3732 699}
e8037d57 700
711b8824 701static void
6cf87ca4 702do_include (cpp_reader *pfile)
168d3732 703{
ba133c96
NB
704 do_include_common (pfile, IT_INCLUDE);
705}
168d3732 706
ba133c96 707static void
6cf87ca4 708do_import (cpp_reader *pfile)
ba133c96 709{
ba133c96 710 do_include_common (pfile, IT_IMPORT);
168d3732 711}
7f2935c7 712
711b8824 713static void
6cf87ca4 714do_include_next (cpp_reader *pfile)
168d3732 715{
3963c2e0
ZW
716 enum include_type type = IT_INCLUDE_NEXT;
717
718 /* If this is the primary source file, warn and use the normal
719 search logic. */
720 if (! pfile->buffer->prev)
721 {
0527bc4e 722 cpp_error (pfile, CPP_DL_WARNING,
3963c2e0
ZW
723 "#include_next in primary source file");
724 type = IT_INCLUDE;
725 }
726 do_include_common (pfile, type);
7f2935c7 727}
7f2935c7 728
dcc229e5
ZW
729/* Subroutine of do_linemarker. Read possible flags after file name.
730 LAST is the last flag seen; 0 if this is the first flag. Return the
731 flag if it is valid, 0 at the end of the directive. Otherwise
732 complain. */
642ce434 733static unsigned int
6cf87ca4 734read_flag (cpp_reader *pfile, unsigned int last)
d3a34a0a 735{
345894b4 736 const cpp_token *token = _cpp_lex_token (pfile);
d3a34a0a 737
345894b4 738 if (token->type == CPP_NUMBER && token->val.str.len == 1)
d3a34a0a 739 {
345894b4 740 unsigned int flag = token->val.str.text[0] - '0';
28e0f040
NB
741
742 if (flag > last && flag <= 4
743 && (flag != 4 || last == 3)
744 && (flag != 2 || last == 0))
745 return flag;
d3a34a0a 746 }
93c80368 747
345894b4 748 if (token->type != CPP_EOF)
0527bc4e 749 cpp_error (pfile, CPP_DL_ERROR, "invalid flag \"%s\" in line directive",
345894b4 750 cpp_token_as_text (pfile, token));
93c80368 751 return 0;
d3a34a0a
JM
752}
753
dcc229e5
ZW
754/* Subroutine of do_line and do_linemarker. Convert a number in STR,
755 of length LEN, to binary; store it in NUMP, and return 0 if the
756 number was well-formed, 1 if not. Temporary, hopefully. */
041c3194 757static int
6cf87ca4 758strtoul_for_line (const uchar *str, unsigned int len, long unsigned int *nump)
041c3194
ZW
759{
760 unsigned long reg = 0;
562a5c27 761 uchar c;
041c3194
ZW
762 while (len--)
763 {
764 c = *str++;
765 if (!ISDIGIT (c))
766 return 1;
767 reg *= 10;
768 reg += c - '0';
769 }
770 *nump = reg;
771 return 0;
772}
773
6de1e2a9 774/* Interpret #line command.
dcc229e5
ZW
775 Note that the filename string (if any) is a true string constant
776 (escapes are interpreted), unlike in #line. */
711b8824 777static void
6cf87ca4 778do_line (cpp_reader *pfile)
7f2935c7 779{
12f9df4e 780 const struct line_map *map = linemap_lookup (pfile->line_table, pfile->line);
4ed5bcfb 781 const cpp_token *token;
12f9df4e 782 const char *new_file = map->to_file;
bb74c963 783 unsigned long new_lineno;
93c80368 784
27e2564a 785 /* C99 raised the minimum limit on #line numbers. */
dcc229e5 786 unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
18a9d8ff 787
93c80368 788 /* #line commands expand macros. */
4ed5bcfb
NB
789 token = cpp_get_token (pfile);
790 if (token->type != CPP_NUMBER
791 || strtoul_for_line (token->val.str.text, token->val.str.len,
792 &new_lineno))
7f2935c7 793 {
0527bc4e 794 cpp_error (pfile, CPP_DL_ERROR,
ebef4e8c 795 "\"%s\" after #line is not a positive integer",
4ed5bcfb 796 cpp_token_as_text (pfile, token));
9ec7291f 797 return;
df383483 798 }
7f2935c7 799
dcc229e5 800 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
0527bc4e 801 cpp_error (pfile, CPP_DL_PEDWARN, "line number out of range");
7f2935c7 802
4ed5bcfb
NB
803 token = cpp_get_token (pfile);
804 if (token->type == CPP_STRING)
5538ada6 805 {
e6cc3a24 806 cpp_string s = { 0, 0 };
423e95e2
EC
807 if (cpp_interpret_string_notranslate (pfile, &token->val.str, 1,
808 &s, false))
e6cc3a24 809 new_file = (const char *)s.text;
dcc229e5
ZW
810 check_eol (pfile);
811 }
812 else if (token->type != CPP_EOF)
813 {
0527bc4e 814 cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
dcc229e5
ZW
815 cpp_token_as_text (pfile, token));
816 return;
817 }
818
819 skip_rest_of_line (pfile);
820 _cpp_do_file_change (pfile, LC_RENAME, new_file, new_lineno,
12f9df4e 821 map->sysp);
dcc229e5
ZW
822}
823
824/* Interpret the # 44 "file" [flags] notation, which has slightly
825 different syntax and semantics from #line: Flags are allowed,
826 and we never complain about the line number being too big. */
827static void
6cf87ca4 828do_linemarker (cpp_reader *pfile)
dcc229e5 829{
12f9df4e 830 const struct line_map *map = linemap_lookup (pfile->line_table, pfile->line);
dcc229e5 831 const cpp_token *token;
12f9df4e 832 const char *new_file = map->to_file;
dcc229e5 833 unsigned long new_lineno;
12f9df4e 834 unsigned int new_sysp = map->sysp;
dcc229e5
ZW
835 enum lc_reason reason = LC_RENAME;
836 int flag;
837
838 /* Back up so we can get the number again. Putting this in
839 _cpp_handle_directive risks two calls to _cpp_backup_tokens in
840 some circumstances, which can segfault. */
841 _cpp_backup_tokens (pfile, 1);
842
843 /* #line commands expand macros. */
844 token = cpp_get_token (pfile);
845 if (token->type != CPP_NUMBER
846 || strtoul_for_line (token->val.str.text, token->val.str.len,
847 &new_lineno))
848 {
0527bc4e
JDA
849 cpp_error (pfile, CPP_DL_ERROR,
850 "\"%s\" after # is not a positive integer",
dcc229e5
ZW
851 cpp_token_as_text (pfile, token));
852 return;
df383483 853 }
941e09b6 854
dcc229e5
ZW
855 token = cpp_get_token (pfile);
856 if (token->type == CPP_STRING)
857 {
e6cc3a24 858 cpp_string s = { 0, 0 };
423e95e2
EC
859 if (cpp_interpret_string_notranslate (pfile, &token->val.str,
860 1, &s, false))
e6cc3a24 861 new_file = (const char *)s.text;
cf551fba 862
dcc229e5
ZW
863 new_sysp = 0;
864 flag = read_flag (pfile, 0);
865 if (flag == 1)
866 {
867 reason = LC_ENTER;
868 /* Fake an include for cpp_included (). */
869 _cpp_fake_include (pfile, new_file);
870 flag = read_flag (pfile, flag);
871 }
872 else if (flag == 2)
873 {
874 reason = LC_LEAVE;
875 flag = read_flag (pfile, flag);
876 }
877 if (flag == 3)
93c80368 878 {
dcc229e5
ZW
879 new_sysp = 1;
880 flag = read_flag (pfile, flag);
881 if (flag == 4)
882 new_sysp = 2;
12f9df4e 883 pfile->buffer->sysp = new_sysp;
93c80368 884 }
dcc229e5 885
fde84349 886 check_eol (pfile);
041c3194 887 }
4ed5bcfb 888 else if (token->type != CPP_EOF)
27e2564a 889 {
0527bc4e 890 cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
4ed5bcfb 891 cpp_token_as_text (pfile, token));
27e2564a
NB
892 return;
893 }
7f2935c7 894
bdcbe496 895 skip_rest_of_line (pfile);
bb74c963 896 _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp);
27e2564a
NB
897}
898
67821e3a 899/* Arrange the file_change callback. pfile->line has changed to
47d89cf3 900 FILE_LINE of TO_FILE, for reason REASON. SYSP is 1 for a system
a1f300c0 901 header, 2 for a system header that needs to be extern "C" protected,
47d89cf3 902 and zero otherwise. */
eb1f4d9d 903void
6cf87ca4
ZW
904_cpp_do_file_change (cpp_reader *pfile, enum lc_reason reason,
905 const char *to_file, unsigned int file_line,
906 unsigned int sysp)
27e2564a 907{
12f9df4e
PB
908 const struct line_map *map = linemap_add (pfile->line_table, reason, sysp,
909 to_file, file_line);
910 if (map == NULL)
911 pfile->line = 0;
912 else
913 pfile->line = linemap_line_start (pfile->line_table, map->to_line, 127);
d82fc108 914
eb1f4d9d 915 if (pfile->cb.file_change)
12f9df4e 916 pfile->cb.file_change (pfile, map);
7f2935c7 917}
941e09b6 918
5d8ebbd8
NB
919/* Report a warning or error detected by the program we are
920 processing. Use the directive's tokens in the error message. */
711b8824 921static void
6cf87ca4 922do_diagnostic (cpp_reader *pfile, int code, int print_dir)
7f2935c7 923{
12f9df4e 924 if (_cpp_begin_message (pfile, code, pfile->cur_token[-1].src_loc, 0))
58fea6af 925 {
29b10746
NB
926 if (print_dir)
927 fprintf (stderr, "#%s ", pfile->directive->name);
93c80368
NB
928 pfile->state.prevent_expansion++;
929 cpp_output_line (pfile, stderr);
930 pfile->state.prevent_expansion--;
58fea6af 931 }
7f2935c7
PB
932}
933
838f313b 934static void
6cf87ca4 935do_error (cpp_reader *pfile)
838f313b 936{
0527bc4e 937 do_diagnostic (pfile, CPP_DL_ERROR, 1);
838f313b 938}
7f2935c7 939
711b8824 940static void
6cf87ca4 941do_warning (cpp_reader *pfile)
7f2935c7 942{
2f878973 943 /* We want #warning diagnostics to be emitted in system headers too. */
0527bc4e 944 do_diagnostic (pfile, CPP_DL_WARNING_SYSHDR, 1);
7f2935c7
PB
945}
946
a2a76ce7 947/* Report program identification. */
711b8824 948static void
6cf87ca4 949do_ident (cpp_reader *pfile)
7f2935c7 950{
4ed5bcfb 951 const cpp_token *str = cpp_get_token (pfile);
58fea6af 952
4ed5bcfb 953 if (str->type != CPP_STRING)
0527bc4e 954 cpp_error (pfile, CPP_DL_ERROR, "invalid #ident directive");
93c80368 955 else if (pfile->cb.ident)
6cf87ca4 956 pfile->cb.ident (pfile, pfile->directive_line, &str->val.str);
a2a76ce7 957
93c80368 958 check_eol (pfile);
7f2935c7
PB
959}
960
a5da89c6
NB
961/* Lookup a PRAGMA name in a singly-linked CHAIN. Returns the
962 matching entry, or NULL if none is found. The returned entry could
963 be the start of a namespace chain, or a pragma. */
964static struct pragma_entry *
6cf87ca4 965lookup_pragma_entry (struct pragma_entry *chain, const cpp_hashnode *pragma)
82443371 966{
4b115ff0
NB
967 while (chain && chain->pragma != pragma)
968 chain = chain->next;
a5da89c6
NB
969
970 return chain;
971}
972
973/* Create and insert a pragma entry for NAME at the beginning of a
974 singly-linked CHAIN. If handler is NULL, it is a namespace,
975 otherwise it is a pragma and its handler. */
976static struct pragma_entry *
6cf87ca4
ZW
977insert_pragma_entry (cpp_reader *pfile, struct pragma_entry **chain,
978 const cpp_hashnode *pragma, pragma_cb handler)
82443371 979{
a5da89c6 980 struct pragma_entry *new;
58fea6af 981
bef985f3 982 new = (struct pragma_entry *)
8c3b2693 983 _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry));
4b115ff0 984 new->pragma = pragma;
a5da89c6
NB
985 if (handler)
986 {
987 new->is_nspace = 0;
988 new->u.handler = handler;
989 }
990 else
991 {
992 new->is_nspace = 1;
993 new->u.space = NULL;
994 }
58fea6af 995
a5da89c6
NB
996 new->next = *chain;
997 *chain = new;
998 return new;
58fea6af 999}
82443371 1000
a5da89c6
NB
1001/* Register a pragma NAME in namespace SPACE. If SPACE is null, it
1002 goes in the global namespace. HANDLER is the handler it will call,
1003 which must be non-NULL. */
58fea6af 1004void
6cf87ca4
ZW
1005cpp_register_pragma (cpp_reader *pfile, const char *space, const char *name,
1006 pragma_cb handler)
82443371 1007{
a5da89c6
NB
1008 struct pragma_entry **chain = &pfile->pragmas;
1009 struct pragma_entry *entry;
4b115ff0 1010 const cpp_hashnode *node;
a5da89c6
NB
1011
1012 if (!handler)
1013 abort ();
58fea6af 1014
a5da89c6 1015 if (space)
58fea6af 1016 {
4b115ff0
NB
1017 node = cpp_lookup (pfile, U space, strlen (space));
1018 entry = lookup_pragma_entry (*chain, node);
a5da89c6 1019 if (!entry)
4b115ff0 1020 entry = insert_pragma_entry (pfile, chain, node, NULL);
a5da89c6
NB
1021 else if (!entry->is_nspace)
1022 goto clash;
1023 chain = &entry->u.space;
58fea6af
ZW
1024 }
1025
a5da89c6 1026 /* Check for duplicates. */
4b115ff0
NB
1027 node = cpp_lookup (pfile, U name, strlen (name));
1028 entry = lookup_pragma_entry (*chain, node);
a5da89c6
NB
1029 if (entry)
1030 {
1031 if (entry->is_nspace)
1032 clash:
0527bc4e 1033 cpp_error (pfile, CPP_DL_ICE,
a5da89c6 1034 "registering \"%s\" as both a pragma and a pragma namespace",
4b115ff0 1035 NODE_NAME (node));
a5da89c6 1036 else if (space)
0527bc4e 1037 cpp_error (pfile, CPP_DL_ICE, "#pragma %s %s is already registered",
ebef4e8c 1038 space, name);
a5da89c6 1039 else
0527bc4e 1040 cpp_error (pfile, CPP_DL_ICE, "#pragma %s is already registered", name);
a5da89c6
NB
1041 }
1042 else
4b115ff0 1043 insert_pragma_entry (pfile, chain, node, handler);
58fea6af 1044}
a5da89c6
NB
1045
1046/* Register the pragmas the preprocessor itself handles. */
58fea6af 1047void
6cf87ca4 1048_cpp_init_internal_pragmas (cpp_reader *pfile)
58fea6af 1049{
a5da89c6 1050 /* Pragmas in the global namespace. */
58fea6af
ZW
1051 cpp_register_pragma (pfile, 0, "once", do_pragma_once);
1052
a5da89c6 1053 /* New GCC-specific pragmas should be put in the GCC namespace. */
58fea6af
ZW
1054 cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
1055 cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
1056 cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
82443371 1057}
7f2935c7 1058
17211ab5
GK
1059/* Return the number of registered pragmas in PE. */
1060
1061static int
6cf87ca4 1062count_registered_pragmas (struct pragma_entry *pe)
17211ab5
GK
1063{
1064 int ct = 0;
1065 for (; pe != NULL; pe = pe->next)
1066 {
1067 if (pe->is_nspace)
1068 ct += count_registered_pragmas (pe->u.space);
1069 ct++;
1070 }
1071 return ct;
1072}
1073
1074/* Save into SD the names of the registered pragmas referenced by PE,
1075 and return a pointer to the next free space in SD. */
1076
1077static char **
6cf87ca4 1078save_registered_pragmas (struct pragma_entry *pe, char **sd)
17211ab5
GK
1079{
1080 for (; pe != NULL; pe = pe->next)
1081 {
1082 if (pe->is_nspace)
1083 sd = save_registered_pragmas (pe->u.space, sd);
1084 *sd++ = xmemdup (HT_STR (&pe->pragma->ident),
1085 HT_LEN (&pe->pragma->ident),
1086 HT_LEN (&pe->pragma->ident) + 1);
1087 }
1088 return sd;
1089}
1090
1091/* Return a newly-allocated array which saves the names of the
1092 registered pragmas. */
1093
1094char **
6cf87ca4 1095_cpp_save_pragma_names (cpp_reader *pfile)
17211ab5
GK
1096{
1097 int ct = count_registered_pragmas (pfile->pragmas);
1098 char **result = xnewvec (char *, ct);
1099 (void) save_registered_pragmas (pfile->pragmas, result);
1100 return result;
1101}
1102
1103/* Restore from SD the names of the registered pragmas referenced by PE,
1104 and return a pointer to the next unused name in SD. */
1105
1106static char **
6cf87ca4
ZW
1107restore_registered_pragmas (cpp_reader *pfile, struct pragma_entry *pe,
1108 char **sd)
17211ab5
GK
1109{
1110 for (; pe != NULL; pe = pe->next)
1111 {
1112 if (pe->is_nspace)
1113 sd = restore_registered_pragmas (pfile, pe->u.space, sd);
1114 pe->pragma = cpp_lookup (pfile, U *sd, strlen (*sd));
1115 free (*sd);
1116 sd++;
1117 }
1118 return sd;
1119}
1120
1121/* Restore the names of the registered pragmas from SAVED. */
1122
1123void
6cf87ca4 1124_cpp_restore_pragma_names (cpp_reader *pfile, char **saved)
17211ab5
GK
1125{
1126 (void) restore_registered_pragmas (pfile, pfile->pragmas, saved);
1127 free (saved);
1128}
1129
a5da89c6
NB
1130/* Pragmata handling. We handle some, and pass the rest on to the
1131 front end. C99 defines three pragmas and says that no macro
1132 expansion is to be performed on them; whether or not macro
1133 expansion happens for other pragmas is implementation defined.
1134 This implementation never macro-expands the text after #pragma. */
711b8824 1135static void
6cf87ca4 1136do_pragma (cpp_reader *pfile)
7f2935c7 1137{
a5da89c6 1138 const struct pragma_entry *p = NULL;
e2e1fa50 1139 const cpp_token *token, *pragma_token = pfile->cur_token;
a5da89c6 1140 unsigned int count = 1;
add7091b 1141
93c80368 1142 pfile->state.prevent_expansion++;
58fea6af 1143
4ed5bcfb
NB
1144 token = cpp_get_token (pfile);
1145 if (token->type == CPP_NAME)
0172e2bc 1146 {
4b115ff0 1147 p = lookup_pragma_entry (pfile->pragmas, token->val.node);
a5da89c6 1148 if (p && p->is_nspace)
58fea6af 1149 {
a5da89c6
NB
1150 count = 2;
1151 token = cpp_get_token (pfile);
1152 if (token->type == CPP_NAME)
4b115ff0 1153 p = lookup_pragma_entry (p->u.space, token->val.node);
a5da89c6
NB
1154 else
1155 p = NULL;
58fea6af 1156 }
58fea6af 1157 }
041c3194 1158
a5da89c6 1159 if (p)
e2e1fa50
AO
1160 {
1161 /* Since the handler below doesn't get the line number, that it
1162 might need for diagnostics, make sure it has the right
1163 numbers in place. */
1164 if (pfile->cb.line_change)
1165 (*pfile->cb.line_change) (pfile, pragma_token, false);
1166 (*p->u.handler) (pfile);
e2e1fa50 1167 }
d82fc108 1168 else if (pfile->cb.def_pragma)
bdcbe496
NB
1169 {
1170 _cpp_backup_tokens (pfile, count);
6cf87ca4 1171 pfile->cb.def_pragma (pfile, pfile->directive_line);
bdcbe496 1172 }
a5da89c6 1173
97293897 1174 pfile->state.prevent_expansion--;
82443371
NS
1175}
1176
5d8ebbd8 1177/* Handle #pragma once. */
58fea6af 1178static void
6cf87ca4 1179do_pragma_once (cpp_reader *pfile)
a2a76ce7 1180{
642ce434 1181 if (pfile->buffer->prev == NULL)
0527bc4e 1182 cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file");
93c80368
NB
1183
1184 check_eol (pfile);
49634b3a 1185 _cpp_mark_file_once_only (pfile, pfile->buffer->file);
a2a76ce7 1186}
fc009f96 1187
c3bf3e6e
NB
1188/* Handle #pragma GCC poison, to poison one or more identifiers so
1189 that the lexer produces a hard error for each subsequent usage. */
58fea6af 1190static void
6cf87ca4 1191do_pragma_poison (cpp_reader *pfile)
a2a76ce7 1192{
345894b4 1193 const cpp_token *tok;
f8f769ea 1194 cpp_hashnode *hp;
a2a76ce7 1195
93c80368 1196 pfile->state.poisoned_ok = 1;
a2a76ce7
ZW
1197 for (;;)
1198 {
345894b4
NB
1199 tok = _cpp_lex_token (pfile);
1200 if (tok->type == CPP_EOF)
a2a76ce7 1201 break;
345894b4 1202 if (tok->type != CPP_NAME)
fc009f96 1203 {
0527bc4e
JDA
1204 cpp_error (pfile, CPP_DL_ERROR,
1205 "invalid #pragma GCC poison directive");
93c80368 1206 break;
fc009f96
GK
1207 }
1208
345894b4 1209 hp = tok->val.node;
93c80368
NB
1210 if (hp->flags & NODE_POISONED)
1211 continue;
1212
1213 if (hp->type == NT_MACRO)
0527bc4e 1214 cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro \"%s\"",
ebef4e8c 1215 NODE_NAME (hp));
93c80368
NB
1216 _cpp_free_definition (hp);
1217 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
fc009f96 1218 }
93c80368 1219 pfile->state.poisoned_ok = 0;
7f2935c7 1220}
2c0b35cb
ZW
1221
1222/* Mark the current header as a system header. This will suppress
1223 some categories of warnings (notably those from -pedantic). It is
1224 intended for use in system libraries that cannot be implemented in
1225 conforming C, but cannot be certain that their headers appear in a
1226 system include directory. To prevent abuse, it is rejected in the
1227 primary source file. */
58fea6af 1228static void
6cf87ca4 1229do_pragma_system_header (cpp_reader *pfile)
2c0b35cb 1230{
614c7d37
NB
1231 cpp_buffer *buffer = pfile->buffer;
1232
1233 if (buffer->prev == 0)
0527bc4e 1234 cpp_error (pfile, CPP_DL_WARNING,
ebef4e8c 1235 "#pragma system_header ignored outside include file");
2c0b35cb 1236 else
d82fc108
NB
1237 {
1238 check_eol (pfile);
bdcbe496 1239 skip_rest_of_line (pfile);
d82fc108
NB
1240 cpp_make_system_header (pfile, 1, 0);
1241 }
2c0b35cb 1242}
f3f751ad
NS
1243
1244/* Check the modified date of the current include file against a specified
1245 file. Issue a diagnostic, if the specified file is newer. We use this to
1246 determine if a fixed header should be refixed. */
58fea6af 1247static void
6cf87ca4 1248do_pragma_dependency (cpp_reader *pfile)
f3f751ad 1249{
74eb4b3e
NB
1250 const char *fname;
1251 int angle_brackets, ordering;
df383483 1252
74eb4b3e
NB
1253 fname = parse_include (pfile, &angle_brackets);
1254 if (!fname)
58fea6af 1255 return;
041c3194 1256
74eb4b3e 1257 ordering = _cpp_compare_file_date (pfile, fname, angle_brackets);
f3f751ad 1258 if (ordering < 0)
0527bc4e 1259 cpp_error (pfile, CPP_DL_WARNING, "cannot find source file %s", fname);
f3f751ad
NS
1260 else if (ordering > 0)
1261 {
0527bc4e
JDA
1262 cpp_error (pfile, CPP_DL_WARNING,
1263 "current file is older than %s", fname);
4ed5bcfb 1264 if (cpp_get_token (pfile)->type != CPP_EOF)
bdcbe496
NB
1265 {
1266 _cpp_backup_tokens (pfile, 1);
0527bc4e 1267 do_diagnostic (pfile, CPP_DL_WARNING, 0);
bdcbe496 1268 }
f3f751ad 1269 }
74eb4b3e 1270
fad205ff 1271 free ((void *) fname);
f3f751ad
NS
1272}
1273
4ed5bcfb
NB
1274/* Get a token but skip padding. */
1275static const cpp_token *
6cf87ca4 1276get_token_no_padding (cpp_reader *pfile)
a5c3cccd 1277{
4ed5bcfb
NB
1278 for (;;)
1279 {
1280 const cpp_token *result = cpp_get_token (pfile);
1281 if (result->type != CPP_PADDING)
1282 return result;
1283 }
1284}
a5c3cccd 1285
4ed5bcfb
NB
1286/* Check syntax is "(string-literal)". Returns the string on success,
1287 or NULL on failure. */
1288static const cpp_token *
6cf87ca4 1289get__Pragma_string (cpp_reader *pfile)
4ed5bcfb
NB
1290{
1291 const cpp_token *string;
a5c3cccd 1292
4ed5bcfb
NB
1293 if (get_token_no_padding (pfile)->type != CPP_OPEN_PAREN)
1294 return NULL;
1295
1296 string = get_token_no_padding (pfile);
a5c3cccd 1297 if (string->type != CPP_STRING && string->type != CPP_WSTRING)
4ed5bcfb
NB
1298 return NULL;
1299
1300 if (get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
1301 return NULL;
a5c3cccd 1302
4ed5bcfb 1303 return string;
a5c3cccd
NB
1304}
1305
87062813
NB
1306/* Destringize IN into a temporary buffer, by removing the first \ of
1307 \" and \\ sequences, and process the result as a #pragma directive. */
1308static void
6cf87ca4 1309destringize_and_run (cpp_reader *pfile, const cpp_string *in)
a5c3cccd
NB
1310{
1311 const unsigned char *src, *limit;
87062813 1312 char *dest, *result;
a5c3cccd 1313
6338b358
NB
1314 dest = result = alloca (in->len - 1);
1315 src = in->text + 1 + (in->text[0] == 'L');
1316 limit = in->text + in->len - 1;
1317 while (src < limit)
a5c3cccd
NB
1318 {
1319 /* We know there is a character following the backslash. */
1320 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1321 src++;
1322 *dest++ = *src++;
1323 }
26aea073 1324 *dest = '\n';
a5c3cccd 1325
8128cccf
NB
1326 /* Ugh; an awful kludge. We are really not set up to be lexing
1327 tokens when in the middle of a macro expansion. Use a new
1328 context to force cpp_get_token to lex, and so skip_rest_of_line
1329 doesn't go beyond the end of the text. Also, remember the
1330 current lexing position so we can return to it later.
1331
1332 Something like line-at-a-time lexing should remove the need for
1333 this. */
1334 {
1335 cpp_context *saved_context = pfile->context;
1336 cpp_token *saved_cur_token = pfile->cur_token;
1337 tokenrun *saved_cur_run = pfile->cur_run;
1338
1339 pfile->context = xnew (cpp_context);
1340 pfile->context->macro = 0;
1341 pfile->context->prev = 0;
1342 run_directive (pfile, T_PRAGMA, result, dest - result);
1343 free (pfile->context);
1344 pfile->context = saved_context;
1345 pfile->cur_token = saved_cur_token;
1346 pfile->cur_run = saved_cur_run;
8128cccf 1347 }
79ba5e3b
NB
1348
1349 /* See above comment. For the moment, we'd like
1350
1351 token1 _Pragma ("foo") token2
1352
1353 to be output as
1354
1355 token1
1356 # 7 "file.c"
1357 #pragma foo
1358 # 7 "file.c"
1359 token2
1360
1361 Getting the line markers is a little tricky. */
1362 if (pfile->cb.line_change)
6cf87ca4 1363 pfile->cb.line_change (pfile, pfile->cur_token, false);
a5c3cccd
NB
1364}
1365
87062813 1366/* Handle the _Pragma operator. */
a5c3cccd 1367void
6cf87ca4 1368_cpp_do__Pragma (cpp_reader *pfile)
a5c3cccd 1369{
4ed5bcfb 1370 const cpp_token *string = get__Pragma_string (pfile);
a5c3cccd 1371
79ba5e3b
NB
1372 if (string)
1373 destringize_and_run (pfile, &string->val.str);
1374 else
0527bc4e 1375 cpp_error (pfile, CPP_DL_ERROR,
ebef4e8c 1376 "_Pragma takes a parenthesized string literal");
a5c3cccd
NB
1377}
1378
6cf87ca4 1379/* Ignore #sccs on all systems. */
711b8824 1380static void
6cf87ca4 1381do_sccs (cpp_reader *pfile ATTRIBUTE_UNUSED)
7f2935c7 1382{
7f2935c7 1383}
1d0e51ba 1384
5d8ebbd8 1385/* Handle #ifdef. */
711b8824 1386static void
6cf87ca4 1387do_ifdef (cpp_reader *pfile)
168d3732 1388{
93c80368 1389 int skip = 1;
041c3194 1390
cef0d199 1391 if (! pfile->state.skipping)
93c80368
NB
1392 {
1393 const cpp_hashnode *node = lex_macro_node (pfile);
041c3194 1394
93c80368 1395 if (node)
a69cbaac
NB
1396 {
1397 skip = node->type != NT_MACRO;
1398 _cpp_mark_macro_used (node);
1399 check_eol (pfile);
1400 }
93c80368 1401 }
168d3732 1402
93c80368
NB
1403 push_conditional (pfile, skip, T_IFDEF, 0);
1404}
168d3732 1405
5d8ebbd8 1406/* Handle #ifndef. */
711b8824 1407static void
6cf87ca4 1408do_ifndef (cpp_reader *pfile)
168d3732 1409{
93c80368 1410 int skip = 1;
bfb9dc7f 1411 const cpp_hashnode *node = 0;
168d3732 1412
cef0d199 1413 if (! pfile->state.skipping)
5af7e2c2 1414 {
93c80368 1415 node = lex_macro_node (pfile);
b43db0b3
GK
1416
1417 if (node)
a69cbaac
NB
1418 {
1419 skip = node->type == NT_MACRO;
1420 _cpp_mark_macro_used (node);
1421 check_eol (pfile);
1422 }
5af7e2c2 1423 }
041c3194 1424
93c80368 1425 push_conditional (pfile, skip, T_IFNDEF, node);
7f2935c7
PB
1426}
1427
6d18adbc
NB
1428/* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in
1429 pfile->mi_ind_cmacro so we can handle multiple-include
6356f892 1430 optimizations. If macro expansion occurs in the expression, we
6d18adbc
NB
1431 cannot treat it as a controlling conditional, since the expansion
1432 could change in the future. That is handled by cpp_get_token. */
711b8824 1433static void
6cf87ca4 1434do_if (cpp_reader *pfile)
7f2935c7 1435{
93c80368 1436 int skip = 1;
7f2935c7 1437
cef0d199 1438 if (! pfile->state.skipping)
87ed109f 1439 skip = _cpp_parse_expr (pfile) == false;
93c80368 1440
6d18adbc 1441 push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro);
7f2935c7
PB
1442}
1443
b528a07e 1444/* Flip skipping state if appropriate and continue without changing
ea4a453b
ZW
1445 if_stack; this is so that the error message for missing #endif's
1446 etc. will point to the original #if. */
711b8824 1447static void
6cf87ca4 1448do_else (cpp_reader *pfile)
ed705a82 1449{
b528a07e
NB
1450 cpp_buffer *buffer = pfile->buffer;
1451 struct if_stack *ifs = buffer->if_stack;
ff2b53ef 1452
ea4a453b 1453 if (ifs == NULL)
0527bc4e 1454 cpp_error (pfile, CPP_DL_ERROR, "#else without #if");
93c80368 1455 else
ff2b53ef 1456 {
93c80368
NB
1457 if (ifs->type == T_ELSE)
1458 {
0527bc4e
JDA
1459 cpp_error (pfile, CPP_DL_ERROR, "#else after #else");
1460 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
93c80368
NB
1461 "the conditional began here");
1462 }
b528a07e
NB
1463 ifs->type = T_ELSE;
1464
cef0d199
NB
1465 /* Skip any future (erroneous) #elses or #elifs. */
1466 pfile->state.skipping = ifs->skip_elses;
1467 ifs->skip_elses = true;
7f2935c7 1468
93c80368
NB
1469 /* Invalidate any controlling macro. */
1470 ifs->mi_cmacro = 0;
93c80368 1471
cef0d199 1472 /* Only check EOL if was not originally skipping. */
909de5da 1473 if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
cef0d199
NB
1474 check_eol (pfile);
1475 }
7f2935c7
PB
1476}
1477
5d8ebbd8 1478/* Handle a #elif directive by not changing if_stack either. See the
93c80368 1479 comment above do_else. */
711b8824 1480static void
6cf87ca4 1481do_elif (cpp_reader *pfile)
7f2935c7 1482{
b528a07e
NB
1483 cpp_buffer *buffer = pfile->buffer;
1484 struct if_stack *ifs = buffer->if_stack;
7f2935c7 1485
ea4a453b 1486 if (ifs == NULL)
0527bc4e 1487 cpp_error (pfile, CPP_DL_ERROR, "#elif without #if");
b528a07e 1488 else
40ea76de 1489 {
b528a07e
NB
1490 if (ifs->type == T_ELSE)
1491 {
0527bc4e
JDA
1492 cpp_error (pfile, CPP_DL_ERROR, "#elif after #else");
1493 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
b528a07e
NB
1494 "the conditional began here");
1495 }
1496 ifs->type = T_ELIF;
93c80368 1497
cef0d199
NB
1498 /* Only evaluate this if we aren't skipping elses. During
1499 evaluation, set skipping to false to get lexer warnings. */
1500 if (ifs->skip_elses)
1501 pfile->state.skipping = 1;
1502 else
b528a07e 1503 {
cef0d199
NB
1504 pfile->state.skipping = 0;
1505 pfile->state.skipping = ! _cpp_parse_expr (pfile);
1506 ifs->skip_elses = ! pfile->state.skipping;
b528a07e 1507 }
cef0d199
NB
1508
1509 /* Invalidate any controlling macro. */
1510 ifs->mi_cmacro = 0;
40ea76de 1511 }
7f2935c7
PB
1512}
1513
cef0d199 1514/* #endif pops the if stack and resets pfile->state.skipping. */
711b8824 1515static void
6cf87ca4 1516do_endif (cpp_reader *pfile)
7f2935c7 1517{
b528a07e
NB
1518 cpp_buffer *buffer = pfile->buffer;
1519 struct if_stack *ifs = buffer->if_stack;
ea4a453b 1520
ea4a453b 1521 if (ifs == NULL)
0527bc4e 1522 cpp_error (pfile, CPP_DL_ERROR, "#endif without #if");
7f2935c7
PB
1523 else
1524 {
cef0d199 1525 /* Only check EOL if was not originally skipping. */
909de5da 1526 if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
cef0d199
NB
1527 check_eol (pfile);
1528
93c80368
NB
1529 /* If potential control macro, we go back outside again. */
1530 if (ifs->next == 0 && ifs->mi_cmacro)
1531 {
6d18adbc 1532 pfile->mi_valid = true;
93c80368
NB
1533 pfile->mi_cmacro = ifs->mi_cmacro;
1534 }
1535
b528a07e 1536 buffer->if_stack = ifs->next;
cef0d199 1537 pfile->state.skipping = ifs->was_skipping;
2a967f3d 1538 obstack_free (&pfile->buffer_ob, ifs);
7f2935c7 1539 }
93c80368 1540}
041c3194 1541
5d8ebbd8
NB
1542/* Push an if_stack entry for a preprocessor conditional, and set
1543 pfile->state.skipping to SKIP. If TYPE indicates the conditional
1544 is #if or #ifndef, CMACRO is a potentially controlling macro, and
1545 we need to check here that we are at the top of the file. */
ea4a453b 1546static void
6cf87ca4
ZW
1547push_conditional (cpp_reader *pfile, int skip, int type,
1548 const cpp_hashnode *cmacro)
ea4a453b
ZW
1549{
1550 struct if_stack *ifs;
b528a07e 1551 cpp_buffer *buffer = pfile->buffer;
ea4a453b 1552
2a967f3d 1553 ifs = xobnew (&pfile->buffer_ob, struct if_stack);
50410426 1554 ifs->line = pfile->directive_line;
b528a07e 1555 ifs->next = buffer->if_stack;
cef0d199
NB
1556 ifs->skip_elses = pfile->state.skipping || !skip;
1557 ifs->was_skipping = pfile->state.skipping;
ea4a453b 1558 ifs->type = type;
6d18adbc
NB
1559 /* This condition is effectively a test for top-of-file. */
1560 if (pfile->mi_valid && pfile->mi_cmacro == 0)
93c80368
NB
1561 ifs->mi_cmacro = cmacro;
1562 else
1563 ifs->mi_cmacro = 0;
ea4a453b 1564
cef0d199 1565 pfile->state.skipping = skip;
b528a07e 1566 buffer->if_stack = ifs;
782331f4 1567}
7061aa5a 1568
5d8ebbd8
NB
1569/* Read the tokens of the answer into the macro pool, in a directive
1570 of type TYPE. Only commit the memory if we intend it as permanent
1571 storage, i.e. the #assert case. Returns 0 on success, and sets
1572 ANSWERP to point to the answer. */
93c80368 1573static int
6cf87ca4 1574parse_answer (cpp_reader *pfile, struct answer **answerp, int type)
7f2935c7 1575{
4ed5bcfb 1576 const cpp_token *paren;
93c80368 1577 struct answer *answer;
8c3b2693 1578 unsigned int acount;
93c80368
NB
1579
1580 /* In a conditional, it is legal to not have an open paren. We
1581 should save the following token in this case. */
4ed5bcfb 1582 paren = cpp_get_token (pfile);
93c80368
NB
1583
1584 /* If not a paren, see if we're OK. */
4ed5bcfb 1585 if (paren->type != CPP_OPEN_PAREN)
041c3194 1586 {
93c80368
NB
1587 /* In a conditional no answer is a test for any answer. It
1588 could be followed by any token. */
1589 if (type == T_IF)
bdcbe496
NB
1590 {
1591 _cpp_backup_tokens (pfile, 1);
1592 return 0;
1593 }
93c80368
NB
1594
1595 /* #unassert with no answer is valid - it removes all answers. */
4ed5bcfb 1596 if (type == T_UNASSERT && paren->type == CPP_EOF)
93c80368 1597 return 0;
15dad1d9 1598
0527bc4e 1599 cpp_error (pfile, CPP_DL_ERROR, "missing '(' after predicate");
93c80368 1600 return 1;
041c3194 1601 }
7061aa5a 1602
8c3b2693 1603 for (acount = 0;; acount++)
041c3194 1604 {
8c3b2693
NB
1605 size_t room_needed;
1606 const cpp_token *token = cpp_get_token (pfile);
1607 cpp_token *dest;
93c80368 1608
041c3194
ZW
1609 if (token->type == CPP_CLOSE_PAREN)
1610 break;
a7abcbbf 1611
93c80368 1612 if (token->type == CPP_EOF)
041c3194 1613 {
0527bc4e 1614 cpp_error (pfile, CPP_DL_ERROR, "missing ')' to complete answer");
93c80368 1615 return 1;
041c3194 1616 }
8c3b2693
NB
1617
1618 /* struct answer includes the space for one token. */
1619 room_needed = (sizeof (struct answer) + acount * sizeof (cpp_token));
1620
1621 if (BUFF_ROOM (pfile->a_buff) < room_needed)
1622 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (struct answer));
1623
1624 dest = &((struct answer *) BUFF_FRONT (pfile->a_buff))->first[acount];
1625 *dest = *token;
1626
1627 /* Drop whitespace at start, for answer equivalence purposes. */
1628 if (acount == 0)
1629 dest->flags &= ~PREV_WHITE;
041c3194 1630 }
15dad1d9 1631
8c3b2693 1632 if (acount == 0)
7061aa5a 1633 {
0527bc4e 1634 cpp_error (pfile, CPP_DL_ERROR, "predicate's answer is empty");
93c80368 1635 return 1;
7f2935c7 1636 }
041c3194 1637
8c3b2693
NB
1638 answer = (struct answer *) BUFF_FRONT (pfile->a_buff);
1639 answer->count = acount;
1640 answer->next = NULL;
93c80368 1641 *answerp = answer;
041c3194 1642
93c80368
NB
1643 return 0;
1644}
041c3194 1645
5d8ebbd8
NB
1646/* Parses an assertion directive of type TYPE, returning a pointer to
1647 the hash node of the predicate, or 0 on error. If an answer was
1648 supplied, it is placed in ANSWERP, otherwise it is set to 0. */
93c80368 1649static cpp_hashnode *
6cf87ca4 1650parse_assertion (cpp_reader *pfile, struct answer **answerp, int type)
93c80368
NB
1651{
1652 cpp_hashnode *result = 0;
4ed5bcfb 1653 const cpp_token *predicate;
93c80368
NB
1654
1655 /* We don't expand predicates or answers. */
1656 pfile->state.prevent_expansion++;
1657
93c80368 1658 *answerp = 0;
4ed5bcfb
NB
1659 predicate = cpp_get_token (pfile);
1660 if (predicate->type == CPP_EOF)
0527bc4e 1661 cpp_error (pfile, CPP_DL_ERROR, "assertion without predicate");
4ed5bcfb 1662 else if (predicate->type != CPP_NAME)
0527bc4e 1663 cpp_error (pfile, CPP_DL_ERROR, "predicate must be an identifier");
93c80368
NB
1664 else if (parse_answer (pfile, answerp, type) == 0)
1665 {
4ed5bcfb 1666 unsigned int len = NODE_LEN (predicate->val.node);
93c80368 1667 unsigned char *sym = alloca (len + 1);
041c3194 1668
93c80368
NB
1669 /* Prefix '#' to get it out of macro namespace. */
1670 sym[0] = '#';
4ed5bcfb 1671 memcpy (sym + 1, NODE_NAME (predicate->val.node), len);
93c80368
NB
1672 result = cpp_lookup (pfile, sym, len + 1);
1673 }
7061aa5a 1674
93c80368
NB
1675 pfile->state.prevent_expansion--;
1676 return result;
7f2935c7 1677}
7061aa5a 1678
5d8ebbd8 1679/* Returns a pointer to the pointer to CANDIDATE in the answer chain,
041c3194 1680 or a pointer to NULL if the answer is not in the chain. */
93c80368 1681static struct answer **
6cf87ca4 1682find_answer (cpp_hashnode *node, const struct answer *candidate)
7f2935c7 1683{
93c80368 1684 unsigned int i;
041c3194 1685 struct answer **result;
7f2935c7 1686
041c3194 1687 for (result = &node->value.answers; *result; result = &(*result)->next)
93c80368
NB
1688 {
1689 struct answer *answer = *result;
1690
1691 if (answer->count == candidate->count)
1692 {
1693 for (i = 0; i < answer->count; i++)
1694 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1695 break;
1696
1697 if (i == answer->count)
1698 break;
1699 }
1700 }
ff2b53ef 1701
041c3194
ZW
1702 return result;
1703}
15dad1d9 1704
93c80368 1705/* Test an assertion within a preprocessor conditional. Returns
da7d8304 1706 nonzero on failure, zero on success. On success, the result of
2402645b 1707 the test is written into VALUE, otherwise the value 0. */
93c80368 1708int
6cf87ca4 1709_cpp_test_assertion (cpp_reader *pfile, unsigned int *value)
93c80368
NB
1710{
1711 struct answer *answer;
1712 cpp_hashnode *node;
1713
1714 node = parse_assertion (pfile, &answer, T_IF);
2402645b
HPN
1715
1716 /* For recovery, an erroneous assertion expression is handled as a
1717 failing assertion. */
1718 *value = 0;
1719
93c80368
NB
1720 if (node)
1721 *value = (node->type == NT_ASSERTION &&
1722 (answer == 0 || *find_answer (node, answer) != 0));
91318908
NB
1723 else if (pfile->cur_token[-1].type == CPP_EOF)
1724 _cpp_backup_tokens (pfile, 1);
93c80368
NB
1725
1726 /* We don't commit the memory for the answer - it's temporary only. */
1727 return node == 0;
1728}
1729
5d8ebbd8 1730/* Handle #assert. */
711b8824 1731static void
6cf87ca4 1732do_assert (cpp_reader *pfile)
041c3194
ZW
1733{
1734 struct answer *new_answer;
1735 cpp_hashnode *node;
df383483 1736
93c80368 1737 node = parse_assertion (pfile, &new_answer, T_ASSERT);
041c3194 1738 if (node)
ff2b53ef 1739 {
93c80368
NB
1740 /* Place the new answer in the answer list. First check there
1741 is not a duplicate. */
041c3194 1742 new_answer->next = 0;
93c80368 1743 if (node->type == NT_ASSERTION)
041c3194 1744 {
93c80368
NB
1745 if (*find_answer (node, new_answer))
1746 {
0527bc4e 1747 cpp_error (pfile, CPP_DL_WARNING, "\"%s\" re-asserted",
ebef4e8c 1748 NODE_NAME (node) + 1);
93c80368
NB
1749 return;
1750 }
041c3194
ZW
1751 new_answer->next = node->value.answers;
1752 }
8c3b2693 1753
93c80368 1754 node->type = NT_ASSERTION;
041c3194 1755 node->value.answers = new_answer;
8c3b2693
NB
1756 BUFF_FRONT (pfile->a_buff) += (sizeof (struct answer)
1757 + (new_answer->count - 1)
1758 * sizeof (cpp_token));
1759 check_eol (pfile);
ff2b53ef 1760 }
041c3194 1761}
15dad1d9 1762
5d8ebbd8 1763/* Handle #unassert. */
711b8824 1764static void
6cf87ca4 1765do_unassert (cpp_reader *pfile)
041c3194
ZW
1766{
1767 cpp_hashnode *node;
93c80368 1768 struct answer *answer;
df383483 1769
93c80368
NB
1770 node = parse_assertion (pfile, &answer, T_UNASSERT);
1771 /* It isn't an error to #unassert something that isn't asserted. */
1772 if (node && node->type == NT_ASSERTION)
7061aa5a 1773 {
93c80368 1774 if (answer)
15dad1d9 1775 {
93c80368 1776 struct answer **p = find_answer (node, answer), *temp;
041c3194 1777
93c80368
NB
1778 /* Remove the answer from the list. */
1779 temp = *p;
1780 if (temp)
1781 *p = temp->next;
a7abcbbf 1782
93c80368
NB
1783 /* Did we free the last answer? */
1784 if (node->value.answers == 0)
1785 node->type = NT_VOID;
8c3b2693
NB
1786
1787 check_eol (pfile);
93c80368
NB
1788 }
1789 else
1790 _cpp_free_definition (node);
041c3194 1791 }
93c80368
NB
1792
1793 /* We don't commit the memory for the answer - it's temporary only. */
7f2935c7 1794}
7f2935c7 1795
45b966db
ZW
1796/* These are for -D, -U, -A. */
1797
1798/* Process the string STR as if it appeared as the body of a #define.
1799 If STR is just an identifier, define it with value 1.
1800 If STR has anything after the identifier, then it should
ec5c56db 1801 be identifier=definition. */
0b22d65c 1802void
6cf87ca4 1803cpp_define (cpp_reader *pfile, const char *str)
0b22d65c 1804{
45b966db
ZW
1805 char *buf, *p;
1806 size_t count;
1807
df383483 1808 /* Copy the entire option so we can modify it.
45b966db 1809 Change the first "=" in the string to a space. If there is none,
86368122
NB
1810 tack " 1" on the end. */
1811
86368122 1812 count = strlen (str);
703ad42b 1813 buf = alloca (count + 3);
86368122
NB
1814 memcpy (buf, str, count);
1815
1816 p = strchr (str, '=');
45b966db 1817 if (p)
86368122 1818 buf[p - str] = ' ';
45b966db
ZW
1819 else
1820 {
86368122
NB
1821 buf[count++] = ' ';
1822 buf[count++] = '1';
0b22d65c 1823 }
26aea073 1824 buf[count] = '\n';
cf4ed945 1825
29401c30 1826 run_directive (pfile, T_DEFINE, buf, count);
2c8f0515
ZW
1827}
1828
ad2a084d 1829/* Slight variant of the above for use by initialize_builtins. */
2c8f0515 1830void
6cf87ca4 1831_cpp_define_builtin (cpp_reader *pfile, const char *str)
2c8f0515 1832{
26aea073
NB
1833 size_t len = strlen (str);
1834 char *buf = alloca (len + 1);
1835 memcpy (buf, str, len);
1836 buf[len] = '\n';
1837 run_directive (pfile, T_DEFINE, buf, len);
45b966db 1838}
0f41302f 1839
45b966db
ZW
1840/* Process MACRO as if it appeared as the body of an #undef. */
1841void
6cf87ca4 1842cpp_undef (cpp_reader *pfile, const char *macro)
7f2935c7 1843{
26aea073
NB
1844 size_t len = strlen (macro);
1845 char *buf = alloca (len + 1);
1846 memcpy (buf, macro, len);
1847 buf[len] = '\n';
1848 run_directive (pfile, T_UNDEF, buf, len);
7f2935c7
PB
1849}
1850
ec5c56db 1851/* Process the string STR as if it appeared as the body of a #assert. */
45b966db 1852void
6cf87ca4 1853cpp_assert (cpp_reader *pfile, const char *str)
45b966db 1854{
86368122 1855 handle_assertion (pfile, str, T_ASSERT);
45b966db 1856}
7f2935c7 1857
ec5c56db 1858/* Process STR as if it appeared as the body of an #unassert. */
45b966db 1859void
6cf87ca4 1860cpp_unassert (cpp_reader *pfile, const char *str)
7f2935c7 1861{
86368122 1862 handle_assertion (pfile, str, T_UNASSERT);
df383483 1863}
3fdc651f 1864
86368122
NB
1865/* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
1866static void
6cf87ca4 1867handle_assertion (cpp_reader *pfile, const char *str, int type)
86368122
NB
1868{
1869 size_t count = strlen (str);
1870 const char *p = strchr (str, '=');
1871
26aea073
NB
1872 /* Copy the entire option so we can modify it. Change the first
1873 "=" in the string to a '(', and tack a ')' on the end. */
703ad42b 1874 char *buf = alloca (count + 2);
26aea073
NB
1875
1876 memcpy (buf, str, count);
86368122
NB
1877 if (p)
1878 {
86368122
NB
1879 buf[p - str] = '(';
1880 buf[count++] = ')';
86368122 1881 }
26aea073
NB
1882 buf[count] = '\n';
1883 str = buf;
86368122 1884
29401c30 1885 run_directive (pfile, type, str, count);
86368122
NB
1886}
1887
7e96d768
NB
1888/* The number of errors for a given reader. */
1889unsigned int
6cf87ca4 1890cpp_errors (cpp_reader *pfile)
7e96d768
NB
1891{
1892 return pfile->errors;
1893}
1894
1895/* The options structure. */
1896cpp_options *
6cf87ca4 1897cpp_get_options (cpp_reader *pfile)
7e96d768
NB
1898{
1899 return &pfile->opts;
1900}
1901
1902/* The callbacks structure. */
1903cpp_callbacks *
6cf87ca4 1904cpp_get_callbacks (cpp_reader *pfile)
7e96d768
NB
1905{
1906 return &pfile->cb;
1907}
1908
1909/* Copy the given callbacks structure to our own. */
1910void
6cf87ca4 1911cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
7e96d768
NB
1912{
1913 pfile->cb = *cb;
1914}
1915
eb1f4d9d
NB
1916/* Push a new buffer on the buffer stack. Returns the new buffer; it
1917 doesn't fail. It does not generate a file change call back; that
1918 is the responsibility of the caller. */
c71f835b 1919cpp_buffer *
6cf87ca4 1920cpp_push_buffer (cpp_reader *pfile, const uchar *buffer, size_t len,
40de9f76 1921 int from_stage3)
c71f835b 1922{
2a967f3d 1923 cpp_buffer *new = xobnew (&pfile->buffer_ob, cpp_buffer);
93c80368 1924
fde84349
NB
1925 /* Clears, amongst other things, if_stack and mi_cmacro. */
1926 memset (new, 0, sizeof (cpp_buffer));
1927
26aea073 1928 new->next_line = new->buf = buffer;
fde84349 1929 new->rlimit = buffer + len;
26aea073 1930 new->from_stage3 = from_stage3;
3cf3593f 1931 new->prev = pfile->buffer;
26aea073 1932 new->need_line = true;
0bda4760 1933
3cf3593f 1934 pfile->buffer = new;
cf551fba 1935
c71f835b
ZW
1936 return new;
1937}
1938
af0d16cd
NB
1939/* Pops a single buffer, with a file change call-back if appropriate.
1940 Then pushes the next -include file, if any remain. */
ef6e958a 1941void
6cf87ca4 1942_cpp_pop_buffer (cpp_reader *pfile)
c71f835b 1943{
fde84349 1944 cpp_buffer *buffer = pfile->buffer;
8f9b4009 1945 struct _cpp_file *inc = buffer->file;
ad2a084d 1946 struct if_stack *ifs;
c71f835b 1947
fde84349
NB
1948 /* Walk back up the conditional stack till we reach its level at
1949 entry to this file, issuing error messages. */
1950 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
0527bc4e 1951 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
fde84349 1952 "unterminated #%s", dtable[ifs->type].name);
eb1f4d9d 1953
97293897 1954 /* In case of a missing #endif. */
67821e3a 1955 pfile->state.skipping = 0;
29401c30 1956
af0d16cd 1957 /* _cpp_do_file_change expects pfile->buffer to be the new one. */
29401c30
NB
1958 pfile->buffer = buffer->prev;
1959
26aea073
NB
1960 free (buffer->notes);
1961
af0d16cd
NB
1962 /* Free the buffer object now; we may want to push a new buffer
1963 in _cpp_push_next_include_file. */
1964 obstack_free (&pfile->buffer_ob, buffer);
29401c30 1965
af0d16cd
NB
1966 if (inc)
1967 {
1968 _cpp_pop_file_buffer (pfile, inc);
1969
40de9f76 1970 _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
af0d16cd 1971 }
c71f835b
ZW
1972}
1973
05713b80 1974/* Enter all recognized directives in the hash table. */
c71f835b 1975void
6cf87ca4 1976_cpp_init_directives (cpp_reader *pfile)
c71f835b 1977{
766ee681 1978 unsigned int i;
93c80368 1979 cpp_hashnode *node;
bfb9dc7f 1980
37b8524c 1981 for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
93c80368 1982 {
766ee681 1983 node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
4977bab6
ZW
1984 node->is_directive = 1;
1985 node->directive_index = i;
93c80368 1986 }
c71f835b 1987}
This page took 1.769332 seconds and 5 git commands to generate.