OSDN Git Service

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