]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cpplib.c
[multiple changes]
[thirdparty/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{
4ed5bcfb 780 const cpp_token *token;
bb74c963
NB
781 const char *new_file = pfile->map->to_file;
782 unsigned long new_lineno;
93c80368 783
27e2564a 784 /* C99 raised the minimum limit on #line numbers. */
dcc229e5 785 unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
18a9d8ff 786
93c80368 787 /* #line commands expand macros. */
4ed5bcfb
NB
788 token = cpp_get_token (pfile);
789 if (token->type != CPP_NUMBER
790 || strtoul_for_line (token->val.str.text, token->val.str.len,
791 &new_lineno))
7f2935c7 792 {
0527bc4e 793 cpp_error (pfile, CPP_DL_ERROR,
ebef4e8c 794 "\"%s\" after #line is not a positive integer",
4ed5bcfb 795 cpp_token_as_text (pfile, token));
9ec7291f 796 return;
df383483 797 }
7f2935c7 798
dcc229e5 799 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
0527bc4e 800 cpp_error (pfile, CPP_DL_PEDWARN, "line number out of range");
7f2935c7 801
4ed5bcfb
NB
802 token = cpp_get_token (pfile);
803 if (token->type == CPP_STRING)
5538ada6 804 {
e6cc3a24 805 cpp_string s = { 0, 0 };
6b88314c 806 if (_cpp_interpret_string_notranslate (pfile, &token->val.str, &s))
e6cc3a24 807 new_file = (const char *)s.text;
dcc229e5
ZW
808 check_eol (pfile);
809 }
810 else if (token->type != CPP_EOF)
811 {
0527bc4e 812 cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
dcc229e5
ZW
813 cpp_token_as_text (pfile, token));
814 return;
815 }
816
817 skip_rest_of_line (pfile);
818 _cpp_do_file_change (pfile, LC_RENAME, new_file, new_lineno,
819 pfile->map->sysp);
820}
821
822/* Interpret the # 44 "file" [flags] notation, which has slightly
823 different syntax and semantics from #line: Flags are allowed,
824 and we never complain about the line number being too big. */
825static void
6cf87ca4 826do_linemarker (cpp_reader *pfile)
dcc229e5
ZW
827{
828 const cpp_token *token;
829 const char *new_file = pfile->map->to_file;
830 unsigned long new_lineno;
831 unsigned int new_sysp = pfile->map->sysp;
832 enum lc_reason reason = LC_RENAME;
833 int flag;
834
835 /* Back up so we can get the number again. Putting this in
836 _cpp_handle_directive risks two calls to _cpp_backup_tokens in
837 some circumstances, which can segfault. */
838 _cpp_backup_tokens (pfile, 1);
839
840 /* #line commands expand macros. */
841 token = cpp_get_token (pfile);
842 if (token->type != CPP_NUMBER
843 || strtoul_for_line (token->val.str.text, token->val.str.len,
844 &new_lineno))
845 {
0527bc4e
JDA
846 cpp_error (pfile, CPP_DL_ERROR,
847 "\"%s\" after # is not a positive integer",
dcc229e5
ZW
848 cpp_token_as_text (pfile, token));
849 return;
df383483 850 }
941e09b6 851
dcc229e5
ZW
852 token = cpp_get_token (pfile);
853 if (token->type == CPP_STRING)
854 {
e6cc3a24 855 cpp_string s = { 0, 0 };
6b88314c 856 if (_cpp_interpret_string_notranslate (pfile, &token->val.str, &s))
e6cc3a24 857 new_file = (const char *)s.text;
cf551fba 858
dcc229e5
ZW
859 new_sysp = 0;
860 flag = read_flag (pfile, 0);
861 if (flag == 1)
862 {
863 reason = LC_ENTER;
864 /* Fake an include for cpp_included (). */
865 _cpp_fake_include (pfile, new_file);
866 flag = read_flag (pfile, flag);
867 }
868 else if (flag == 2)
869 {
870 reason = LC_LEAVE;
871 flag = read_flag (pfile, flag);
872 }
873 if (flag == 3)
93c80368 874 {
dcc229e5
ZW
875 new_sysp = 1;
876 flag = read_flag (pfile, flag);
877 if (flag == 4)
878 new_sysp = 2;
93c80368 879 }
dcc229e5 880
fde84349 881 check_eol (pfile);
041c3194 882 }
4ed5bcfb 883 else if (token->type != CPP_EOF)
27e2564a 884 {
0527bc4e 885 cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
4ed5bcfb 886 cpp_token_as_text (pfile, token));
27e2564a
NB
887 return;
888 }
7f2935c7 889
bdcbe496 890 skip_rest_of_line (pfile);
bb74c963 891 _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp);
27e2564a
NB
892}
893
67821e3a 894/* Arrange the file_change callback. pfile->line has changed to
47d89cf3 895 FILE_LINE of TO_FILE, for reason REASON. SYSP is 1 for a system
a1f300c0 896 header, 2 for a system header that needs to be extern "C" protected,
47d89cf3 897 and zero otherwise. */
eb1f4d9d 898void
6cf87ca4
ZW
899_cpp_do_file_change (cpp_reader *pfile, enum lc_reason reason,
900 const char *to_file, unsigned int file_line,
901 unsigned int sysp)
27e2564a 902{
50f59cd7 903 pfile->map = linemap_add (pfile->line_table, reason, sysp,
a2f7be91 904 pfile->line, to_file, file_line);
d82fc108 905
eb1f4d9d 906 if (pfile->cb.file_change)
6cf87ca4 907 pfile->cb.file_change (pfile, pfile->map);
7f2935c7 908}
941e09b6 909
5d8ebbd8
NB
910/* Report a warning or error detected by the program we are
911 processing. Use the directive's tokens in the error message. */
711b8824 912static void
6cf87ca4 913do_diagnostic (cpp_reader *pfile, int code, int print_dir)
7f2935c7 914{
ebef4e8c
NB
915 if (_cpp_begin_message (pfile, code,
916 pfile->cur_token[-1].line,
917 pfile->cur_token[-1].col))
58fea6af 918 {
29b10746
NB
919 if (print_dir)
920 fprintf (stderr, "#%s ", pfile->directive->name);
93c80368
NB
921 pfile->state.prevent_expansion++;
922 cpp_output_line (pfile, stderr);
923 pfile->state.prevent_expansion--;
58fea6af 924 }
7f2935c7
PB
925}
926
838f313b 927static void
6cf87ca4 928do_error (cpp_reader *pfile)
838f313b 929{
0527bc4e 930 do_diagnostic (pfile, CPP_DL_ERROR, 1);
838f313b 931}
7f2935c7 932
711b8824 933static void
6cf87ca4 934do_warning (cpp_reader *pfile)
7f2935c7 935{
2f878973 936 /* We want #warning diagnostics to be emitted in system headers too. */
0527bc4e 937 do_diagnostic (pfile, CPP_DL_WARNING_SYSHDR, 1);
7f2935c7
PB
938}
939
a2a76ce7 940/* Report program identification. */
711b8824 941static void
6cf87ca4 942do_ident (cpp_reader *pfile)
7f2935c7 943{
4ed5bcfb 944 const cpp_token *str = cpp_get_token (pfile);
58fea6af 945
4ed5bcfb 946 if (str->type != CPP_STRING)
0527bc4e 947 cpp_error (pfile, CPP_DL_ERROR, "invalid #ident directive");
93c80368 948 else if (pfile->cb.ident)
6cf87ca4 949 pfile->cb.ident (pfile, pfile->directive_line, &str->val.str);
a2a76ce7 950
93c80368 951 check_eol (pfile);
7f2935c7
PB
952}
953
a5da89c6
NB
954/* Lookup a PRAGMA name in a singly-linked CHAIN. Returns the
955 matching entry, or NULL if none is found. The returned entry could
956 be the start of a namespace chain, or a pragma. */
957static struct pragma_entry *
6cf87ca4 958lookup_pragma_entry (struct pragma_entry *chain, const cpp_hashnode *pragma)
82443371 959{
4b115ff0
NB
960 while (chain && chain->pragma != pragma)
961 chain = chain->next;
a5da89c6
NB
962
963 return chain;
964}
965
966/* Create and insert a pragma entry for NAME at the beginning of a
967 singly-linked CHAIN. If handler is NULL, it is a namespace,
968 otherwise it is a pragma and its handler. */
969static struct pragma_entry *
6cf87ca4
ZW
970insert_pragma_entry (cpp_reader *pfile, struct pragma_entry **chain,
971 const cpp_hashnode *pragma, pragma_cb handler)
82443371 972{
a5da89c6 973 struct pragma_entry *new;
58fea6af 974
bef985f3 975 new = (struct pragma_entry *)
8c3b2693 976 _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry));
4b115ff0 977 new->pragma = pragma;
a5da89c6
NB
978 if (handler)
979 {
980 new->is_nspace = 0;
981 new->u.handler = handler;
982 }
983 else
984 {
985 new->is_nspace = 1;
986 new->u.space = NULL;
987 }
58fea6af 988
a5da89c6
NB
989 new->next = *chain;
990 *chain = new;
991 return new;
58fea6af 992}
82443371 993
a5da89c6
NB
994/* Register a pragma NAME in namespace SPACE. If SPACE is null, it
995 goes in the global namespace. HANDLER is the handler it will call,
996 which must be non-NULL. */
58fea6af 997void
6cf87ca4
ZW
998cpp_register_pragma (cpp_reader *pfile, const char *space, const char *name,
999 pragma_cb handler)
82443371 1000{
a5da89c6
NB
1001 struct pragma_entry **chain = &pfile->pragmas;
1002 struct pragma_entry *entry;
4b115ff0 1003 const cpp_hashnode *node;
a5da89c6
NB
1004
1005 if (!handler)
1006 abort ();
58fea6af 1007
a5da89c6 1008 if (space)
58fea6af 1009 {
4b115ff0
NB
1010 node = cpp_lookup (pfile, U space, strlen (space));
1011 entry = lookup_pragma_entry (*chain, node);
a5da89c6 1012 if (!entry)
4b115ff0 1013 entry = insert_pragma_entry (pfile, chain, node, NULL);
a5da89c6
NB
1014 else if (!entry->is_nspace)
1015 goto clash;
1016 chain = &entry->u.space;
58fea6af
ZW
1017 }
1018
a5da89c6 1019 /* Check for duplicates. */
4b115ff0
NB
1020 node = cpp_lookup (pfile, U name, strlen (name));
1021 entry = lookup_pragma_entry (*chain, node);
a5da89c6
NB
1022 if (entry)
1023 {
1024 if (entry->is_nspace)
1025 clash:
0527bc4e 1026 cpp_error (pfile, CPP_DL_ICE,
a5da89c6 1027 "registering \"%s\" as both a pragma and a pragma namespace",
4b115ff0 1028 NODE_NAME (node));
a5da89c6 1029 else if (space)
0527bc4e 1030 cpp_error (pfile, CPP_DL_ICE, "#pragma %s %s is already registered",
ebef4e8c 1031 space, name);
a5da89c6 1032 else
0527bc4e 1033 cpp_error (pfile, CPP_DL_ICE, "#pragma %s is already registered", name);
a5da89c6
NB
1034 }
1035 else
4b115ff0 1036 insert_pragma_entry (pfile, chain, node, handler);
58fea6af 1037}
a5da89c6
NB
1038
1039/* Register the pragmas the preprocessor itself handles. */
58fea6af 1040void
6cf87ca4 1041_cpp_init_internal_pragmas (cpp_reader *pfile)
58fea6af 1042{
a5da89c6 1043 /* Pragmas in the global namespace. */
58fea6af
ZW
1044 cpp_register_pragma (pfile, 0, "once", do_pragma_once);
1045
a5da89c6 1046 /* New GCC-specific pragmas should be put in the GCC namespace. */
58fea6af
ZW
1047 cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
1048 cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
1049 cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
82443371 1050}
7f2935c7 1051
17211ab5
GK
1052/* Return the number of registered pragmas in PE. */
1053
1054static int
6cf87ca4 1055count_registered_pragmas (struct pragma_entry *pe)
17211ab5
GK
1056{
1057 int ct = 0;
1058 for (; pe != NULL; pe = pe->next)
1059 {
1060 if (pe->is_nspace)
1061 ct += count_registered_pragmas (pe->u.space);
1062 ct++;
1063 }
1064 return ct;
1065}
1066
1067/* Save into SD the names of the registered pragmas referenced by PE,
1068 and return a pointer to the next free space in SD. */
1069
1070static char **
6cf87ca4 1071save_registered_pragmas (struct pragma_entry *pe, char **sd)
17211ab5
GK
1072{
1073 for (; pe != NULL; pe = pe->next)
1074 {
1075 if (pe->is_nspace)
1076 sd = save_registered_pragmas (pe->u.space, sd);
1077 *sd++ = xmemdup (HT_STR (&pe->pragma->ident),
1078 HT_LEN (&pe->pragma->ident),
1079 HT_LEN (&pe->pragma->ident) + 1);
1080 }
1081 return sd;
1082}
1083
1084/* Return a newly-allocated array which saves the names of the
1085 registered pragmas. */
1086
1087char **
6cf87ca4 1088_cpp_save_pragma_names (cpp_reader *pfile)
17211ab5
GK
1089{
1090 int ct = count_registered_pragmas (pfile->pragmas);
1091 char **result = xnewvec (char *, ct);
1092 (void) save_registered_pragmas (pfile->pragmas, result);
1093 return result;
1094}
1095
1096/* Restore from SD the names of the registered pragmas referenced by PE,
1097 and return a pointer to the next unused name in SD. */
1098
1099static char **
6cf87ca4
ZW
1100restore_registered_pragmas (cpp_reader *pfile, struct pragma_entry *pe,
1101 char **sd)
17211ab5
GK
1102{
1103 for (; pe != NULL; pe = pe->next)
1104 {
1105 if (pe->is_nspace)
1106 sd = restore_registered_pragmas (pfile, pe->u.space, sd);
1107 pe->pragma = cpp_lookup (pfile, U *sd, strlen (*sd));
1108 free (*sd);
1109 sd++;
1110 }
1111 return sd;
1112}
1113
1114/* Restore the names of the registered pragmas from SAVED. */
1115
1116void
6cf87ca4 1117_cpp_restore_pragma_names (cpp_reader *pfile, char **saved)
17211ab5
GK
1118{
1119 (void) restore_registered_pragmas (pfile, pfile->pragmas, saved);
1120 free (saved);
1121}
1122
a5da89c6
NB
1123/* Pragmata handling. We handle some, and pass the rest on to the
1124 front end. C99 defines three pragmas and says that no macro
1125 expansion is to be performed on them; whether or not macro
1126 expansion happens for other pragmas is implementation defined.
1127 This implementation never macro-expands the text after #pragma. */
711b8824 1128static void
6cf87ca4 1129do_pragma (cpp_reader *pfile)
7f2935c7 1130{
a5da89c6 1131 const struct pragma_entry *p = NULL;
e2e1fa50 1132 const cpp_token *token, *pragma_token = pfile->cur_token;
a5da89c6 1133 unsigned int count = 1;
add7091b 1134
93c80368 1135 pfile->state.prevent_expansion++;
58fea6af 1136
4ed5bcfb
NB
1137 token = cpp_get_token (pfile);
1138 if (token->type == CPP_NAME)
0172e2bc 1139 {
4b115ff0 1140 p = lookup_pragma_entry (pfile->pragmas, token->val.node);
a5da89c6 1141 if (p && p->is_nspace)
58fea6af 1142 {
a5da89c6
NB
1143 count = 2;
1144 token = cpp_get_token (pfile);
1145 if (token->type == CPP_NAME)
4b115ff0 1146 p = lookup_pragma_entry (p->u.space, token->val.node);
a5da89c6
NB
1147 else
1148 p = NULL;
58fea6af 1149 }
58fea6af 1150 }
041c3194 1151
a5da89c6 1152 if (p)
e2e1fa50
AO
1153 {
1154 /* Since the handler below doesn't get the line number, that it
1155 might need for diagnostics, make sure it has the right
1156 numbers in place. */
1157 if (pfile->cb.line_change)
1158 (*pfile->cb.line_change) (pfile, pragma_token, false);
1159 (*p->u.handler) (pfile);
1160 if (pfile->cb.line_change)
1161 (*pfile->cb.line_change) (pfile, pfile->cur_token, false);
cf551fba 1162
e2e1fa50 1163 }
d82fc108 1164 else if (pfile->cb.def_pragma)
bdcbe496
NB
1165 {
1166 _cpp_backup_tokens (pfile, count);
6cf87ca4 1167 pfile->cb.def_pragma (pfile, pfile->directive_line);
bdcbe496 1168 }
a5da89c6 1169
97293897 1170 pfile->state.prevent_expansion--;
82443371
NS
1171}
1172
5d8ebbd8 1173/* Handle #pragma once. */
58fea6af 1174static void
6cf87ca4 1175do_pragma_once (cpp_reader *pfile)
a2a76ce7 1176{
642ce434 1177 if (pfile->buffer->prev == NULL)
0527bc4e 1178 cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file");
93c80368
NB
1179
1180 check_eol (pfile);
49634b3a 1181 _cpp_mark_file_once_only (pfile, pfile->buffer->file);
a2a76ce7 1182}
fc009f96 1183
c3bf3e6e
NB
1184/* Handle #pragma GCC poison, to poison one or more identifiers so
1185 that the lexer produces a hard error for each subsequent usage. */
58fea6af 1186static void
6cf87ca4 1187do_pragma_poison (cpp_reader *pfile)
a2a76ce7 1188{
345894b4 1189 const cpp_token *tok;
f8f769ea 1190 cpp_hashnode *hp;
a2a76ce7 1191
93c80368 1192 pfile->state.poisoned_ok = 1;
a2a76ce7
ZW
1193 for (;;)
1194 {
345894b4
NB
1195 tok = _cpp_lex_token (pfile);
1196 if (tok->type == CPP_EOF)
a2a76ce7 1197 break;
345894b4 1198 if (tok->type != CPP_NAME)
fc009f96 1199 {
0527bc4e
JDA
1200 cpp_error (pfile, CPP_DL_ERROR,
1201 "invalid #pragma GCC poison directive");
93c80368 1202 break;
fc009f96
GK
1203 }
1204
345894b4 1205 hp = tok->val.node;
93c80368
NB
1206 if (hp->flags & NODE_POISONED)
1207 continue;
1208
1209 if (hp->type == NT_MACRO)
0527bc4e 1210 cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro \"%s\"",
ebef4e8c 1211 NODE_NAME (hp));
93c80368
NB
1212 _cpp_free_definition (hp);
1213 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
fc009f96 1214 }
93c80368 1215 pfile->state.poisoned_ok = 0;
7f2935c7 1216}
2c0b35cb
ZW
1217
1218/* Mark the current header as a system header. This will suppress
1219 some categories of warnings (notably those from -pedantic). It is
1220 intended for use in system libraries that cannot be implemented in
1221 conforming C, but cannot be certain that their headers appear in a
1222 system include directory. To prevent abuse, it is rejected in the
1223 primary source file. */
58fea6af 1224static void
6cf87ca4 1225do_pragma_system_header (cpp_reader *pfile)
2c0b35cb 1226{
614c7d37
NB
1227 cpp_buffer *buffer = pfile->buffer;
1228
1229 if (buffer->prev == 0)
0527bc4e 1230 cpp_error (pfile, CPP_DL_WARNING,
ebef4e8c 1231 "#pragma system_header ignored outside include file");
2c0b35cb 1232 else
d82fc108
NB
1233 {
1234 check_eol (pfile);
bdcbe496 1235 skip_rest_of_line (pfile);
d82fc108
NB
1236 cpp_make_system_header (pfile, 1, 0);
1237 }
2c0b35cb 1238}
f3f751ad
NS
1239
1240/* Check the modified date of the current include file against a specified
1241 file. Issue a diagnostic, if the specified file is newer. We use this to
1242 determine if a fixed header should be refixed. */
58fea6af 1243static void
6cf87ca4 1244do_pragma_dependency (cpp_reader *pfile)
f3f751ad 1245{
74eb4b3e
NB
1246 const char *fname;
1247 int angle_brackets, ordering;
df383483 1248
74eb4b3e
NB
1249 fname = parse_include (pfile, &angle_brackets);
1250 if (!fname)
58fea6af 1251 return;
041c3194 1252
74eb4b3e 1253 ordering = _cpp_compare_file_date (pfile, fname, angle_brackets);
f3f751ad 1254 if (ordering < 0)
0527bc4e 1255 cpp_error (pfile, CPP_DL_WARNING, "cannot find source file %s", fname);
f3f751ad
NS
1256 else if (ordering > 0)
1257 {
0527bc4e
JDA
1258 cpp_error (pfile, CPP_DL_WARNING,
1259 "current file is older than %s", fname);
4ed5bcfb 1260 if (cpp_get_token (pfile)->type != CPP_EOF)
bdcbe496
NB
1261 {
1262 _cpp_backup_tokens (pfile, 1);
0527bc4e 1263 do_diagnostic (pfile, CPP_DL_WARNING, 0);
bdcbe496 1264 }
f3f751ad 1265 }
74eb4b3e 1266
fad205ff 1267 free ((void *) fname);
f3f751ad
NS
1268}
1269
4ed5bcfb
NB
1270/* Get a token but skip padding. */
1271static const cpp_token *
6cf87ca4 1272get_token_no_padding (cpp_reader *pfile)
a5c3cccd 1273{
4ed5bcfb
NB
1274 for (;;)
1275 {
1276 const cpp_token *result = cpp_get_token (pfile);
1277 if (result->type != CPP_PADDING)
1278 return result;
1279 }
1280}
a5c3cccd 1281
4ed5bcfb
NB
1282/* Check syntax is "(string-literal)". Returns the string on success,
1283 or NULL on failure. */
1284static const cpp_token *
6cf87ca4 1285get__Pragma_string (cpp_reader *pfile)
4ed5bcfb
NB
1286{
1287 const cpp_token *string;
a5c3cccd 1288
4ed5bcfb
NB
1289 if (get_token_no_padding (pfile)->type != CPP_OPEN_PAREN)
1290 return NULL;
1291
1292 string = get_token_no_padding (pfile);
a5c3cccd 1293 if (string->type != CPP_STRING && string->type != CPP_WSTRING)
4ed5bcfb
NB
1294 return NULL;
1295
1296 if (get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
1297 return NULL;
a5c3cccd 1298
4ed5bcfb 1299 return string;
a5c3cccd
NB
1300}
1301
87062813
NB
1302/* Destringize IN into a temporary buffer, by removing the first \ of
1303 \" and \\ sequences, and process the result as a #pragma directive. */
1304static void
6cf87ca4 1305destringize_and_run (cpp_reader *pfile, const cpp_string *in)
a5c3cccd
NB
1306{
1307 const unsigned char *src, *limit;
87062813 1308 char *dest, *result;
a5c3cccd 1309
6338b358
NB
1310 dest = result = alloca (in->len - 1);
1311 src = in->text + 1 + (in->text[0] == 'L');
1312 limit = in->text + in->len - 1;
1313 while (src < limit)
a5c3cccd
NB
1314 {
1315 /* We know there is a character following the backslash. */
1316 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1317 src++;
1318 *dest++ = *src++;
1319 }
26aea073 1320 *dest = '\n';
a5c3cccd 1321
8128cccf
NB
1322 /* Ugh; an awful kludge. We are really not set up to be lexing
1323 tokens when in the middle of a macro expansion. Use a new
1324 context to force cpp_get_token to lex, and so skip_rest_of_line
1325 doesn't go beyond the end of the text. Also, remember the
1326 current lexing position so we can return to it later.
1327
1328 Something like line-at-a-time lexing should remove the need for
1329 this. */
1330 {
1331 cpp_context *saved_context = pfile->context;
1332 cpp_token *saved_cur_token = pfile->cur_token;
1333 tokenrun *saved_cur_run = pfile->cur_run;
1334
1335 pfile->context = xnew (cpp_context);
1336 pfile->context->macro = 0;
1337 pfile->context->prev = 0;
1338 run_directive (pfile, T_PRAGMA, result, dest - result);
1339 free (pfile->context);
1340 pfile->context = saved_context;
1341 pfile->cur_token = saved_cur_token;
1342 pfile->cur_run = saved_cur_run;
1343 pfile->line--;
1344 }
79ba5e3b
NB
1345
1346 /* See above comment. For the moment, we'd like
1347
1348 token1 _Pragma ("foo") token2
1349
1350 to be output as
1351
1352 token1
1353 # 7 "file.c"
1354 #pragma foo
1355 # 7 "file.c"
1356 token2
1357
1358 Getting the line markers is a little tricky. */
1359 if (pfile->cb.line_change)
6cf87ca4 1360 pfile->cb.line_change (pfile, pfile->cur_token, false);
a5c3cccd
NB
1361}
1362
87062813 1363/* Handle the _Pragma operator. */
a5c3cccd 1364void
6cf87ca4 1365_cpp_do__Pragma (cpp_reader *pfile)
a5c3cccd 1366{
4ed5bcfb 1367 const cpp_token *string = get__Pragma_string (pfile);
a5c3cccd 1368
79ba5e3b
NB
1369 if (string)
1370 destringize_and_run (pfile, &string->val.str);
1371 else
0527bc4e 1372 cpp_error (pfile, CPP_DL_ERROR,
ebef4e8c 1373 "_Pragma takes a parenthesized string literal");
a5c3cccd
NB
1374}
1375
6cf87ca4 1376/* Ignore #sccs on all systems. */
711b8824 1377static void
6cf87ca4 1378do_sccs (cpp_reader *pfile ATTRIBUTE_UNUSED)
7f2935c7 1379{
7f2935c7 1380}
1d0e51ba 1381
5d8ebbd8 1382/* Handle #ifdef. */
711b8824 1383static void
6cf87ca4 1384do_ifdef (cpp_reader *pfile)
168d3732 1385{
93c80368 1386 int skip = 1;
041c3194 1387
cef0d199 1388 if (! pfile->state.skipping)
93c80368
NB
1389 {
1390 const cpp_hashnode *node = lex_macro_node (pfile);
041c3194 1391
93c80368 1392 if (node)
a69cbaac
NB
1393 {
1394 skip = node->type != NT_MACRO;
1395 _cpp_mark_macro_used (node);
1396 check_eol (pfile);
1397 }
93c80368 1398 }
168d3732 1399
93c80368
NB
1400 push_conditional (pfile, skip, T_IFDEF, 0);
1401}
168d3732 1402
5d8ebbd8 1403/* Handle #ifndef. */
711b8824 1404static void
6cf87ca4 1405do_ifndef (cpp_reader *pfile)
168d3732 1406{
93c80368 1407 int skip = 1;
bfb9dc7f 1408 const cpp_hashnode *node = 0;
168d3732 1409
cef0d199 1410 if (! pfile->state.skipping)
5af7e2c2 1411 {
93c80368 1412 node = lex_macro_node (pfile);
b43db0b3
GK
1413
1414 if (node)
a69cbaac
NB
1415 {
1416 skip = node->type == NT_MACRO;
1417 _cpp_mark_macro_used (node);
1418 check_eol (pfile);
1419 }
5af7e2c2 1420 }
041c3194 1421
93c80368 1422 push_conditional (pfile, skip, T_IFNDEF, node);
7f2935c7
PB
1423}
1424
6d18adbc
NB
1425/* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in
1426 pfile->mi_ind_cmacro so we can handle multiple-include
6356f892 1427 optimizations. If macro expansion occurs in the expression, we
6d18adbc
NB
1428 cannot treat it as a controlling conditional, since the expansion
1429 could change in the future. That is handled by cpp_get_token. */
711b8824 1430static void
6cf87ca4 1431do_if (cpp_reader *pfile)
7f2935c7 1432{
93c80368 1433 int skip = 1;
7f2935c7 1434
cef0d199 1435 if (! pfile->state.skipping)
87ed109f 1436 skip = _cpp_parse_expr (pfile) == false;
93c80368 1437
6d18adbc 1438 push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro);
7f2935c7
PB
1439}
1440
b528a07e 1441/* Flip skipping state if appropriate and continue without changing
ea4a453b
ZW
1442 if_stack; this is so that the error message for missing #endif's
1443 etc. will point to the original #if. */
711b8824 1444static void
6cf87ca4 1445do_else (cpp_reader *pfile)
ed705a82 1446{
b528a07e
NB
1447 cpp_buffer *buffer = pfile->buffer;
1448 struct if_stack *ifs = buffer->if_stack;
ff2b53ef 1449
ea4a453b 1450 if (ifs == NULL)
0527bc4e 1451 cpp_error (pfile, CPP_DL_ERROR, "#else without #if");
93c80368 1452 else
ff2b53ef 1453 {
93c80368
NB
1454 if (ifs->type == T_ELSE)
1455 {
0527bc4e
JDA
1456 cpp_error (pfile, CPP_DL_ERROR, "#else after #else");
1457 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
93c80368
NB
1458 "the conditional began here");
1459 }
b528a07e
NB
1460 ifs->type = T_ELSE;
1461
cef0d199
NB
1462 /* Skip any future (erroneous) #elses or #elifs. */
1463 pfile->state.skipping = ifs->skip_elses;
1464 ifs->skip_elses = true;
7f2935c7 1465
93c80368
NB
1466 /* Invalidate any controlling macro. */
1467 ifs->mi_cmacro = 0;
93c80368 1468
cef0d199 1469 /* Only check EOL if was not originally skipping. */
909de5da 1470 if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
cef0d199
NB
1471 check_eol (pfile);
1472 }
7f2935c7
PB
1473}
1474
5d8ebbd8 1475/* Handle a #elif directive by not changing if_stack either. See the
93c80368 1476 comment above do_else. */
711b8824 1477static void
6cf87ca4 1478do_elif (cpp_reader *pfile)
7f2935c7 1479{
b528a07e
NB
1480 cpp_buffer *buffer = pfile->buffer;
1481 struct if_stack *ifs = buffer->if_stack;
7f2935c7 1482
ea4a453b 1483 if (ifs == NULL)
0527bc4e 1484 cpp_error (pfile, CPP_DL_ERROR, "#elif without #if");
b528a07e 1485 else
40ea76de 1486 {
b528a07e
NB
1487 if (ifs->type == T_ELSE)
1488 {
0527bc4e
JDA
1489 cpp_error (pfile, CPP_DL_ERROR, "#elif after #else");
1490 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
b528a07e
NB
1491 "the conditional began here");
1492 }
1493 ifs->type = T_ELIF;
93c80368 1494
cef0d199
NB
1495 /* Only evaluate this if we aren't skipping elses. During
1496 evaluation, set skipping to false to get lexer warnings. */
1497 if (ifs->skip_elses)
1498 pfile->state.skipping = 1;
1499 else
b528a07e 1500 {
cef0d199
NB
1501 pfile->state.skipping = 0;
1502 pfile->state.skipping = ! _cpp_parse_expr (pfile);
1503 ifs->skip_elses = ! pfile->state.skipping;
b528a07e 1504 }
cef0d199
NB
1505
1506 /* Invalidate any controlling macro. */
1507 ifs->mi_cmacro = 0;
40ea76de 1508 }
7f2935c7
PB
1509}
1510
cef0d199 1511/* #endif pops the if stack and resets pfile->state.skipping. */
711b8824 1512static void
6cf87ca4 1513do_endif (cpp_reader *pfile)
7f2935c7 1514{
b528a07e
NB
1515 cpp_buffer *buffer = pfile->buffer;
1516 struct if_stack *ifs = buffer->if_stack;
ea4a453b 1517
ea4a453b 1518 if (ifs == NULL)
0527bc4e 1519 cpp_error (pfile, CPP_DL_ERROR, "#endif without #if");
7f2935c7
PB
1520 else
1521 {
cef0d199 1522 /* Only check EOL if was not originally skipping. */
909de5da 1523 if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
cef0d199
NB
1524 check_eol (pfile);
1525
93c80368
NB
1526 /* If potential control macro, we go back outside again. */
1527 if (ifs->next == 0 && ifs->mi_cmacro)
1528 {
6d18adbc 1529 pfile->mi_valid = true;
93c80368
NB
1530 pfile->mi_cmacro = ifs->mi_cmacro;
1531 }
1532
b528a07e 1533 buffer->if_stack = ifs->next;
cef0d199 1534 pfile->state.skipping = ifs->was_skipping;
2a967f3d 1535 obstack_free (&pfile->buffer_ob, ifs);
7f2935c7 1536 }
93c80368 1537}
041c3194 1538
5d8ebbd8
NB
1539/* Push an if_stack entry for a preprocessor conditional, and set
1540 pfile->state.skipping to SKIP. If TYPE indicates the conditional
1541 is #if or #ifndef, CMACRO is a potentially controlling macro, and
1542 we need to check here that we are at the top of the file. */
ea4a453b 1543static void
6cf87ca4
ZW
1544push_conditional (cpp_reader *pfile, int skip, int type,
1545 const cpp_hashnode *cmacro)
ea4a453b
ZW
1546{
1547 struct if_stack *ifs;
b528a07e 1548 cpp_buffer *buffer = pfile->buffer;
ea4a453b 1549
2a967f3d 1550 ifs = xobnew (&pfile->buffer_ob, struct if_stack);
50410426 1551 ifs->line = pfile->directive_line;
b528a07e 1552 ifs->next = buffer->if_stack;
cef0d199
NB
1553 ifs->skip_elses = pfile->state.skipping || !skip;
1554 ifs->was_skipping = pfile->state.skipping;
ea4a453b 1555 ifs->type = type;
6d18adbc
NB
1556 /* This condition is effectively a test for top-of-file. */
1557 if (pfile->mi_valid && pfile->mi_cmacro == 0)
93c80368
NB
1558 ifs->mi_cmacro = cmacro;
1559 else
1560 ifs->mi_cmacro = 0;
ea4a453b 1561
cef0d199 1562 pfile->state.skipping = skip;
b528a07e 1563 buffer->if_stack = ifs;
782331f4 1564}
7061aa5a 1565
5d8ebbd8
NB
1566/* Read the tokens of the answer into the macro pool, in a directive
1567 of type TYPE. Only commit the memory if we intend it as permanent
1568 storage, i.e. the #assert case. Returns 0 on success, and sets
1569 ANSWERP to point to the answer. */
93c80368 1570static int
6cf87ca4 1571parse_answer (cpp_reader *pfile, struct answer **answerp, int type)
7f2935c7 1572{
4ed5bcfb 1573 const cpp_token *paren;
93c80368 1574 struct answer *answer;
8c3b2693 1575 unsigned int acount;
93c80368
NB
1576
1577 /* In a conditional, it is legal to not have an open paren. We
1578 should save the following token in this case. */
4ed5bcfb 1579 paren = cpp_get_token (pfile);
93c80368
NB
1580
1581 /* If not a paren, see if we're OK. */
4ed5bcfb 1582 if (paren->type != CPP_OPEN_PAREN)
041c3194 1583 {
93c80368
NB
1584 /* In a conditional no answer is a test for any answer. It
1585 could be followed by any token. */
1586 if (type == T_IF)
bdcbe496
NB
1587 {
1588 _cpp_backup_tokens (pfile, 1);
1589 return 0;
1590 }
93c80368
NB
1591
1592 /* #unassert with no answer is valid - it removes all answers. */
4ed5bcfb 1593 if (type == T_UNASSERT && paren->type == CPP_EOF)
93c80368 1594 return 0;
15dad1d9 1595
0527bc4e 1596 cpp_error (pfile, CPP_DL_ERROR, "missing '(' after predicate");
93c80368 1597 return 1;
041c3194 1598 }
7061aa5a 1599
8c3b2693 1600 for (acount = 0;; acount++)
041c3194 1601 {
8c3b2693
NB
1602 size_t room_needed;
1603 const cpp_token *token = cpp_get_token (pfile);
1604 cpp_token *dest;
93c80368 1605
041c3194
ZW
1606 if (token->type == CPP_CLOSE_PAREN)
1607 break;
a7abcbbf 1608
93c80368 1609 if (token->type == CPP_EOF)
041c3194 1610 {
0527bc4e 1611 cpp_error (pfile, CPP_DL_ERROR, "missing ')' to complete answer");
93c80368 1612 return 1;
041c3194 1613 }
8c3b2693
NB
1614
1615 /* struct answer includes the space for one token. */
1616 room_needed = (sizeof (struct answer) + acount * sizeof (cpp_token));
1617
1618 if (BUFF_ROOM (pfile->a_buff) < room_needed)
1619 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (struct answer));
1620
1621 dest = &((struct answer *) BUFF_FRONT (pfile->a_buff))->first[acount];
1622 *dest = *token;
1623
1624 /* Drop whitespace at start, for answer equivalence purposes. */
1625 if (acount == 0)
1626 dest->flags &= ~PREV_WHITE;
041c3194 1627 }
15dad1d9 1628
8c3b2693 1629 if (acount == 0)
7061aa5a 1630 {
0527bc4e 1631 cpp_error (pfile, CPP_DL_ERROR, "predicate's answer is empty");
93c80368 1632 return 1;
7f2935c7 1633 }
041c3194 1634
8c3b2693
NB
1635 answer = (struct answer *) BUFF_FRONT (pfile->a_buff);
1636 answer->count = acount;
1637 answer->next = NULL;
93c80368 1638 *answerp = answer;
041c3194 1639
93c80368
NB
1640 return 0;
1641}
041c3194 1642
5d8ebbd8
NB
1643/* Parses an assertion directive of type TYPE, returning a pointer to
1644 the hash node of the predicate, or 0 on error. If an answer was
1645 supplied, it is placed in ANSWERP, otherwise it is set to 0. */
93c80368 1646static cpp_hashnode *
6cf87ca4 1647parse_assertion (cpp_reader *pfile, struct answer **answerp, int type)
93c80368
NB
1648{
1649 cpp_hashnode *result = 0;
4ed5bcfb 1650 const cpp_token *predicate;
93c80368
NB
1651
1652 /* We don't expand predicates or answers. */
1653 pfile->state.prevent_expansion++;
1654
93c80368 1655 *answerp = 0;
4ed5bcfb
NB
1656 predicate = cpp_get_token (pfile);
1657 if (predicate->type == CPP_EOF)
0527bc4e 1658 cpp_error (pfile, CPP_DL_ERROR, "assertion without predicate");
4ed5bcfb 1659 else if (predicate->type != CPP_NAME)
0527bc4e 1660 cpp_error (pfile, CPP_DL_ERROR, "predicate must be an identifier");
93c80368
NB
1661 else if (parse_answer (pfile, answerp, type) == 0)
1662 {
4ed5bcfb 1663 unsigned int len = NODE_LEN (predicate->val.node);
93c80368 1664 unsigned char *sym = alloca (len + 1);
041c3194 1665
93c80368
NB
1666 /* Prefix '#' to get it out of macro namespace. */
1667 sym[0] = '#';
4ed5bcfb 1668 memcpy (sym + 1, NODE_NAME (predicate->val.node), len);
93c80368
NB
1669 result = cpp_lookup (pfile, sym, len + 1);
1670 }
7061aa5a 1671
93c80368
NB
1672 pfile->state.prevent_expansion--;
1673 return result;
7f2935c7 1674}
7061aa5a 1675
5d8ebbd8 1676/* Returns a pointer to the pointer to CANDIDATE in the answer chain,
041c3194 1677 or a pointer to NULL if the answer is not in the chain. */
93c80368 1678static struct answer **
6cf87ca4 1679find_answer (cpp_hashnode *node, const struct answer *candidate)
7f2935c7 1680{
93c80368 1681 unsigned int i;
041c3194 1682 struct answer **result;
7f2935c7 1683
041c3194 1684 for (result = &node->value.answers; *result; result = &(*result)->next)
93c80368
NB
1685 {
1686 struct answer *answer = *result;
1687
1688 if (answer->count == candidate->count)
1689 {
1690 for (i = 0; i < answer->count; i++)
1691 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1692 break;
1693
1694 if (i == answer->count)
1695 break;
1696 }
1697 }
ff2b53ef 1698
041c3194
ZW
1699 return result;
1700}
15dad1d9 1701
93c80368 1702/* Test an assertion within a preprocessor conditional. Returns
da7d8304 1703 nonzero on failure, zero on success. On success, the result of
2402645b 1704 the test is written into VALUE, otherwise the value 0. */
93c80368 1705int
6cf87ca4 1706_cpp_test_assertion (cpp_reader *pfile, unsigned int *value)
93c80368
NB
1707{
1708 struct answer *answer;
1709 cpp_hashnode *node;
1710
1711 node = parse_assertion (pfile, &answer, T_IF);
2402645b
HPN
1712
1713 /* For recovery, an erroneous assertion expression is handled as a
1714 failing assertion. */
1715 *value = 0;
1716
93c80368
NB
1717 if (node)
1718 *value = (node->type == NT_ASSERTION &&
1719 (answer == 0 || *find_answer (node, answer) != 0));
91318908
NB
1720 else if (pfile->cur_token[-1].type == CPP_EOF)
1721 _cpp_backup_tokens (pfile, 1);
93c80368
NB
1722
1723 /* We don't commit the memory for the answer - it's temporary only. */
1724 return node == 0;
1725}
1726
5d8ebbd8 1727/* Handle #assert. */
711b8824 1728static void
6cf87ca4 1729do_assert (cpp_reader *pfile)
041c3194
ZW
1730{
1731 struct answer *new_answer;
1732 cpp_hashnode *node;
df383483 1733
93c80368 1734 node = parse_assertion (pfile, &new_answer, T_ASSERT);
041c3194 1735 if (node)
ff2b53ef 1736 {
93c80368
NB
1737 /* Place the new answer in the answer list. First check there
1738 is not a duplicate. */
041c3194 1739 new_answer->next = 0;
93c80368 1740 if (node->type == NT_ASSERTION)
041c3194 1741 {
93c80368
NB
1742 if (*find_answer (node, new_answer))
1743 {
0527bc4e 1744 cpp_error (pfile, CPP_DL_WARNING, "\"%s\" re-asserted",
ebef4e8c 1745 NODE_NAME (node) + 1);
93c80368
NB
1746 return;
1747 }
041c3194
ZW
1748 new_answer->next = node->value.answers;
1749 }
8c3b2693 1750
93c80368 1751 node->type = NT_ASSERTION;
041c3194 1752 node->value.answers = new_answer;
8c3b2693
NB
1753 BUFF_FRONT (pfile->a_buff) += (sizeof (struct answer)
1754 + (new_answer->count - 1)
1755 * sizeof (cpp_token));
1756 check_eol (pfile);
ff2b53ef 1757 }
041c3194 1758}
15dad1d9 1759
5d8ebbd8 1760/* Handle #unassert. */
711b8824 1761static void
6cf87ca4 1762do_unassert (cpp_reader *pfile)
041c3194
ZW
1763{
1764 cpp_hashnode *node;
93c80368 1765 struct answer *answer;
df383483 1766
93c80368
NB
1767 node = parse_assertion (pfile, &answer, T_UNASSERT);
1768 /* It isn't an error to #unassert something that isn't asserted. */
1769 if (node && node->type == NT_ASSERTION)
7061aa5a 1770 {
93c80368 1771 if (answer)
15dad1d9 1772 {
93c80368 1773 struct answer **p = find_answer (node, answer), *temp;
041c3194 1774
93c80368
NB
1775 /* Remove the answer from the list. */
1776 temp = *p;
1777 if (temp)
1778 *p = temp->next;
a7abcbbf 1779
93c80368
NB
1780 /* Did we free the last answer? */
1781 if (node->value.answers == 0)
1782 node->type = NT_VOID;
8c3b2693
NB
1783
1784 check_eol (pfile);
93c80368
NB
1785 }
1786 else
1787 _cpp_free_definition (node);
041c3194 1788 }
93c80368
NB
1789
1790 /* We don't commit the memory for the answer - it's temporary only. */
7f2935c7 1791}
7f2935c7 1792
45b966db
ZW
1793/* These are for -D, -U, -A. */
1794
1795/* Process the string STR as if it appeared as the body of a #define.
1796 If STR is just an identifier, define it with value 1.
1797 If STR has anything after the identifier, then it should
ec5c56db 1798 be identifier=definition. */
0b22d65c 1799void
6cf87ca4 1800cpp_define (cpp_reader *pfile, const char *str)
0b22d65c 1801{
45b966db
ZW
1802 char *buf, *p;
1803 size_t count;
1804
df383483 1805 /* Copy the entire option so we can modify it.
45b966db 1806 Change the first "=" in the string to a space. If there is none,
86368122
NB
1807 tack " 1" on the end. */
1808
86368122 1809 count = strlen (str);
703ad42b 1810 buf = alloca (count + 3);
86368122
NB
1811 memcpy (buf, str, count);
1812
1813 p = strchr (str, '=');
45b966db 1814 if (p)
86368122 1815 buf[p - str] = ' ';
45b966db
ZW
1816 else
1817 {
86368122
NB
1818 buf[count++] = ' ';
1819 buf[count++] = '1';
0b22d65c 1820 }
26aea073 1821 buf[count] = '\n';
cf4ed945 1822
29401c30 1823 run_directive (pfile, T_DEFINE, buf, count);
2c8f0515
ZW
1824}
1825
ad2a084d 1826/* Slight variant of the above for use by initialize_builtins. */
2c8f0515 1827void
6cf87ca4 1828_cpp_define_builtin (cpp_reader *pfile, const char *str)
2c8f0515 1829{
26aea073
NB
1830 size_t len = strlen (str);
1831 char *buf = alloca (len + 1);
1832 memcpy (buf, str, len);
1833 buf[len] = '\n';
1834 run_directive (pfile, T_DEFINE, buf, len);
45b966db 1835}
0f41302f 1836
45b966db
ZW
1837/* Process MACRO as if it appeared as the body of an #undef. */
1838void
6cf87ca4 1839cpp_undef (cpp_reader *pfile, const char *macro)
7f2935c7 1840{
26aea073
NB
1841 size_t len = strlen (macro);
1842 char *buf = alloca (len + 1);
1843 memcpy (buf, macro, len);
1844 buf[len] = '\n';
1845 run_directive (pfile, T_UNDEF, buf, len);
7f2935c7
PB
1846}
1847
ec5c56db 1848/* Process the string STR as if it appeared as the body of a #assert. */
45b966db 1849void
6cf87ca4 1850cpp_assert (cpp_reader *pfile, const char *str)
45b966db 1851{
86368122 1852 handle_assertion (pfile, str, T_ASSERT);
45b966db 1853}
7f2935c7 1854
ec5c56db 1855/* Process STR as if it appeared as the body of an #unassert. */
45b966db 1856void
6cf87ca4 1857cpp_unassert (cpp_reader *pfile, const char *str)
7f2935c7 1858{
86368122 1859 handle_assertion (pfile, str, T_UNASSERT);
df383483 1860}
3fdc651f 1861
86368122
NB
1862/* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
1863static void
6cf87ca4 1864handle_assertion (cpp_reader *pfile, const char *str, int type)
86368122
NB
1865{
1866 size_t count = strlen (str);
1867 const char *p = strchr (str, '=');
1868
26aea073
NB
1869 /* Copy the entire option so we can modify it. Change the first
1870 "=" in the string to a '(', and tack a ')' on the end. */
703ad42b 1871 char *buf = alloca (count + 2);
26aea073
NB
1872
1873 memcpy (buf, str, count);
86368122
NB
1874 if (p)
1875 {
86368122
NB
1876 buf[p - str] = '(';
1877 buf[count++] = ')';
86368122 1878 }
26aea073
NB
1879 buf[count] = '\n';
1880 str = buf;
86368122 1881
29401c30 1882 run_directive (pfile, type, str, count);
86368122
NB
1883}
1884
7e96d768
NB
1885/* The number of errors for a given reader. */
1886unsigned int
6cf87ca4 1887cpp_errors (cpp_reader *pfile)
7e96d768
NB
1888{
1889 return pfile->errors;
1890}
1891
1892/* The options structure. */
1893cpp_options *
6cf87ca4 1894cpp_get_options (cpp_reader *pfile)
7e96d768
NB
1895{
1896 return &pfile->opts;
1897}
1898
1899/* The callbacks structure. */
1900cpp_callbacks *
6cf87ca4 1901cpp_get_callbacks (cpp_reader *pfile)
7e96d768
NB
1902{
1903 return &pfile->cb;
1904}
1905
d82fc108 1906/* The line map set. */
47d89cf3 1907const struct line_maps *
6cf87ca4 1908cpp_get_line_maps (cpp_reader *pfile)
d82fc108 1909{
50f59cd7 1910 return pfile->line_table;
d82fc108
NB
1911}
1912
7e96d768
NB
1913/* Copy the given callbacks structure to our own. */
1914void
6cf87ca4 1915cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
7e96d768
NB
1916{
1917 pfile->cb = *cb;
1918}
1919
eb1f4d9d
NB
1920/* Push a new buffer on the buffer stack. Returns the new buffer; it
1921 doesn't fail. It does not generate a file change call back; that
1922 is the responsibility of the caller. */
c71f835b 1923cpp_buffer *
6cf87ca4 1924cpp_push_buffer (cpp_reader *pfile, const uchar *buffer, size_t len,
40de9f76 1925 int from_stage3)
c71f835b 1926{
2a967f3d 1927 cpp_buffer *new = xobnew (&pfile->buffer_ob, cpp_buffer);
93c80368 1928
fde84349
NB
1929 /* Clears, amongst other things, if_stack and mi_cmacro. */
1930 memset (new, 0, sizeof (cpp_buffer));
1931
26aea073 1932 new->next_line = new->buf = buffer;
fde84349 1933 new->rlimit = buffer + len;
26aea073 1934 new->from_stage3 = from_stage3;
3cf3593f 1935 new->prev = pfile->buffer;
26aea073 1936 new->need_line = true;
0bda4760 1937
3cf3593f 1938 pfile->buffer = new;
cf551fba 1939
c71f835b
ZW
1940 return new;
1941}
1942
af0d16cd
NB
1943/* Pops a single buffer, with a file change call-back if appropriate.
1944 Then pushes the next -include file, if any remain. */
ef6e958a 1945void
6cf87ca4 1946_cpp_pop_buffer (cpp_reader *pfile)
c71f835b 1947{
fde84349 1948 cpp_buffer *buffer = pfile->buffer;
8f9b4009 1949 struct _cpp_file *inc = buffer->file;
ad2a084d 1950 struct if_stack *ifs;
c71f835b 1951
fde84349
NB
1952 /* Walk back up the conditional stack till we reach its level at
1953 entry to this file, issuing error messages. */
1954 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
0527bc4e 1955 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
fde84349 1956 "unterminated #%s", dtable[ifs->type].name);
eb1f4d9d 1957
97293897 1958 /* In case of a missing #endif. */
67821e3a 1959 pfile->state.skipping = 0;
29401c30 1960
af0d16cd 1961 /* _cpp_do_file_change expects pfile->buffer to be the new one. */
29401c30
NB
1962 pfile->buffer = buffer->prev;
1963
26aea073
NB
1964 free (buffer->notes);
1965
af0d16cd
NB
1966 /* Free the buffer object now; we may want to push a new buffer
1967 in _cpp_push_next_include_file. */
1968 obstack_free (&pfile->buffer_ob, buffer);
29401c30 1969
af0d16cd
NB
1970 if (inc)
1971 {
1972 _cpp_pop_file_buffer (pfile, inc);
1973
40de9f76 1974 _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
af0d16cd 1975 }
c71f835b
ZW
1976}
1977
05713b80 1978/* Enter all recognized directives in the hash table. */
c71f835b 1979void
6cf87ca4 1980_cpp_init_directives (cpp_reader *pfile)
c71f835b 1981{
766ee681 1982 unsigned int i;
93c80368 1983 cpp_hashnode *node;
bfb9dc7f 1984
37b8524c 1985 for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
93c80368 1986 {
766ee681 1987 node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
4977bab6
ZW
1988 node->is_directive = 1;
1989 node->directive_index = i;
93c80368 1990 }
c71f835b 1991}