OSDN Git Service

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