OSDN Git Service

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