OSDN Git Service

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