OSDN Git Service

* Makefile.in (CPPLIB_H): New, so that dependencies on cpplib.h
[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   if (pfile->state.in_directive)
383     end_directive (pfile, skip);
384   return skip;
385 }
386
387 /* Directive handler wrapper used by the command line option
388    processor.  */
389 static void
390 run_directive (pfile, dir_no, type, buf, count)
391      cpp_reader *pfile;
392      int dir_no;
393      enum cpp_buffer_type type;
394      const char *buf;
395      size_t count;
396 {
397   unsigned int output_line = pfile->lexer_pos.output_line;
398   cpp_buffer *buffer;
399
400   buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count, type, 0, 1);
401
402   if (dir_no == T_PRAGMA)
403     {
404       /* A kludge to avoid line markers for _Pragma.  */
405       pfile->lexer_pos.output_line = output_line;
406       /* Avoid interpretation of directives in a _Pragma string.  */
407       pfile->state.next_bol = 0;
408     }
409
410   start_directive (pfile);
411   pfile->state.prevent_expansion++;
412   pfile->directive = &dtable[dir_no];
413   (void) (*pfile->directive->handler) (pfile);
414   pfile->state.prevent_expansion--;
415   check_eol (pfile);
416   end_directive (pfile, 1);
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           end_directive (pfile, 1);
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   enum lc_reason reason = LC_RENAME;
717   unsigned long new_lineno;
718   unsigned int cap;
719   cpp_token token;
720
721   /* C99 raised the minimum limit on #line numbers.  */
722   cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
723
724   /* #line commands expand macros.  */
725   cpp_get_token (pfile, &token);
726   if (token.type != CPP_NUMBER
727       || strtoul_for_line (token.val.str.text, token.val.str.len, &new_lineno))
728     {
729       cpp_error (pfile, "\"%s\" after #line is not a positive integer",
730                  cpp_token_as_text (pfile, &token));
731       return;
732     }      
733
734   if (CPP_PEDANTIC (pfile) && ! pfile->state.line_extension
735       && (new_lineno == 0 || new_lineno > cap))
736     cpp_pedwarn (pfile, "line number out of range");
737
738   cpp_get_token (pfile, &token);
739   if (token.type == CPP_STRING)
740     {
741       const char *fname = (const char *) token.val.str.text;
742
743       /* Only accept flags for the # 55 form.  */
744       if (! pfile->state.line_extension)
745         check_eol (pfile);
746       else
747         {
748           int flag = 0, sysp = 0;
749
750           flag = read_flag (pfile, flag);
751           if (flag == 1)
752             {
753               reason = LC_ENTER;
754               flag = read_flag (pfile, flag);
755             }
756           else if (flag == 2)
757             {
758               reason = LC_LEAVE;
759               flag = read_flag (pfile, flag);
760             }
761           if (flag == 3)
762             {
763               sysp = 1;
764               flag = read_flag (pfile, flag);
765               if (flag == 4)
766                 sysp = 2, read_flag (pfile, flag);
767             }
768
769           if (reason == LC_ENTER)
770             {
771               /* Fake a buffer stack for diagnostics.  */
772               cpp_push_buffer (pfile, 0, 0, BUF_FAKE, fname, 0);
773               /* Fake an include for cpp_included.  */
774               _cpp_fake_include (pfile, fname);
775               buffer = pfile->buffer;
776             }
777           else if (reason == LC_LEAVE)
778             {
779               if (buffer->type != BUF_FAKE)
780                 cpp_warning (pfile, "file \"%s\" left but not entered",
781                              buffer->nominal_fname);
782               else
783                 {
784                   _cpp_pop_buffer (pfile);
785                   buffer = pfile->buffer;
786 #ifdef ENABLE_CHECKING
787                   if (strcmp (buffer->nominal_fname, fname))
788                     cpp_warning (pfile, "expected to return to file \"%s\"",
789                                  buffer->nominal_fname);
790                   if (buffer->lineno + 1 != new_lineno)
791                     cpp_warning (pfile, "expected to return to line number %u",
792                                  buffer->lineno + 1);
793                   if (buffer->sysp != sysp)
794                     cpp_warning (pfile, "header flags for \"%s\" have changed",
795                                  buffer->nominal_fname);
796 #endif
797                 }
798             }
799           buffer->sysp = sysp;
800         }
801       buffer->nominal_fname = fname;
802     }
803   else if (token.type != CPP_EOF)
804     {
805       cpp_error (pfile, "\"%s\" is not a valid filename",
806                  cpp_token_as_text (pfile, &token));
807       return;
808     }
809
810   end_directive (pfile, 1);
811   buffer->lineno = new_lineno - 1;
812   _cpp_do_file_change (pfile, reason);
813 }
814
815 /* Arrange the file_change callback.  It is assumed that the next line
816    is given by incrementing buffer->lineno and pfile->line.  */
817 void
818 _cpp_do_file_change (pfile, reason)
819      cpp_reader *pfile;
820      enum lc_reason reason;
821 {
822   cpp_buffer *buffer;
823   struct line_map *map;
824
825   buffer = pfile->buffer;
826   map = add_line_map (&pfile->line_maps, reason,
827                       pfile->line + 1, buffer->nominal_fname, buffer->lineno + 1);
828
829   if (pfile->cb.file_change)
830     {
831       cpp_file_change fc;
832       
833       fc.map = map;
834       fc.line = pfile->line + 1;
835       fc.reason = reason;
836       fc.sysp = buffer->sysp;
837       fc.externc = CPP_OPTION (pfile, cplusplus) && buffer->sysp == 2;
838
839       (*pfile->cb.file_change) (pfile, &fc);
840     }
841 }
842
843 /*
844  * Report a warning or error detected by the program we are
845  * processing.  Use the directive's tokens in the error message.
846  */
847
848 static void
849 do_diagnostic (pfile, code, print_dir)
850      cpp_reader *pfile;
851      enum error_type code;
852      int print_dir;
853 {
854   if (_cpp_begin_message (pfile, code, NULL, 0))
855     {
856       if (print_dir)
857         fprintf (stderr, "#%s ", pfile->directive->name);
858       pfile->state.prevent_expansion++;
859       cpp_output_line (pfile, stderr);
860       pfile->state.prevent_expansion--;
861     }
862 }
863
864 static void
865 do_error (pfile)
866      cpp_reader *pfile;
867 {
868   do_diagnostic (pfile, ERROR, 1);
869 }
870
871 static void
872 do_warning (pfile)
873      cpp_reader *pfile;
874 {
875   /* We want #warning diagnostics to be emitted in system headers too.  */
876   do_diagnostic (pfile, WARNING_SYSHDR, 1);
877 }
878
879 /* Report program identification.  */
880
881 static void
882 do_ident (pfile)
883      cpp_reader *pfile;
884 {
885   cpp_token str;
886
887   cpp_get_token (pfile, &str);
888   if (str.type != CPP_STRING)
889     cpp_error (pfile, "invalid #ident");
890   else if (pfile->cb.ident)
891     (*pfile->cb.ident) (pfile, &str.val.str);
892
893   check_eol (pfile);
894 }
895
896 /* Pragmata handling.  We handle some of these, and pass the rest on
897    to the front end.  C99 defines three pragmas and says that no macro
898    expansion is to be performed on them; whether or not macro
899    expansion happens for other pragmas is implementation defined.
900    This implementation never macro-expands the text after #pragma.  */
901
902 /* Sub-handlers for the pragmas needing treatment here.
903    They return 1 if the token buffer is to be popped, 0 if not.  */
904 typedef void (*pragma_cb) PARAMS ((cpp_reader *));
905 struct pragma_entry
906 {
907   struct pragma_entry *next;
908   const char *name;
909   size_t len;
910   int isnspace;
911   union {
912     pragma_cb handler;
913     struct pragma_entry *space;
914   } u;
915 };
916
917 void
918 cpp_register_pragma (pfile, space, name, handler)
919      cpp_reader *pfile;
920      const char *space;
921      const char *name;
922      pragma_cb handler;
923 {
924   struct pragma_entry **x, *new;
925   size_t len;
926
927   x = &pfile->pragmas;
928   if (space)
929     {
930       struct pragma_entry *p = pfile->pragmas;
931       len = strlen (space);
932       while (p)
933         {
934           if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
935             {
936               x = &p->u.space;
937               goto found;
938             }
939           p = p->next;
940         }
941       cpp_ice (pfile, "unknown #pragma namespace %s", space);
942       return;
943     }
944
945  found:
946   new = xnew (struct pragma_entry);
947   new->name = name;
948   new->len = strlen (name);
949   new->isnspace = 0;
950   new->u.handler = handler;
951
952   new->next = *x;
953   *x = new;
954 }
955
956 void
957 cpp_register_pragma_space (pfile, space)
958      cpp_reader *pfile;
959      const char *space;
960 {
961   struct pragma_entry *new;
962   const struct pragma_entry *p = pfile->pragmas;
963   size_t len = strlen (space);
964
965   while (p)
966     {
967       if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
968         /* Multiple different callers are allowed to register the same
969            namespace.  */
970         return;
971       p = p->next;
972     }
973
974   new = xnew (struct pragma_entry);
975   new->name = space;
976   new->len = len;
977   new->isnspace = 1;
978   new->u.space = 0;
979
980   new->next = pfile->pragmas;
981   pfile->pragmas = new;
982 }
983   
984 void
985 _cpp_init_internal_pragmas (pfile)
986      cpp_reader *pfile;
987 {
988   /* top level */
989   cpp_register_pragma (pfile, 0, "poison", do_pragma_poison);
990   cpp_register_pragma (pfile, 0, "once", do_pragma_once);
991
992   /* GCC namespace */
993   cpp_register_pragma_space (pfile, "GCC");
994
995   cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
996   cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
997   cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
998 }
999
1000 static void
1001 do_pragma (pfile)
1002      cpp_reader *pfile;
1003 {
1004   pragma_cb handler = NULL;
1005   const struct pragma_entry *p;
1006   cpp_token tok;
1007
1008   p = pfile->pragmas;
1009   pfile->state.prevent_expansion++;
1010   cpp_start_lookahead (pfile);
1011
1012  new_space:
1013   cpp_get_token (pfile, &tok);
1014   if (tok.type == CPP_NAME)
1015     {
1016       const cpp_hashnode *node = tok.val.node;
1017       size_t len = NODE_LEN (node);
1018
1019       while (p)
1020         {
1021           if (strlen (p->name) == len
1022               && !memcmp (p->name, NODE_NAME (node), len))
1023             {
1024               if (p->isnspace)
1025                 {
1026                   p = p->u.space;
1027                   goto new_space;
1028                 }
1029               else
1030                 {
1031                   handler = p->u.handler;
1032                   break;
1033                 }
1034             }
1035           p = p->next;
1036         }
1037     }
1038
1039   cpp_stop_lookahead (pfile, handler != NULL);
1040   pfile->state.prevent_expansion--;
1041
1042   if (handler)
1043     (*handler) (pfile);
1044   else if (pfile->cb.def_pragma)
1045     (*pfile->cb.def_pragma) (pfile);
1046 }
1047
1048 static void
1049 do_pragma_once (pfile)
1050      cpp_reader *pfile;
1051 {
1052   cpp_warning (pfile, "#pragma once is obsolete");
1053  
1054   if (pfile->buffer->prev == NULL)
1055     cpp_warning (pfile, "#pragma once in main file");
1056   else
1057     _cpp_never_reread (pfile->buffer->inc);
1058
1059   check_eol (pfile);
1060 }
1061
1062 static void
1063 do_pragma_poison (pfile)
1064      cpp_reader *pfile;
1065 {
1066   /* Poison these symbols so that all subsequent usage produces an
1067      error message.  */
1068   cpp_token tok;
1069   cpp_hashnode *hp;
1070
1071   pfile->state.poisoned_ok = 1;
1072   for (;;)
1073     {
1074       _cpp_lex_token (pfile, &tok);
1075       if (tok.type == CPP_EOF)
1076         break;
1077       if (tok.type != CPP_NAME)
1078         {
1079           cpp_error (pfile, "invalid #pragma GCC poison directive");
1080           break;
1081         }
1082
1083       hp = tok.val.node;
1084       if (hp->flags & NODE_POISONED)
1085         continue;
1086
1087       if (hp->type == NT_MACRO)
1088         cpp_warning (pfile, "poisoning existing macro \"%s\"", NODE_NAME (hp));
1089       _cpp_free_definition (hp);
1090       hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
1091     }
1092   pfile->state.poisoned_ok = 0;
1093 }
1094
1095 /* Mark the current header as a system header.  This will suppress
1096    some categories of warnings (notably those from -pedantic).  It is
1097    intended for use in system libraries that cannot be implemented in
1098    conforming C, but cannot be certain that their headers appear in a
1099    system include directory.  To prevent abuse, it is rejected in the
1100    primary source file.  */
1101 static void
1102 do_pragma_system_header (pfile)
1103      cpp_reader *pfile;
1104 {
1105   cpp_buffer *buffer = pfile->buffer;
1106
1107   if (buffer->prev == 0)
1108     cpp_warning (pfile, "#pragma system_header ignored outside include file");
1109   else
1110     {
1111       check_eol (pfile);
1112       end_directive (pfile, 1);
1113       cpp_make_system_header (pfile, 1, 0);
1114     }
1115 }
1116
1117 /* Check the modified date of the current include file against a specified
1118    file. Issue a diagnostic, if the specified file is newer. We use this to
1119    determine if a fixed header should be refixed.  */
1120 static void
1121 do_pragma_dependency (pfile)
1122      cpp_reader *pfile;
1123 {
1124   cpp_token header, msg;
1125   int ordering;
1126  
1127   if (parse_include (pfile, &header))
1128     return;
1129
1130   ordering = _cpp_compare_file_date (pfile, &header);
1131   if (ordering < 0)
1132     cpp_warning (pfile, "cannot find source %s",
1133                  cpp_token_as_text (pfile, &header));
1134   else if (ordering > 0)
1135     {
1136       cpp_warning (pfile, "current file is older than %s",
1137                    cpp_token_as_text (pfile, &header));
1138       cpp_start_lookahead (pfile);
1139       cpp_get_token (pfile, &msg);
1140       cpp_stop_lookahead (pfile, msg.type == CPP_EOF);
1141       if (msg.type != CPP_EOF)
1142         do_diagnostic (pfile, WARNING, 0);
1143     }
1144 }
1145
1146 /* Check syntax is "(string-literal)".  Returns 0 on success.  */
1147 static int
1148 get__Pragma_string (pfile, string)
1149      cpp_reader *pfile;
1150      cpp_token *string;
1151 {
1152   cpp_token paren;
1153
1154   cpp_get_token (pfile, &paren);
1155   if (paren.type != CPP_OPEN_PAREN)
1156     return 1;
1157
1158   cpp_get_token (pfile, string);
1159   if (string->type != CPP_STRING && string->type != CPP_WSTRING)
1160     return 1;
1161
1162   cpp_get_token (pfile, &paren);
1163   return paren.type != CPP_CLOSE_PAREN;
1164 }
1165
1166 /* Returns a malloced buffer containing a destringized cpp_string by
1167    removing the first \ of \" and \\ sequences.  */
1168 static unsigned char *
1169 destringize (in, len)
1170      const cpp_string *in;
1171      unsigned int *len;
1172 {
1173   const unsigned char *src, *limit;
1174   unsigned char *dest, *result;
1175
1176   dest = result = (unsigned char *) xmalloc (in->len);
1177   for (src = in->text, limit = src + in->len; src < limit;)
1178     {
1179       /* We know there is a character following the backslash.  */
1180       if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1181         src++;
1182       *dest++ = *src++;
1183     }
1184
1185   *len = dest - result;
1186   return result;
1187 }
1188
1189 void
1190 _cpp_do__Pragma (pfile)
1191      cpp_reader *pfile;
1192 {
1193   cpp_token string;
1194   unsigned char *buffer;
1195   unsigned int len;
1196
1197   if (get__Pragma_string (pfile, &string))
1198     {
1199       cpp_error (pfile, "_Pragma takes a parenthesized string literal");
1200       return;
1201     }
1202
1203   buffer = destringize (&string.val.str, &len);
1204   run_directive (pfile, T_PRAGMA, BUF_PRAGMA, (char *) buffer, len);
1205   free ((PTR) buffer);
1206 }
1207
1208 /* Just ignore #sccs, on systems where we define it at all.  */
1209 #ifdef SCCS_DIRECTIVE
1210 static void
1211 do_sccs (pfile)
1212      cpp_reader *pfile ATTRIBUTE_UNUSED;
1213 {
1214 }
1215 #endif
1216
1217 static void
1218 do_ifdef (pfile)
1219      cpp_reader *pfile;
1220 {
1221   int skip = 1;
1222
1223   if (! pfile->state.skipping)
1224     {
1225       const cpp_hashnode *node = lex_macro_node (pfile);
1226
1227       if (node)
1228         skip = node->type != NT_MACRO;
1229
1230       if (node)
1231         check_eol (pfile);
1232     }
1233
1234   push_conditional (pfile, skip, T_IFDEF, 0);
1235 }
1236
1237 static void
1238 do_ifndef (pfile)
1239      cpp_reader *pfile;
1240 {
1241   int skip = 1;
1242   const cpp_hashnode *node = 0;
1243
1244   if (! pfile->state.skipping)
1245     {
1246       node = lex_macro_node (pfile);
1247       if (node)
1248         skip = node->type == NT_MACRO;
1249
1250       if (node)
1251         check_eol (pfile);
1252     }
1253
1254   push_conditional (pfile, skip, T_IFNDEF, node);
1255 }
1256
1257 /* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in
1258    pfile->mi_ind_cmacro so we can handle multiple-include
1259    optimisations.  If macro expansion occurs in the expression, we
1260    cannot treat it as a controlling conditional, since the expansion
1261    could change in the future.  That is handled by cpp_get_token.  */
1262
1263 static void
1264 do_if (pfile)
1265      cpp_reader *pfile;
1266 {
1267   int skip = 1;
1268
1269   if (! pfile->state.skipping)
1270     skip = _cpp_parse_expr (pfile) == 0;
1271
1272   push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro);
1273 }
1274
1275 /* Flip skipping state if appropriate and continue without changing
1276    if_stack; this is so that the error message for missing #endif's
1277    etc. will point to the original #if.  */
1278
1279 static void
1280 do_else (pfile)
1281      cpp_reader *pfile;
1282 {
1283   cpp_buffer *buffer = pfile->buffer;
1284   struct if_stack *ifs = buffer->if_stack;
1285
1286   if (ifs == NULL)
1287     cpp_error (pfile, "#else without #if");
1288   else
1289     {
1290       if (ifs->type == T_ELSE)
1291         {
1292           cpp_error (pfile, "#else after #else");
1293           cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1294                                "the conditional began here");
1295         }
1296       ifs->type = T_ELSE;
1297
1298       /* Skip any future (erroneous) #elses or #elifs.  */
1299       pfile->state.skipping = ifs->skip_elses;
1300       ifs->skip_elses = true;
1301
1302       /* Invalidate any controlling macro.  */
1303       ifs->mi_cmacro = 0;
1304
1305       /* Only check EOL if was not originally skipping.  */
1306       if (!ifs->was_skipping)
1307         check_eol (pfile);
1308     }
1309 }
1310
1311 /* handle a #elif directive by not changing if_stack either.  see the
1312    comment above do_else.  */
1313
1314 static void
1315 do_elif (pfile)
1316      cpp_reader *pfile;
1317 {
1318   cpp_buffer *buffer = pfile->buffer;
1319   struct if_stack *ifs = buffer->if_stack;
1320
1321   if (ifs == NULL)
1322     cpp_error (pfile, "#elif without #if");
1323   else
1324     {
1325       if (ifs->type == T_ELSE)
1326         {
1327           cpp_error (pfile, "#elif after #else");
1328           cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1329                                "the conditional began here");
1330         }
1331       ifs->type = T_ELIF;
1332
1333       /* Only evaluate this if we aren't skipping elses.  During
1334          evaluation, set skipping to false to get lexer warnings.  */
1335       if (ifs->skip_elses)
1336         pfile->state.skipping = 1;
1337       else
1338         {
1339           pfile->state.skipping = 0;
1340           pfile->state.skipping = ! _cpp_parse_expr (pfile);
1341           ifs->skip_elses = ! pfile->state.skipping;
1342         }
1343
1344       /* Invalidate any controlling macro.  */
1345       ifs->mi_cmacro = 0;
1346     }
1347 }
1348
1349 /* #endif pops the if stack and resets pfile->state.skipping.  */
1350
1351 static void
1352 do_endif (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, "#endif without #if");
1360   else
1361     {
1362       /* Only check EOL if was not originally skipping.  */
1363       if (!ifs->was_skipping)
1364         check_eol (pfile);
1365
1366       /* If potential control macro, we go back outside again.  */
1367       if (ifs->next == 0 && ifs->mi_cmacro)
1368         {
1369           pfile->mi_valid = true;
1370           pfile->mi_cmacro = ifs->mi_cmacro;
1371         }
1372
1373       buffer->if_stack = ifs->next;
1374       pfile->state.skipping = ifs->was_skipping;
1375       obstack_free (&pfile->buffer_ob, ifs);
1376     }
1377 }
1378
1379 /* Push an if_stack entry and set pfile->state.skipping accordingly.
1380    If this is a #if or #ifndef, CMACRO is a potentially controlling
1381    macro - we need to check here that we are at the top of the file.  */
1382
1383 static void
1384 push_conditional (pfile, skip, type, cmacro)
1385      cpp_reader *pfile;
1386      int skip;
1387      int type;
1388      const cpp_hashnode *cmacro;
1389 {
1390   struct if_stack *ifs;
1391   cpp_buffer *buffer = pfile->buffer;
1392
1393   ifs = xobnew (&pfile->buffer_ob, struct if_stack);
1394   ifs->pos = pfile->directive_pos;
1395   ifs->next = buffer->if_stack;
1396   ifs->skip_elses = pfile->state.skipping || !skip;
1397   ifs->was_skipping = pfile->state.skipping;
1398   ifs->type = type;
1399   /* This condition is effectively a test for top-of-file.  */
1400   if (pfile->mi_valid && pfile->mi_cmacro == 0)
1401     ifs->mi_cmacro = cmacro;
1402   else
1403     ifs->mi_cmacro = 0;
1404
1405   pfile->state.skipping = skip;
1406   buffer->if_stack = ifs;
1407 }
1408
1409 /* Read the tokens of the answer into the macro pool.  Only commit the
1410    memory if we intend it as permanent storage, i.e. the #assert case.
1411    Returns 0 on success.  */
1412
1413 static int
1414 parse_answer (pfile, answerp, type)
1415      cpp_reader *pfile;
1416      struct answer **answerp;
1417      int type;
1418 {
1419   cpp_token paren, *token;
1420   struct answer *answer;
1421
1422   if (POOL_FRONT (&pfile->macro_pool) + sizeof (struct answer) >
1423       POOL_LIMIT (&pfile->macro_pool))
1424     _cpp_next_chunk (&pfile->macro_pool, sizeof (struct answer), 0);
1425   answer = (struct answer *) POOL_FRONT (&pfile->macro_pool);
1426   answer->count = 0;
1427
1428   /* In a conditional, it is legal to not have an open paren.  We
1429      should save the following token in this case.  */
1430   if (type == T_IF)
1431     cpp_start_lookahead (pfile);
1432   cpp_get_token (pfile, &paren);
1433   if (type == T_IF)
1434     cpp_stop_lookahead (pfile, paren.type == CPP_OPEN_PAREN);
1435
1436   /* If not a paren, see if we're OK.  */
1437   if (paren.type != CPP_OPEN_PAREN)
1438     {
1439       /* In a conditional no answer is a test for any answer.  It
1440          could be followed by any token.  */
1441       if (type == T_IF)
1442         return 0;
1443
1444       /* #unassert with no answer is valid - it removes all answers.  */
1445       if (type == T_UNASSERT && paren.type == CPP_EOF)
1446         return 0;
1447
1448       cpp_error (pfile, "missing '(' after predicate");
1449       return 1;
1450     }
1451
1452   for (;;)
1453     {
1454       token = &answer->first[answer->count];
1455       /* Check we have room for the token.  */
1456       if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
1457         {
1458           _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1459                            (unsigned char **) &answer);
1460           token = &answer->first[answer->count];
1461         }
1462
1463       cpp_get_token (pfile, token);
1464       if (token->type == CPP_CLOSE_PAREN)
1465         break;
1466
1467       if (token->type == CPP_EOF)
1468         {
1469           cpp_error (pfile, "missing ')' to complete answer");
1470           return 1;
1471         }
1472       answer->count++;
1473     }
1474
1475   if (answer->count == 0)
1476     {
1477       cpp_error (pfile, "predicate's answer is empty");
1478       return 1;
1479     }
1480
1481   /* Drop whitespace at start.  */
1482   answer->first->flags &= ~PREV_WHITE;
1483   *answerp = answer;
1484
1485   if (type == T_ASSERT || type == T_UNASSERT)
1486     check_eol (pfile);
1487   return 0;
1488 }
1489
1490 /* Parses an assertion, returning a pointer to the hash node of the
1491    predicate, or 0 on error.  If an answer was supplied, it is placed
1492    in ANSWERP, otherwise it is set to 0.  */
1493 static cpp_hashnode *
1494 parse_assertion (pfile, answerp, type)
1495      cpp_reader *pfile;
1496      struct answer **answerp;
1497      int type;
1498 {
1499   cpp_hashnode *result = 0;
1500   cpp_token predicate;
1501
1502   /* We don't expand predicates or answers.  */
1503   pfile->state.prevent_expansion++;
1504
1505   *answerp = 0;
1506   cpp_get_token (pfile, &predicate);
1507   if (predicate.type == CPP_EOF)
1508     cpp_error (pfile, "assertion without predicate");
1509   else if (predicate.type != CPP_NAME)
1510     cpp_error (pfile, "predicate must be an identifier");
1511   else if (parse_answer (pfile, answerp, type) == 0)
1512     {
1513       unsigned int len = NODE_LEN (predicate.val.node);
1514       unsigned char *sym = alloca (len + 1);
1515
1516       /* Prefix '#' to get it out of macro namespace.  */
1517       sym[0] = '#';
1518       memcpy (sym + 1, NODE_NAME (predicate.val.node), len);
1519       result = cpp_lookup (pfile, sym, len + 1);
1520     }
1521
1522   pfile->state.prevent_expansion--;
1523   return result;
1524 }
1525
1526 /* Returns a pointer to the pointer to the answer in the answer chain,
1527    or a pointer to NULL if the answer is not in the chain.  */
1528 static struct answer **
1529 find_answer (node, candidate)
1530      cpp_hashnode *node;
1531      const struct answer *candidate;
1532 {
1533   unsigned int i;
1534   struct answer **result;
1535
1536   for (result = &node->value.answers; *result; result = &(*result)->next)
1537     {
1538       struct answer *answer = *result;
1539
1540       if (answer->count == candidate->count)
1541         {
1542           for (i = 0; i < answer->count; i++)
1543             if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1544               break;
1545
1546           if (i == answer->count)
1547             break;
1548         }
1549     }
1550
1551   return result;
1552 }
1553
1554 /* Test an assertion within a preprocessor conditional.  Returns
1555    non-zero on failure, zero on success.  On success, the result of
1556    the test is written into VALUE.  */
1557 int
1558 _cpp_test_assertion (pfile, value)
1559      cpp_reader *pfile;
1560      int *value;
1561 {
1562   struct answer *answer;
1563   cpp_hashnode *node;
1564
1565   node = parse_assertion (pfile, &answer, T_IF);
1566   if (node)
1567     *value = (node->type == NT_ASSERTION &&
1568               (answer == 0 || *find_answer (node, answer) != 0));
1569
1570   /* We don't commit the memory for the answer - it's temporary only.  */
1571   return node == 0;
1572 }
1573
1574 static void
1575 do_assert (pfile)
1576      cpp_reader *pfile;
1577 {
1578   struct answer *new_answer;
1579   cpp_hashnode *node;
1580   
1581   node = parse_assertion (pfile, &new_answer, T_ASSERT);
1582   if (node)
1583     {
1584       /* Place the new answer in the answer list.  First check there
1585          is not a duplicate.  */
1586       new_answer->next = 0;
1587       if (node->type == NT_ASSERTION)
1588         {
1589           if (*find_answer (node, new_answer))
1590             {
1591               cpp_warning (pfile, "\"%s\" re-asserted", NODE_NAME (node) + 1);
1592               return;
1593             }
1594           new_answer->next = node->value.answers;
1595         }
1596       node->type = NT_ASSERTION;
1597       node->value.answers = new_answer;
1598       POOL_COMMIT (&pfile->macro_pool, (sizeof (struct answer)
1599                                         + (new_answer->count - 1)
1600                                         * sizeof (cpp_token)));
1601     }
1602 }
1603
1604 static void
1605 do_unassert (pfile)
1606      cpp_reader *pfile;
1607 {
1608   cpp_hashnode *node;
1609   struct answer *answer;
1610   
1611   node = parse_assertion (pfile, &answer, T_UNASSERT);
1612   /* It isn't an error to #unassert something that isn't asserted.  */
1613   if (node && node->type == NT_ASSERTION)
1614     {
1615       if (answer)
1616         {
1617           struct answer **p = find_answer (node, answer), *temp;
1618
1619           /* Remove the answer from the list.  */
1620           temp = *p;
1621           if (temp)
1622             *p = temp->next;
1623
1624           /* Did we free the last answer?  */
1625           if (node->value.answers == 0)
1626             node->type = NT_VOID;
1627         }
1628       else
1629         _cpp_free_definition (node);
1630     }
1631
1632   /* We don't commit the memory for the answer - it's temporary only.  */
1633 }
1634
1635 /* These are for -D, -U, -A.  */
1636
1637 /* Process the string STR as if it appeared as the body of a #define.
1638    If STR is just an identifier, define it with value 1.
1639    If STR has anything after the identifier, then it should
1640    be identifier=definition.  */
1641
1642 void
1643 cpp_define (pfile, str)
1644      cpp_reader *pfile;
1645      const char *str;
1646 {
1647   char *buf, *p;
1648   size_t count;
1649
1650   /* Copy the entire option so we can modify it. 
1651      Change the first "=" in the string to a space.  If there is none,
1652      tack " 1" on the end.  */
1653
1654   /* Length including the null.  */  
1655   count = strlen (str);
1656   buf = (char *) alloca (count + 2);
1657   memcpy (buf, str, count);
1658
1659   p = strchr (str, '=');
1660   if (p)
1661     buf[p - str] = ' ';
1662   else
1663     {
1664       buf[count++] = ' ';
1665       buf[count++] = '1';
1666     }
1667
1668   run_directive (pfile, T_DEFINE, BUF_CL_OPTION, buf, count);
1669 }
1670
1671 /* Slight variant of the above for use by initialize_builtins.  */
1672 void
1673 _cpp_define_builtin (pfile, str)
1674      cpp_reader *pfile;
1675      const char *str;
1676 {
1677   run_directive (pfile, T_DEFINE, BUF_BUILTIN, str, strlen (str));
1678 }
1679
1680 /* Process MACRO as if it appeared as the body of an #undef.  */
1681 void
1682 cpp_undef (pfile, macro)
1683      cpp_reader *pfile;
1684      const char *macro;
1685 {
1686   run_directive (pfile, T_UNDEF, BUF_CL_OPTION, macro, strlen (macro));
1687 }
1688
1689 /* Process the string STR as if it appeared as the body of a #assert.  */
1690 void
1691 cpp_assert (pfile, str)
1692      cpp_reader *pfile;
1693      const char *str;
1694 {
1695   handle_assertion (pfile, str, T_ASSERT);
1696 }
1697
1698 /* Process STR as if it appeared as the body of an #unassert.  */
1699 void
1700 cpp_unassert (pfile, str)
1701      cpp_reader *pfile;
1702      const char *str;
1703 {
1704   handle_assertion (pfile, str, T_UNASSERT);
1705 }  
1706
1707 /* Common code for cpp_assert (-A) and cpp_unassert (-A-).  */
1708 static void
1709 handle_assertion (pfile, str, type)
1710      cpp_reader *pfile;
1711      const char *str;
1712      int type;
1713 {
1714   size_t count = strlen (str);
1715   const char *p = strchr (str, '=');
1716
1717   if (p)
1718     {
1719       /* Copy the entire option so we can modify it.  Change the first
1720          "=" in the string to a '(', and tack a ')' on the end.  */
1721       char *buf = (char *) alloca (count + 1);
1722
1723       memcpy (buf, str, count);
1724       buf[p - str] = '(';
1725       buf[count++] = ')';
1726       str = buf;
1727     }
1728
1729   run_directive (pfile, type, BUF_CL_OPTION, str, count);
1730 }
1731
1732 /* The number of errors for a given reader.  */
1733 unsigned int
1734 cpp_errors (pfile)
1735      cpp_reader *pfile;
1736 {
1737   return pfile->errors;
1738 }
1739
1740 /* The options structure.  */
1741 cpp_options *
1742 cpp_get_options (pfile)
1743      cpp_reader *pfile;
1744 {
1745   return &pfile->opts;
1746 }
1747
1748 /* The callbacks structure.  */
1749 cpp_callbacks *
1750 cpp_get_callbacks (pfile)
1751      cpp_reader *pfile;
1752 {
1753   return &pfile->cb;
1754 }
1755
1756 /* The line map set.  */
1757 struct line_maps *
1758 cpp_get_line_maps (pfile)
1759      cpp_reader *pfile;
1760 {
1761   return &pfile->line_maps;
1762 }
1763
1764 /* Copy the given callbacks structure to our own.  */
1765 void
1766 cpp_set_callbacks (pfile, cb)
1767      cpp_reader *pfile;
1768      cpp_callbacks *cb;
1769 {
1770   pfile->cb = *cb;
1771 }
1772
1773 /* Push a new buffer on the buffer stack.  Returns the new buffer; it
1774    doesn't fail.  It does not generate a file change call back; that
1775    is the responsibility of the caller.  */
1776 cpp_buffer *
1777 cpp_push_buffer (pfile, buffer, len, type, filename, return_at_eof)
1778      cpp_reader *pfile;
1779      const U_CHAR *buffer;
1780      size_t len;
1781      enum cpp_buffer_type type;
1782      const char *filename;
1783      int return_at_eof;
1784 {
1785   cpp_buffer *new = xobnew (&pfile->buffer_ob, cpp_buffer);
1786
1787   if (type == BUF_FAKE)
1788     {
1789       /* A copy of the current buffer, just with a new name and type.  */
1790       memcpy (new, pfile->buffer, sizeof (cpp_buffer));
1791       new->type = BUF_FAKE;
1792     }
1793   else
1794     {
1795       if (type == BUF_BUILTIN)
1796         filename = _("<builtin>");
1797       else if (type == BUF_CL_OPTION)
1798         filename = _("<command line>");
1799       else if (type == BUF_PRAGMA)
1800         filename = "<_Pragma>";
1801
1802       /* Clears, amongst other things, if_stack and mi_cmacro.  */
1803       memset (new, 0, sizeof (cpp_buffer));
1804
1805       new->line_base = new->buf = new->cur = buffer;
1806       new->rlimit = buffer + len;
1807       new->sysp = 0;
1808
1809       /* No read ahead or extra char initially.  */
1810       new->read_ahead = EOF;
1811       new->extra_char = EOF;
1812
1813       /* Preprocessed files, builtins, _Pragma and command line
1814          options don't do trigraph and escaped newline processing.  */
1815       new->from_stage3 = type != BUF_FILE || CPP_OPTION (pfile, preprocessed);
1816
1817       pfile->lexer_pos.output_line = 1;
1818     }
1819
1820   if (*filename == '\0')
1821     new->nominal_fname = _("<stdin>");
1822   else
1823     new->nominal_fname = filename;
1824   new->type = type;
1825   new->prev = pfile->buffer;
1826   new->pfile = pfile;
1827   new->include_stack_listed = 0;
1828   new->lineno = 1;
1829   new->return_at_eof = return_at_eof;
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 void
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       pfile->line--;            /* We have a '\n' at the end of #include.  */
1879       _cpp_do_file_change (pfile, LC_LEAVE);
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
1889   pfile->state.skipping = 0;    /* In case missing #endif.  */
1890 }
1891
1892 void
1893 _cpp_init_directives (pfile)
1894      cpp_reader *pfile;
1895 {
1896   unsigned int i;
1897   cpp_hashnode *node;
1898
1899   /* Register the directives.  */
1900   for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
1901     {
1902       node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
1903       node->directive_index = i + 1;
1904     }
1905 }