OSDN Git Service

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