OSDN Git Service

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