OSDN Git Service

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