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