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