OSDN Git Service

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