OSDN Git Service

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