OSDN Git Service

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