]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/directives.c
2009-04-09 Richard Guenther <rguenther@suse.de>
[thirdparty/gcc.git] / libcpp / directives.c
CommitLineData
e14c5993 1/* CPP Library. (Directive handling.)
00059bc7 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
927b511f 3 1999, 2000, 2001, 2002, 2003, 2004, 2005,
7f5f3953 4 2007, 2008, 2009 Free Software Foundation, Inc.
1f99c786 5 Contributed by Per Bothner, 1994-95.
0cb8d9ae 6 Based on CCCP program by Paul Rubin, June 1986
1d6fa33f 7 Adapted to ANSI C, Richard Stallman, Jan 1987
8
9This program is free software; you can redistribute it and/or modify it
10under the terms of the GNU General Public License as published by the
11Free Software Foundation; either version 2, or (at your option) any
12later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with this program; if not, write to the Free Software
2656917a 21Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
1d6fa33f 22
ad87de1e 23#include "config.h"
1486870d 24#include "system.h"
ad87de1e 25#include "cpplib.h"
d856c8a6 26#include "internal.h"
3eb3f293 27#include "mkdeps.h"
f51c2148 28#include "obstack.h"
1d6fa33f 29
1e8b9746 30/* Stack of conditionals currently in progress
31 (including both successful and failing conditionals). */
1e8b9746 32struct if_stack
33{
34 struct if_stack *next;
4999c35b 35 linenum_type line; /* Line where condition started. */
79bd622b 36 const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
5e878517 37 bool skip_elses; /* Can future #else / #elif be skipped? */
38 bool was_skipping; /* If were skipping on entry. */
f7fdd7a1 39 int type; /* Most recent conditional for diagnostics. */
1e8b9746 40};
1e8b9746 41
c6f14ce5 42/* Contains a registered pragma or pragma namespace. */
f7fdd7a1 43typedef void (*pragma_cb) (cpp_reader *);
c6f14ce5 44struct pragma_entry
45{
46 struct pragma_entry *next;
5c43d212 47 const cpp_hashnode *pragma; /* Name and length. */
d6d3c909 48 bool is_nspace;
49 bool is_internal;
b75b98aa 50 bool is_deferred;
51 bool allow_expansion;
c6f14ce5 52 union {
53 pragma_cb handler;
54 struct pragma_entry *space;
b75b98aa 55 unsigned int ident;
c6f14ce5 56 } u;
57};
58
79bd622b 59/* Values for the origin field of struct directive. KANDR directives
60 come from traditional (K&R) C. STDC89 directives come from the
61 1989 C standard. EXTENSION directives are extensions. */
62#define KANDR 0
63#define STDC89 1
64#define EXTENSION 2
65
66/* Values for the flags field of struct directive. COND indicates a
67 conditional; IF_COND an opening conditional. INCL means to treat
68 "..." and <...> as q-char and h-char sequences respectively. IN_I
69 means this directive should be handled even if -fpreprocessed is in
fb83e0d6 70 effect (these are the directives with callback hooks).
71
bab5e68f 72 EXPAND is set on directives that are always macro-expanded. */
79bd622b 73#define COND (1 << 0)
74#define IF_COND (1 << 1)
75#define INCL (1 << 2)
76#define IN_I (1 << 3)
fb83e0d6 77#define EXPAND (1 << 4)
fb9753dc 78#define DEPRECATED (1 << 5)
79bd622b 79
80/* Defines one #-directive, including how to handle it. */
f7fdd7a1 81typedef void (*directive_handler) (cpp_reader *);
79bd622b 82typedef struct directive directive;
83struct directive
84{
85 directive_handler handler; /* Function to handle directive. */
b6d18b0a 86 const uchar *name; /* Name of directive. */
79bd622b 87 unsigned short length; /* Length of name. */
88 unsigned char origin; /* Origin of directive. */
89 unsigned char flags; /* Flags describing this directive. */
90};
91
08c74ec4 92/* Forward declarations. */
93
f7fdd7a1 94static void skip_rest_of_line (cpp_reader *);
95static void check_eol (cpp_reader *);
96static void start_directive (cpp_reader *);
97static void prepare_directive_trad (cpp_reader *);
98static void end_directive (cpp_reader *, int);
99static void directive_diagnostics (cpp_reader *, const directive *, int);
100static void run_directive (cpp_reader *, int, const char *, size_t);
101static char *glue_header_name (cpp_reader *);
f789fe3e 102static const char *parse_include (cpp_reader *, int *, const cpp_token ***);
f7fdd7a1 103static void push_conditional (cpp_reader *, int, int, const cpp_hashnode *);
104static unsigned int read_flag (cpp_reader *, unsigned int);
98e29890 105static bool strtolinenum (const uchar *, size_t, linenum_type *, bool *);
f7fdd7a1 106static void do_diagnostic (cpp_reader *, int, int);
3e2a04b5 107static cpp_hashnode *lex_macro_node (cpp_reader *, bool);
40109983 108static int undefine_macros (cpp_reader *, cpp_hashnode *, void *);
f7fdd7a1 109static void do_include_common (cpp_reader *, enum include_type);
110static struct pragma_entry *lookup_pragma_entry (struct pragma_entry *,
111 const cpp_hashnode *);
f7fdd7a1 112static int count_registered_pragmas (struct pragma_entry *);
113static char ** save_registered_pragmas (struct pragma_entry *, char **);
114static char ** restore_registered_pragmas (cpp_reader *, struct pragma_entry *,
115 char **);
116static void do_pragma_once (cpp_reader *);
117static void do_pragma_poison (cpp_reader *);
118static void do_pragma_system_header (cpp_reader *);
119static void do_pragma_dependency (cpp_reader *);
120static void do_linemarker (cpp_reader *);
121static const cpp_token *get_token_no_padding (cpp_reader *);
122static const cpp_token *get__Pragma_string (cpp_reader *);
123static void destringize_and_run (cpp_reader *, const cpp_string *);
124static int parse_answer (cpp_reader *, struct answer **, int);
125static cpp_hashnode *parse_assertion (cpp_reader *, struct answer **, int);
126static struct answer ** find_answer (cpp_hashnode *, const struct answer *);
127static void handle_assertion (cpp_reader *, const char *, int);
a4b4a940 128
4bf559f2 129/* This is the table of directive handlers. It is ordered by
130 frequency of occurrence; the numbers at the end are directive
131 counts from all the source code I have lying around (egcs and libc
132 CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
79bd622b 133 pcmcia-cs-3.0.9). This is no longer important as directive lookup
fb9753dc 134 is now O(1). All extensions other than #warning, #include_next,
135 and #import are deprecated. The name is where the extension
136 appears to have come from. */
4bf559f2 137
79bd622b 138#define DIRECTIVE_TABLE \
139D(define, T_DEFINE = 0, KANDR, IN_I) /* 270554 */ \
bab5e68f 140D(include, T_INCLUDE, KANDR, INCL | EXPAND) /* 52262 */ \
79bd622b 141D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \
142D(ifdef, T_IFDEF, KANDR, COND | IF_COND) /* 22000 */ \
fb83e0d6 143D(if, T_IF, KANDR, COND | IF_COND | EXPAND) /* 18162 */ \
79bd622b 144D(else, T_ELSE, KANDR, COND) /* 9863 */ \
145D(ifndef, T_IFNDEF, KANDR, COND | IF_COND) /* 9675 */ \
146D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \
fb83e0d6 147D(line, T_LINE, KANDR, EXPAND) /* 2465 */ \
148D(elif, T_ELIF, STDC89, COND | EXPAND) /* 610 */ \
79bd622b 149D(error, T_ERROR, STDC89, 0) /* 475 */ \
150D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \
151D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \
bab5e68f 152D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL | EXPAND) /* 19 */ \
fb9753dc 153D(ident, T_IDENT, EXTENSION, IN_I | DEPRECATED) /* 11 */ \
bab5e68f 154D(import, T_IMPORT, EXTENSION, INCL | EXPAND) /* 0 ObjC */ \
fb9753dc 155D(assert, T_ASSERT, EXTENSION, DEPRECATED) /* 0 SVR4 */ \
156D(unassert, T_UNASSERT, EXTENSION, DEPRECATED) /* 0 SVR4 */ \
157D(sccs, T_SCCS, EXTENSION, IN_I | DEPRECATED) /* 0 SVR4? */
81e19b31 158
159/* #sccs is synonymous with #ident. */
160#define do_sccs do_ident
ef33b55c 161
4bf559f2 162/* Use the table to generate a series of prototypes, an enum for the
163 directive names, and an array of directive handlers. */
164
f7fdd7a1 165#define D(name, t, o, f) static void do_##name (cpp_reader *);
4bf559f2 166DIRECTIVE_TABLE
167#undef D
168
f80e83a9 169#define D(n, tag, o, f) tag,
4bf559f2 170enum
171{
172 DIRECTIVE_TABLE
173 N_DIRECTIVES
1d6fa33f 174};
4bf559f2 175#undef D
176
f80e83a9 177#define D(name, t, origin, flags) \
18e43155 178{ do_##name, (const uchar *) #name, \
179 sizeof #name - 1, origin, flags },
79bd622b 180static const directive dtable[] =
4bf559f2 181{
182DIRECTIVE_TABLE
183};
184#undef D
185#undef DIRECTIVE_TABLE
1d6fa33f 186
25266990 187/* Wrapper struct directive for linemarkers.
188 The origin is more or less true - the original K+R cpp
189 did use this notation in its preprocessed output. */
190static const directive linemarker_dir =
191{
924bbf02 192 do_linemarker, UC"#", 1, KANDR, IN_I
25266990 193};
194
fb83e0d6 195#define SEEN_EOL() (pfile->cur_token[-1].type == CPP_EOF)
1ea7ed21 196
79bd622b 197/* Skip any remaining tokens in a directive. */
198static void
f7fdd7a1 199skip_rest_of_line (cpp_reader *pfile)
6060326b 200{
79bd622b 201 /* Discard all stacked contexts. */
6e5ef531 202 while (pfile->context->prev)
79bd622b 203 _cpp_pop_context (pfile);
204
920b5d41 205 /* Sweep up all tokens remaining on the line. */
c00e481c 206 if (! SEEN_EOL ())
207 while (_cpp_lex_token (pfile)->type != CPP_EOF)
208 ;
79bd622b 209}
6060326b 210
79bd622b 211/* Ensure there are no stray tokens at the end of a directive. */
212static void
f7fdd7a1 213check_eol (cpp_reader *pfile)
79bd622b 214{
c00e481c 215 if (! SEEN_EOL () && _cpp_lex_token (pfile)->type != CPP_EOF)
d80d2074 216 cpp_error (pfile, CPP_DL_PEDWARN, "extra tokens at end of #%s directive",
73328dce 217 pfile->directive->name);
79bd622b 218}
219
f789fe3e 220/* Ensure there are no stray tokens other than comments at the end of
221 a directive, and gather the comments. */
222static const cpp_token **
223check_eol_return_comments (cpp_reader *pfile)
224{
225 size_t c;
226 size_t capacity = 8;
227 const cpp_token **buf;
228
229 buf = XNEWVEC (const cpp_token *, capacity);
230 c = 0;
231 if (! SEEN_EOL ())
232 {
233 while (1)
234 {
235 const cpp_token *tok;
236
237 tok = _cpp_lex_token (pfile);
238 if (tok->type == CPP_EOF)
239 break;
240 if (tok->type != CPP_COMMENT)
241 cpp_error (pfile, CPP_DL_PEDWARN,
242 "extra tokens at end of #%s directive",
243 pfile->directive->name);
244 else
245 {
246 if (c + 1 >= capacity)
247 {
248 capacity *= 2;
249 buf = XRESIZEVEC (const cpp_token *, buf, capacity);
250 }
251 buf[c] = tok;
252 ++c;
253 }
254 }
255 }
256 buf[c] = NULL;
257 return buf;
258}
259
9677c711 260/* Called when entering a directive, _Pragma or command-line directive. */
261static void
f7fdd7a1 262start_directive (cpp_reader *pfile)
79bd622b 263{
343fd982 264 /* Setup in-directive state. */
265 pfile->state.in_directive = 1;
266 pfile->state.save_comments = 0;
d6d3c909 267 pfile->directive_result.type = CPP_PADDING;
343fd982 268
79bd622b 269 /* Some handlers need the position of the # for diagnostics. */
dbddc569 270 pfile->directive_line = pfile->line_table->highest_line;
9677c711 271}
272
273/* Called when leaving a directive, _Pragma or command-line directive. */
274static void
f7fdd7a1 275end_directive (cpp_reader *pfile, int skip_line)
9677c711 276{
b75b98aa 277 if (pfile->state.in_deferred_pragma)
278 ;
279 else if (CPP_OPTION (pfile, traditional))
fb83e0d6 280 {
bab5e68f 281 /* Revert change of prepare_directive_trad. */
282 pfile->state.prevent_expansion--;
283
c455fac3 284 if (pfile->directive != &dtable[T_DEFINE])
fb83e0d6 285 _cpp_remove_overlay (pfile);
286 }
9677c711 287 /* We don't skip for an assembler #. */
c455fac3 288 else if (skip_line)
1ea7ed21 289 {
290 skip_rest_of_line (pfile);
fb5ab82c 291 if (!pfile->keep_tokens)
292 {
293 pfile->cur_run = &pfile->base_run;
294 pfile->cur_token = pfile->base_run.base;
295 }
1ea7ed21 296 }
9677c711 297
298 /* Restore state. */
9677c711 299 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
300 pfile->state.in_directive = 0;
bab5e68f 301 pfile->state.in_expression = 0;
9677c711 302 pfile->state.angled_headers = 0;
303 pfile->directive = 0;
304}
305
fb83e0d6 306/* Prepare to handle the directive in pfile->directive. */
307static void
f7fdd7a1 308prepare_directive_trad (cpp_reader *pfile)
fb83e0d6 309{
cbe337b6 310 if (pfile->directive != &dtable[T_DEFINE])
fb83e0d6 311 {
c455fac3 312 bool no_expand = (pfile->directive
313 && ! (pfile->directive->flags & EXPAND));
01628c3c 314 bool was_skipping = pfile->state.skipping;
fb83e0d6 315
bab5e68f 316 pfile->state.in_expression = (pfile->directive == &dtable[T_IF]
317 || pfile->directive == &dtable[T_ELIF]);
8b837dff 318 if (pfile->state.in_expression)
319 pfile->state.skipping = false;
320
fb83e0d6 321 if (no_expand)
322 pfile->state.prevent_expansion++;
69edc0b3 323 _cpp_scan_out_logical_line (pfile, NULL);
fb83e0d6 324 if (no_expand)
325 pfile->state.prevent_expansion--;
8b837dff 326
01628c3c 327 pfile->state.skipping = was_skipping;
fb83e0d6 328 _cpp_overlay_buffer (pfile, pfile->out.base,
329 pfile->out.cur - pfile->out.base);
330 }
bab5e68f 331
332 /* Stop ISO C from expanding anything. */
333 pfile->state.prevent_expansion++;
fb83e0d6 334}
335
d10cfa8d 336/* Output diagnostics for a directive DIR. INDENTED is nonzero if
d0d481d7 337 the '#' was indented. */
d0d481d7 338static void
f7fdd7a1 339directive_diagnostics (cpp_reader *pfile, const directive *dir, int indented)
d0d481d7 340{
fb9753dc 341 /* Issue -pedantic or deprecated warnings for extensions. We let
342 -pedantic take precedence if both are applicable. */
343 if (! pfile->state.skipping)
344 {
345 if (dir->origin == EXTENSION
346 && !(dir == &dtable[T_IMPORT] && CPP_OPTION (pfile, objc))
347 && CPP_PEDANTIC (pfile))
348 cpp_error (pfile, CPP_DL_PEDWARN, "#%s is a GCC extension", dir->name);
349 else if (((dir->flags & DEPRECATED) != 0
350 || (dir == &dtable[T_IMPORT] && !CPP_OPTION (pfile, objc)))
351 && CPP_OPTION (pfile, warn_deprecated))
352 cpp_error (pfile, CPP_DL_WARNING, "#%s is a deprecated GCC extension",
353 dir->name);
354 }
25266990 355
356 /* Traditionally, a directive is ignored unless its # is in
357 column 1. Therefore in code intended to work with K+R
358 compilers, directives added by C89 must have their #
359 indented, and directives present in traditional C must not.
360 This is true even of directives in skipped conditional
361 blocks. #elif cannot be used at all. */
362 if (CPP_WTRADITIONAL (pfile))
d0d481d7 363 {
25266990 364 if (dir == &dtable[T_ELIF])
d80d2074 365 cpp_error (pfile, CPP_DL_WARNING,
73328dce 366 "suggest not using #elif in traditional C");
25266990 367 else if (indented && dir->origin == KANDR)
d80d2074 368 cpp_error (pfile, CPP_DL_WARNING,
73328dce 369 "traditional C ignores #%s with the # indented",
370 dir->name);
25266990 371 else if (!indented && dir->origin != KANDR)
d80d2074 372 cpp_error (pfile, CPP_DL_WARNING,
73328dce 373 "suggest hiding #%s from traditional C with an indented #",
374 dir->name);
d0d481d7 375 }
376}
377
d10cfa8d 378/* Check if we have a known directive. INDENTED is nonzero if the
d0d481d7 379 '#' of the directive was indented. This function is in this file
f03668bd 380 to save unnecessarily exporting dtable etc. to lex.c. Returns
d10cfa8d 381 nonzero if the line of tokens has been handled, zero if we should
d0d481d7 382 continue processing the line. */
9677c711 383int
f7fdd7a1 384_cpp_handle_directive (cpp_reader *pfile, int indented)
9677c711 385{
9677c711 386 const directive *dir = 0;
c00e481c 387 const cpp_token *dname;
d6af0368 388 bool was_parsing_args = pfile->state.parsing_args;
3eb3f293 389 bool was_discarding_output = pfile->state.discarding_output;
9677c711 390 int skip = 1;
391
3eb3f293 392 if (was_discarding_output)
393 pfile->state.prevent_expansion = 0;
394
d6af0368 395 if (was_parsing_args)
396 {
397 if (CPP_OPTION (pfile, pedantic))
d80d2074 398 cpp_error (pfile, CPP_DL_PEDWARN,
d6af0368 399 "embedding a directive within macro arguments is not portable");
400 pfile->state.parsing_args = 0;
401 pfile->state.prevent_expansion = 0;
402 }
9677c711 403 start_directive (pfile);
c00e481c 404 dname = _cpp_lex_token (pfile);
338fa5f7 405
c00e481c 406 if (dname->type == CPP_NAME)
338fa5f7 407 {
805e22b2 408 if (dname->val.node->is_directive)
409 dir = &dtable[dname->val.node->directive_index];
338fa5f7 410 }
a2f10574 411 /* We do not recognize the # followed by a number extension in
d0d481d7 412 assembler code. */
c00e481c 413 else if (dname->type == CPP_NUMBER && CPP_OPTION (pfile, lang) != CLK_ASM)
338fa5f7 414 {
25266990 415 dir = &linemarker_dir;
416 if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed)
417 && ! pfile->state.skipping)
d80d2074 418 cpp_error (pfile, CPP_DL_PEDWARN,
73328dce 419 "style of line directive is a GCC extension");
79bd622b 420 }
338fa5f7 421
79bd622b 422 if (dir)
423 {
d0d481d7 424 /* If we have a directive that is not an opening conditional,
425 invalidate any control macro. */
426 if (! (dir->flags & IF_COND))
427 pfile->mi_valid = false;
428
429 /* Kluge alert. In order to be sure that code like this
430
431 #define HASH #
432 HASH define foo bar
433
434 does not cause '#define foo bar' to get executed when
435 compiled with -save-temps, we recognize directives in
f03668bd 436 -fpreprocessed mode only if the # is in column 1. macro.c
fcde64dc 437 puts a space in front of any '#' at the start of a macro.
438
439 We exclude the -fdirectives-only case because macro expansion
440 has not been performed yet, and block comments can cause spaces
441 to preceed the directive. */
d0d481d7 442 if (CPP_OPTION (pfile, preprocessed)
fcde64dc 443 && !CPP_OPTION (pfile, directives_only)
d0d481d7 444 && (indented || !(dir->flags & IN_I)))
946ce1b7 445 {
d0d481d7 446 skip = 0;
447 dir = 0;
946ce1b7 448 }
449 else
79bd622b 450 {
d0d481d7 451 /* In failed conditional groups, all non-conditional
452 directives are ignored. Before doing that, whether
453 skipping or not, we should lex angle-bracketed headers
454 correctly, and maybe output some diagnostics. */
455 pfile->state.angled_headers = dir->flags & INCL;
7825551f 456 pfile->state.directive_wants_padding = dir->flags & INCL;
d0d481d7 457 if (! CPP_OPTION (pfile, preprocessed))
458 directive_diagnostics (pfile, dir, indented);
459 if (pfile->state.skipping && !(dir->flags & COND))
460 dir = 0;
79bd622b 461 }
462 }
c00e481c 463 else if (dname->type == CPP_EOF)
d0d481d7 464 ; /* CPP_EOF is the "null directive". */
465 else
79bd622b 466 {
467 /* An unknown directive. Don't complain about it in assembly
468 source: we don't know where the comments are, and # may
469 introduce assembler pseudo-ops. Don't complain about invalid
470 directives in skipped conditional groups (6.10 p4). */
5db5d057 471 if (CPP_OPTION (pfile, lang) == CLK_ASM)
d0d481d7 472 skip = 0;
473 else if (!pfile->state.skipping)
d80d2074 474 cpp_error (pfile, CPP_DL_ERROR, "invalid preprocessing directive #%s",
c00e481c 475 cpp_token_as_text (pfile, dname));
338fa5f7 476 }
477
94fed299 478 pfile->directive = dir;
479 if (CPP_OPTION (pfile, traditional))
480 prepare_directive_trad (pfile);
481
d0d481d7 482 if (dir)
f7fdd7a1 483 pfile->directive->handler (pfile);
d0d481d7 484 else if (skip == 0)
485 _cpp_backup_tokens (pfile, 1);
486
487 end_directive (pfile, skip);
45f9f140 488 if (was_parsing_args && !pfile->state.in_deferred_pragma)
d6af0368 489 {
490 /* Restore state when within macro args. */
491 pfile->state.parsing_args = 2;
492 pfile->state.prevent_expansion = 1;
d6af0368 493 }
3eb3f293 494 if (was_discarding_output)
495 pfile->state.prevent_expansion = 1;
9677c711 496 return skip;
f80e83a9 497}
1d6fa33f 498
79bd622b 499/* Directive handler wrapper used by the command line option
a54e0bf8 500 processor. BUF is \n terminated. */
79bd622b 501static void
f7fdd7a1 502run_directive (cpp_reader *pfile, int dir_no, const char *buf, size_t count)
e3630c4b 503{
b6d18b0a 504 cpp_push_buffer (pfile, (const uchar *) buf, count,
9eb74666 505 /* from_stage3 */ true);
6cee4464 506 start_directive (pfile);
a54e0bf8 507
508 /* This is a short-term fix to prevent a leading '#' being
509 interpreted as a directive. */
510 _cpp_clean_line (pfile);
511
7b5cc295 512 pfile->directive = &dtable[dir_no];
fb83e0d6 513 if (CPP_OPTION (pfile, traditional))
514 prepare_directive_trad (pfile);
f7fdd7a1 515 pfile->directive->handler (pfile);
6cee4464 516 end_directive (pfile, 1);
4dfe8b74 517 _cpp_pop_buffer (pfile);
79bd622b 518}
519
520/* Checks for validity the macro name in #define, #undef, #ifdef and
3e2a04b5 521 #ifndef directives. IS_DEF_OR_UNDEF is true if this call is
522 processing a #define or #undefine directive, and false
523 otherwise. */
f80e83a9 524static cpp_hashnode *
3e2a04b5 525lex_macro_node (cpp_reader *pfile, bool is_def_or_undef)
f80e83a9 526{
fb83e0d6 527 const cpp_token *token = _cpp_lex_token (pfile);
c4357c92 528
31674461 529 /* The token immediately after #define must be an identifier. That
f17c0828 530 identifier may not be "defined", per C99 6.10.8p4.
531 In C++, it may not be any of the "named operators" either,
532 per C++98 [lex.digraph], [lex.key].
533 Finally, the identifier may not have been poisoned. (In that case
9a26b86f 534 the lexer has issued the error message for us.) */
f15f6c8d 535
fb83e0d6 536 if (token->type == CPP_NAME)
537 {
538 cpp_hashnode *node = token->val.node;
31674461 539
3e2a04b5 540 if (is_def_or_undef && node == pfile->spec_nodes.n_defined)
d80d2074 541 cpp_error (pfile, CPP_DL_ERROR,
fb83e0d6 542 "\"defined\" cannot be used as a macro name");
543 else if (! (node->flags & NODE_POISONED))
544 return node;
71aa9da4 545 }
fb83e0d6 546 else if (token->flags & NAMED_OP)
d80d2074 547 cpp_error (pfile, CPP_DL_ERROR,
f15f6c8d 548 "\"%s\" cannot be used as a macro name as it is an operator in C++",
fb83e0d6 549 NODE_NAME (token->val.node));
550 else if (token->type == CPP_EOF)
d80d2074 551 cpp_error (pfile, CPP_DL_ERROR, "no macro name given in #%s directive",
fb83e0d6 552 pfile->directive->name);
553 else
d80d2074 554 cpp_error (pfile, CPP_DL_ERROR, "macro names must be identifiers");
ef33b55c 555
f15f6c8d 556 return NULL;
1d6fa33f 557}
1d6fa33f 558
f03668bd 559/* Process a #define directive. Most work is done in macro.c. */
69461e0d 560static void
f7fdd7a1 561do_define (cpp_reader *pfile)
1d6fa33f 562{
3e2a04b5 563 cpp_hashnode *node = lex_macro_node (pfile, true);
c030ed73 564
79bd622b 565 if (node)
566 {
9a26b86f 567 /* If we have been requested to expand comments into macros,
568 then re-enable saving of comments. */
569 pfile->state.save_comments =
570 ! CPP_OPTION (pfile, discard_comments_in_macro_exp);
571
34c3de48 572 if (pfile->cb.before_define)
573 pfile->cb.before_define (pfile);
574
79bd622b 575 if (_cpp_create_definition (pfile, node))
576 if (pfile->cb.define)
f7fdd7a1 577 pfile->cb.define (pfile, pfile->directive_line, node);
34c3de48 578
579 node->flags &= ~NODE_USED;
79bd622b 580 }
f80e83a9 581}
582
e484a1cc 583/* Handle #undef. Mark the identifier NT_VOID in the hash table. */
69461e0d 584static void
f7fdd7a1 585do_undef (cpp_reader *pfile)
f80e83a9 586{
3e2a04b5 587 cpp_hashnode *node = lex_macro_node (pfile, true);
2c63d6c8 588
8b837dff 589 if (node)
2c63d6c8 590 {
34c3de48 591 if (pfile->cb.before_define)
592 pfile->cb.before_define (pfile);
593
6cae2504 594 if (pfile->cb.undef)
f7fdd7a1 595 pfile->cb.undef (pfile, pfile->directive_line, node);
2c63d6c8 596
8b837dff 597 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified
598 identifier is not currently defined as a macro name. */
599 if (node->type == NT_MACRO)
600 {
601 if (node->flags & NODE_WARN)
602 cpp_error (pfile, CPP_DL_WARNING,
603 "undefining \"%s\"", NODE_NAME (node));
2c63d6c8 604
8b837dff 605 if (CPP_OPTION (pfile, warn_unused_macros))
606 _cpp_warn_if_unused_macro (pfile, node, NULL);
71a7c282 607
8b837dff 608 _cpp_free_definition (node);
609 }
2c63d6c8 610 }
8b837dff 611
79bd622b 612 check_eol (pfile);
1d6fa33f 613}
614
40109983 615/* Undefine a single macro/assertion/whatever. */
616
617static int
3eb3f293 618undefine_macros (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *h,
40109983 619 void *data_p ATTRIBUTE_UNUSED)
620{
3eb3f293 621 /* Body of _cpp_free_definition inlined here for speed.
622 Macros and assertions no longer have anything to free. */
623 h->type = NT_VOID;
34c3de48 624 h->flags &= ~(NODE_POISONED|NODE_BUILTIN|NODE_DISABLED|NODE_USED);
40109983 625 return 1;
626}
627
628/* Undefine all macros and assertions. */
629
630void
631cpp_undef_all (cpp_reader *pfile)
632{
633 cpp_forall_identifiers (pfile, undefine_macros, NULL);
634}
635
636
79bd622b 637/* Helper routine used by parse_include. Reinterpret the current line
638 as an h-char-sequence (< ... >); we are looking at the first token
58efbd5a 639 after the <. Returns a malloced filename. */
640static char *
f7fdd7a1 641glue_header_name (cpp_reader *pfile)
79bd622b 642{
f9b5f742 643 const cpp_token *token;
58efbd5a 644 char *buffer;
92b1c81a 645 size_t len, total_len = 0, capacity = 1024;
79bd622b 646
647 /* To avoid lexed tokens overwriting our glued name, we can only
648 allocate from the string pool once we've lexed everything. */
720aca92 649 buffer = XNEWVEC (char, capacity);
79bd622b 650 for (;;)
651 {
7825551f 652 token = get_token_no_padding (pfile);
79bd622b 653
58efbd5a 654 if (token->type == CPP_GREATER)
79bd622b 655 break;
58efbd5a 656 if (token->type == CPP_EOF)
657 {
d80d2074 658 cpp_error (pfile, CPP_DL_ERROR, "missing terminating > character");
58efbd5a 659 break;
660 }
79bd622b 661
b1280514 662 len = cpp_token_len (token) + 2; /* Leading space, terminating \0. */
92b1c81a 663 if (total_len + len > capacity)
79bd622b 664 {
92b1c81a 665 capacity = (capacity + len) * 2;
720aca92 666 buffer = XRESIZEVEC (char, buffer, capacity);
79bd622b 667 }
668
f9b5f742 669 if (token->flags & PREV_WHITE)
92b1c81a 670 buffer[total_len++] = ' ';
79bd622b 671
bb1fa6bb 672 total_len = (cpp_spell_token (pfile, token, (uchar *) &buffer[total_len],
673 true)
58efbd5a 674 - (uchar *) buffer);
79bd622b 675 }
f80e83a9 676
58efbd5a 677 buffer[total_len] = '\0';
678 return buffer;
79bd622b 679}
1d6fa33f 680
58efbd5a 681/* Returns the file name of #include, #include_next, #import and
682 #pragma dependency. The string is malloced and the caller should
683 free it. Returns NULL on error. */
684static const char *
f789fe3e 685parse_include (cpp_reader *pfile, int *pangle_brackets,
686 const cpp_token ***buf)
1d6fa33f 687{
58efbd5a 688 char *fname;
f9b5f742 689 const cpp_token *header;
1d6fa33f 690
79bd622b 691 /* Allow macro expansion. */
7825551f 692 header = get_token_no_padding (pfile);
58efbd5a 693 if (header->type == CPP_STRING || header->type == CPP_HEADER_NAME)
1d6fa33f 694 {
720aca92 695 fname = XNEWVEC (char, header->val.str.len - 1);
4970d4c2 696 memcpy (fname, header->val.str.text + 1, header->val.str.len - 2);
697 fname[header->val.str.len - 2] = '\0';
58efbd5a 698 *pangle_brackets = header->type == CPP_HEADER_NAME;
1d6fa33f 699 }
58efbd5a 700 else if (header->type == CPP_LESS)
1d6fa33f 701 {
58efbd5a 702 fname = glue_header_name (pfile);
703 *pangle_brackets = 1;
704 }
705 else
706 {
707 const unsigned char *dir;
708
709 if (pfile->directive == &dtable[T_PRAGMA])
924bbf02 710 dir = UC"pragma dependency";
58efbd5a 711 else
712 dir = pfile->directive->name;
d80d2074 713 cpp_error (pfile, CPP_DL_ERROR, "#%s expects \"FILENAME\" or <FILENAME>",
58efbd5a 714 dir);
715
f9b5f742 716 return NULL;
1d6fa33f 717 }
1d6fa33f 718
36ec4203 719 if (pfile->directive == &dtable[T_PRAGMA])
720 {
721 /* This pragma allows extra tokens after the file name. */
722 }
723 else if (buf == NULL || CPP_OPTION (pfile, discard_comments))
f789fe3e 724 check_eol (pfile);
725 else
726 {
727 /* If we are not discarding comments, then gather them while
728 doing the eol check. */
729 *buf = check_eol_return_comments (pfile);
730 }
731
58efbd5a 732 return fname;
4bf559f2 733}
d453a374 734
0d6d8dc0 735/* Handle #include, #include_next and #import. */
69461e0d 736static void
f7fdd7a1 737do_include_common (cpp_reader *pfile, enum include_type type)
4bf559f2 738{
58efbd5a 739 const char *fname;
740 int angle_brackets;
f789fe3e 741 const cpp_token **buf = NULL;
742
743 /* Re-enable saving of comments if requested, so that the include
744 callback can dump comments which follow #include. */
745 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
58efbd5a 746
f789fe3e 747 fname = parse_include (pfile, &angle_brackets, &buf);
58efbd5a 748 if (!fname)
f789fe3e 749 {
750 if (buf)
751 XDELETEVEC (buf);
752 return;
753 }
1d6fa33f 754
bd9e37a6 755 if (!*fname)
756 {
757 cpp_error (pfile, CPP_DL_ERROR, "empty filename in #%s",
758 pfile->directive->name);
f789fe3e 759 XDELETEVEC (fname);
760 if (buf)
761 XDELETEVEC (buf);
bd9e37a6 762 return;
763 }
764
f4578baa 765 /* Prevent #include recursion. */
ceec9c13 766 if (pfile->line_table->depth >= CPP_STACK_MAX)
d80d2074 767 cpp_error (pfile, CPP_DL_ERROR, "#include nested too deeply");
58efbd5a 768 else
968e3f9d 769 {
58efbd5a 770 /* Get out of macro context, if we are. */
771 skip_rest_of_line (pfile);
968e3f9d 772
58efbd5a 773 if (pfile->cb.include)
f7fdd7a1 774 pfile->cb.include (pfile, pfile->directive_line,
f789fe3e 775 pfile->directive->name, fname, angle_brackets,
776 buf);
f4578baa 777
1824e2bd 778 _cpp_stack_include (pfile, fname, angle_brackets, type);
58efbd5a 779 }
f4578baa 780
f789fe3e 781 XDELETEVEC (fname);
782 if (buf)
783 XDELETEVEC (buf);
4bf559f2 784}
c4e0ec82 785
69461e0d 786static void
f7fdd7a1 787do_include (cpp_reader *pfile)
4bf559f2 788{
0d6d8dc0 789 do_include_common (pfile, IT_INCLUDE);
790}
4bf559f2 791
0d6d8dc0 792static void
f7fdd7a1 793do_import (cpp_reader *pfile)
0d6d8dc0 794{
0d6d8dc0 795 do_include_common (pfile, IT_IMPORT);
4bf559f2 796}
1d6fa33f 797
69461e0d 798static void
f7fdd7a1 799do_include_next (cpp_reader *pfile)
4bf559f2 800{
f4578baa 801 enum include_type type = IT_INCLUDE_NEXT;
802
803 /* If this is the primary source file, warn and use the normal
804 search logic. */
927b511f 805 if (cpp_in_primary_file (pfile))
f4578baa 806 {
d80d2074 807 cpp_error (pfile, CPP_DL_WARNING,
f4578baa 808 "#include_next in primary source file");
809 type = IT_INCLUDE;
810 }
811 do_include_common (pfile, type);
1d6fa33f 812}
1d6fa33f 813
25266990 814/* Subroutine of do_linemarker. Read possible flags after file name.
815 LAST is the last flag seen; 0 if this is the first flag. Return the
816 flag if it is valid, 0 at the end of the directive. Otherwise
817 complain. */
2fd3b10b 818static unsigned int
f7fdd7a1 819read_flag (cpp_reader *pfile, unsigned int last)
314ab6d5 820{
c00e481c 821 const cpp_token *token = _cpp_lex_token (pfile);
314ab6d5 822
c00e481c 823 if (token->type == CPP_NUMBER && token->val.str.len == 1)
314ab6d5 824 {
c00e481c 825 unsigned int flag = token->val.str.text[0] - '0';
53c052ca 826
827 if (flag > last && flag <= 4
828 && (flag != 4 || last == 3)
829 && (flag != 2 || last == 0))
830 return flag;
314ab6d5 831 }
79bd622b 832
c00e481c 833 if (token->type != CPP_EOF)
d80d2074 834 cpp_error (pfile, CPP_DL_ERROR, "invalid flag \"%s\" in line directive",
c00e481c 835 cpp_token_as_text (pfile, token));
79bd622b 836 return 0;
314ab6d5 837}
838
25266990 839/* Subroutine of do_line and do_linemarker. Convert a number in STR,
98e29890 840 of length LEN, to binary; store it in NUMP, and return false if the
841 number was well-formed, true if not. WRAPPED is set to true if the
842 number did not fit into 'unsigned long'. */
843static bool
844strtolinenum (const uchar *str, size_t len, linenum_type *nump, bool *wrapped)
f80e83a9 845{
4999c35b 846 linenum_type reg = 0;
98e29890 847 linenum_type reg_prev = 0;
848
b6d18b0a 849 uchar c;
98e29890 850 *wrapped = false;
f80e83a9 851 while (len--)
852 {
853 c = *str++;
854 if (!ISDIGIT (c))
98e29890 855 return true;
f80e83a9 856 reg *= 10;
857 reg += c - '0';
98e29890 858 if (reg < reg_prev)
859 *wrapped = true;
860 reg_prev = reg;
f80e83a9 861 }
862 *nump = reg;
98e29890 863 return false;
f80e83a9 864}
865
6d71dc85 866/* Interpret #line command.
25266990 867 Note that the filename string (if any) is a true string constant
868 (escapes are interpreted), unlike in #line. */
69461e0d 869static void
f7fdd7a1 870do_line (cpp_reader *pfile)
1d6fa33f 871{
dbddc569 872 const struct line_maps *line_table = pfile->line_table;
873 const struct line_map *map = &line_table->maps[line_table->used - 1];
b0d0794d 874
875 /* skip_rest_of_line() may cause line table to be realloc()ed so note down
876 sysp right now. */
877
878 unsigned char map_sysp = map->sysp;
f9b5f742 879 const cpp_token *token;
610625e3 880 const char *new_file = map->to_file;
4999c35b 881 linenum_type new_lineno;
79bd622b 882
d7503801 883 /* C99 raised the minimum limit on #line numbers. */
4999c35b 884 linenum_type cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
98e29890 885 bool wrapped;
d0d481d7 886
79bd622b 887 /* #line commands expand macros. */
f9b5f742 888 token = cpp_get_token (pfile);
889 if (token->type != CPP_NUMBER
4999c35b 890 || strtolinenum (token->val.str.text, token->val.str.len,
98e29890 891 &new_lineno, &wrapped))
1d6fa33f 892 {
cde59b72 893 if (token->type == CPP_EOF)
894 cpp_error (pfile, CPP_DL_ERROR, "unexpected end of file after #line");
895 else
896 cpp_error (pfile, CPP_DL_ERROR,
897 "\"%s\" after #line is not a positive integer",
898 cpp_token_as_text (pfile, token));
0653b94e 899 return;
b1a9ff83 900 }
1d6fa33f 901
98e29890 902 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap || wrapped))
d80d2074 903 cpp_error (pfile, CPP_DL_PEDWARN, "line number out of range");
98e29890 904 else if (wrapped)
905 cpp_error (pfile, CPP_DL_WARNING, "line number out of range");
1d6fa33f 906
f9b5f742 907 token = cpp_get_token (pfile);
908 if (token->type == CPP_STRING)
a852e3b1 909 {
ebc03810 910 cpp_string s = { 0, 0 };
7bc95b56 911 if (cpp_interpret_string_notranslate (pfile, &token->val.str, 1,
912 &s, false))
ebc03810 913 new_file = (const char *)s.text;
25266990 914 check_eol (pfile);
915 }
916 else if (token->type != CPP_EOF)
917 {
d80d2074 918 cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
25266990 919 cpp_token_as_text (pfile, token));
920 return;
921 }
922
923 skip_rest_of_line (pfile);
924 _cpp_do_file_change (pfile, LC_RENAME, new_file, new_lineno,
b0d0794d 925 map_sysp);
25266990 926}
927
928/* Interpret the # 44 "file" [flags] notation, which has slightly
929 different syntax and semantics from #line: Flags are allowed,
930 and we never complain about the line number being too big. */
931static void
f7fdd7a1 932do_linemarker (cpp_reader *pfile)
25266990 933{
dbddc569 934 const struct line_maps *line_table = pfile->line_table;
935 const struct line_map *map = &line_table->maps[line_table->used - 1];
25266990 936 const cpp_token *token;
610625e3 937 const char *new_file = map->to_file;
4999c35b 938 linenum_type new_lineno;
610625e3 939 unsigned int new_sysp = map->sysp;
25266990 940 enum lc_reason reason = LC_RENAME;
941 int flag;
98e29890 942 bool wrapped;
25266990 943
944 /* Back up so we can get the number again. Putting this in
945 _cpp_handle_directive risks two calls to _cpp_backup_tokens in
946 some circumstances, which can segfault. */
947 _cpp_backup_tokens (pfile, 1);
948
949 /* #line commands expand macros. */
950 token = cpp_get_token (pfile);
951 if (token->type != CPP_NUMBER
4999c35b 952 || strtolinenum (token->val.str.text, token->val.str.len,
98e29890 953 &new_lineno, &wrapped))
25266990 954 {
cde59b72 955 /* Unlike #line, there does not seem to be a way to get an EOF
956 here. So, it should be safe to always spell the token. */
d80d2074 957 cpp_error (pfile, CPP_DL_ERROR,
958 "\"%s\" after # is not a positive integer",
25266990 959 cpp_token_as_text (pfile, token));
960 return;
b1a9ff83 961 }
616814f8 962
25266990 963 token = cpp_get_token (pfile);
964 if (token->type == CPP_STRING)
965 {
ebc03810 966 cpp_string s = { 0, 0 };
7bc95b56 967 if (cpp_interpret_string_notranslate (pfile, &token->val.str,
968 1, &s, false))
ebc03810 969 new_file = (const char *)s.text;
787c3d1a 970
25266990 971 new_sysp = 0;
972 flag = read_flag (pfile, 0);
973 if (flag == 1)
974 {
975 reason = LC_ENTER;
976 /* Fake an include for cpp_included (). */
977 _cpp_fake_include (pfile, new_file);
978 flag = read_flag (pfile, flag);
979 }
980 else if (flag == 2)
981 {
982 reason = LC_LEAVE;
983 flag = read_flag (pfile, flag);
984 }
985 if (flag == 3)
79bd622b 986 {
25266990 987 new_sysp = 1;
988 flag = read_flag (pfile, flag);
989 if (flag == 4)
990 new_sysp = 2;
79bd622b 991 }
5d70627e 992 pfile->buffer->sysp = new_sysp;
25266990 993
bd507c05 994 check_eol (pfile);
f80e83a9 995 }
f9b5f742 996 else if (token->type != CPP_EOF)
d7503801 997 {
d80d2074 998 cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
f9b5f742 999 cpp_token_as_text (pfile, token));
d7503801 1000 return;
1001 }
1d6fa33f 1002
fb5ab82c 1003 skip_rest_of_line (pfile);
5a9f87bb 1004 _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp);
d7503801 1005}
1006
1ea7ed21 1007/* Arrange the file_change callback. pfile->line has changed to
f85fcf2b 1008 FILE_LINE of TO_FILE, for reason REASON. SYSP is 1 for a system
3fb1e43b 1009 header, 2 for a system header that needs to be extern "C" protected,
f85fcf2b 1010 and zero otherwise. */
4087613d 1011void
f7fdd7a1 1012_cpp_do_file_change (cpp_reader *pfile, enum lc_reason reason,
4999c35b 1013 const char *to_file, linenum_type file_line,
f7fdd7a1 1014 unsigned int sysp)
d7503801 1015{
610625e3 1016 const struct line_map *map = linemap_add (pfile->line_table, reason, sysp,
1017 to_file, file_line);
dbddc569 1018 if (map != NULL)
1019 linemap_line_start (pfile->line_table, map->to_line, 127);
38692459 1020
4087613d 1021 if (pfile->cb.file_change)
610625e3 1022 pfile->cb.file_change (pfile, map);
1d6fa33f 1023}
616814f8 1024
e484a1cc 1025/* Report a warning or error detected by the program we are
1026 processing. Use the directive's tokens in the error message. */
69461e0d 1027static void
f7fdd7a1 1028do_diagnostic (cpp_reader *pfile, int code, int print_dir)
1d6fa33f 1029{
c0770282 1030 const unsigned char *dir_name;
1031 unsigned char *line;
1032 source_location src_loc = pfile->cur_token[-1].src_loc;
1033
1034 if (print_dir)
1035 dir_name = pfile->directive->name;
1036 else
1037 dir_name = NULL;
1038 pfile->state.prevent_expansion++;
1039 line = cpp_output_line_to_string (pfile, dir_name);
1040 pfile->state.prevent_expansion--;
1041
1042 cpp_error_with_line (pfile, code, src_loc, 0, "%s", line);
1043 free (line);
1d6fa33f 1044}
1045
f3b83e9b 1046static void
f7fdd7a1 1047do_error (cpp_reader *pfile)
f3b83e9b 1048{
d80d2074 1049 do_diagnostic (pfile, CPP_DL_ERROR, 1);
f3b83e9b 1050}
1d6fa33f 1051
69461e0d 1052static void
f7fdd7a1 1053do_warning (cpp_reader *pfile)
1d6fa33f 1054{
2ef5e3d3 1055 /* We want #warning diagnostics to be emitted in system headers too. */
d80d2074 1056 do_diagnostic (pfile, CPP_DL_WARNING_SYSHDR, 1);
1d6fa33f 1057}
1058
4e29fcb2 1059/* Report program identification. */
69461e0d 1060static void
f7fdd7a1 1061do_ident (cpp_reader *pfile)
1d6fa33f 1062{
f9b5f742 1063 const cpp_token *str = cpp_get_token (pfile);
6cae2504 1064
f9b5f742 1065 if (str->type != CPP_STRING)
81e19b31 1066 cpp_error (pfile, CPP_DL_ERROR, "invalid #%s directive",
1067 pfile->directive->name);
79bd622b 1068 else if (pfile->cb.ident)
f7fdd7a1 1069 pfile->cb.ident (pfile, pfile->directive_line, &str->val.str);
4e29fcb2 1070
79bd622b 1071 check_eol (pfile);
1d6fa33f 1072}
1073
c6f14ce5 1074/* Lookup a PRAGMA name in a singly-linked CHAIN. Returns the
1075 matching entry, or NULL if none is found. The returned entry could
1076 be the start of a namespace chain, or a pragma. */
1077static struct pragma_entry *
f7fdd7a1 1078lookup_pragma_entry (struct pragma_entry *chain, const cpp_hashnode *pragma)
3f075661 1079{
5c43d212 1080 while (chain && chain->pragma != pragma)
1081 chain = chain->next;
c6f14ce5 1082
1083 return chain;
1084}
1085
b75b98aa 1086/* Create and insert a blank pragma entry at the beginning of a
1087 singly-linked CHAIN. */
c6f14ce5 1088static struct pragma_entry *
b75b98aa 1089new_pragma_entry (cpp_reader *pfile, struct pragma_entry **chain)
3f075661 1090{
720aca92 1091 struct pragma_entry *new_entry;
6cae2504 1092
720aca92 1093 new_entry = (struct pragma_entry *)
e6a5f963 1094 _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry));
6cae2504 1095
b75b98aa 1096 memset (new_entry, 0, sizeof (struct pragma_entry));
720aca92 1097 new_entry->next = *chain;
b75b98aa 1098
720aca92 1099 *chain = new_entry;
1100 return new_entry;
6cae2504 1101}
3f075661 1102
c6f14ce5 1103/* Register a pragma NAME in namespace SPACE. If SPACE is null, it
b75b98aa 1104 goes in the global namespace. */
1105static struct pragma_entry *
1106register_pragma_1 (cpp_reader *pfile, const char *space, const char *name,
1107 bool allow_name_expansion)
3f075661 1108{
c6f14ce5 1109 struct pragma_entry **chain = &pfile->pragmas;
1110 struct pragma_entry *entry;
5c43d212 1111 const cpp_hashnode *node;
c6f14ce5 1112
c6f14ce5 1113 if (space)
6cae2504 1114 {
924bbf02 1115 node = cpp_lookup (pfile, UC space, strlen (space));
5c43d212 1116 entry = lookup_pragma_entry (*chain, node);
c6f14ce5 1117 if (!entry)
b75b98aa 1118 {
1119 entry = new_pragma_entry (pfile, chain);
1120 entry->pragma = node;
1121 entry->is_nspace = true;
1122 entry->allow_expansion = allow_name_expansion;
1123 }
c6f14ce5 1124 else if (!entry->is_nspace)
1125 goto clash;
b75b98aa 1126 else if (entry->allow_expansion != allow_name_expansion)
1127 {
1128 cpp_error (pfile, CPP_DL_ICE,
1129 "registering pragmas in namespace \"%s\" with mismatched "
1130 "name expansion", space);
1131 return NULL;
1132 }
c6f14ce5 1133 chain = &entry->u.space;
6cae2504 1134 }
b75b98aa 1135 else if (allow_name_expansion)
1136 {
1137 cpp_error (pfile, CPP_DL_ICE,
1138 "registering pragma \"%s\" with name expansion "
1139 "and no namespace", name);
1140 return NULL;
1141 }
6cae2504 1142
c6f14ce5 1143 /* Check for duplicates. */
924bbf02 1144 node = cpp_lookup (pfile, UC name, strlen (name));
5c43d212 1145 entry = lookup_pragma_entry (*chain, node);
b75b98aa 1146 if (entry == NULL)
c6f14ce5 1147 {
b75b98aa 1148 entry = new_pragma_entry (pfile, chain);
1149 entry->pragma = node;
1150 return entry;
c6f14ce5 1151 }
b75b98aa 1152
1153 if (entry->is_nspace)
1154 clash:
1155 cpp_error (pfile, CPP_DL_ICE,
1156 "registering \"%s\" as both a pragma and a pragma namespace",
1157 NODE_NAME (node));
1158 else if (space)
1159 cpp_error (pfile, CPP_DL_ICE, "#pragma %s %s is already registered",
1160 space, name);
c6f14ce5 1161 else
b75b98aa 1162 cpp_error (pfile, CPP_DL_ICE, "#pragma %s is already registered", name);
1163
1164 return NULL;
1165}
1166
1167/* Register a cpplib internal pragma SPACE NAME with HANDLER. */
1168static void
1169register_pragma_internal (cpp_reader *pfile, const char *space,
1170 const char *name, pragma_cb handler)
1171{
1172 struct pragma_entry *entry;
1173
1174 entry = register_pragma_1 (pfile, space, name, false);
1175 entry->is_internal = true;
1176 entry->u.handler = handler;
d6d3c909 1177}
1178
1179/* Register a pragma NAME in namespace SPACE. If SPACE is null, it
1180 goes in the global namespace. HANDLER is the handler it will call,
68bf2ad9 1181 which must be non-NULL. If ALLOW_EXPANSION is set, allow macro
1182 expansion while parsing pragma NAME. This function is exported
1183 from libcpp. */
d6d3c909 1184void
1185cpp_register_pragma (cpp_reader *pfile, const char *space, const char *name,
68bf2ad9 1186 pragma_cb handler, bool allow_expansion)
d6d3c909 1187{
b75b98aa 1188 struct pragma_entry *entry;
1189
1190 if (!handler)
1191 {
1192 cpp_error (pfile, CPP_DL_ICE, "registering pragma with NULL handler");
1193 return;
1194 }
1195
1196 entry = register_pragma_1 (pfile, space, name, false);
1197 if (entry)
1198 {
1199 entry->allow_expansion = allow_expansion;
1200 entry->u.handler = handler;
1201 }
6cae2504 1202}
c6f14ce5 1203
b75b98aa 1204/* Similarly, but create mark the pragma for deferred processing.
1205 When found, a CPP_PRAGMA token will be insertted into the stream
1206 with IDENT in the token->u.pragma slot. */
1207void
1208cpp_register_deferred_pragma (cpp_reader *pfile, const char *space,
1209 const char *name, unsigned int ident,
1210 bool allow_expansion, bool allow_name_expansion)
1211{
1212 struct pragma_entry *entry;
1213
1214 entry = register_pragma_1 (pfile, space, name, allow_name_expansion);
1215 if (entry)
1216 {
1217 entry->is_deferred = true;
1218 entry->allow_expansion = allow_expansion;
1219 entry->u.ident = ident;
1220 }
1221}
1222
c6f14ce5 1223/* Register the pragmas the preprocessor itself handles. */
6cae2504 1224void
f7fdd7a1 1225_cpp_init_internal_pragmas (cpp_reader *pfile)
6cae2504 1226{
c6f14ce5 1227 /* Pragmas in the global namespace. */
b75b98aa 1228 register_pragma_internal (pfile, 0, "once", do_pragma_once);
6cae2504 1229
c6f14ce5 1230 /* New GCC-specific pragmas should be put in the GCC namespace. */
b75b98aa 1231 register_pragma_internal (pfile, "GCC", "poison", do_pragma_poison);
1232 register_pragma_internal (pfile, "GCC", "system_header",
1233 do_pragma_system_header);
1234 register_pragma_internal (pfile, "GCC", "dependency", do_pragma_dependency);
3f075661 1235}
1d6fa33f 1236
573aba85 1237/* Return the number of registered pragmas in PE. */
1238
1239static int
f7fdd7a1 1240count_registered_pragmas (struct pragma_entry *pe)
573aba85 1241{
1242 int ct = 0;
1243 for (; pe != NULL; pe = pe->next)
1244 {
1245 if (pe->is_nspace)
1246 ct += count_registered_pragmas (pe->u.space);
1247 ct++;
1248 }
1249 return ct;
1250}
1251
1252/* Save into SD the names of the registered pragmas referenced by PE,
1253 and return a pointer to the next free space in SD. */
1254
1255static char **
f7fdd7a1 1256save_registered_pragmas (struct pragma_entry *pe, char **sd)
573aba85 1257{
1258 for (; pe != NULL; pe = pe->next)
1259 {
1260 if (pe->is_nspace)
1261 sd = save_registered_pragmas (pe->u.space, sd);
720aca92 1262 *sd++ = (char *) xmemdup (HT_STR (&pe->pragma->ident),
1263 HT_LEN (&pe->pragma->ident),
1264 HT_LEN (&pe->pragma->ident) + 1);
573aba85 1265 }
1266 return sd;
1267}
1268
1269/* Return a newly-allocated array which saves the names of the
1270 registered pragmas. */
1271
1272char **
f7fdd7a1 1273_cpp_save_pragma_names (cpp_reader *pfile)
573aba85 1274{
1275 int ct = count_registered_pragmas (pfile->pragmas);
3b298764 1276 char **result = XNEWVEC (char *, ct);
573aba85 1277 (void) save_registered_pragmas (pfile->pragmas, result);
1278 return result;
1279}
1280
1281/* Restore from SD the names of the registered pragmas referenced by PE,
1282 and return a pointer to the next unused name in SD. */
1283
1284static char **
f7fdd7a1 1285restore_registered_pragmas (cpp_reader *pfile, struct pragma_entry *pe,
1286 char **sd)
573aba85 1287{
1288 for (; pe != NULL; pe = pe->next)
1289 {
1290 if (pe->is_nspace)
1291 sd = restore_registered_pragmas (pfile, pe->u.space, sd);
924bbf02 1292 pe->pragma = cpp_lookup (pfile, UC *sd, strlen (*sd));
573aba85 1293 free (*sd);
1294 sd++;
1295 }
1296 return sd;
1297}
1298
1299/* Restore the names of the registered pragmas from SAVED. */
1300
1301void
f7fdd7a1 1302_cpp_restore_pragma_names (cpp_reader *pfile, char **saved)
573aba85 1303{
1304 (void) restore_registered_pragmas (pfile, pfile->pragmas, saved);
1305 free (saved);
1306}
1307
c6f14ce5 1308/* Pragmata handling. We handle some, and pass the rest on to the
1309 front end. C99 defines three pragmas and says that no macro
1310 expansion is to be performed on them; whether or not macro
1311 expansion happens for other pragmas is implementation defined.
b75b98aa 1312 This implementation allows for a mix of both, since GCC did not
1313 traditionally macro expand its (few) pragmas, whereas OpenMP
1314 specifies that macro expansion should happen. */
69461e0d 1315static void
f7fdd7a1 1316do_pragma (cpp_reader *pfile)
1d6fa33f 1317{
c6f14ce5 1318 const struct pragma_entry *p = NULL;
9b3d6630 1319 const cpp_token *token, *pragma_token = pfile->cur_token;
add258d7 1320 cpp_token ns_token;
c6f14ce5 1321 unsigned int count = 1;
2e398cc7 1322
79bd622b 1323 pfile->state.prevent_expansion++;
6cae2504 1324
f9b5f742 1325 token = cpp_get_token (pfile);
add258d7 1326 ns_token = *token;
f9b5f742 1327 if (token->type == CPP_NAME)
c0b823af 1328 {
5c43d212 1329 p = lookup_pragma_entry (pfile->pragmas, token->val.node);
c6f14ce5 1330 if (p && p->is_nspace)
6cae2504 1331 {
b75b98aa 1332 bool allow_name_expansion = p->allow_expansion;
1333 if (allow_name_expansion)
1334 pfile->state.prevent_expansion--;
c6f14ce5 1335 token = cpp_get_token (pfile);
1336 if (token->type == CPP_NAME)
5c43d212 1337 p = lookup_pragma_entry (p->u.space, token->val.node);
c6f14ce5 1338 else
1339 p = NULL;
b75b98aa 1340 if (allow_name_expansion)
1341 pfile->state.prevent_expansion++;
1342 count = 2;
6cae2504 1343 }
6cae2504 1344 }
f80e83a9 1345
a095c1b5 1346 if (p)
9b3d6630 1347 {
b75b98aa 1348 if (p->is_deferred)
1349 {
1350 pfile->directive_result.src_loc = pragma_token->src_loc;
1351 pfile->directive_result.type = CPP_PRAGMA;
1352 pfile->directive_result.flags = pragma_token->flags;
1353 pfile->directive_result.val.pragma = p->u.ident;
1354 pfile->state.in_deferred_pragma = true;
1355 pfile->state.pragma_allow_expansion = p->allow_expansion;
1356 if (!p->allow_expansion)
1357 pfile->state.prevent_expansion++;
1358 }
1359 else
a095c1b5 1360 {
b75b98aa 1361 /* Since the handler below doesn't get the line number, that
1362 it might need for diagnostics, make sure it has the right
a095c1b5 1363 numbers in place. */
1364 if (pfile->cb.line_change)
1365 (*pfile->cb.line_change) (pfile, pragma_token, false);
b75b98aa 1366 if (p->allow_expansion)
68bf2ad9 1367 pfile->state.prevent_expansion--;
a095c1b5 1368 (*p->u.handler) (pfile);
b75b98aa 1369 if (p->allow_expansion)
68bf2ad9 1370 pfile->state.prevent_expansion++;
a095c1b5 1371 }
d6d3c909 1372 }
38692459 1373 else if (pfile->cb.def_pragma)
fb5ab82c 1374 {
add258d7 1375 if (count == 1 || pfile->context->prev == NULL)
1376 _cpp_backup_tokens (pfile, count);
1377 else
1378 {
1379 /* Invalid name comes from macro expansion, _cpp_backup_tokens
1380 won't allow backing 2 tokens. */
1381 /* ??? The token buffer is leaked. Perhaps if def_pragma hook
1382 reads both tokens, we could perhaps free it, but if it doesn't,
1383 we don't know the exact lifespan. */
1384 cpp_token *toks = XNEWVEC (cpp_token, 2);
1385 toks[0] = ns_token;
1386 toks[0].flags |= NO_EXPAND;
1387 toks[1] = *token;
1388 toks[1].flags |= NO_EXPAND;
1389 _cpp_push_token_context (pfile, NULL, toks, 2);
1390 }
f7fdd7a1 1391 pfile->cb.def_pragma (pfile, pfile->directive_line);
fb5ab82c 1392 }
c6f14ce5 1393
5621a364 1394 pfile->state.prevent_expansion--;
3f075661 1395}
1396
e484a1cc 1397/* Handle #pragma once. */
6cae2504 1398static void
f7fdd7a1 1399do_pragma_once (cpp_reader *pfile)
4e29fcb2 1400{
927b511f 1401 if (cpp_in_primary_file (pfile))
d80d2074 1402 cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file");
79bd622b 1403
1404 check_eol (pfile);
68faebf4 1405 _cpp_mark_file_once_only (pfile, pfile->buffer->file);
4e29fcb2 1406}
c9d838e1 1407
8e1db61c 1408/* Handle #pragma GCC poison, to poison one or more identifiers so
1409 that the lexer produces a hard error for each subsequent usage. */
6cae2504 1410static void
f7fdd7a1 1411do_pragma_poison (cpp_reader *pfile)
4e29fcb2 1412{
c00e481c 1413 const cpp_token *tok;
c4abf88d 1414 cpp_hashnode *hp;
4e29fcb2 1415
79bd622b 1416 pfile->state.poisoned_ok = 1;
4e29fcb2 1417 for (;;)
1418 {
c00e481c 1419 tok = _cpp_lex_token (pfile);
1420 if (tok->type == CPP_EOF)
4e29fcb2 1421 break;
c00e481c 1422 if (tok->type != CPP_NAME)
c9d838e1 1423 {
d80d2074 1424 cpp_error (pfile, CPP_DL_ERROR,
1425 "invalid #pragma GCC poison directive");
79bd622b 1426 break;
c9d838e1 1427 }
1428
c00e481c 1429 hp = tok->val.node;
79bd622b 1430 if (hp->flags & NODE_POISONED)
1431 continue;
1432
1433 if (hp->type == NT_MACRO)
d80d2074 1434 cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro \"%s\"",
73328dce 1435 NODE_NAME (hp));
79bd622b 1436 _cpp_free_definition (hp);
1437 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
c9d838e1 1438 }
79bd622b 1439 pfile->state.poisoned_ok = 0;
1d6fa33f 1440}
e35f919d 1441
1442/* Mark the current header as a system header. This will suppress
1443 some categories of warnings (notably those from -pedantic). It is
1444 intended for use in system libraries that cannot be implemented in
1445 conforming C, but cannot be certain that their headers appear in a
1446 system include directory. To prevent abuse, it is rejected in the
1447 primary source file. */
6cae2504 1448static void
f7fdd7a1 1449do_pragma_system_header (cpp_reader *pfile)
e35f919d 1450{
927b511f 1451 if (cpp_in_primary_file (pfile))
d80d2074 1452 cpp_error (pfile, CPP_DL_WARNING,
73328dce 1453 "#pragma system_header ignored outside include file");
e35f919d 1454 else
38692459 1455 {
1456 check_eol (pfile);
fb5ab82c 1457 skip_rest_of_line (pfile);
38692459 1458 cpp_make_system_header (pfile, 1, 0);
1459 }
e35f919d 1460}
e485814b 1461
1462/* Check the modified date of the current include file against a specified
1463 file. Issue a diagnostic, if the specified file is newer. We use this to
1464 determine if a fixed header should be refixed. */
6cae2504 1465static void
f7fdd7a1 1466do_pragma_dependency (cpp_reader *pfile)
e485814b 1467{
58efbd5a 1468 const char *fname;
1469 int angle_brackets, ordering;
b1a9ff83 1470
f789fe3e 1471 fname = parse_include (pfile, &angle_brackets, NULL);
58efbd5a 1472 if (!fname)
6cae2504 1473 return;
f80e83a9 1474
58efbd5a 1475 ordering = _cpp_compare_file_date (pfile, fname, angle_brackets);
e485814b 1476 if (ordering < 0)
d80d2074 1477 cpp_error (pfile, CPP_DL_WARNING, "cannot find source file %s", fname);
e485814b 1478 else if (ordering > 0)
1479 {
d80d2074 1480 cpp_error (pfile, CPP_DL_WARNING,
1481 "current file is older than %s", fname);
f9b5f742 1482 if (cpp_get_token (pfile)->type != CPP_EOF)
fb5ab82c 1483 {
1484 _cpp_backup_tokens (pfile, 1);
d80d2074 1485 do_diagnostic (pfile, CPP_DL_WARNING, 0);
fb5ab82c 1486 }
e485814b 1487 }
58efbd5a 1488
b9a7cc69 1489 free ((void *) fname);
e485814b 1490}
1491
f9b5f742 1492/* Get a token but skip padding. */
1493static const cpp_token *
f7fdd7a1 1494get_token_no_padding (cpp_reader *pfile)
396ffa86 1495{
f9b5f742 1496 for (;;)
1497 {
1498 const cpp_token *result = cpp_get_token (pfile);
1499 if (result->type != CPP_PADDING)
1500 return result;
1501 }
1502}
396ffa86 1503
f9b5f742 1504/* Check syntax is "(string-literal)". Returns the string on success,
1505 or NULL on failure. */
1506static const cpp_token *
f7fdd7a1 1507get__Pragma_string (cpp_reader *pfile)
f9b5f742 1508{
1509 const cpp_token *string;
2d507e67 1510 const cpp_token *paren;
396ffa86 1511
2d507e67 1512 paren = get_token_no_padding (pfile);
1513 if (paren->type == CPP_EOF)
1514 _cpp_backup_tokens (pfile, 1);
1515 if (paren->type != CPP_OPEN_PAREN)
f9b5f742 1516 return NULL;
1517
1518 string = get_token_no_padding (pfile);
2d507e67 1519 if (string->type == CPP_EOF)
1520 _cpp_backup_tokens (pfile, 1);
924bbf02 1521 if (string->type != CPP_STRING && string->type != CPP_WSTRING
1522 && string->type != CPP_STRING32 && string->type != CPP_STRING16)
f9b5f742 1523 return NULL;
1524
2d507e67 1525 paren = get_token_no_padding (pfile);
1526 if (paren->type == CPP_EOF)
1527 _cpp_backup_tokens (pfile, 1);
1528 if (paren->type != CPP_CLOSE_PAREN)
f9b5f742 1529 return NULL;
396ffa86 1530
f9b5f742 1531 return string;
396ffa86 1532}
1533
1e0ef2fd 1534/* Destringize IN into a temporary buffer, by removing the first \ of
1535 \" and \\ sequences, and process the result as a #pragma directive. */
1536static void
f7fdd7a1 1537destringize_and_run (cpp_reader *pfile, const cpp_string *in)
396ffa86 1538{
1539 const unsigned char *src, *limit;
1e0ef2fd 1540 char *dest, *result;
b75b98aa 1541 cpp_context *saved_context;
1542 cpp_token *saved_cur_token;
1543 tokenrun *saved_cur_run;
1544 cpp_token *toks;
1545 int count;
8302ff7f 1546 const struct directive *save_directive;
396ffa86 1547
720aca92 1548 dest = result = (char *) alloca (in->len - 1);
4970d4c2 1549 src = in->text + 1 + (in->text[0] == 'L');
1550 limit = in->text + in->len - 1;
1551 while (src < limit)
396ffa86 1552 {
1553 /* We know there is a character following the backslash. */
1554 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1555 src++;
1556 *dest++ = *src++;
1557 }
a54e0bf8 1558 *dest = '\n';
396ffa86 1559
6e5ef531 1560 /* Ugh; an awful kludge. We are really not set up to be lexing
1561 tokens when in the middle of a macro expansion. Use a new
1562 context to force cpp_get_token to lex, and so skip_rest_of_line
1563 doesn't go beyond the end of the text. Also, remember the
1564 current lexing position so we can return to it later.
1565
1566 Something like line-at-a-time lexing should remove the need for
1567 this. */
b75b98aa 1568 saved_context = pfile->context;
1569 saved_cur_token = pfile->cur_token;
1570 saved_cur_run = pfile->cur_run;
878d9b47 1571
b75b98aa 1572 pfile->context = XNEW (cpp_context);
1573 pfile->context->macro = 0;
1574 pfile->context->prev = 0;
add258d7 1575 pfile->context->next = 0;
878d9b47 1576
b75b98aa 1577 /* Inline run_directive, since we need to delay the _cpp_pop_buffer
1578 until we've read all of the tokens that we want. */
1579 cpp_push_buffer (pfile, (const uchar *) result, dest - result,
1580 /* from_stage3 */ true);
1581 /* ??? Antique Disgusting Hack. What does this do? */
1582 if (pfile->buffer->prev)
1583 pfile->buffer->file = pfile->buffer->prev->file;
878d9b47 1584
b75b98aa 1585 start_directive (pfile);
1586 _cpp_clean_line (pfile);
8302ff7f 1587 save_directive = pfile->directive;
1588 pfile->directive = &dtable[T_PRAGMA];
b75b98aa 1589 do_pragma (pfile);
1590 end_directive (pfile, 1);
8302ff7f 1591 pfile->directive = save_directive;
878d9b47 1592
b75b98aa 1593 /* We always insert at least one token, the directive result. It'll
1594 either be a CPP_PADDING or a CPP_PRAGMA. In the later case, we
1595 need to insert *all* of the tokens, including the CPP_PRAGMA_EOL. */
1596
1597 /* If we're not handling the pragma internally, read all of the tokens from
1598 the string buffer now, while the string buffer is still installed. */
1599 /* ??? Note that the token buffer allocated here is leaked. It's not clear
1600 to me what the true lifespan of the tokens are. It would appear that
1601 the lifespan is the entire parse of the main input stream, in which case
1602 this may not be wrong. */
1603 if (pfile->directive_result.type == CPP_PRAGMA)
1604 {
1605 int maxcount;
1606
1607 count = 1;
1608 maxcount = 50;
1609 toks = XNEWVEC (cpp_token, maxcount);
1610 toks[0] = pfile->directive_result;
878d9b47 1611
b75b98aa 1612 do
1613 {
1614 if (count == maxcount)
1615 {
1616 maxcount = maxcount * 3 / 2;
1617 toks = XRESIZEVEC (cpp_token, toks, maxcount);
1618 }
add258d7 1619 toks[count] = *cpp_get_token (pfile);
1620 /* Macros have been already expanded by cpp_get_token
1621 if the pragma allowed expansion. */
1622 toks[count++].flags |= NO_EXPAND;
b75b98aa 1623 }
1624 while (toks[count-1].type != CPP_PRAGMA_EOL);
1625 }
1626 else
1627 {
1628 count = 1;
1629 toks = XNEW (cpp_token);
1630 toks[0] = pfile->directive_result;
1631
1632 /* If we handled the entire pragma internally, make sure we get the
1633 line number correct for the next token. */
1634 if (pfile->cb.line_change)
1635 pfile->cb.line_change (pfile, pfile->cur_token, false);
1636 }
1637
1638 /* Finish inlining run_directive. */
1639 pfile->buffer->file = NULL;
1640 _cpp_pop_buffer (pfile);
1641
1642 /* Reset the old macro state before ... */
1643 XDELETE (pfile->context);
1644 pfile->context = saved_context;
1645 pfile->cur_token = saved_cur_token;
1646 pfile->cur_run = saved_cur_run;
1647
1648 /* ... inserting the new tokens we collected. */
1649 _cpp_push_token_context (pfile, NULL, toks, count);
396ffa86 1650}
1651
2d507e67 1652/* Handle the _Pragma operator. Return 0 on error, 1 if ok. */
1653int
f7fdd7a1 1654_cpp_do__Pragma (cpp_reader *pfile)
396ffa86 1655{
f9b5f742 1656 const cpp_token *string = get__Pragma_string (pfile);
d6d3c909 1657 pfile->directive_result.type = CPP_PADDING;
396ffa86 1658
878d9b47 1659 if (string)
2d507e67 1660 {
1661 destringize_and_run (pfile, &string->val.str);
1662 return 1;
1663 }
1664 cpp_error (pfile, CPP_DL_ERROR,
1665 "_Pragma takes a parenthesized string literal");
1666 return 0;
396ffa86 1667}
d6d3c909 1668
e484a1cc 1669/* Handle #ifdef. */
69461e0d 1670static void
f7fdd7a1 1671do_ifdef (cpp_reader *pfile)
4bf559f2 1672{
79bd622b 1673 int skip = 1;
f80e83a9 1674
5e878517 1675 if (! pfile->state.skipping)
79bd622b 1676 {
34c3de48 1677 cpp_hashnode *node = lex_macro_node (pfile, false);
f80e83a9 1678
79bd622b 1679 if (node)
71a7c282 1680 {
1681 skip = node->type != NT_MACRO;
1682 _cpp_mark_macro_used (node);
34c3de48 1683 if (!(node->flags & NODE_USED))
1684 {
1685 node->flags |= NODE_USED;
1686 if (node->type == NT_MACRO)
1687 {
1688 if (pfile->cb.used_define)
1689 pfile->cb.used_define (pfile, pfile->directive_line, node);
1690 }
1691 else
1692 {
1693 if (pfile->cb.used_undef)
1694 pfile->cb.used_undef (pfile, pfile->directive_line, node);
1695 }
1696 }
71a7c282 1697 check_eol (pfile);
1698 }
79bd622b 1699 }
4bf559f2 1700
79bd622b 1701 push_conditional (pfile, skip, T_IFDEF, 0);
1702}
4bf559f2 1703
e484a1cc 1704/* Handle #ifndef. */
69461e0d 1705static void
f7fdd7a1 1706do_ifndef (cpp_reader *pfile)
4bf559f2 1707{
79bd622b 1708 int skip = 1;
34c3de48 1709 cpp_hashnode *node = 0;
4bf559f2 1710
5e878517 1711 if (! pfile->state.skipping)
b970ec42 1712 {
3e2a04b5 1713 node = lex_macro_node (pfile, false);
f99f369d 1714
1715 if (node)
71a7c282 1716 {
1717 skip = node->type == NT_MACRO;
1718 _cpp_mark_macro_used (node);
34c3de48 1719 if (!(node->flags & NODE_USED))
1720 {
1721 node->flags |= NODE_USED;
1722 if (node->type == NT_MACRO)
1723 {
1724 if (pfile->cb.used_define)
1725 pfile->cb.used_define (pfile, pfile->directive_line, node);
1726 }
1727 else
1728 {
1729 if (pfile->cb.used_undef)
1730 pfile->cb.used_undef (pfile, pfile->directive_line, node);
1731 }
1732 }
71a7c282 1733 check_eol (pfile);
1734 }
b970ec42 1735 }
f80e83a9 1736
79bd622b 1737 push_conditional (pfile, skip, T_IFNDEF, node);
1d6fa33f 1738}
1739
fa233610 1740/* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in
1741 pfile->mi_ind_cmacro so we can handle multiple-include
7ef5b942 1742 optimizations. If macro expansion occurs in the expression, we
fa233610 1743 cannot treat it as a controlling conditional, since the expansion
1744 could change in the future. That is handled by cpp_get_token. */
69461e0d 1745static void
f7fdd7a1 1746do_if (cpp_reader *pfile)
1d6fa33f 1747{
79bd622b 1748 int skip = 1;
1d6fa33f 1749
5e878517 1750 if (! pfile->state.skipping)
536a48ee 1751 skip = _cpp_parse_expr (pfile, true) == false;
79bd622b 1752
fa233610 1753 push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro);
1d6fa33f 1754}
1755
920b5d41 1756/* Flip skipping state if appropriate and continue without changing
c4357c92 1757 if_stack; this is so that the error message for missing #endif's
1758 etc. will point to the original #if. */
69461e0d 1759static void
f7fdd7a1 1760do_else (cpp_reader *pfile)
8e33b875 1761{
920b5d41 1762 cpp_buffer *buffer = pfile->buffer;
1763 struct if_stack *ifs = buffer->if_stack;
c030ed73 1764
c4357c92 1765 if (ifs == NULL)
d80d2074 1766 cpp_error (pfile, CPP_DL_ERROR, "#else without #if");
79bd622b 1767 else
c030ed73 1768 {
79bd622b 1769 if (ifs->type == T_ELSE)
1770 {
d80d2074 1771 cpp_error (pfile, CPP_DL_ERROR, "#else after #else");
1772 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
79bd622b 1773 "the conditional began here");
1774 }
920b5d41 1775 ifs->type = T_ELSE;
1776
5e878517 1777 /* Skip any future (erroneous) #elses or #elifs. */
1778 pfile->state.skipping = ifs->skip_elses;
1779 ifs->skip_elses = true;
1d6fa33f 1780
79bd622b 1781 /* Invalidate any controlling macro. */
1782 ifs->mi_cmacro = 0;
79bd622b 1783
5e878517 1784 /* Only check EOL if was not originally skipping. */
923acdd5 1785 if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
5e878517 1786 check_eol (pfile);
1787 }
1d6fa33f 1788}
1789
e484a1cc 1790/* Handle a #elif directive by not changing if_stack either. See the
79bd622b 1791 comment above do_else. */
69461e0d 1792static void
f7fdd7a1 1793do_elif (cpp_reader *pfile)
1d6fa33f 1794{
920b5d41 1795 cpp_buffer *buffer = pfile->buffer;
1796 struct if_stack *ifs = buffer->if_stack;
1d6fa33f 1797
c4357c92 1798 if (ifs == NULL)
d80d2074 1799 cpp_error (pfile, CPP_DL_ERROR, "#elif without #if");
920b5d41 1800 else
0b60628c 1801 {
920b5d41 1802 if (ifs->type == T_ELSE)
1803 {
d80d2074 1804 cpp_error (pfile, CPP_DL_ERROR, "#elif after #else");
1805 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
920b5d41 1806 "the conditional began here");
1807 }
1808 ifs->type = T_ELIF;
79bd622b 1809
536a48ee 1810 if (! ifs->was_skipping)
920b5d41 1811 {
536a48ee 1812 bool value;
1813 /* The standard mandates that the expression be parsed even
1814 if we are skipping elses at this point -- the lexical
1815 restrictions on #elif only apply to skipped groups, but
1816 this group is not being skipped. Temporarily set
1817 skipping to false to get lexer warnings. */
5e878517 1818 pfile->state.skipping = 0;
536a48ee 1819 value = _cpp_parse_expr (pfile, false);
1820 if (ifs->skip_elses)
1821 pfile->state.skipping = 1;
1822 else
1823 {
1824 pfile->state.skipping = ! value;
1825 ifs->skip_elses = value;
1826 }
920b5d41 1827 }
5e878517 1828
1829 /* Invalidate any controlling macro. */
1830 ifs->mi_cmacro = 0;
0b60628c 1831 }
1d6fa33f 1832}
1833
5e878517 1834/* #endif pops the if stack and resets pfile->state.skipping. */
69461e0d 1835static void
f7fdd7a1 1836do_endif (cpp_reader *pfile)
1d6fa33f 1837{
920b5d41 1838 cpp_buffer *buffer = pfile->buffer;
1839 struct if_stack *ifs = buffer->if_stack;
c4357c92 1840
c4357c92 1841 if (ifs == NULL)
d80d2074 1842 cpp_error (pfile, CPP_DL_ERROR, "#endif without #if");
1d6fa33f 1843 else
1844 {
5e878517 1845 /* Only check EOL if was not originally skipping. */
923acdd5 1846 if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
5e878517 1847 check_eol (pfile);
1848
79bd622b 1849 /* If potential control macro, we go back outside again. */
1850 if (ifs->next == 0 && ifs->mi_cmacro)
1851 {
fa233610 1852 pfile->mi_valid = true;
79bd622b 1853 pfile->mi_cmacro = ifs->mi_cmacro;
1854 }
1855
920b5d41 1856 buffer->if_stack = ifs->next;
5e878517 1857 pfile->state.skipping = ifs->was_skipping;
0d086e18 1858 obstack_free (&pfile->buffer_ob, ifs);
1d6fa33f 1859 }
79bd622b 1860}
f80e83a9 1861
e484a1cc 1862/* Push an if_stack entry for a preprocessor conditional, and set
1863 pfile->state.skipping to SKIP. If TYPE indicates the conditional
1864 is #if or #ifndef, CMACRO is a potentially controlling macro, and
1865 we need to check here that we are at the top of the file. */
c4357c92 1866static void
f7fdd7a1 1867push_conditional (cpp_reader *pfile, int skip, int type,
1868 const cpp_hashnode *cmacro)
c4357c92 1869{
1870 struct if_stack *ifs;
920b5d41 1871 cpp_buffer *buffer = pfile->buffer;
c4357c92 1872
3b298764 1873 ifs = XOBNEW (&pfile->buffer_ob, struct if_stack);
729d2022 1874 ifs->line = pfile->directive_line;
920b5d41 1875 ifs->next = buffer->if_stack;
5e878517 1876 ifs->skip_elses = pfile->state.skipping || !skip;
1877 ifs->was_skipping = pfile->state.skipping;
c4357c92 1878 ifs->type = type;
fa233610 1879 /* This condition is effectively a test for top-of-file. */
1880 if (pfile->mi_valid && pfile->mi_cmacro == 0)
79bd622b 1881 ifs->mi_cmacro = cmacro;
1882 else
1883 ifs->mi_cmacro = 0;
c4357c92 1884
5e878517 1885 pfile->state.skipping = skip;
920b5d41 1886 buffer->if_stack = ifs;
4896abfd 1887}
69bcbfc6 1888
e484a1cc 1889/* Read the tokens of the answer into the macro pool, in a directive
1890 of type TYPE. Only commit the memory if we intend it as permanent
1891 storage, i.e. the #assert case. Returns 0 on success, and sets
1892 ANSWERP to point to the answer. */
79bd622b 1893static int
f7fdd7a1 1894parse_answer (cpp_reader *pfile, struct answer **answerp, int type)
1d6fa33f 1895{
f9b5f742 1896 const cpp_token *paren;
79bd622b 1897 struct answer *answer;
e6a5f963 1898 unsigned int acount;
79bd622b 1899
1900 /* In a conditional, it is legal to not have an open paren. We
1901 should save the following token in this case. */
f9b5f742 1902 paren = cpp_get_token (pfile);
79bd622b 1903
1904 /* If not a paren, see if we're OK. */
f9b5f742 1905 if (paren->type != CPP_OPEN_PAREN)
f80e83a9 1906 {
79bd622b 1907 /* In a conditional no answer is a test for any answer. It
1908 could be followed by any token. */
1909 if (type == T_IF)
fb5ab82c 1910 {
1911 _cpp_backup_tokens (pfile, 1);
1912 return 0;
1913 }
79bd622b 1914
1915 /* #unassert with no answer is valid - it removes all answers. */
f9b5f742 1916 if (type == T_UNASSERT && paren->type == CPP_EOF)
79bd622b 1917 return 0;
bce8e0c0 1918
d80d2074 1919 cpp_error (pfile, CPP_DL_ERROR, "missing '(' after predicate");
79bd622b 1920 return 1;
f80e83a9 1921 }
69bcbfc6 1922
e6a5f963 1923 for (acount = 0;; acount++)
f80e83a9 1924 {
e6a5f963 1925 size_t room_needed;
1926 const cpp_token *token = cpp_get_token (pfile);
1927 cpp_token *dest;
79bd622b 1928
f80e83a9 1929 if (token->type == CPP_CLOSE_PAREN)
1930 break;
3ba8b497 1931
79bd622b 1932 if (token->type == CPP_EOF)
f80e83a9 1933 {
d80d2074 1934 cpp_error (pfile, CPP_DL_ERROR, "missing ')' to complete answer");
79bd622b 1935 return 1;
f80e83a9 1936 }
e6a5f963 1937
1938 /* struct answer includes the space for one token. */
1939 room_needed = (sizeof (struct answer) + acount * sizeof (cpp_token));
1940
1941 if (BUFF_ROOM (pfile->a_buff) < room_needed)
1942 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (struct answer));
1943
1944 dest = &((struct answer *) BUFF_FRONT (pfile->a_buff))->first[acount];
1945 *dest = *token;
1946
1947 /* Drop whitespace at start, for answer equivalence purposes. */
1948 if (acount == 0)
1949 dest->flags &= ~PREV_WHITE;
f80e83a9 1950 }
bce8e0c0 1951
e6a5f963 1952 if (acount == 0)
69bcbfc6 1953 {
d80d2074 1954 cpp_error (pfile, CPP_DL_ERROR, "predicate's answer is empty");
79bd622b 1955 return 1;
1d6fa33f 1956 }
f80e83a9 1957
e6a5f963 1958 answer = (struct answer *) BUFF_FRONT (pfile->a_buff);
1959 answer->count = acount;
1960 answer->next = NULL;
79bd622b 1961 *answerp = answer;
f80e83a9 1962
79bd622b 1963 return 0;
1964}
f80e83a9 1965
e484a1cc 1966/* Parses an assertion directive of type TYPE, returning a pointer to
1967 the hash node of the predicate, or 0 on error. If an answer was
1968 supplied, it is placed in ANSWERP, otherwise it is set to 0. */
79bd622b 1969static cpp_hashnode *
f7fdd7a1 1970parse_assertion (cpp_reader *pfile, struct answer **answerp, int type)
79bd622b 1971{
1972 cpp_hashnode *result = 0;
f9b5f742 1973 const cpp_token *predicate;
79bd622b 1974
1975 /* We don't expand predicates or answers. */
1976 pfile->state.prevent_expansion++;
1977
79bd622b 1978 *answerp = 0;
f9b5f742 1979 predicate = cpp_get_token (pfile);
1980 if (predicate->type == CPP_EOF)
d80d2074 1981 cpp_error (pfile, CPP_DL_ERROR, "assertion without predicate");
f9b5f742 1982 else if (predicate->type != CPP_NAME)
d80d2074 1983 cpp_error (pfile, CPP_DL_ERROR, "predicate must be an identifier");
79bd622b 1984 else if (parse_answer (pfile, answerp, type) == 0)
1985 {
f9b5f742 1986 unsigned int len = NODE_LEN (predicate->val.node);
720aca92 1987 unsigned char *sym = (unsigned char *) alloca (len + 1);
f80e83a9 1988
79bd622b 1989 /* Prefix '#' to get it out of macro namespace. */
1990 sym[0] = '#';
f9b5f742 1991 memcpy (sym + 1, NODE_NAME (predicate->val.node), len);
79bd622b 1992 result = cpp_lookup (pfile, sym, len + 1);
1993 }
69bcbfc6 1994
79bd622b 1995 pfile->state.prevent_expansion--;
1996 return result;
1d6fa33f 1997}
69bcbfc6 1998
e484a1cc 1999/* Returns a pointer to the pointer to CANDIDATE in the answer chain,
f80e83a9 2000 or a pointer to NULL if the answer is not in the chain. */
79bd622b 2001static struct answer **
f7fdd7a1 2002find_answer (cpp_hashnode *node, const struct answer *candidate)
1d6fa33f 2003{
79bd622b 2004 unsigned int i;
f80e83a9 2005 struct answer **result;
1d6fa33f 2006
f80e83a9 2007 for (result = &node->value.answers; *result; result = &(*result)->next)
79bd622b 2008 {
2009 struct answer *answer = *result;
2010
2011 if (answer->count == candidate->count)
2012 {
2013 for (i = 0; i < answer->count; i++)
2014 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
2015 break;
2016
2017 if (i == answer->count)
2018 break;
2019 }
2020 }
c030ed73 2021
f80e83a9 2022 return result;
2023}
bce8e0c0 2024
79bd622b 2025/* Test an assertion within a preprocessor conditional. Returns
d10cfa8d 2026 nonzero on failure, zero on success. On success, the result of
9fd28e01 2027 the test is written into VALUE, otherwise the value 0. */
79bd622b 2028int
f7fdd7a1 2029_cpp_test_assertion (cpp_reader *pfile, unsigned int *value)
79bd622b 2030{
2031 struct answer *answer;
2032 cpp_hashnode *node;
2033
2034 node = parse_assertion (pfile, &answer, T_IF);
9fd28e01 2035
2036 /* For recovery, an erroneous assertion expression is handled as a
2037 failing assertion. */
2038 *value = 0;
2039
79bd622b 2040 if (node)
2041 *value = (node->type == NT_ASSERTION &&
2042 (answer == 0 || *find_answer (node, answer) != 0));
b444d47a 2043 else if (pfile->cur_token[-1].type == CPP_EOF)
2044 _cpp_backup_tokens (pfile, 1);
79bd622b 2045
2046 /* We don't commit the memory for the answer - it's temporary only. */
2047 return node == 0;
2048}
2049
e484a1cc 2050/* Handle #assert. */
69461e0d 2051static void
f7fdd7a1 2052do_assert (cpp_reader *pfile)
f80e83a9 2053{
2054 struct answer *new_answer;
2055 cpp_hashnode *node;
b1a9ff83 2056
79bd622b 2057 node = parse_assertion (pfile, &new_answer, T_ASSERT);
f80e83a9 2058 if (node)
c030ed73 2059 {
c39ed964 2060 size_t answer_size;
2061
79bd622b 2062 /* Place the new answer in the answer list. First check there
2063 is not a duplicate. */
f80e83a9 2064 new_answer->next = 0;
79bd622b 2065 if (node->type == NT_ASSERTION)
f80e83a9 2066 {
79bd622b 2067 if (*find_answer (node, new_answer))
2068 {
d80d2074 2069 cpp_error (pfile, CPP_DL_WARNING, "\"%s\" re-asserted",
73328dce 2070 NODE_NAME (node) + 1);
79bd622b 2071 return;
2072 }
f80e83a9 2073 new_answer->next = node->value.answers;
2074 }
e6a5f963 2075
c39ed964 2076 answer_size = sizeof (struct answer) + ((new_answer->count - 1)
2077 * sizeof (cpp_token));
2078 /* Commit or allocate storage for the object. */
2079 if (pfile->hash_table->alloc_subobject)
2080 {
2081 struct answer *temp_answer = new_answer;
720aca92 2082 new_answer = (struct answer *) pfile->hash_table->alloc_subobject
2083 (answer_size);
c39ed964 2084 memcpy (new_answer, temp_answer, answer_size);
2085 }
2086 else
2087 BUFF_FRONT (pfile->a_buff) += answer_size;
2088
79bd622b 2089 node->type = NT_ASSERTION;
f80e83a9 2090 node->value.answers = new_answer;
e6a5f963 2091 check_eol (pfile);
c030ed73 2092 }
f80e83a9 2093}
bce8e0c0 2094
e484a1cc 2095/* Handle #unassert. */
69461e0d 2096static void
f7fdd7a1 2097do_unassert (cpp_reader *pfile)
f80e83a9 2098{
2099 cpp_hashnode *node;
79bd622b 2100 struct answer *answer;
b1a9ff83 2101
79bd622b 2102 node = parse_assertion (pfile, &answer, T_UNASSERT);
2103 /* It isn't an error to #unassert something that isn't asserted. */
2104 if (node && node->type == NT_ASSERTION)
69bcbfc6 2105 {
79bd622b 2106 if (answer)
bce8e0c0 2107 {
79bd622b 2108 struct answer **p = find_answer (node, answer), *temp;
f80e83a9 2109
79bd622b 2110 /* Remove the answer from the list. */
2111 temp = *p;
2112 if (temp)
2113 *p = temp->next;
3ba8b497 2114
79bd622b 2115 /* Did we free the last answer? */
2116 if (node->value.answers == 0)
2117 node->type = NT_VOID;
e6a5f963 2118
2119 check_eol (pfile);
79bd622b 2120 }
2121 else
2122 _cpp_free_definition (node);
f80e83a9 2123 }
79bd622b 2124
2125 /* We don't commit the memory for the answer - it's temporary only. */
1d6fa33f 2126}
1d6fa33f 2127
0578f103 2128/* These are for -D, -U, -A. */
2129
2130/* Process the string STR as if it appeared as the body of a #define.
2131 If STR is just an identifier, define it with value 1.
2132 If STR has anything after the identifier, then it should
2c0e001b 2133 be identifier=definition. */
9fa36617 2134void
f7fdd7a1 2135cpp_define (cpp_reader *pfile, const char *str)
9fa36617 2136{
0578f103 2137 char *buf, *p;
2138 size_t count;
2139
b1a9ff83 2140 /* Copy the entire option so we can modify it.
0578f103 2141 Change the first "=" in the string to a space. If there is none,
90dc47e0 2142 tack " 1" on the end. */
2143
90dc47e0 2144 count = strlen (str);
720aca92 2145 buf = (char *) alloca (count + 3);
90dc47e0 2146 memcpy (buf, str, count);
2147
2148 p = strchr (str, '=');
0578f103 2149 if (p)
90dc47e0 2150 buf[p - str] = ' ';
0578f103 2151 else
2152 {
90dc47e0 2153 buf[count++] = ' ';
2154 buf[count++] = '1';
9fa36617 2155 }
a54e0bf8 2156 buf[count] = '\n';
eb3948d1 2157
c808d026 2158 run_directive (pfile, T_DEFINE, buf, count);
a336277c 2159}
2160
85e51d59 2161
2162/* Use to build macros to be run through cpp_define() as
2163 described above.
2164 Example: cpp_define_formatted (pfile, "MACRO=%d", value); */
2165
2166void
2167cpp_define_formatted (cpp_reader *pfile, const char *fmt, ...)
2168{
2169 char *ptr = NULL;
2170
2171 va_list ap;
2172 va_start (ap, fmt);
2173 vasprintf (&ptr, fmt, ap);
2174 va_end (ap);
2175
2176 cpp_define (pfile, ptr);
2177 free (ptr);
2178}
2179
2180
f0c20935 2181/* Slight variant of the above for use by initialize_builtins. */
a336277c 2182void
f7fdd7a1 2183_cpp_define_builtin (cpp_reader *pfile, const char *str)
a336277c 2184{
a54e0bf8 2185 size_t len = strlen (str);
720aca92 2186 char *buf = (char *) alloca (len + 1);
a54e0bf8 2187 memcpy (buf, str, len);
2188 buf[len] = '\n';
2189 run_directive (pfile, T_DEFINE, buf, len);
0578f103 2190}
a92771b8 2191
0578f103 2192/* Process MACRO as if it appeared as the body of an #undef. */
2193void
f7fdd7a1 2194cpp_undef (cpp_reader *pfile, const char *macro)
1d6fa33f 2195{
a54e0bf8 2196 size_t len = strlen (macro);
720aca92 2197 char *buf = (char *) alloca (len + 1);
a54e0bf8 2198 memcpy (buf, macro, len);
2199 buf[len] = '\n';
2200 run_directive (pfile, T_UNDEF, buf, len);
1d6fa33f 2201}
2202
3fa3949d 2203/* Like lex_macro_node, but read the input from STR. */
2204static cpp_hashnode *
2205lex_macro_node_from_str (cpp_reader *pfile, const char *str)
2206{
2207 size_t len = strlen (str);
f23c2abe 2208 uchar *buf = (uchar *) alloca (len + 1);
3fa3949d 2209 cpp_hashnode *node;
2210
2211 memcpy (buf, str, len);
2212 buf[len] = '\n';
2213 cpp_push_buffer (pfile, buf, len, true);
2214 node = lex_macro_node (pfile, true);
2215 _cpp_pop_buffer (pfile);
2216
2217 return node;
2218}
2219
2220/* If STR is a defined macro, return its definition node, else return NULL. */
2221cpp_macro *
2222cpp_push_definition (cpp_reader *pfile, const char *str)
2223{
2224 cpp_hashnode *node = lex_macro_node_from_str (pfile, str);
2225 if (node && node->type == NT_MACRO)
2226 return node->value.macro;
2227 else
2228 return NULL;
2229}
2230
2231/* Replace a previous definition DFN of the macro STR. If DFN is NULL,
2232 then the macro should be undefined. */
2233void
2234cpp_pop_definition (cpp_reader *pfile, const char *str, cpp_macro *dfn)
2235{
2236 cpp_hashnode *node = lex_macro_node_from_str (pfile, str);
2237 if (node == NULL)
2238 return;
2239
34c3de48 2240 if (pfile->cb.before_define)
2241 pfile->cb.before_define (pfile);
2242
3fa3949d 2243 if (node->type == NT_MACRO)
2244 {
2245 if (pfile->cb.undef)
2246 pfile->cb.undef (pfile, pfile->directive_line, node);
2247 if (CPP_OPTION (pfile, warn_unused_macros))
2248 _cpp_warn_if_unused_macro (pfile, node, NULL);
2249 }
2250 if (node->type != NT_VOID)
2251 _cpp_free_definition (node);
2252
2253 if (dfn)
2254 {
2255 node->type = NT_MACRO;
2256 node->value.macro = dfn;
2257 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_")))
2258 node->flags |= NODE_WARN;
2259
2260 if (pfile->cb.define)
2261 pfile->cb.define (pfile, pfile->directive_line, node);
2262 }
2263}
2264
2c0e001b 2265/* Process the string STR as if it appeared as the body of a #assert. */
0578f103 2266void
f7fdd7a1 2267cpp_assert (cpp_reader *pfile, const char *str)
0578f103 2268{
90dc47e0 2269 handle_assertion (pfile, str, T_ASSERT);
0578f103 2270}
1d6fa33f 2271
2c0e001b 2272/* Process STR as if it appeared as the body of an #unassert. */
0578f103 2273void
f7fdd7a1 2274cpp_unassert (cpp_reader *pfile, const char *str)
1d6fa33f 2275{
90dc47e0 2276 handle_assertion (pfile, str, T_UNASSERT);
b1a9ff83 2277}
e3630c4b 2278
90dc47e0 2279/* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
2280static void
f7fdd7a1 2281handle_assertion (cpp_reader *pfile, const char *str, int type)
90dc47e0 2282{
2283 size_t count = strlen (str);
2284 const char *p = strchr (str, '=');
2285
a54e0bf8 2286 /* Copy the entire option so we can modify it. Change the first
2287 "=" in the string to a '(', and tack a ')' on the end. */
720aca92 2288 char *buf = (char *) alloca (count + 2);
a54e0bf8 2289
2290 memcpy (buf, str, count);
90dc47e0 2291 if (p)
2292 {
90dc47e0 2293 buf[p - str] = '(';
2294 buf[count++] = ')';
90dc47e0 2295 }
a54e0bf8 2296 buf[count] = '\n';
2297 str = buf;
90dc47e0 2298
c808d026 2299 run_directive (pfile, type, str, count);
90dc47e0 2300}
2301
72b04ca4 2302/* The options structure. */
2303cpp_options *
f7fdd7a1 2304cpp_get_options (cpp_reader *pfile)
72b04ca4 2305{
2306 return &pfile->opts;
2307}
2308
2309/* The callbacks structure. */
2310cpp_callbacks *
f7fdd7a1 2311cpp_get_callbacks (cpp_reader *pfile)
72b04ca4 2312{
2313 return &pfile->cb;
2314}
2315
2316/* Copy the given callbacks structure to our own. */
2317void
f7fdd7a1 2318cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
72b04ca4 2319{
2320 pfile->cb = *cb;
2321}
2322
3eb3f293 2323/* The dependencies structure. (Creates one if it hasn't already been.) */
2324struct deps *
2325cpp_get_deps (cpp_reader *pfile)
2326{
2327 if (!pfile->deps)
2328 pfile->deps = deps_init ();
2329 return pfile->deps;
2330}
2331
4087613d 2332/* Push a new buffer on the buffer stack. Returns the new buffer; it
2333 doesn't fail. It does not generate a file change call back; that
2334 is the responsibility of the caller. */
f51c2148 2335cpp_buffer *
f7fdd7a1 2336cpp_push_buffer (cpp_reader *pfile, const uchar *buffer, size_t len,
9eb74666 2337 int from_stage3)
f51c2148 2338{
720aca92 2339 cpp_buffer *new_buffer = XOBNEW (&pfile->buffer_ob, cpp_buffer);
79bd622b 2340
bd507c05 2341 /* Clears, amongst other things, if_stack and mi_cmacro. */
720aca92 2342 memset (new_buffer, 0, sizeof (cpp_buffer));
bd507c05 2343
720aca92 2344 new_buffer->next_line = new_buffer->buf = buffer;
2345 new_buffer->rlimit = buffer + len;
2346 new_buffer->from_stage3 = from_stage3;
2347 new_buffer->prev = pfile->buffer;
2348 new_buffer->need_line = true;
6cee4464 2349
720aca92 2350 pfile->buffer = new_buffer;
787c3d1a 2351
720aca92 2352 return new_buffer;
f51c2148 2353}
2354
02516fb9 2355/* Pops a single buffer, with a file change call-back if appropriate.
2356 Then pushes the next -include file, if any remain. */
4dfe8b74 2357void
f7fdd7a1 2358_cpp_pop_buffer (cpp_reader *pfile)
f51c2148 2359{
bd507c05 2360 cpp_buffer *buffer = pfile->buffer;
1824e2bd 2361 struct _cpp_file *inc = buffer->file;
f0c20935 2362 struct if_stack *ifs;
f51c2148 2363
bd507c05 2364 /* Walk back up the conditional stack till we reach its level at
2365 entry to this file, issuing error messages. */
2366 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
d80d2074 2367 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
bd507c05 2368 "unterminated #%s", dtable[ifs->type].name);
4087613d 2369
5621a364 2370 /* In case of a missing #endif. */
1ea7ed21 2371 pfile->state.skipping = 0;
c808d026 2372
02516fb9 2373 /* _cpp_do_file_change expects pfile->buffer to be the new one. */
c808d026 2374 pfile->buffer = buffer->prev;
2375
a54e0bf8 2376 free (buffer->notes);
2377
02516fb9 2378 /* Free the buffer object now; we may want to push a new buffer
2379 in _cpp_push_next_include_file. */
2380 obstack_free (&pfile->buffer_ob, buffer);
c808d026 2381
02516fb9 2382 if (inc)
2383 {
2384 _cpp_pop_file_buffer (pfile, inc);
2385
9eb74666 2386 _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
02516fb9 2387 }
f51c2148 2388}
2389
a2f10574 2390/* Enter all recognized directives in the hash table. */
f51c2148 2391void
f7fdd7a1 2392_cpp_init_directives (cpp_reader *pfile)
f51c2148 2393{
87f5a8f0 2394 unsigned int i;
79bd622b 2395 cpp_hashnode *node;
76faa4c0 2396
ee6c4e4b 2397 for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
79bd622b 2398 {
87f5a8f0 2399 node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
805e22b2 2400 node->is_directive = 1;
2401 node->directive_index = i;
79bd622b 2402 }
f51c2148 2403}