OSDN Git Service

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