OSDN Git Service

* cpperror.c (print_location): Don't take a file name; use the
[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 "obstack.h"
28
29 /* Chained list of answers to an assertion.  */
30 struct answer
31 {
32   struct answer *next;
33   unsigned int count;
34   cpp_token first[1];
35 };
36
37 /* Stack of conditionals currently in progress
38    (including both successful and failing conditionals).  */
39
40 struct if_stack
41 {
42   struct if_stack *next;
43   cpp_lexer_pos pos;            /* line and column where condition started */
44   const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
45   bool skip_elses;              /* Can future #else / #elif be skipped?  */
46   bool was_skipping;            /* If were skipping on entry.  */
47   int type;                     /* Most recent conditional, for diagnostics.  */
48 };
49
50 /* Values for the origin field of struct directive.  KANDR directives
51    come from traditional (K&R) C.  STDC89 directives come from the
52    1989 C standard.  EXTENSION directives are extensions.  */
53 #define KANDR           0
54 #define STDC89          1
55 #define EXTENSION       2
56
57 /* Values for the flags field of struct directive.  COND indicates a
58    conditional; IF_COND an opening conditional.  INCL means to treat
59    "..." and <...> as q-char and h-char sequences respectively.  IN_I
60    means this directive should be handled even if -fpreprocessed is in
61    effect (these are the directives with callback hooks).  */
62 #define COND            (1 << 0)
63 #define IF_COND         (1 << 1)
64 #define INCL            (1 << 2)
65 #define IN_I            (1 << 3)
66
67 /* Defines one #-directive, including how to handle it.  */
68 typedef void (*directive_handler) PARAMS ((cpp_reader *));
69 typedef struct directive directive;
70 struct directive
71 {
72   directive_handler handler;    /* Function to handle directive.  */
73   const U_CHAR *name;           /* Name of directive.  */
74   unsigned short length;        /* Length of name.  */
75   unsigned char origin;         /* Origin of directive.  */
76   unsigned char flags;          /* Flags describing this directive.  */
77 };
78
79 /* Forward declarations.  */
80
81 static void skip_rest_of_line   PARAMS ((cpp_reader *));
82 static void check_eol           PARAMS ((cpp_reader *));
83 static void start_directive     PARAMS ((cpp_reader *));
84 static void end_directive       PARAMS ((cpp_reader *, int));
85 static void run_directive       PARAMS ((cpp_reader *, int,
86                                          enum cpp_buffer_type,
87                                          const char *, size_t));
88 static int glue_header_name     PARAMS ((cpp_reader *, cpp_token *));
89 static int  parse_include       PARAMS ((cpp_reader *, cpp_token *));
90 static void push_conditional    PARAMS ((cpp_reader *, int, int,
91                                          const cpp_hashnode *));
92 static unsigned int read_flag   PARAMS ((cpp_reader *, unsigned int));
93 static int  strtoul_for_line    PARAMS ((const U_CHAR *, unsigned int,
94                                          unsigned long *));
95 static void do_diagnostic       PARAMS ((cpp_reader *, enum error_type, int));
96 static cpp_hashnode *lex_macro_node     PARAMS ((cpp_reader *));
97 static void do_include_common   PARAMS ((cpp_reader *, enum include_type));
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,         STDC89,    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   DIRECTIVE_TABLE
165   N_DIRECTIVES
166 };
167 #undef D
168
169 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail.  */
170 #define D(name, t, origin, flags) \
171 { CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
172   sizeof STRINGX(name) - 1, origin, flags },
173 static const directive dtable[] =
174 {
175 DIRECTIVE_TABLE
176 };
177 #undef D
178 #undef DIRECTIVE_TABLE
179
180 #define SEEN_EOL() (pfile->lexer_pos.output_line > pfile->line)
181
182 /* Skip any remaining tokens in a directive.  */
183 static void
184 skip_rest_of_line (pfile)
185      cpp_reader *pfile;
186 {
187   cpp_token token;
188
189   /* Discard all input lookaheads.  */
190   while (pfile->la_read)
191     _cpp_release_lookahead (pfile);
192
193   /* Discard all stacked contexts.  */
194   while (pfile->context != &pfile->base_context)
195     _cpp_pop_context (pfile);
196
197   /* Sweep up all tokens remaining on the line.  */
198   while (! SEEN_EOL ())
199     _cpp_lex_token (pfile, &token);
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 (! SEEN_EOL ())
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 /* Called when entering a directive, _Pragma or command-line directive.  */
219 static void
220 start_directive (pfile)
221      cpp_reader *pfile;
222 {
223   /* Setup in-directive state.  */
224   pfile->state.in_directive = 1;
225   pfile->state.save_comments = 0;
226
227   /* Some handlers need the position of the # for diagnostics.  */
228   pfile->directive_pos = pfile->lexer_pos;
229   pfile->directive_line = pfile->line;
230
231   /* Don't save directive tokens for external clients.  */
232   pfile->la_saved = pfile->la_write;
233   pfile->la_write = 0;
234 }
235
236 /* Called when leaving a directive, _Pragma or command-line directive.  */
237 static void
238 end_directive (pfile, skip_line)
239      cpp_reader *pfile;
240      int skip_line;
241 {
242   /* We don't skip for an assembler #.  */
243   if (skip_line)
244     {
245       skip_rest_of_line (pfile);
246       /*  "Accept" the newline now.  */
247       pfile->line++;
248     }
249
250   /* Restore state.  */
251   pfile->la_write = pfile->la_saved;
252   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
253   pfile->state.in_directive = 0;
254   pfile->state.angled_headers = 0;
255   pfile->state.line_extension = 0;
256   pfile->directive = 0;
257 }
258
259 /* Check if a token's name matches that of a known directive.  Put in
260    this file to save exporting dtable and other unneeded information.  */
261 int
262 _cpp_handle_directive (pfile, indented)
263      cpp_reader *pfile;
264      int indented;
265 {
266   const directive *dir = 0;
267   cpp_token dname;
268   int skip = 1;
269
270   start_directive (pfile);
271
272   /* Lex the directive name directly.  */
273   _cpp_lex_token (pfile, &dname);
274
275   if (dname.type == CPP_NAME)
276     {
277       unsigned int index = dname.val.node->directive_index;
278       if (index)
279         dir = &dtable[index - 1];
280     }
281   else if (dname.type == CPP_NUMBER)
282     {
283       /* # followed by a number is equivalent to #line.  Do not
284          recognize this form in assembly language source files or
285          skipped conditional groups.  Complain about this form if
286          we're being pedantic, but not if this is regurgitated input
287          (preprocessed or fed back in by the C++ frontend).  */
288       if (! pfile->state.skipping && CPP_OPTION (pfile, lang) != CLK_ASM)
289         {
290           dir = &dtable[T_LINE];
291           pfile->state.line_extension = 1;
292           _cpp_push_token (pfile, &dname, &pfile->directive_pos);
293           if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed))
294             cpp_pedwarn (pfile, "# followed by integer");
295         }
296     }
297
298   pfile->directive = dir;
299   if (dir)
300     {
301       /* Make sure we lex headers correctly, whether skipping or not.  */
302       pfile->state.angled_headers = dir->flags & INCL;
303
304       /* If we are rescanning preprocessed input, only directives tagged
305          with IN_I are honored, and the warnings below are suppressed.  */
306       if (CPP_OPTION (pfile, preprocessed))
307         {
308           /* Kluge alert.  In order to be sure that code like this
309              #define HASH #
310              HASH define foo bar
311              does not cause '#define foo bar' to get executed when
312              compiled with -save-temps, we recognize directives in
313              -fpreprocessed mode only if the # is in column 1 and the
314              directive name starts in column 2.  This output can only
315              be generated by the directive callbacks in cppmain.c (see
316              also the special case in scan_buffer).  */
317           if (dir->flags & IN_I && !indented && !(dname.flags & PREV_WHITE))
318             (*dir->handler) (pfile);
319           /* That check misses '# 123' linemarkers.  Let them through too.  */
320           else if (dname.type == CPP_NUMBER)
321             (*dir->handler) (pfile);
322           else
323             {
324               /* We don't want to process this directive.  Put back the
325                  tokens so caller will see them (and issue an error,
326                  probably).  */
327               _cpp_push_token (pfile, &dname, &pfile->directive_pos);
328               skip = 0;
329             }
330         }
331       else
332         {
333           /* Traditionally, a directive is ignored unless its # is in
334              column 1.  Therefore in code intended to work with K+R
335              compilers, directives added by C89 must have their #
336              indented, and directives present in traditional C must
337              not.  This is true even of directives in skipped
338              conditional blocks.  */
339           if (CPP_WTRADITIONAL (pfile))
340             {
341               if (dir == &dtable[T_ELIF])
342                 cpp_warning (pfile,
343                              "suggest not using #elif in traditional C");
344               else if (indented && dir->origin == KANDR)
345                 cpp_warning (pfile,
346                              "traditional C ignores #%s with the # indented",
347                              dir->name);
348               else if (!indented && dir->origin != KANDR)
349                 cpp_warning (pfile,
350              "suggest hiding #%s from traditional C with an indented #",
351                              dir->name);
352             }
353
354           /* If we are skipping a failed conditional group, all
355              non-conditional directives are ignored.  */
356           if (! pfile->state.skipping || (dir->flags & COND))
357             {
358               /* Issue -pedantic warnings for extensions.   */
359               if (CPP_PEDANTIC (pfile) && dir->origin == EXTENSION)
360                 cpp_pedwarn (pfile, "#%s is a GCC extension", dir->name);
361
362               /* If we have a directive that is not an opening
363                  conditional, invalidate any control macro.  */
364               if (! (dir->flags & IF_COND))
365                 pfile->mi_valid = false;
366
367               (*dir->handler) (pfile);
368             }
369         }
370     }
371   else if (dname.type != CPP_EOF && ! pfile->state.skipping)
372     {
373       /* An unknown directive.  Don't complain about it in assembly
374          source: we don't know where the comments are, and # may
375          introduce assembler pseudo-ops.  Don't complain about invalid
376          directives in skipped conditional groups (6.10 p4).  */
377       if (CPP_OPTION (pfile, lang) == CLK_ASM)
378         {
379           /* Output the # and lookahead token for the assembler.  */
380           _cpp_push_token (pfile, &dname, &pfile->directive_pos);
381           skip = 0;
382         }
383       else
384         cpp_error (pfile, "invalid preprocessing directive #%s",
385                    cpp_token_as_text (pfile, &dname));
386     }
387
388   if (pfile->state.in_directive)
389     end_directive (pfile, skip);
390   return skip;
391 }
392
393 /* Directive handler wrapper used by the command line option
394    processor.  */
395 static void
396 run_directive (pfile, dir_no, type, buf, count)
397      cpp_reader *pfile;
398      int dir_no;
399      enum cpp_buffer_type type;
400      const char *buf;
401      size_t count;
402 {
403   cpp_buffer *buffer;
404
405   buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count, type, 1);
406   start_directive (pfile);
407   pfile->state.prevent_expansion++;
408   pfile->directive = &dtable[dir_no];
409   (void) (*pfile->directive->handler) (pfile);
410   pfile->state.prevent_expansion--;
411   check_eol (pfile);
412   end_directive (pfile, 1);
413   _cpp_pop_buffer (pfile);
414 }
415
416 /* Checks for validity the macro name in #define, #undef, #ifdef and
417    #ifndef directives.  */
418 static cpp_hashnode *
419 lex_macro_node (pfile)
420      cpp_reader *pfile;
421 {
422   cpp_token token;
423   cpp_hashnode *node;
424
425   /* Lex the macro name directly.  */
426   _cpp_lex_token (pfile, &token);
427
428   /* The token immediately after #define must be an identifier.  That
429      identifier may not be "defined", per C99 6.10.8p4.
430      In C++, it may not be any of the "named operators" either,
431      per C++98 [lex.digraph], [lex.key].
432      Finally, the identifier may not have been poisoned.  (In that case
433      the lexer has issued the error message for us.)  */
434
435   if (token.type != CPP_NAME)
436     {
437       if (token.type == CPP_EOF)
438         cpp_error (pfile, "no macro name given in #%s directive",
439                    pfile->directive->name);
440       else if (token.flags & NAMED_OP)
441         cpp_error (pfile,
442            "\"%s\" cannot be used as a macro name as it is an operator in C++",
443                    NODE_NAME (token.val.node));
444       else
445         cpp_error (pfile, "macro names must be identifiers");
446
447       return 0;
448     }
449
450   node = token.val.node;
451   if (node->flags & NODE_POISONED)
452     return 0;
453
454   if (node == pfile->spec_nodes.n_defined)
455     {
456       cpp_error (pfile, "\"%s\" cannot be used as a macro name",
457                  NODE_NAME (node));
458       return 0;
459     }
460
461   return node;
462 }
463
464 /* Process a #define directive.  Most work is done in cppmacro.c.  */
465 static void
466 do_define (pfile)
467      cpp_reader *pfile;
468 {
469   cpp_hashnode *node = lex_macro_node (pfile);
470
471   if (node)
472     {
473       if (_cpp_create_definition (pfile, node))
474         if (pfile->cb.define)
475           (*pfile->cb.define) (pfile, pfile->directive_line, node);
476     }
477 }
478
479 /* Handle #undef.  Marks the identifier NT_VOID in the hash table.  */
480 static void
481 do_undef (pfile)
482      cpp_reader *pfile;
483 {
484   cpp_hashnode *node = lex_macro_node (pfile);  
485
486   /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier
487      is not currently defined as a macro name.  */
488   if (node && node->type == NT_MACRO)
489     {
490       if (pfile->cb.undef)
491         (*pfile->cb.undef) (pfile, pfile->directive_line, node);
492
493       if (node->flags & NODE_WARN)
494         cpp_warning (pfile, "undefining \"%s\"", NODE_NAME (node));
495
496       _cpp_free_definition (node);
497     }
498   check_eol (pfile);
499 }
500
501 /* Helper routine used by parse_include.  Reinterpret the current line
502    as an h-char-sequence (< ... >); we are looking at the first token
503    after the <.  Returns zero on success.  */
504 static int
505 glue_header_name (pfile, header)
506      cpp_reader *pfile;
507      cpp_token *header;
508 {
509   cpp_token token;
510   unsigned char *buffer, *token_mem;
511   size_t len, total_len = 0, capacity = 1024;
512
513   /* To avoid lexed tokens overwriting our glued name, we can only
514      allocate from the string pool once we've lexed everything.  */
515
516   buffer = (unsigned char *) xmalloc (capacity);
517   for (;;)
518     {
519       cpp_get_token (pfile, &token);
520
521       if (token.type == CPP_GREATER || token.type == CPP_EOF)
522         break;
523
524       len = cpp_token_len (&token);
525       if (total_len + len > capacity)
526         {
527           capacity = (capacity + len) * 2;
528           buffer = (unsigned char *) xrealloc (buffer, capacity);
529         }
530
531       if (token.flags & PREV_WHITE)
532         buffer[total_len++] = ' ';
533
534       total_len = cpp_spell_token (pfile, &token, &buffer[total_len]) - buffer;
535     }
536
537   if (token.type == CPP_EOF)
538     cpp_error (pfile, "missing terminating > character");
539   else
540     {
541       token_mem = _cpp_pool_alloc (&pfile->ident_pool, total_len + 1);
542       memcpy (token_mem, buffer, total_len);
543       token_mem[total_len] = '\0';
544
545       header->type = CPP_HEADER_NAME;
546       header->flags &= ~PREV_WHITE;
547       header->val.str.len = total_len;
548       header->val.str.text = token_mem;
549     }
550
551   free ((PTR) buffer);
552   return token.type == CPP_EOF;
553 }
554
555 /* Parse the header name of #include, #include_next, #import and
556    #pragma dependency.  Returns zero on success.  */
557 static int
558 parse_include (pfile, header)
559      cpp_reader *pfile;
560      cpp_token *header;
561 {
562   const unsigned char *dir;
563
564   if (pfile->directive == &dtable[T_PRAGMA])
565     dir = U"pragma dependency";
566   else
567     dir = pfile->directive->name;
568
569   /* Allow macro expansion.  */
570   cpp_get_token (pfile, header);
571   if (header->type != CPP_STRING && header->type != CPP_HEADER_NAME)
572     {
573       if (header->type != CPP_LESS)
574         {
575           cpp_error (pfile, "#%s expects \"FILENAME\" or <FILENAME>", dir);
576           return 1;
577         }
578       if (glue_header_name (pfile, header))
579         return 1;
580     }
581
582   if (header->val.str.len == 0)
583     {
584       cpp_error (pfile, "empty file name in #%s", dir);
585       return 1;
586     }
587
588   return 0;
589 }
590
591 /* Handle #include, #include_next and #import.  */
592 static void
593 do_include_common (pfile, type)
594      cpp_reader *pfile;
595      enum include_type type;
596 {
597   cpp_token header;
598
599   /* For #include_next, if this is the primary source file, warn and
600      use the normal search logic.  */
601   if (type == IT_INCLUDE_NEXT && ! pfile->buffer->prev)
602     {
603       cpp_warning (pfile, "#include_next in primary source file");
604       type = IT_INCLUDE;
605     }
606   else if (type == IT_IMPORT && CPP_OPTION (pfile, warn_import))
607     {
608       CPP_OPTION (pfile, warn_import) = 0;
609       cpp_warning (pfile,
610            "#import is obsolete, use an #ifndef wrapper in the header file");
611     }
612
613   if (!parse_include (pfile, &header))
614     {
615       /* Prevent #include recursion.  */
616       if (pfile->buffer_stack_depth >= CPP_STACK_MAX)
617         cpp_fatal (pfile, "#include nested too deeply");
618       else
619         {
620           check_eol (pfile);
621           /* Get out of macro context, if we are.  */
622           end_directive (pfile, 1);
623           if (pfile->cb.include)
624             (*pfile->cb.include) (pfile, pfile->directive_line,
625                                   pfile->directive->name, &header);
626
627           _cpp_execute_include (pfile, &header, type);
628         }
629     }
630 }
631
632 static void
633 do_include (pfile)
634      cpp_reader *pfile;
635 {
636   do_include_common (pfile, IT_INCLUDE);
637 }
638
639 static void
640 do_import (pfile)
641      cpp_reader *pfile;
642 {
643   do_include_common (pfile, IT_IMPORT);
644 }
645
646 static void
647 do_include_next (pfile)
648      cpp_reader *pfile;
649 {
650   do_include_common (pfile, IT_INCLUDE_NEXT);
651 }
652
653 /* Subroutine of do_line.  Read possible flags after file name.  LAST
654    is the last flag seen; 0 if this is the first flag. Return the flag
655    if it is valid, 0 at the end of the directive. Otherwise complain.  */
656
657 static unsigned int
658 read_flag (pfile, last)
659      cpp_reader *pfile;
660      unsigned int last;
661 {
662   cpp_token token;
663
664   _cpp_lex_token (pfile, &token);
665   if (token.type == CPP_NUMBER && token.val.str.len == 1)
666     {
667       unsigned int flag = token.val.str.text[0] - '0';
668
669       if (flag > last && flag <= 4
670           && (flag != 4 || last == 3)
671           && (flag != 2 || last == 0))
672         return flag;
673     }
674
675   if (token.type != CPP_EOF)
676     cpp_error (pfile, "invalid flag \"%s\" in line directive",
677                cpp_token_as_text (pfile, &token));
678   return 0;
679 }
680
681 /* Another subroutine of do_line.  Convert a number in STR, of length
682    LEN, to binary; store it in NUMP, and return 0 if the number was
683    well-formed, 1 if not.  Temporary, hopefully.  */
684 static int
685 strtoul_for_line (str, len, nump)
686      const U_CHAR *str;
687      unsigned int len;
688      unsigned long *nump;
689 {
690   unsigned long reg = 0;
691   U_CHAR c;
692   while (len--)
693     {
694       c = *str++;
695       if (!ISDIGIT (c))
696         return 1;
697       reg *= 10;
698       reg += c - '0';
699     }
700   *nump = reg;
701   return 0;
702 }
703
704 /* Interpret #line command.
705    Note that the filename string (if any) is treated as if it were an
706    include filename.  That means no escape handling.  */
707
708 static void
709 do_line (pfile)
710      cpp_reader *pfile;
711 {
712   cpp_token token;
713   const char *new_file = pfile->map->to_file;
714   unsigned long new_lineno;
715   unsigned int cap, new_sysp = pfile->map->sysp;
716   enum lc_reason reason = LC_RENAME;
717
718   /* C99 raised the minimum limit on #line numbers.  */
719   cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
720
721   /* #line commands expand macros.  */
722   cpp_get_token (pfile, &token);
723   if (token.type != CPP_NUMBER
724       || strtoul_for_line (token.val.str.text, token.val.str.len, &new_lineno))
725     {
726       cpp_error (pfile, "\"%s\" after #line is not a positive integer",
727                  cpp_token_as_text (pfile, &token));
728       return;
729     }      
730
731   if (CPP_PEDANTIC (pfile) && ! pfile->state.line_extension
732       && (new_lineno == 0 || new_lineno > cap))
733     cpp_pedwarn (pfile, "line number out of range");
734
735   cpp_get_token (pfile, &token);
736   if (token.type == CPP_STRING)
737     {
738       new_file = (const char *) token.val.str.text;
739
740       /* Only accept flags for the # 55 form.  */
741       if (pfile->state.line_extension)
742         {
743           int flag;
744
745           new_sysp = 0;
746           flag = read_flag (pfile, 0);
747           if (flag == 1)
748             {
749               reason = LC_ENTER;
750               /* Fake an include for cpp_included ().  */
751               _cpp_fake_include (pfile, new_file);
752               flag = read_flag (pfile, flag);
753             }
754           else if (flag == 2)
755             {
756               reason = LC_LEAVE;
757               flag = read_flag (pfile, flag);
758             }
759           if (flag == 3)
760             {
761               new_sysp = 1;
762               flag = read_flag (pfile, flag);
763               if (flag == 4)
764                 new_sysp = 2;
765             }
766         }
767       check_eol (pfile);
768     }
769   else if (token.type != CPP_EOF)
770     {
771       cpp_error (pfile, "\"%s\" is not a valid filename",
772                  cpp_token_as_text (pfile, &token));
773       return;
774     }
775
776   end_directive (pfile, 1);
777   _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp);
778 }
779
780 /* Arrange the file_change callback.  pfile->line has changed to
781    FILE_LINE of TO_FILE, for reason REASON.  SYSP is 1 for a system
782    header, 2 for a sytem header that needs to be extern "C" protected,
783    and zero otherwise.  */
784 void
785 _cpp_do_file_change (pfile, reason, to_file, file_line, sysp)
786      cpp_reader *pfile;
787      enum lc_reason reason;
788      const char *to_file;
789      unsigned int file_line;
790      unsigned int sysp;
791 {
792   pfile->map = add_line_map (&pfile->line_maps, reason, sysp,
793                              pfile->line, to_file, file_line);
794
795   if (pfile->cb.file_change)
796     (*pfile->cb.file_change) (pfile, pfile->map);
797 }
798
799 /*
800  * Report a warning or error detected by the program we are
801  * processing.  Use the directive's tokens in the error message.
802  */
803
804 static void
805 do_diagnostic (pfile, code, print_dir)
806      cpp_reader *pfile;
807      enum error_type code;
808      int print_dir;
809 {
810   if (_cpp_begin_message (pfile, code, 0))
811     {
812       if (print_dir)
813         fprintf (stderr, "#%s ", pfile->directive->name);
814       pfile->state.prevent_expansion++;
815       cpp_output_line (pfile, stderr);
816       pfile->state.prevent_expansion--;
817     }
818 }
819
820 static void
821 do_error (pfile)
822      cpp_reader *pfile;
823 {
824   do_diagnostic (pfile, ERROR, 1);
825 }
826
827 static void
828 do_warning (pfile)
829      cpp_reader *pfile;
830 {
831   /* We want #warning diagnostics to be emitted in system headers too.  */
832   do_diagnostic (pfile, WARNING_SYSHDR, 1);
833 }
834
835 /* Report program identification.  */
836
837 static void
838 do_ident (pfile)
839      cpp_reader *pfile;
840 {
841   cpp_token str;
842
843   cpp_get_token (pfile, &str);
844   if (str.type != CPP_STRING)
845     cpp_error (pfile, "invalid #ident");
846   else if (pfile->cb.ident)
847     (*pfile->cb.ident) (pfile, pfile->directive_line, &str.val.str);
848
849   check_eol (pfile);
850 }
851
852 /* Pragmata handling.  We handle some of these, and pass the rest on
853    to the front end.  C99 defines three pragmas and says that no macro
854    expansion is to be performed on them; whether or not macro
855    expansion happens for other pragmas is implementation defined.
856    This implementation never macro-expands the text after #pragma.  */
857
858 /* Sub-handlers for the pragmas needing treatment here.
859    They return 1 if the token buffer is to be popped, 0 if not.  */
860 typedef void (*pragma_cb) PARAMS ((cpp_reader *));
861 struct pragma_entry
862 {
863   struct pragma_entry *next;
864   const char *name;
865   size_t len;
866   int isnspace;
867   union {
868     pragma_cb handler;
869     struct pragma_entry *space;
870   } u;
871 };
872
873 void
874 cpp_register_pragma (pfile, space, name, handler)
875      cpp_reader *pfile;
876      const char *space;
877      const char *name;
878      pragma_cb handler;
879 {
880   struct pragma_entry **x, *new;
881   size_t len;
882
883   x = &pfile->pragmas;
884   if (space)
885     {
886       struct pragma_entry *p = pfile->pragmas;
887       len = strlen (space);
888       while (p)
889         {
890           if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
891             {
892               x = &p->u.space;
893               goto found;
894             }
895           p = p->next;
896         }
897       cpp_ice (pfile, "unknown #pragma namespace %s", space);
898       return;
899     }
900
901  found:
902   new = (struct pragma_entry *)
903     _cpp_pool_alloc (&pfile->macro_pool, sizeof (struct pragma_entry));
904   new->name = name;
905   new->len = strlen (name);
906   new->isnspace = 0;
907   new->u.handler = handler;
908
909   new->next = *x;
910   *x = new;
911 }
912
913 void
914 cpp_register_pragma_space (pfile, space)
915      cpp_reader *pfile;
916      const char *space;
917 {
918   struct pragma_entry *new;
919   const struct pragma_entry *p = pfile->pragmas;
920   size_t len = strlen (space);
921
922   while (p)
923     {
924       if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
925         /* Multiple different callers are allowed to register the same
926            namespace.  */
927         return;
928       p = p->next;
929     }
930
931   new = (struct pragma_entry *)
932     _cpp_pool_alloc (&pfile->macro_pool, sizeof (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, return_at_eof)
1739      cpp_reader *pfile;
1740      const U_CHAR *buffer;
1741      size_t len;
1742      enum cpp_buffer_type type;
1743      int return_at_eof;
1744 {
1745   cpp_buffer *new = xobnew (&pfile->buffer_ob, cpp_buffer);
1746
1747   /* Clears, amongst other things, if_stack and mi_cmacro.  */
1748   memset (new, 0, sizeof (cpp_buffer));
1749
1750   new->line_base = new->buf = new->cur = buffer;
1751   new->rlimit = buffer + len;
1752
1753   /* No read ahead or extra char initially.  */
1754   new->read_ahead = EOF;
1755   new->extra_char = EOF;
1756
1757   /* Preprocessed files, builtins, _Pragma and command line
1758      options don't do trigraph and escaped newline processing.  */
1759   new->from_stage3 = type != BUF_FILE || CPP_OPTION (pfile, preprocessed);
1760
1761   new->type = type;
1762   new->prev = pfile->buffer;
1763   new->pfile = pfile;
1764   new->return_at_eof = return_at_eof;
1765
1766   pfile->buffer_stack_depth++;
1767   pfile->buffer = new;
1768
1769   return new;
1770 }
1771
1772 /* If called from do_line, pops a single buffer.  Otherwise pops all
1773    buffers until a real file is reached.  Generates appropriate
1774    call-backs.  */
1775 void
1776 _cpp_pop_buffer (pfile)
1777      cpp_reader *pfile;
1778 {
1779   cpp_buffer *buffer = pfile->buffer;
1780   struct if_stack *ifs;
1781
1782   /* Walk back up the conditional stack till we reach its level at
1783      entry to this file, issuing error messages.  */
1784   for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
1785     cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1786                          "unterminated #%s", dtable[ifs->type].name);
1787
1788   /* Update the reader's buffer before _cpp_do_file_change.  */
1789   pfile->buffer = buffer->prev;
1790   pfile->buffer_stack_depth--;
1791
1792   if (buffer->type == BUF_FILE)
1793     {
1794       /* Callbacks are not generated for popping the main file.  */
1795       if (buffer->prev)
1796         _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
1797
1798       _cpp_pop_file_buffer (pfile, buffer);
1799     }
1800
1801   obstack_free (&pfile->buffer_ob, buffer);
1802
1803   /* The output line can fall out of sync if we missed the final
1804      newline from the previous buffer, for example because of an
1805      unterminated comment.  Similarly, skipping needs to be cleared in
1806      case of a missing #endif.  */
1807   pfile->lexer_pos.output_line = pfile->line;
1808   pfile->state.skipping = 0;
1809 }
1810
1811 void
1812 _cpp_init_directives (pfile)
1813      cpp_reader *pfile;
1814 {
1815   unsigned int i;
1816   cpp_hashnode *node;
1817
1818   /* Register the directives.  */
1819   for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
1820     {
1821       node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
1822       node->directive_index = i + 1;
1823     }
1824 }