OSDN Git Service

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