OSDN Git Service

* cpphash.h, cpplib.c: Correct erroneous previous checkin.
[pf3gnuchains/gcc-fork.git] / gcc / cpplib.c
1 /* CPP Library. (Directive handling.)
2    Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001 Free Software Foundation, Inc.
4    Contributed by Per Bothner, 1994-95.
5    Based on CCCP program by Paul Rubin, June 1986
6    Adapted to ANSI C, Richard Stallman, Jan 1987
7
8 This program is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
11 later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24
25 #include "cpplib.h"
26 #include "cpphash.h"
27 #include "intl.h"
28 #include "obstack.h"
29
30 /* Chained list of answers to an assertion.  */
31 struct answer
32 {
33   struct answer *next;
34   unsigned int count;
35   cpp_token first[1];
36 };
37
38 /* Stack of conditionals currently in progress
39    (including both successful and failing conditionals).  */
40
41 struct if_stack
42 {
43   struct if_stack *next;
44   cpp_lexer_pos pos;            /* line and column where condition started */
45   const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
46   bool skip_elses;              /* Can future #else / #elif be skipped?  */
47   bool was_skipping;            /* If were skipping on entry.  */
48   int type;                     /* Most recent conditional, for diagnostics.  */
49 };
50
51 /* Values for the origin field of struct directive.  KANDR directives
52    come from traditional (K&R) C.  STDC89 directives come from the
53    1989 C standard.  EXTENSION directives are extensions.  */
54 #define KANDR           0
55 #define STDC89          1
56 #define EXTENSION       2
57
58 /* Values for the flags field of struct directive.  COND indicates a
59    conditional; IF_COND an opening conditional.  INCL means to treat
60    "..." and <...> as q-char and h-char sequences respectively.  IN_I
61    means this directive should be handled even if -fpreprocessed is in
62    effect (these are the directives with callback hooks).  */
63 #define COND            (1 << 0)
64 #define IF_COND         (1 << 1)
65 #define INCL            (1 << 2)
66 #define IN_I            (1 << 3)
67
68 /* Defines one #-directive, including how to handle it.  */
69 typedef void (*directive_handler) PARAMS ((cpp_reader *));
70 typedef struct directive directive;
71 struct directive
72 {
73   directive_handler handler;    /* Function to handle directive.  */
74   const U_CHAR *name;           /* Name of directive.  */
75   unsigned short length;        /* Length of name.  */
76   unsigned char origin;         /* Origin of directive.  */
77   unsigned char flags;          /* Flags describing this directive.  */
78 };
79
80 /* Forward declarations.  */
81
82 static void skip_rest_of_line   PARAMS ((cpp_reader *));
83 static void check_eol           PARAMS ((cpp_reader *));
84 static void start_directive     PARAMS ((cpp_reader *));
85 static void end_directive       PARAMS ((cpp_reader *, int));
86 static void run_directive       PARAMS ((cpp_reader *, int,
87                                          enum cpp_buffer_type,
88                                          const char *, size_t));
89 static int glue_header_name     PARAMS ((cpp_reader *, cpp_token *));
90 static int  parse_include       PARAMS ((cpp_reader *, cpp_token *));
91 static void push_conditional    PARAMS ((cpp_reader *, int, int,
92                                          const cpp_hashnode *));
93 static unsigned int read_flag   PARAMS ((cpp_reader *, unsigned int));
94 static int  strtoul_for_line    PARAMS ((const U_CHAR *, unsigned int,
95                                          unsigned long *));
96 static void do_diagnostic       PARAMS ((cpp_reader *, enum error_type, int));
97 static cpp_hashnode *lex_macro_node     PARAMS ((cpp_reader *));
98 static void do_include_common   PARAMS ((cpp_reader *, enum include_type));
99 static void do_pragma_once      PARAMS ((cpp_reader *));
100 static void do_pragma_poison    PARAMS ((cpp_reader *));
101 static void do_pragma_system_header     PARAMS ((cpp_reader *));
102 static void do_pragma_dependency        PARAMS ((cpp_reader *));
103 static int get__Pragma_string   PARAMS ((cpp_reader *, cpp_token *));
104 static unsigned char *destringize       PARAMS ((const cpp_string *,
105                                                  unsigned int *));
106 static int parse_answer PARAMS ((cpp_reader *, struct answer **, int));
107 static cpp_hashnode *parse_assertion PARAMS ((cpp_reader *, struct answer **,
108                                               int));
109 static struct answer ** find_answer PARAMS ((cpp_hashnode *,
110                                              const struct answer *));
111 static void handle_assertion    PARAMS ((cpp_reader *, const char *, int));
112
113 /* This is the table of directive handlers.  It is ordered by
114    frequency of occurrence; the numbers at the end are directive
115    counts from all the source code I have lying around (egcs and libc
116    CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
117    pcmcia-cs-3.0.9).  This is no longer important as directive lookup
118    is now O(1).  All extensions other than #warning and #include_next
119    are deprecated.  The name is where the extension appears to have
120    come from.  */
121
122 #define DIRECTIVE_TABLE                                                 \
123 D(define,       T_DEFINE = 0,   KANDR,     IN_I)           /* 270554 */ \
124 D(include,      T_INCLUDE,      KANDR,     INCL)           /*  52262 */ \
125 D(endif,        T_ENDIF,        KANDR,     COND)           /*  45855 */ \
126 D(ifdef,        T_IFDEF,        KANDR,     COND | IF_COND) /*  22000 */ \
127 D(if,           T_IF,           KANDR,     COND | IF_COND) /*  18162 */ \
128 D(else,         T_ELSE,         KANDR,     COND)           /*   9863 */ \
129 D(ifndef,       T_IFNDEF,       KANDR,     COND | IF_COND) /*   9675 */ \
130 D(undef,        T_UNDEF,        KANDR,     IN_I)           /*   4837 */ \
131 D(line,         T_LINE,         KANDR,     IN_I)           /*   2465 */ \
132 D(elif,         T_ELIF,         STDC89,    COND)           /*    610 */ \
133 D(error,        T_ERROR,        STDC89,    0)              /*    475 */ \
134 D(pragma,       T_PRAGMA,       STDC89,    IN_I)           /*    195 */ \
135 D(warning,      T_WARNING,      EXTENSION, 0)              /*     22 */ \
136 D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL)           /*     19 */ \
137 D(ident,        T_IDENT,        EXTENSION, IN_I)           /*     11 */ \
138 D(import,       T_IMPORT,       EXTENSION, INCL)           /* 0 ObjC */ \
139 D(assert,       T_ASSERT,       EXTENSION, 0)              /* 0 SVR4 */ \
140 D(unassert,     T_UNASSERT,     EXTENSION, 0)              /* 0 SVR4 */ \
141 SCCS_ENTRY                                                 /* 0 SVR4? */
142
143 /* #sccs is not always recognized.  */
144 #ifdef SCCS_DIRECTIVE
145 # define SCCS_ENTRY D(sccs, T_SCCS, EXTENSION, 0)
146 #else
147 # define SCCS_ENTRY /* nothing */
148 #endif
149
150 /* Use the table to generate a series of prototypes, an enum for the
151    directive names, and an array of directive handlers.  */
152
153 /* The directive-processing functions are declared to return int
154    instead of void, because some old compilers have trouble with
155    pointers to functions returning void.  */
156
157 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail.  */
158 #define D(name, t, o, f) static void CONCAT2(do_,name) PARAMS ((cpp_reader *));
159 DIRECTIVE_TABLE
160 #undef D
161
162 #define D(n, tag, o, f) tag,
163 enum
164 {
165   DIRECTIVE_TABLE
166   N_DIRECTIVES
167 };
168 #undef D
169
170 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail.  */
171 #define D(name, t, origin, flags) \
172 { CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
173   sizeof STRINGX(name) - 1, origin, flags },
174 static const directive dtable[] =
175 {
176 DIRECTIVE_TABLE
177 };
178 #undef D
179 #undef DIRECTIVE_TABLE
180
181 #define SEEN_EOL() (pfile->lexer_pos.output_line > pfile->line)
182
183 /* Skip any remaining tokens in a directive.  */
184 static void
185 skip_rest_of_line (pfile)
186      cpp_reader *pfile;
187 {
188   cpp_token token;
189
190   /* Discard all input lookaheads.  */
191   while (pfile->la_read)
192     _cpp_release_lookahead (pfile);
193
194   /* Discard all stacked contexts.  */
195   while (pfile->context != &pfile->base_context)
196     _cpp_pop_context (pfile);
197
198   /* Sweep up all tokens remaining on the line.  */
199   while (! SEEN_EOL ())
200     _cpp_lex_token (pfile, &token);
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 (! SEEN_EOL ())
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   /* Setup in-directive state.  */
225   pfile->state.in_directive = 1;
226   pfile->state.save_comments = 0;
227
228   /* Some handlers need the position of the # for diagnostics.  */
229   pfile->directive_pos = pfile->lexer_pos;
230   pfile->directive_line = pfile->line;
231
232   /* Don't save directive tokens for external clients.  */
233   pfile->la_saved = pfile->la_write;
234   pfile->la_write = 0;
235 }
236
237 /* Called when leaving a directive, _Pragma or command-line directive.  */
238 static void
239 end_directive (pfile, skip_line)
240      cpp_reader *pfile;
241      int skip_line;
242 {
243   /* We don't skip for an assembler #.  */
244   if (skip_line)
245     {
246       skip_rest_of_line (pfile);
247       /*  "Accept" the newline now.  */
248       pfile->line++;
249     }
250
251   /* Restore state.  */
252   pfile->la_write = pfile->la_saved;
253   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
254   pfile->state.in_directive = 0;
255   pfile->state.angled_headers = 0;
256   pfile->state.line_extension = 0;
257   pfile->directive = 0;
258 }
259
260 /* Check if a token's name matches that of a known directive.  Put in
261    this file to save exporting dtable and other unneeded information.  */
262 int
263 _cpp_handle_directive (pfile, indented)
264      cpp_reader *pfile;
265      int indented;
266 {
267   const directive *dir = 0;
268   cpp_token dname;
269   int skip = 1;
270
271   start_directive (pfile);
272
273   /* Lex the directive name directly.  */
274   _cpp_lex_token (pfile, &dname);
275
276   if (dname.type == CPP_NAME)
277     {
278       unsigned int index = dname.val.node->directive_index;
279       if (index)
280         dir = &dtable[index - 1];
281     }
282   else if (dname.type == CPP_NUMBER)
283     {
284       /* # followed by a number is equivalent to #line.  Do not
285          recognize this form in assembly language source files or
286          skipped conditional groups.  Complain about this form if
287          we're being pedantic, but not if this is regurgitated input
288          (preprocessed or fed back in by the C++ frontend).  */
289       if (! pfile->state.skipping && CPP_OPTION (pfile, lang) != CLK_ASM)
290         {
291           dir = &dtable[T_LINE];
292           pfile->state.line_extension = 1;
293           _cpp_push_token (pfile, &dname, &pfile->directive_pos);
294           if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed))
295             cpp_pedwarn (pfile, "# followed by integer");
296         }
297     }
298
299   pfile->directive = dir;
300   if (dir)
301     {
302       /* Make sure we lex headers correctly, whether skipping or not.  */
303       pfile->state.angled_headers = dir->flags & INCL;
304
305       /* If we are rescanning preprocessed input, only directives tagged
306          with IN_I are honored, and the warnings below are suppressed.  */
307       if (CPP_OPTION (pfile, preprocessed))
308         {
309           /* Kluge alert.  In order to be sure that code like this
310              #define HASH #
311              HASH define foo bar
312              does not cause '#define foo bar' to get executed when
313              compiled with -save-temps, we recognize directives in
314              -fpreprocessed mode only if the # is in column 1 and the
315              directive name starts in column 2.  This output can only
316              be generated by the directive callbacks in cppmain.c (see
317              also the special case in scan_buffer).  */
318           if (dir->flags & IN_I && !indented && !(dname.flags & PREV_WHITE))
319             (*dir->handler) (pfile);
320           /* That check misses '# 123' linemarkers.  Let them through too.  */
321           else if (dname.type == CPP_NUMBER)
322             (*dir->handler) (pfile);
323           else
324             {
325               /* We don't want to process this directive.  Put back the
326                  tokens so caller will see them (and issue an error,
327                  probably).  */
328               _cpp_push_token (pfile, &dname, &pfile->directive_pos);
329               skip = 0;
330             }
331         }
332       else
333         {
334           /* Traditionally, a directive is ignored unless its # is in
335              column 1.  Therefore in code intended to work with K+R
336              compilers, directives added by C89 must have their #
337              indented, and directives present in traditional C must
338              not.  This is true even of directives in skipped
339              conditional blocks.  */
340           if (CPP_WTRADITIONAL (pfile))
341             {
342               if (dir == &dtable[T_ELIF])
343                 cpp_warning (pfile,
344                              "suggest not using #elif in traditional C");
345               else if (indented && dir->origin == KANDR)
346                 cpp_warning (pfile,
347                              "traditional C ignores #%s with the # indented",
348                              dir->name);
349               else if (!indented && dir->origin != KANDR)
350                 cpp_warning (pfile,
351              "suggest hiding #%s from traditional C with an indented #",
352                              dir->name);
353             }
354
355           /* If we are skipping a failed conditional group, all
356              non-conditional directives are ignored.  */
357           if (! pfile->state.skipping || (dir->flags & COND))
358             {
359               /* Issue -pedantic warnings for extensions.   */
360               if (CPP_PEDANTIC (pfile) && dir->origin == EXTENSION)
361                 cpp_pedwarn (pfile, "#%s is a GCC extension", dir->name);
362
363               /* If we have a directive that is not an opening
364                  conditional, invalidate any control macro.  */
365               if (! (dir->flags & IF_COND))
366                 pfile->mi_valid = false;
367
368               (*dir->handler) (pfile);
369             }
370         }
371     }
372   else if (dname.type != CPP_EOF && ! pfile->state.skipping)
373     {
374       /* An unknown directive.  Don't complain about it in assembly
375          source: we don't know where the comments are, and # may
376          introduce assembler pseudo-ops.  Don't complain about invalid
377          directives in skipped conditional groups (6.10 p4).  */
378       if (CPP_OPTION (pfile, lang) == CLK_ASM)
379         {
380           /* Output the # and lookahead token for the assembler.  */
381           _cpp_push_token (pfile, &dname, &pfile->directive_pos);
382           skip = 0;
383         }
384       else
385         cpp_error (pfile, "invalid preprocessing directive #%s",
386                    cpp_token_as_text (pfile, &dname));
387     }
388
389   if (pfile->state.in_directive)
390     end_directive (pfile, skip);
391   return skip;
392 }
393
394 /* Directive handler wrapper used by the command line option
395    processor.  */
396 static void
397 run_directive (pfile, dir_no, type, buf, count)
398      cpp_reader *pfile;
399      int dir_no;
400      enum cpp_buffer_type type;
401      const char *buf;
402      size_t count;
403 {
404   cpp_buffer *buffer;
405
406   buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count, type, 0, 1);
407   start_directive (pfile);
408   pfile->state.prevent_expansion++;
409   pfile->directive = &dtable[dir_no];
410   (void) (*pfile->directive->handler) (pfile);
411   pfile->state.prevent_expansion--;
412   check_eol (pfile);
413   end_directive (pfile, 1);
414   _cpp_pop_buffer (pfile);
415 }
416
417 /* Checks for validity the macro name in #define, #undef, #ifdef and
418    #ifndef directives.  */
419 static cpp_hashnode *
420 lex_macro_node (pfile)
421      cpp_reader *pfile;
422 {
423   cpp_token token;
424   cpp_hashnode *node;
425
426   /* Lex the macro name directly.  */
427   _cpp_lex_token (pfile, &token);
428
429   /* The token immediately after #define must be an identifier.  That
430      identifier may not be "defined", per C99 6.10.8p4.
431      In C++, it may not be any of the "named operators" either,
432      per C++98 [lex.digraph], [lex.key].
433      Finally, the identifier may not have been poisoned.  (In that case
434      the lexer has issued the error message for us.)  */
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                    NODE_NAME (token.val.node));
445       else
446         cpp_error (pfile, "macro names must be identifiers");
447
448       return 0;
449     }
450
451   node = token.val.node;
452   if (node->flags & NODE_POISONED)
453     return 0;
454
455   if (node == pfile->spec_nodes.n_defined)
456     {
457       cpp_error (pfile, "\"%s\" cannot be used as a macro name",
458                  NODE_NAME (node));
459       return 0;
460     }
461
462   return node;
463 }
464
465 /* Process a #define directive.  Most work is done in cppmacro.c.  */
466 static void
467 do_define (pfile)
468      cpp_reader *pfile;
469 {
470   cpp_hashnode *node = lex_macro_node (pfile);
471
472   if (node)
473     {
474       if (_cpp_create_definition (pfile, node))
475         if (pfile->cb.define)
476           (*pfile->cb.define) (pfile, pfile->directive_line, node);
477     }
478 }
479
480 /* Handle #undef.  Marks the identifier NT_VOID in the hash table.  */
481 static void
482 do_undef (pfile)
483      cpp_reader *pfile;
484 {
485   cpp_hashnode *node = lex_macro_node (pfile);  
486
487   /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier
488      is not currently defined as a macro name.  */
489   if (node && node->type == NT_MACRO)
490     {
491       if (pfile->cb.undef)
492         (*pfile->cb.undef) (pfile, pfile->directive_line, node);
493
494       if (node->flags & NODE_WARN)
495         cpp_warning (pfile, "undefining \"%s\"", NODE_NAME (node));
496
497       _cpp_free_definition (node);
498     }
499   check_eol (pfile);
500 }
501
502 /* Helper routine used by parse_include.  Reinterpret the current line
503    as an h-char-sequence (< ... >); we are looking at the first token
504    after the <.  Returns zero on success.  */
505 static int
506 glue_header_name (pfile, header)
507      cpp_reader *pfile;
508      cpp_token *header;
509 {
510   cpp_token token;
511   unsigned char *buffer, *token_mem;
512   size_t len, total_len = 0, capacity = 1024;
513
514   /* To avoid lexed tokens overwriting our glued name, we can only
515      allocate from the string pool once we've lexed everything.  */
516
517   buffer = (unsigned char *) xmalloc (capacity);
518   for (;;)
519     {
520       cpp_get_token (pfile, &token);
521
522       if (token.type == CPP_GREATER || token.type == CPP_EOF)
523         break;
524
525       len = cpp_token_len (&token);
526       if (total_len + len > capacity)
527         {
528           capacity = (capacity + len) * 2;
529           buffer = (unsigned char *) xrealloc (buffer, capacity);
530         }
531
532       if (token.flags & PREV_WHITE)
533         buffer[total_len++] = ' ';
534
535       total_len = cpp_spell_token (pfile, &token, &buffer[total_len]) - buffer;
536     }
537
538   if (token.type == CPP_EOF)
539     cpp_error (pfile, "missing terminating > character");
540   else
541     {
542       token_mem = _cpp_pool_alloc (&pfile->ident_pool, total_len + 1);
543       memcpy (token_mem, buffer, total_len);
544       token_mem[total_len] = '\0';
545
546       header->type = CPP_HEADER_NAME;
547       header->flags &= ~PREV_WHITE;
548       header->val.str.len = total_len;
549       header->val.str.text = token_mem;
550     }
551
552   free ((PTR) buffer);
553   return token.type == CPP_EOF;
554 }
555
556 /* Parse the header name of #include, #include_next, #import and
557    #pragma dependency.  Returns zero on success.  */
558 static int
559 parse_include (pfile, header)
560      cpp_reader *pfile;
561      cpp_token *header;
562 {
563   const unsigned char *dir;
564
565   if (pfile->directive == &dtable[T_PRAGMA])
566     dir = U"pragma dependency";
567   else
568     dir = pfile->directive->name;
569
570   /* Allow macro expansion.  */
571   cpp_get_token (pfile, header);
572   if (header->type != CPP_STRING && header->type != CPP_HEADER_NAME)
573     {
574       if (header->type != CPP_LESS)
575         {
576           cpp_error (pfile, "#%s expects \"FILENAME\" or <FILENAME>", dir);
577           return 1;
578         }
579       if (glue_header_name (pfile, header))
580         return 1;
581     }
582
583   if (header->val.str.len == 0)
584     {
585       cpp_error (pfile, "empty file name in #%s", dir);
586       return 1;
587     }
588
589   return 0;
590 }
591
592 /* Handle #include, #include_next and #import.  */
593 static void
594 do_include_common (pfile, type)
595      cpp_reader *pfile;
596      enum include_type type;
597 {
598   cpp_token header;
599
600   /* For #include_next, if this is the primary source file, warn and
601      use the normal search logic.  */
602   if (type == IT_INCLUDE_NEXT && ! pfile->buffer->prev)
603     {
604       cpp_warning (pfile, "#include_next in primary source file");
605       type = IT_INCLUDE;
606     }
607   else if (type == IT_IMPORT && CPP_OPTION (pfile, warn_import))
608     {
609       CPP_OPTION (pfile, warn_import) = 0;
610       cpp_warning (pfile,
611            "#import is obsolete, use an #ifndef wrapper in the header file");
612     }
613
614   if (!parse_include (pfile, &header))
615     {
616       /* Prevent #include recursion.  */
617       if (pfile->buffer_stack_depth >= CPP_STACK_MAX)
618         cpp_fatal (pfile, "#include nested too deeply");
619       else
620         {
621           check_eol (pfile);
622           /* Get out of macro context, if we are.  */
623           end_directive (pfile, 1);
624           if (pfile->cb.include)
625             (*pfile->cb.include) (pfile, pfile->directive_line,
626                                   pfile->directive->name, &header);
627
628           _cpp_execute_include (pfile, &header, type);
629         }
630     }
631 }
632
633 static void
634 do_include (pfile)
635      cpp_reader *pfile;
636 {
637   do_include_common (pfile, IT_INCLUDE);
638 }
639
640 static void
641 do_import (pfile)
642      cpp_reader *pfile;
643 {
644   do_include_common (pfile, IT_IMPORT);
645 }
646
647 static void
648 do_include_next (pfile)
649      cpp_reader *pfile;
650 {
651   do_include_common (pfile, IT_INCLUDE_NEXT);
652 }
653
654 /* Subroutine of do_line.  Read possible flags after file name.  LAST
655    is the last flag seen; 0 if this is the first flag. Return the flag
656    if it is valid, 0 at the end of the directive. Otherwise complain.  */
657
658 static unsigned int
659 read_flag (pfile, last)
660      cpp_reader *pfile;
661      unsigned int last;
662 {
663   cpp_token token;
664
665   _cpp_lex_token (pfile, &token);
666   if (token.type == CPP_NUMBER && token.val.str.len == 1)
667     {
668       unsigned int flag = token.val.str.text[0] - '0';
669
670       if (flag > last && flag <= 4
671           && (flag != 4 || last == 3)
672           && (flag != 2 || last == 0))
673         return flag;
674     }
675
676   if (token.type != CPP_EOF)
677     cpp_error (pfile, "invalid flag \"%s\" in line directive",
678                cpp_token_as_text (pfile, &token));
679   return 0;
680 }
681
682 /* Another subroutine of do_line.  Convert a number in STR, of length
683    LEN, to binary; store it in NUMP, and return 0 if the number was
684    well-formed, 1 if not.  Temporary, hopefully.  */
685 static int
686 strtoul_for_line (str, len, nump)
687      const U_CHAR *str;
688      unsigned int len;
689      unsigned long *nump;
690 {
691   unsigned long reg = 0;
692   U_CHAR c;
693   while (len--)
694     {
695       c = *str++;
696       if (!ISDIGIT (c))
697         return 1;
698       reg *= 10;
699       reg += c - '0';
700     }
701   *nump = reg;
702   return 0;
703 }
704
705 /* Interpret #line command.
706    Note that the filename string (if any) is treated as if it were an
707    include filename.  That means no escape handling.  */
708
709 static void
710 do_line (pfile)
711      cpp_reader *pfile;
712 {
713   cpp_buffer *buffer = pfile->buffer;
714   enum lc_reason reason = LC_RENAME;
715   unsigned long new_lineno;
716   unsigned int cap, sysp = pfile->map->sysp;
717   cpp_token token;
718
719   /* C99 raised the minimum limit on #line numbers.  */
720   cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
721
722   /* #line commands expand macros.  */
723   cpp_get_token (pfile, &token);
724   if (token.type != CPP_NUMBER
725       || strtoul_for_line (token.val.str.text, token.val.str.len, &new_lineno))
726     {
727       cpp_error (pfile, "\"%s\" after #line is not a positive integer",
728                  cpp_token_as_text (pfile, &token));
729       return;
730     }      
731
732   if (CPP_PEDANTIC (pfile) && ! pfile->state.line_extension
733       && (new_lineno == 0 || new_lineno > cap))
734     cpp_pedwarn (pfile, "line number out of range");
735
736   cpp_get_token (pfile, &token);
737   if (token.type == CPP_STRING)
738     {
739       buffer->nominal_fname = (const char *) token.val.str.text;
740
741       /* Only accept flags for the # 55 form.  */
742       if (pfile->state.line_extension)
743         {
744           int flag;
745
746           sysp = 0;
747           flag = read_flag (pfile, 0);
748           if (flag == 1)
749             {
750               reason = LC_ENTER;
751               /* Fake an include for cpp_included ().  */
752               _cpp_fake_include (pfile, buffer->nominal_fname);
753               flag = read_flag (pfile, flag);
754             }
755           else if (flag == 2)
756             {
757               reason = LC_LEAVE;
758               flag = read_flag (pfile, flag);
759             }
760           if (flag == 3)
761             {
762               sysp = 1;
763               flag = read_flag (pfile, flag);
764               if (flag == 4)
765                 sysp = 2;
766             }
767         }
768       check_eol (pfile);
769     }
770   else if (token.type != CPP_EOF)
771     {
772       cpp_error (pfile, "\"%s\" is not a valid filename",
773                  cpp_token_as_text (pfile, &token));
774       return;
775     }
776
777   end_directive (pfile, 1);
778   _cpp_do_file_change (pfile, reason, (const char *) buffer->nominal_fname,
779                        new_lineno, sysp);
780 }
781
782 /* Arrange the file_change callback.  pfile->line has changed to
783    FILE_LINE of TO_FILE, for reason REASON.  SYSP is 1 for a system
784    header, 2 for a sytem header that needs to be extern "C" protected,
785    and zero otherwise.  */
786 void
787 _cpp_do_file_change (pfile, reason, to_file, file_line, sysp)
788      cpp_reader *pfile;
789      enum lc_reason reason;
790      const char *to_file;
791      unsigned int file_line;
792      unsigned int sysp;
793 {
794   pfile->map = add_line_map (&pfile->line_maps, reason, sysp,
795                              pfile->line, to_file, file_line);
796
797   if (pfile->cb.file_change)
798     (*pfile->cb.file_change) (pfile, pfile->map);
799 }
800
801 /*
802  * Report a warning or error detected by the program we are
803  * processing.  Use the directive's tokens in the error message.
804  */
805
806 static void
807 do_diagnostic (pfile, code, print_dir)
808      cpp_reader *pfile;
809      enum error_type code;
810      int print_dir;
811 {
812   if (_cpp_begin_message (pfile, code, NULL, 0))
813     {
814       if (print_dir)
815         fprintf (stderr, "#%s ", pfile->directive->name);
816       pfile->state.prevent_expansion++;
817       cpp_output_line (pfile, stderr);
818       pfile->state.prevent_expansion--;
819     }
820 }
821
822 static void
823 do_error (pfile)
824      cpp_reader *pfile;
825 {
826   do_diagnostic (pfile, ERROR, 1);
827 }
828
829 static void
830 do_warning (pfile)
831      cpp_reader *pfile;
832 {
833   /* We want #warning diagnostics to be emitted in system headers too.  */
834   do_diagnostic (pfile, WARNING_SYSHDR, 1);
835 }
836
837 /* Report program identification.  */
838
839 static void
840 do_ident (pfile)
841      cpp_reader *pfile;
842 {
843   cpp_token str;
844
845   cpp_get_token (pfile, &str);
846   if (str.type != CPP_STRING)
847     cpp_error (pfile, "invalid #ident");
848   else if (pfile->cb.ident)
849     (*pfile->cb.ident) (pfile, pfile->directive_line, &str.val.str);
850
851   check_eol (pfile);
852 }
853
854 /* Pragmata handling.  We handle some of these, and pass the rest on
855    to the front end.  C99 defines three pragmas and says that no macro
856    expansion is to be performed on them; whether or not macro
857    expansion happens for other pragmas is implementation defined.
858    This implementation never macro-expands the text after #pragma.  */
859
860 /* Sub-handlers for the pragmas needing treatment here.
861    They return 1 if the token buffer is to be popped, 0 if not.  */
862 typedef void (*pragma_cb) PARAMS ((cpp_reader *));
863 struct pragma_entry
864 {
865   struct pragma_entry *next;
866   const char *name;
867   size_t len;
868   int isnspace;
869   union {
870     pragma_cb handler;
871     struct pragma_entry *space;
872   } u;
873 };
874
875 void
876 cpp_register_pragma (pfile, space, name, handler)
877      cpp_reader *pfile;
878      const char *space;
879      const char *name;
880      pragma_cb handler;
881 {
882   struct pragma_entry **x, *new;
883   size_t len;
884
885   x = &pfile->pragmas;
886   if (space)
887     {
888       struct pragma_entry *p = pfile->pragmas;
889       len = strlen (space);
890       while (p)
891         {
892           if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
893             {
894               x = &p->u.space;
895               goto found;
896             }
897           p = p->next;
898         }
899       cpp_ice (pfile, "unknown #pragma namespace %s", space);
900       return;
901     }
902
903  found:
904   new = xnew (struct pragma_entry);
905   new->name = name;
906   new->len = strlen (name);
907   new->isnspace = 0;
908   new->u.handler = handler;
909
910   new->next = *x;
911   *x = new;
912 }
913
914 void
915 cpp_register_pragma_space (pfile, space)
916      cpp_reader *pfile;
917      const char *space;
918 {
919   struct pragma_entry *new;
920   const struct pragma_entry *p = pfile->pragmas;
921   size_t len = strlen (space);
922
923   while (p)
924     {
925       if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
926         /* Multiple different callers are allowed to register the same
927            namespace.  */
928         return;
929       p = p->next;
930     }
931
932   new = xnew (struct pragma_entry);
933   new->name = space;
934   new->len = len;
935   new->isnspace = 1;
936   new->u.space = 0;
937
938   new->next = pfile->pragmas;
939   pfile->pragmas = new;
940 }
941   
942 void
943 _cpp_init_internal_pragmas (pfile)
944      cpp_reader *pfile;
945 {
946   /* top level */
947   cpp_register_pragma (pfile, 0, "poison", do_pragma_poison);
948   cpp_register_pragma (pfile, 0, "once", do_pragma_once);
949
950   /* GCC namespace */
951   cpp_register_pragma_space (pfile, "GCC");
952
953   cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
954   cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
955   cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
956 }
957
958 static void
959 do_pragma (pfile)
960      cpp_reader *pfile;
961 {
962   pragma_cb handler = NULL;
963   const struct pragma_entry *p;
964   cpp_token tok;
965
966   p = pfile->pragmas;
967   pfile->state.prevent_expansion++;
968   cpp_start_lookahead (pfile);
969
970  new_space:
971   cpp_get_token (pfile, &tok);
972   if (tok.type == CPP_NAME)
973     {
974       const cpp_hashnode *node = tok.val.node;
975       size_t len = NODE_LEN (node);
976
977       while (p)
978         {
979           if (strlen (p->name) == len
980               && !memcmp (p->name, NODE_NAME (node), len))
981             {
982               if (p->isnspace)
983                 {
984                   p = p->u.space;
985                   goto new_space;
986                 }
987               else
988                 {
989                   handler = p->u.handler;
990                   break;
991                 }
992             }
993           p = p->next;
994         }
995     }
996
997   cpp_stop_lookahead (pfile, handler != NULL);
998   pfile->state.prevent_expansion--;
999
1000   if (handler)
1001     (*handler) (pfile);
1002   else if (pfile->cb.def_pragma)
1003     (*pfile->cb.def_pragma) (pfile, pfile->directive_line);
1004 }
1005
1006 static void
1007 do_pragma_once (pfile)
1008      cpp_reader *pfile;
1009 {
1010   cpp_warning (pfile, "#pragma once is obsolete");
1011  
1012   if (pfile->buffer->prev == NULL)
1013     cpp_warning (pfile, "#pragma once in main file");
1014   else
1015     _cpp_never_reread (pfile->buffer->inc);
1016
1017   check_eol (pfile);
1018 }
1019
1020 static void
1021 do_pragma_poison (pfile)
1022      cpp_reader *pfile;
1023 {
1024   /* Poison these symbols so that all subsequent usage produces an
1025      error message.  */
1026   cpp_token tok;
1027   cpp_hashnode *hp;
1028
1029   pfile->state.poisoned_ok = 1;
1030   for (;;)
1031     {
1032       _cpp_lex_token (pfile, &tok);
1033       if (tok.type == CPP_EOF)
1034         break;
1035       if (tok.type != CPP_NAME)
1036         {
1037           cpp_error (pfile, "invalid #pragma GCC poison directive");
1038           break;
1039         }
1040
1041       hp = tok.val.node;
1042       if (hp->flags & NODE_POISONED)
1043         continue;
1044
1045       if (hp->type == NT_MACRO)
1046         cpp_warning (pfile, "poisoning existing macro \"%s\"", NODE_NAME (hp));
1047       _cpp_free_definition (hp);
1048       hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
1049     }
1050   pfile->state.poisoned_ok = 0;
1051 }
1052
1053 /* Mark the current header as a system header.  This will suppress
1054    some categories of warnings (notably those from -pedantic).  It is
1055    intended for use in system libraries that cannot be implemented in
1056    conforming C, but cannot be certain that their headers appear in a
1057    system include directory.  To prevent abuse, it is rejected in the
1058    primary source file.  */
1059 static void
1060 do_pragma_system_header (pfile)
1061      cpp_reader *pfile;
1062 {
1063   cpp_buffer *buffer = pfile->buffer;
1064
1065   if (buffer->prev == 0)
1066     cpp_warning (pfile, "#pragma system_header ignored outside include file");
1067   else
1068     {
1069       check_eol (pfile);
1070       end_directive (pfile, 1);
1071       cpp_make_system_header (pfile, 1, 0);
1072     }
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   cpp_lexer_pos orig_pos;
1155
1156   orig_pos = pfile->lexer_pos;
1157   if (get__Pragma_string (pfile, &string))
1158     cpp_error (pfile, "_Pragma takes a parenthesized string literal");
1159   else
1160     {
1161       buffer = destringize (&string.val.str, &len);
1162       run_directive (pfile, T_PRAGMA, BUF_PRAGMA, (char *) buffer, len);
1163       free ((PTR) buffer);
1164       pfile->lexer_pos = orig_pos;
1165       pfile->line = pfile->lexer_pos.line;
1166     }
1167 }
1168
1169 /* Just ignore #sccs, on systems where we define it at all.  */
1170 #ifdef SCCS_DIRECTIVE
1171 static void
1172 do_sccs (pfile)
1173      cpp_reader *pfile ATTRIBUTE_UNUSED;
1174 {
1175 }
1176 #endif
1177
1178 static void
1179 do_ifdef (pfile)
1180      cpp_reader *pfile;
1181 {
1182   int skip = 1;
1183
1184   if (! pfile->state.skipping)
1185     {
1186       const cpp_hashnode *node = lex_macro_node (pfile);
1187
1188       if (node)
1189         skip = node->type != NT_MACRO;
1190
1191       if (node)
1192         check_eol (pfile);
1193     }
1194
1195   push_conditional (pfile, skip, T_IFDEF, 0);
1196 }
1197
1198 static void
1199 do_ifndef (pfile)
1200      cpp_reader *pfile;
1201 {
1202   int skip = 1;
1203   const cpp_hashnode *node = 0;
1204
1205   if (! pfile->state.skipping)
1206     {
1207       node = lex_macro_node (pfile);
1208       if (node)
1209         skip = node->type == NT_MACRO;
1210
1211       if (node)
1212         check_eol (pfile);
1213     }
1214
1215   push_conditional (pfile, skip, T_IFNDEF, node);
1216 }
1217
1218 /* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in
1219    pfile->mi_ind_cmacro so we can handle multiple-include
1220    optimisations.  If macro expansion occurs in the expression, we
1221    cannot treat it as a controlling conditional, since the expansion
1222    could change in the future.  That is handled by cpp_get_token.  */
1223
1224 static void
1225 do_if (pfile)
1226      cpp_reader *pfile;
1227 {
1228   int skip = 1;
1229
1230   if (! pfile->state.skipping)
1231     skip = _cpp_parse_expr (pfile) == 0;
1232
1233   push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro);
1234 }
1235
1236 /* Flip skipping state if appropriate and continue without changing
1237    if_stack; this is so that the error message for missing #endif's
1238    etc. will point to the original #if.  */
1239
1240 static void
1241 do_else (pfile)
1242      cpp_reader *pfile;
1243 {
1244   cpp_buffer *buffer = pfile->buffer;
1245   struct if_stack *ifs = buffer->if_stack;
1246
1247   if (ifs == NULL)
1248     cpp_error (pfile, "#else without #if");
1249   else
1250     {
1251       if (ifs->type == T_ELSE)
1252         {
1253           cpp_error (pfile, "#else after #else");
1254           cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1255                                "the conditional began here");
1256         }
1257       ifs->type = T_ELSE;
1258
1259       /* Skip any future (erroneous) #elses or #elifs.  */
1260       pfile->state.skipping = ifs->skip_elses;
1261       ifs->skip_elses = true;
1262
1263       /* Invalidate any controlling macro.  */
1264       ifs->mi_cmacro = 0;
1265
1266       /* Only check EOL if was not originally skipping.  */
1267       if (!ifs->was_skipping)
1268         check_eol (pfile);
1269     }
1270 }
1271
1272 /* handle a #elif directive by not changing if_stack either.  see the
1273    comment above do_else.  */
1274
1275 static void
1276 do_elif (pfile)
1277      cpp_reader *pfile;
1278 {
1279   cpp_buffer *buffer = pfile->buffer;
1280   struct if_stack *ifs = buffer->if_stack;
1281
1282   if (ifs == NULL)
1283     cpp_error (pfile, "#elif without #if");
1284   else
1285     {
1286       if (ifs->type == T_ELSE)
1287         {
1288           cpp_error (pfile, "#elif after #else");
1289           cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1290                                "the conditional began here");
1291         }
1292       ifs->type = T_ELIF;
1293
1294       /* Only evaluate this if we aren't skipping elses.  During
1295          evaluation, set skipping to false to get lexer warnings.  */
1296       if (ifs->skip_elses)
1297         pfile->state.skipping = 1;
1298       else
1299         {
1300           pfile->state.skipping = 0;
1301           pfile->state.skipping = ! _cpp_parse_expr (pfile);
1302           ifs->skip_elses = ! pfile->state.skipping;
1303         }
1304
1305       /* Invalidate any controlling macro.  */
1306       ifs->mi_cmacro = 0;
1307     }
1308 }
1309
1310 /* #endif pops the if stack and resets pfile->state.skipping.  */
1311
1312 static void
1313 do_endif (pfile)
1314      cpp_reader *pfile;
1315 {
1316   cpp_buffer *buffer = pfile->buffer;
1317   struct if_stack *ifs = buffer->if_stack;
1318
1319   if (ifs == NULL)
1320     cpp_error (pfile, "#endif without #if");
1321   else
1322     {
1323       /* Only check EOL if was not originally skipping.  */
1324       if (!ifs->was_skipping)
1325         check_eol (pfile);
1326
1327       /* If potential control macro, we go back outside again.  */
1328       if (ifs->next == 0 && ifs->mi_cmacro)
1329         {
1330           pfile->mi_valid = true;
1331           pfile->mi_cmacro = ifs->mi_cmacro;
1332         }
1333
1334       buffer->if_stack = ifs->next;
1335       pfile->state.skipping = ifs->was_skipping;
1336       obstack_free (&pfile->buffer_ob, ifs);
1337     }
1338 }
1339
1340 /* Push an if_stack entry and set pfile->state.skipping accordingly.
1341    If this is a #if or #ifndef, CMACRO is a potentially controlling
1342    macro - we need to check here that we are at the top of the file.  */
1343
1344 static void
1345 push_conditional (pfile, skip, type, cmacro)
1346      cpp_reader *pfile;
1347      int skip;
1348      int type;
1349      const cpp_hashnode *cmacro;
1350 {
1351   struct if_stack *ifs;
1352   cpp_buffer *buffer = pfile->buffer;
1353
1354   ifs = xobnew (&pfile->buffer_ob, struct if_stack);
1355   ifs->pos = pfile->directive_pos;
1356   ifs->next = buffer->if_stack;
1357   ifs->skip_elses = pfile->state.skipping || !skip;
1358   ifs->was_skipping = pfile->state.skipping;
1359   ifs->type = type;
1360   /* This condition is effectively a test for top-of-file.  */
1361   if (pfile->mi_valid && pfile->mi_cmacro == 0)
1362     ifs->mi_cmacro = cmacro;
1363   else
1364     ifs->mi_cmacro = 0;
1365
1366   pfile->state.skipping = skip;
1367   buffer->if_stack = ifs;
1368 }
1369
1370 /* Read the tokens of the answer into the macro pool.  Only commit the
1371    memory if we intend it as permanent storage, i.e. the #assert case.
1372    Returns 0 on success.  */
1373
1374 static int
1375 parse_answer (pfile, answerp, type)
1376      cpp_reader *pfile;
1377      struct answer **answerp;
1378      int type;
1379 {
1380   cpp_token paren, *token;
1381   struct answer *answer;
1382
1383   if (POOL_FRONT (&pfile->macro_pool) + sizeof (struct answer) >
1384       POOL_LIMIT (&pfile->macro_pool))
1385     _cpp_next_chunk (&pfile->macro_pool, sizeof (struct answer), 0);
1386   answer = (struct answer *) POOL_FRONT (&pfile->macro_pool);
1387   answer->count = 0;
1388
1389   /* In a conditional, it is legal to not have an open paren.  We
1390      should save the following token in this case.  */
1391   if (type == T_IF)
1392     cpp_start_lookahead (pfile);
1393   cpp_get_token (pfile, &paren);
1394   if (type == T_IF)
1395     cpp_stop_lookahead (pfile, paren.type == CPP_OPEN_PAREN);
1396
1397   /* If not a paren, see if we're OK.  */
1398   if (paren.type != CPP_OPEN_PAREN)
1399     {
1400       /* In a conditional no answer is a test for any answer.  It
1401          could be followed by any token.  */
1402       if (type == T_IF)
1403         return 0;
1404
1405       /* #unassert with no answer is valid - it removes all answers.  */
1406       if (type == T_UNASSERT && paren.type == CPP_EOF)
1407         return 0;
1408
1409       cpp_error (pfile, "missing '(' after predicate");
1410       return 1;
1411     }
1412
1413   for (;;)
1414     {
1415       token = &answer->first[answer->count];
1416       /* Check we have room for the token.  */
1417       if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
1418         {
1419           _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1420                            (unsigned char **) &answer);
1421           token = &answer->first[answer->count];
1422         }
1423
1424       cpp_get_token (pfile, token);
1425       if (token->type == CPP_CLOSE_PAREN)
1426         break;
1427
1428       if (token->type == CPP_EOF)
1429         {
1430           cpp_error (pfile, "missing ')' to complete answer");
1431           return 1;
1432         }
1433       answer->count++;
1434     }
1435
1436   if (answer->count == 0)
1437     {
1438       cpp_error (pfile, "predicate's answer is empty");
1439       return 1;
1440     }
1441
1442   /* Drop whitespace at start.  */
1443   answer->first->flags &= ~PREV_WHITE;
1444   *answerp = answer;
1445
1446   if (type == T_ASSERT || type == T_UNASSERT)
1447     check_eol (pfile);
1448   return 0;
1449 }
1450
1451 /* Parses an assertion, returning a pointer to the hash node of the
1452    predicate, or 0 on error.  If an answer was supplied, it is placed
1453    in ANSWERP, otherwise it is set to 0.  */
1454 static cpp_hashnode *
1455 parse_assertion (pfile, answerp, type)
1456      cpp_reader *pfile;
1457      struct answer **answerp;
1458      int type;
1459 {
1460   cpp_hashnode *result = 0;
1461   cpp_token predicate;
1462
1463   /* We don't expand predicates or answers.  */
1464   pfile->state.prevent_expansion++;
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 = NODE_LEN (predicate.val.node);
1475       unsigned char *sym = alloca (len + 1);
1476
1477       /* Prefix '#' to get it out of macro namespace.  */
1478       sym[0] = '#';
1479       memcpy (sym + 1, NODE_NAME (predicate.val.node), len);
1480       result = cpp_lookup (pfile, sym, len + 1);
1481     }
1482
1483   pfile->state.prevent_expansion--;
1484   return result;
1485 }
1486
1487 /* Returns a pointer to the pointer to the answer in the answer chain,
1488    or a pointer to NULL if the answer is not in the chain.  */
1489 static struct answer **
1490 find_answer (node, candidate)
1491      cpp_hashnode *node;
1492      const struct answer *candidate;
1493 {
1494   unsigned int i;
1495   struct answer **result;
1496
1497   for (result = &node->value.answers; *result; result = &(*result)->next)
1498     {
1499       struct answer *answer = *result;
1500
1501       if (answer->count == candidate->count)
1502         {
1503           for (i = 0; i < answer->count; i++)
1504             if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1505               break;
1506
1507           if (i == answer->count)
1508             break;
1509         }
1510     }
1511
1512   return result;
1513 }
1514
1515 /* Test an assertion within a preprocessor conditional.  Returns
1516    non-zero on failure, zero on success.  On success, the result of
1517    the test is written into VALUE.  */
1518 int
1519 _cpp_test_assertion (pfile, value)
1520      cpp_reader *pfile;
1521      int *value;
1522 {
1523   struct answer *answer;
1524   cpp_hashnode *node;
1525
1526   node = parse_assertion (pfile, &answer, T_IF);
1527   if (node)
1528     *value = (node->type == NT_ASSERTION &&
1529               (answer == 0 || *find_answer (node, answer) != 0));
1530
1531   /* We don't commit the memory for the answer - it's temporary only.  */
1532   return node == 0;
1533 }
1534
1535 static void
1536 do_assert (pfile)
1537      cpp_reader *pfile;
1538 {
1539   struct answer *new_answer;
1540   cpp_hashnode *node;
1541   
1542   node = parse_assertion (pfile, &new_answer, T_ASSERT);
1543   if (node)
1544     {
1545       /* Place the new answer in the answer list.  First check there
1546          is not a duplicate.  */
1547       new_answer->next = 0;
1548       if (node->type == NT_ASSERTION)
1549         {
1550           if (*find_answer (node, new_answer))
1551             {
1552               cpp_warning (pfile, "\"%s\" re-asserted", NODE_NAME (node) + 1);
1553               return;
1554             }
1555           new_answer->next = node->value.answers;
1556         }
1557       node->type = NT_ASSERTION;
1558       node->value.answers = new_answer;
1559       POOL_COMMIT (&pfile->macro_pool, (sizeof (struct answer)
1560                                         + (new_answer->count - 1)
1561                                         * sizeof (cpp_token)));
1562     }
1563 }
1564
1565 static void
1566 do_unassert (pfile)
1567      cpp_reader *pfile;
1568 {
1569   cpp_hashnode *node;
1570   struct answer *answer;
1571   
1572   node = parse_assertion (pfile, &answer, T_UNASSERT);
1573   /* It isn't an error to #unassert something that isn't asserted.  */
1574   if (node && node->type == NT_ASSERTION)
1575     {
1576       if (answer)
1577         {
1578           struct answer **p = find_answer (node, answer), *temp;
1579
1580           /* Remove the answer from the list.  */
1581           temp = *p;
1582           if (temp)
1583             *p = temp->next;
1584
1585           /* Did we free the last answer?  */
1586           if (node->value.answers == 0)
1587             node->type = NT_VOID;
1588         }
1589       else
1590         _cpp_free_definition (node);
1591     }
1592
1593   /* We don't commit the memory for the answer - it's temporary only.  */
1594 }
1595
1596 /* These are for -D, -U, -A.  */
1597
1598 /* Process the string STR as if it appeared as the body of a #define.
1599    If STR is just an identifier, define it with value 1.
1600    If STR has anything after the identifier, then it should
1601    be identifier=definition.  */
1602
1603 void
1604 cpp_define (pfile, str)
1605      cpp_reader *pfile;
1606      const char *str;
1607 {
1608   char *buf, *p;
1609   size_t count;
1610
1611   /* Copy the entire option so we can modify it. 
1612      Change the first "=" in the string to a space.  If there is none,
1613      tack " 1" on the end.  */
1614
1615   /* Length including the null.  */  
1616   count = strlen (str);
1617   buf = (char *) alloca (count + 2);
1618   memcpy (buf, str, count);
1619
1620   p = strchr (str, '=');
1621   if (p)
1622     buf[p - str] = ' ';
1623   else
1624     {
1625       buf[count++] = ' ';
1626       buf[count++] = '1';
1627     }
1628
1629   run_directive (pfile, T_DEFINE, BUF_CL_OPTION, buf, count);
1630 }
1631
1632 /* Slight variant of the above for use by initialize_builtins.  */
1633 void
1634 _cpp_define_builtin (pfile, str)
1635      cpp_reader *pfile;
1636      const char *str;
1637 {
1638   run_directive (pfile, T_DEFINE, BUF_BUILTIN, str, strlen (str));
1639 }
1640
1641 /* Process MACRO as if it appeared as the body of an #undef.  */
1642 void
1643 cpp_undef (pfile, macro)
1644      cpp_reader *pfile;
1645      const char *macro;
1646 {
1647   run_directive (pfile, T_UNDEF, BUF_CL_OPTION, macro, strlen (macro));
1648 }
1649
1650 /* Process the string STR as if it appeared as the body of a #assert.  */
1651 void
1652 cpp_assert (pfile, str)
1653      cpp_reader *pfile;
1654      const char *str;
1655 {
1656   handle_assertion (pfile, str, T_ASSERT);
1657 }
1658
1659 /* Process STR as if it appeared as the body of an #unassert.  */
1660 void
1661 cpp_unassert (pfile, str)
1662      cpp_reader *pfile;
1663      const char *str;
1664 {
1665   handle_assertion (pfile, str, T_UNASSERT);
1666 }  
1667
1668 /* Common code for cpp_assert (-A) and cpp_unassert (-A-).  */
1669 static void
1670 handle_assertion (pfile, str, type)
1671      cpp_reader *pfile;
1672      const char *str;
1673      int type;
1674 {
1675   size_t count = strlen (str);
1676   const char *p = strchr (str, '=');
1677
1678   if (p)
1679     {
1680       /* Copy the entire option so we can modify it.  Change the first
1681          "=" in the string to a '(', and tack a ')' on the end.  */
1682       char *buf = (char *) alloca (count + 1);
1683
1684       memcpy (buf, str, count);
1685       buf[p - str] = '(';
1686       buf[count++] = ')';
1687       str = buf;
1688     }
1689
1690   run_directive (pfile, type, BUF_CL_OPTION, str, count);
1691 }
1692
1693 /* The number of errors for a given reader.  */
1694 unsigned int
1695 cpp_errors (pfile)
1696      cpp_reader *pfile;
1697 {
1698   return pfile->errors;
1699 }
1700
1701 /* The options structure.  */
1702 cpp_options *
1703 cpp_get_options (pfile)
1704      cpp_reader *pfile;
1705 {
1706   return &pfile->opts;
1707 }
1708
1709 /* The callbacks structure.  */
1710 cpp_callbacks *
1711 cpp_get_callbacks (pfile)
1712      cpp_reader *pfile;
1713 {
1714   return &pfile->cb;
1715 }
1716
1717 /* The line map set.  */
1718 const struct line_maps *
1719 cpp_get_line_maps (pfile)
1720      cpp_reader *pfile;
1721 {
1722   return &pfile->line_maps;
1723 }
1724
1725 /* Copy the given callbacks structure to our own.  */
1726 void
1727 cpp_set_callbacks (pfile, cb)
1728      cpp_reader *pfile;
1729      cpp_callbacks *cb;
1730 {
1731   pfile->cb = *cb;
1732 }
1733
1734 /* Push a new buffer on the buffer stack.  Returns the new buffer; it
1735    doesn't fail.  It does not generate a file change call back; that
1736    is the responsibility of the caller.  */
1737 cpp_buffer *
1738 cpp_push_buffer (pfile, buffer, len, type, filename, return_at_eof)
1739      cpp_reader *pfile;
1740      const U_CHAR *buffer;
1741      size_t len;
1742      enum cpp_buffer_type type;
1743      const char *filename;
1744      int return_at_eof;
1745 {
1746   cpp_buffer *new = xobnew (&pfile->buffer_ob, cpp_buffer);
1747
1748   if (type == BUF_BUILTIN)
1749     filename = _("<builtin>");
1750   else if (type == BUF_CL_OPTION)
1751     filename = _("<command line>");
1752   else if (type == BUF_PRAGMA)
1753     filename = "<_Pragma>";
1754
1755   /* Clears, amongst other things, if_stack and mi_cmacro.  */
1756   memset (new, 0, sizeof (cpp_buffer));
1757
1758   new->line_base = new->buf = new->cur = buffer;
1759   new->rlimit = buffer + len;
1760
1761   /* No read ahead or extra char initially.  */
1762   new->read_ahead = EOF;
1763   new->extra_char = EOF;
1764
1765   /* Preprocessed files, builtins, _Pragma and command line
1766      options don't do trigraph and escaped newline processing.  */
1767   new->from_stage3 = type != BUF_FILE || CPP_OPTION (pfile, preprocessed);
1768
1769   if (*filename == '\0')
1770     new->nominal_fname = _("<stdin>");
1771   else
1772     new->nominal_fname = filename;
1773   new->type = type;
1774   new->prev = pfile->buffer;
1775   new->pfile = pfile;
1776   new->return_at_eof = return_at_eof;
1777
1778   pfile->buffer_stack_depth++;
1779   pfile->buffer = new;
1780
1781   return new;
1782 }
1783
1784 /* If called from do_line, pops a single buffer.  Otherwise pops all
1785    buffers until a real file is reached.  Generates appropriate
1786    call-backs.  */
1787 void
1788 _cpp_pop_buffer (pfile)
1789      cpp_reader *pfile;
1790 {
1791   cpp_buffer *buffer = pfile->buffer;
1792   struct if_stack *ifs;
1793
1794   /* Walk back up the conditional stack till we reach its level at
1795      entry to this file, issuing error messages.  */
1796   for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
1797     cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1798                          "unterminated #%s", dtable[ifs->type].name);
1799
1800   /* Update the reader's buffer before _cpp_do_file_change.  */
1801   pfile->buffer = buffer->prev;
1802   pfile->buffer_stack_depth--;
1803
1804   if (buffer->type == BUF_FILE)
1805     {
1806       /* Callbacks are not generated for popping the main file.  */
1807       if (buffer->prev)
1808         _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
1809
1810       _cpp_pop_file_buffer (pfile, buffer);
1811     }
1812
1813   obstack_free (&pfile->buffer_ob, buffer);
1814
1815   /* The output line can fall out of sync if we missed the final
1816      newline from the previous buffer, for example because of an
1817      unterminated comment.  Similarly, skipping needs to be cleared in
1818      case of a missing #endif.  */
1819   pfile->lexer_pos.output_line = pfile->line;
1820   pfile->state.skipping = 0;
1821 }
1822
1823 void
1824 _cpp_init_directives (pfile)
1825      cpp_reader *pfile;
1826 {
1827   unsigned int i;
1828   cpp_hashnode *node;
1829
1830   /* Register the directives.  */
1831   for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
1832     {
1833       node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
1834       node->directive_index = i + 1;
1835     }
1836 }