Renamer improvements.
[official-gcc.git] / gcc / cpplib.c
blobc915f77454035aedd697f756e3c93d747cd31ecc
1 /* CPP Library. (Directive handling.)
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000 Free Software Foundation, Inc.
4 Contributed by Per Bothner, 1994-95.
5 Based on CCCP program by Paul Rubin, June 1986
6 Adapted to ANSI C, Richard Stallman, Jan 1987
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.
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.
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. */
22 #include "config.h"
23 #include "system.h"
25 #include "cpplib.h"
26 #include "cpphash.h"
27 #include "intl.h"
28 #include "obstack.h"
29 #include "symcat.h"
31 /* Chained list of answers to an assertion. */
32 struct answer
34 struct answer *next;
35 unsigned int count;
36 cpp_token first[1];
39 /* Stack of conditionals currently in progress
40 (including both successful and failing conditionals). */
42 struct if_stack
44 struct if_stack *next;
45 cpp_lexer_pos pos; /* line and column where condition started */
46 const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
47 unsigned char was_skipping; /* Value of pfile->skipping before this if. */
48 int type; /* type of last directive seen in this group */
51 /* Values for the origin field of struct directive. KANDR directives
52 come from traditional (K&R) C. STDC89 directives come from the
53 1989 C standard. EXTENSION directives are extensions. */
54 #define KANDR 0
55 #define STDC89 1
56 #define EXTENSION 2
58 /* Values for the flags field of struct directive. COND indicates a
59 conditional; IF_COND an opening conditional. INCL means to treat
60 "..." and <...> as q-char and h-char sequences respectively. IN_I
61 means this directive should be handled even if -fpreprocessed is in
62 effect (these are the directives with callback hooks). */
63 #define COND (1 << 0)
64 #define IF_COND (1 << 1)
65 #define INCL (1 << 2)
66 #define IN_I (1 << 3)
68 /* Defines one #-directive, including how to handle it. */
69 typedef void (*directive_handler) PARAMS ((cpp_reader *));
70 typedef struct directive directive;
71 struct directive
73 directive_handler handler; /* Function to handle directive. */
74 const U_CHAR *name; /* Name of directive. */
75 unsigned short length; /* Length of name. */
76 unsigned char origin; /* Origin of directive. */
77 unsigned char flags; /* Flags describing this directive. */
80 /* Forward declarations. */
82 static void skip_rest_of_line PARAMS ((cpp_reader *));
83 static void check_eol PARAMS ((cpp_reader *));
84 static void start_directive PARAMS ((cpp_reader *));
85 static void end_directive PARAMS ((cpp_reader *, int));
86 static void run_directive PARAMS ((cpp_reader *, int,
87 enum cpp_buffer_type,
88 const char *, size_t));
89 static int glue_header_name PARAMS ((cpp_reader *, cpp_token *));
90 static int parse_include PARAMS ((cpp_reader *, cpp_token *));
91 static void push_conditional PARAMS ((cpp_reader *, int, int,
92 const cpp_hashnode *));
93 static unsigned int read_flag PARAMS ((cpp_reader *, unsigned int));
94 static int strtoul_for_line PARAMS ((const U_CHAR *, unsigned int,
95 unsigned long *));
96 static void do_diagnostic PARAMS ((cpp_reader *, enum error_type, int));
97 static cpp_hashnode *lex_macro_node PARAMS ((cpp_reader *));
98 static void do_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));
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. */
121 #define DIRECTIVE_TABLE \
122 D(define, T_DEFINE = 0, KANDR, IN_I) /* 270554 */ \
123 D(include, T_INCLUDE, KANDR, INCL) /* 52262 */ \
124 D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \
125 D(ifdef, T_IFDEF, KANDR, COND | IF_COND) /* 22000 */ \
126 D(if, T_IF, KANDR, COND | IF_COND) /* 18162 */ \
127 D(else, T_ELSE, KANDR, COND) /* 9863 */ \
128 D(ifndef, T_IFNDEF, KANDR, COND | IF_COND) /* 9675 */ \
129 D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \
130 D(line, T_LINE, KANDR, IN_I) /* 2465 */ \
131 D(elif, T_ELIF, KANDR, COND) /* 610 */ \
132 D(error, T_ERROR, STDC89, 0) /* 475 */ \
133 D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \
134 D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \
135 D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL) /* 19 */ \
136 D(ident, T_IDENT, EXTENSION, IN_I) /* 11 */ \
137 D(import, T_IMPORT, EXTENSION, INCL) /* 0 ObjC */ \
138 D(assert, T_ASSERT, EXTENSION, 0) /* 0 SVR4 */ \
139 D(unassert, T_UNASSERT, EXTENSION, 0) /* 0 SVR4 */ \
140 SCCS_ENTRY /* 0 SVR4? */
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
149 /* Use the table to generate a series of prototypes, an enum for the
150 directive names, and an array of directive handlers. */
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. */
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
161 #define D(n, tag, o, f) tag,
162 enum
164 T_BAD_DIRECTIVE,
165 DIRECTIVE_TABLE
166 N_DIRECTIVES
168 #undef D
170 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
171 #define D(name, t, origin, flags) \
172 { CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
173 sizeof STRINGX(name) - 1, origin, flags },
174 static const directive dtable[] =
176 DIRECTIVE_TABLE
178 #undef D
179 #undef DIRECTIVE_TABLE
181 /* Skip any remaining tokens in a directive. */
182 static void
183 skip_rest_of_line (pfile)
184 cpp_reader *pfile;
186 cpp_token token;
188 /* Discard all input lookaheads. */
189 while (pfile->la_read)
190 _cpp_release_lookahead (pfile);
192 /* Discard all stacked contexts. */
193 while (pfile->context != &pfile->base_context)
194 _cpp_pop_context (pfile);
196 /* Sweep up all tokens remaining on the line. */
197 pfile->state.prevent_expansion++;
198 while (!pfile->state.next_bol)
199 _cpp_lex_token (pfile, &token);
200 pfile->state.prevent_expansion--;
203 /* Ensure there are no stray tokens at the end of a directive. */
204 static void
205 check_eol (pfile)
206 cpp_reader *pfile;
208 if (!pfile->state.next_bol)
210 cpp_token token;
212 _cpp_lex_token (pfile, &token);
213 if (token.type != CPP_EOF)
214 cpp_pedwarn (pfile, "extra tokens at end of #%s directive",
215 pfile->directive->name);
219 /* Called when entering a directive, _Pragma or command-line directive. */
220 static void
221 start_directive (pfile)
222 cpp_reader *pfile;
224 cpp_buffer *buffer = pfile->buffer;
226 /* Setup in-directive state. */
227 pfile->state.in_directive = 1;
228 pfile->state.save_comments = 0;
230 /* Some handlers need the position of the # for diagnostics. */
231 pfile->directive_pos = pfile->lexer_pos;
233 /* Don't save directive tokens for external clients. */
234 pfile->la_saved = pfile->la_write;
235 pfile->la_write = 0;
237 /* Turn off skipping. */
238 buffer->was_skipping = pfile->skipping;
239 pfile->skipping = 0;
242 /* Called when leaving a directive, _Pragma or command-line directive. */
243 static void
244 end_directive (pfile, skip_line)
245 cpp_reader *pfile;
246 int skip_line;
248 cpp_buffer *buffer = pfile->buffer;
250 /* Restore pfile->skipping before skip_rest_of_line, so that e.g.
251 __VA_ARGS__ in the rest of the directive doesn't warn. */
252 pfile->skipping = buffer->was_skipping;
254 /* We don't skip for an assembler #. */
255 if (skip_line)
256 skip_rest_of_line (pfile);
258 /* Restore state. */
259 pfile->la_write = pfile->la_saved;
260 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
261 pfile->state.in_directive = 0;
262 pfile->state.angled_headers = 0;
263 pfile->state.line_extension = 0;
264 pfile->directive = 0;
267 /* Check if a token's name matches that of a known directive. Put in
268 this file to save exporting dtable and other unneeded information. */
270 _cpp_handle_directive (pfile, indented)
271 cpp_reader *pfile;
272 int indented;
274 cpp_buffer *buffer = pfile->buffer;
275 const directive *dir = 0;
276 cpp_token dname;
277 int skip = 1;
279 start_directive (pfile);
281 /* Lex the directive name directly. */
282 _cpp_lex_token (pfile, &dname);
284 if (dname.type == CPP_NAME)
286 unsigned int index = dname.val.node->directive_index;
287 if (index)
288 dir = &dtable[index - 1];
290 else if (dname.type == CPP_NUMBER)
292 /* # followed by a number is equivalent to #line. Do not
293 recognize this form in assembly language source files or
294 skipped conditional groups. Complain about this form if
295 we're being pedantic, but not if this is regurgitated input
296 (preprocessed or fed back in by the C++ frontend). */
297 if (! buffer->was_skipping && CPP_OPTION (pfile, lang) != CLK_ASM)
299 dir = &dtable[T_LINE];
300 pfile->state.line_extension = 1;
301 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
302 if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed))
303 cpp_pedwarn (pfile, "# followed by integer");
307 pfile->directive = dir;
308 if (dir)
310 /* Make sure we lex headers correctly, whether skipping or not. */
311 pfile->state.angled_headers = dir->flags & INCL;
313 /* If we are rescanning preprocessed input, only directives tagged
314 with IN_I are honored, and the warnings below are suppressed. */
315 if (! CPP_OPTION (pfile, preprocessed) || dir->flags & IN_I)
317 /* Traditionally, a directive is ignored unless its # is in
318 column 1. Therefore in code intended to work with K+R
319 compilers, directives added by C89 must have their #
320 indented, and directives present in traditional C must
321 not. This is true even of directives in skipped
322 conditional blocks. */
323 if (CPP_WTRADITIONAL (pfile))
325 if (indented && dir->origin == KANDR)
326 cpp_warning (pfile,
327 "traditional C ignores #%s with the # indented",
328 dir->name);
329 else if (!indented && dir->origin != KANDR)
330 cpp_warning (pfile,
331 "suggest hiding #%s from traditional C with an indented #",
332 dir->name);
335 /* If we are skipping a failed conditional group, all
336 non-conditional directives are ignored. */
337 if (! buffer->was_skipping || (dir->flags & COND))
339 /* Issue -pedantic warnings for extensions. */
340 if (CPP_PEDANTIC (pfile) && dir->origin == EXTENSION)
341 cpp_pedwarn (pfile, "#%s is a GCC extension", dir->name);
343 /* If we have a directive that is not an opening
344 conditional, invalidate any control macro. */
345 if (! (dir->flags & IF_COND))
346 pfile->mi_state = MI_FAILED;
348 (*dir->handler) (pfile);
352 else if (dname.type != CPP_EOF && ! pfile->skipping)
354 /* An unknown directive. Don't complain about it in assembly
355 source: we don't know where the comments are, and # may
356 introduce assembler pseudo-ops. Don't complain about invalid
357 directives in skipped conditional groups (6.10 p4). */
358 if (CPP_OPTION (pfile, lang) == CLK_ASM)
360 /* Output the # and lookahead token for the assembler. */
361 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
362 skip = 0;
364 else
365 cpp_error (pfile, "invalid preprocessing directive #%s",
366 cpp_token_as_text (pfile, &dname));
369 end_directive (pfile, skip);
370 return skip;
373 /* Directive handler wrapper used by the command line option
374 processor. */
375 static void
376 run_directive (pfile, dir_no, type, buf, count)
377 cpp_reader *pfile;
378 int dir_no;
379 enum cpp_buffer_type type;
380 const char *buf;
381 size_t count;
383 unsigned int output_line = pfile->lexer_pos.output_line;
384 cpp_buffer *buffer;
386 buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count, type, 0);
388 if (dir_no == T_PRAGMA)
390 /* A kludge to avoid line markers for _Pragma. */
391 pfile->lexer_pos.output_line = output_line;
392 /* Avoid interpretation of directives in a _Pragma string. */
393 pfile->state.next_bol = 0;
396 start_directive (pfile);
397 pfile->state.prevent_expansion++;
398 (void) (*dtable[dir_no].handler) (pfile);
399 pfile->state.prevent_expansion--;
400 check_eol (pfile);
401 end_directive (pfile, 1);
403 cpp_pop_buffer (pfile);
406 /* Checks for validity the macro name in #define, #undef, #ifdef and
407 #ifndef directives. */
408 static cpp_hashnode *
409 lex_macro_node (pfile)
410 cpp_reader *pfile;
412 cpp_token token;
414 /* Lex the macro name directly. */
415 _cpp_lex_token (pfile, &token);
417 /* The token immediately after #define must be an identifier. That
418 identifier is not allowed to be "defined". See predefined macro
419 names (6.10.8.4). In C++, it is not allowed to be any of the
420 <iso646.h> macro names (which are keywords in C++) either. */
422 if (token.type != CPP_NAME)
424 if (token.type == CPP_EOF)
425 cpp_error (pfile, "no macro name given in #%s directive",
426 pfile->directive->name);
427 else if (token.flags & NAMED_OP)
428 cpp_error (pfile,
429 "\"%s\" cannot be used as a macro name as it is an operator in C++",
430 token.val.node->name);
431 else
432 cpp_error (pfile, "macro names must be identifiers");
434 else
436 cpp_hashnode *node = token.val.node;
438 /* In Objective C, some keywords begin with '@', but general
439 identifiers do not, and you're not allowed to #define them. */
440 if (node == pfile->spec_nodes.n_defined || node->name[0] == '@')
441 cpp_error (pfile, "\"%s\" cannot be used as a macro name", node->name);
442 else if (!(node->flags & NODE_POISONED))
443 return node;
446 return 0;
449 /* Process a #define directive. Most work is done in cppmacro.c. */
450 static void
451 do_define (pfile)
452 cpp_reader *pfile;
454 cpp_hashnode *node = lex_macro_node (pfile);
456 if (node)
458 if (_cpp_create_definition (pfile, node))
459 if (pfile->cb.define)
460 (*pfile->cb.define) (pfile, node);
464 /* Handle #undef. Marks the identifier NT_VOID in the hash table. */
465 static void
466 do_undef (pfile)
467 cpp_reader *pfile;
469 cpp_hashnode *node = lex_macro_node (pfile);
471 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier
472 is not currently defined as a macro name. */
473 if (node && node->type == NT_MACRO)
475 if (pfile->cb.undef)
476 (*pfile->cb.undef) (pfile, node);
478 if (node->flags & NODE_BUILTIN)
479 cpp_warning (pfile, "undefining \"%s\"", node->name);
481 _cpp_free_definition (node);
483 check_eol (pfile);
486 /* Helper routine used by parse_include. Reinterpret the current line
487 as an h-char-sequence (< ... >); we are looking at the first token
488 after the <. Returns zero on success. */
489 static int
490 glue_header_name (pfile, header)
491 cpp_reader *pfile;
492 cpp_token *header;
494 cpp_token token;
495 unsigned char *buffer, *token_mem;
496 size_t len, total_len = 0, capacity = 1024;
498 /* To avoid lexed tokens overwriting our glued name, we can only
499 allocate from the string pool once we've lexed everything. */
501 buffer = (unsigned char *) xmalloc (capacity);
502 for (;;)
504 cpp_get_token (pfile, &token);
506 if (token.type == CPP_GREATER || token.type == CPP_EOF)
507 break;
509 len = cpp_token_len (&token);
510 if (total_len + len > capacity)
512 capacity = (capacity + len) * 2;
513 buffer = (unsigned char *) xrealloc (buffer, capacity);
516 if (token.flags & PREV_WHITE)
517 buffer[total_len++] = ' ';
519 total_len = cpp_spell_token (pfile, &token, &buffer[total_len]) - buffer;
522 if (token.type == CPP_EOF)
523 cpp_error (pfile, "missing terminating > character");
524 else
526 token_mem = _cpp_pool_alloc (&pfile->ident_pool, total_len);
527 memcpy (token_mem, buffer, total_len);
529 header->type = CPP_HEADER_NAME;
530 header->flags &= ~PREV_WHITE;
531 header->val.str.len = total_len;
532 header->val.str.text = token_mem;
535 free ((PTR) buffer);
536 return token.type == CPP_EOF;
539 /* Parse the header name of #include, #include_next, #import and
540 #pragma dependency. Returns zero on success. */
541 static int
542 parse_include (pfile, header)
543 cpp_reader *pfile;
544 cpp_token *header;
546 int is_pragma = pfile->directive == &dtable[T_PRAGMA];
547 const unsigned char *dir;
549 if (is_pragma)
550 dir = U"pragma dependency";
551 else
552 dir = pfile->directive->name;
554 /* Allow macro expansion. */
555 cpp_get_token (pfile, header);
556 if (header->type != CPP_STRING && header->type != CPP_HEADER_NAME)
558 if (header->type != CPP_LESS)
560 cpp_error (pfile, "#%s expects \"FILENAME\" or <FILENAME>", dir);
561 return 1;
563 if (glue_header_name (pfile, header))
564 return 1;
567 if (header->val.str.len == 0)
569 cpp_error (pfile, "empty file name in #%s", dir);
570 return 1;
573 if (!is_pragma)
575 check_eol (pfile);
576 /* Get out of macro context, if we are. */
577 skip_rest_of_line (pfile);
578 if (pfile->cb.include)
579 (*pfile->cb.include) (pfile, dir, header);
582 return 0;
585 static void
586 do_include (pfile)
587 cpp_reader *pfile;
589 cpp_token header;
591 if (!parse_include (pfile, &header))
592 _cpp_execute_include (pfile, &header, 0, 0);
595 static void
596 do_import (pfile)
597 cpp_reader *pfile;
599 cpp_token header;
601 if (!pfile->import_warning && CPP_OPTION (pfile, warn_import))
603 pfile->import_warning = 1;
604 cpp_warning (pfile,
605 "#import is obsolete, use an #ifndef wrapper in the header file");
608 if (!parse_include (pfile, &header))
609 _cpp_execute_include (pfile, &header, 1, 0);
612 static void
613 do_include_next (pfile)
614 cpp_reader *pfile;
616 cpp_token header;
618 if (!parse_include (pfile, &header))
619 _cpp_execute_include (pfile, &header, 0, 1);
622 /* Subroutine of do_line. Read possible flags after file name. LAST
623 is the last flag seen; 0 if this is the first flag. Return the flag
624 if it is valid, 0 at the end of the directive. Otherwise complain. */
626 static unsigned int
627 read_flag (pfile, last)
628 cpp_reader *pfile;
629 unsigned int last;
631 cpp_token token;
633 _cpp_lex_token (pfile, &token);
634 if (token.type == CPP_NUMBER && token.val.str.len == 1)
636 unsigned int flag = token.val.str.text[0] - '0';
638 if (flag > last && flag <= 4
639 && (flag != 4 || last == 3)
640 && (flag != 2 || last == 0))
641 return flag;
644 if (token.type != CPP_EOF)
645 cpp_error (pfile, "invalid flag \"%s\" in line directive",
646 cpp_token_as_text (pfile, &token));
647 return 0;
650 /* Another subroutine of do_line. Convert a number in STR, of length
651 LEN, to binary; store it in NUMP, and return 0 if the number was
652 well-formed, 1 if not. Temporary, hopefully. */
653 static int
654 strtoul_for_line (str, len, nump)
655 const U_CHAR *str;
656 unsigned int len;
657 unsigned long *nump;
659 unsigned long reg = 0;
660 U_CHAR c;
661 while (len--)
663 c = *str++;
664 if (!ISDIGIT (c))
665 return 1;
666 reg *= 10;
667 reg += c - '0';
669 *nump = reg;
670 return 0;
673 /* Interpret #line command.
674 Note that the filename string (if any) is treated as if it were an
675 include filename. That means no escape handling. */
677 static void
678 do_line (pfile)
679 cpp_reader *pfile;
681 cpp_buffer *buffer = pfile->buffer;
682 const char *filename = buffer->nominal_fname;
683 unsigned int lineno = buffer->lineno;
684 enum cpp_fc_reason reason = FC_RENAME;
685 unsigned long new_lineno;
686 unsigned int cap;
687 cpp_token token;
689 /* C99 raised the minimum limit on #line numbers. */
690 cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
692 /* #line commands expand macros. */
693 cpp_get_token (pfile, &token);
694 if (token.type != CPP_NUMBER
695 || strtoul_for_line (token.val.str.text, token.val.str.len, &new_lineno))
697 cpp_error (pfile, "\"%s\" after #line is not a positive integer",
698 cpp_token_as_text (pfile, &token));
699 return;
702 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
703 cpp_pedwarn (pfile, "line number out of range");
705 cpp_get_token (pfile, &token);
706 if (token.type == CPP_STRING)
708 char *fname;
709 unsigned int len;
711 /* FIXME: memory leak. */
712 len = token.val.str.len;
713 fname = xmalloc (len + 1);
714 memcpy (fname, token.val.str.text, len);
715 fname[len] = '\0';
717 _cpp_simplify_pathname (fname);
719 if (! pfile->state.line_extension)
720 check_eol (pfile);
721 else
723 int flag = 0, sysp = 0;
725 flag = read_flag (pfile, flag);
726 if (flag == 1)
728 reason = FC_ENTER;
729 flag = read_flag (pfile, flag);
731 else if (flag == 2)
733 reason = FC_LEAVE;
734 flag = read_flag (pfile, flag);
736 if (flag == 3)
738 sysp = 1;
739 flag = read_flag (pfile, flag);
740 if (flag == 4)
741 sysp = 2, read_flag (pfile, flag);
744 if (reason == FC_ENTER)
746 cpp_push_buffer (pfile, 0, 0, BUF_FAKE, fname);
747 buffer = pfile->buffer;
749 else if (reason == FC_LEAVE)
751 if (buffer->type != BUF_FAKE)
752 cpp_warning (pfile, "file \"%s\" left but not entered",
753 buffer->nominal_fname);
754 else
756 cpp_pop_buffer (pfile);
757 buffer = pfile->buffer;
758 if (strcmp (buffer->nominal_fname, fname))
759 cpp_warning (pfile, "expected to return to file \"%s\"",
760 buffer->nominal_fname);
761 if (buffer->lineno + 1 != new_lineno)
762 cpp_warning (pfile, "expected to return to line number %u",
763 buffer->lineno + 1);
764 if (buffer->sysp != sysp)
765 cpp_warning (pfile, "header flags for \"%s\" have changed",
766 buffer->nominal_fname);
769 buffer->sysp = sysp;
771 buffer->nominal_fname = fname;
773 else if (token.type != CPP_EOF)
775 cpp_error (pfile, "\"%s\" is not a valid filename",
776 cpp_token_as_text (pfile, &token));
777 return;
780 /* Our line number is incremented after the directive is processed. */
781 buffer->lineno = new_lineno - 1;
782 _cpp_do_file_change (pfile, reason, filename, lineno);
785 /* Arrange the file_change callback. */
786 void
787 _cpp_do_file_change (pfile, reason, from_file, from_lineno)
788 cpp_reader *pfile;
789 enum cpp_fc_reason reason;
790 const char *from_file;
791 unsigned int from_lineno;
793 if (pfile->cb.file_change)
795 cpp_file_change fc;
796 cpp_buffer *buffer = pfile->buffer;
798 fc.reason = reason;
799 fc.to.filename = buffer->nominal_fname;
800 fc.to.lineno = buffer->lineno + 1;
801 fc.sysp = buffer->sysp;
802 fc.externc = CPP_OPTION (pfile, cplusplus) && buffer->sysp == 2;
804 /* Caller doesn't need to handle FC_ENTER. */
805 if (reason == FC_ENTER)
807 if (buffer->prev)
809 from_file = buffer->prev->nominal_fname;
810 from_lineno = buffer->prev->lineno;
812 else
813 from_file = 0;
815 /* Special case for file "foo.i" with "# 1 foo.c" on first line. */
816 else if (reason == FC_RENAME && ! buffer->prev
817 && pfile->directive_pos.line == 1)
818 from_file = 0;
820 fc.from.filename = from_file;
821 fc.from.lineno = from_lineno;
822 pfile->cb.file_change (pfile, &fc);
827 * Report a warning or error detected by the program we are
828 * processing. Use the directive's tokens in the error message.
831 static void
832 do_diagnostic (pfile, code, print_dir)
833 cpp_reader *pfile;
834 enum error_type code;
835 int print_dir;
837 if (_cpp_begin_message (pfile, code, NULL, 0))
839 if (print_dir)
840 fprintf (stderr, "#%s ", pfile->directive->name);
841 pfile->state.prevent_expansion++;
842 cpp_output_line (pfile, stderr);
843 pfile->state.prevent_expansion--;
847 static void
848 do_error (pfile)
849 cpp_reader *pfile;
851 do_diagnostic (pfile, ERROR, 1);
854 static void
855 do_warning (pfile)
856 cpp_reader *pfile;
858 do_diagnostic (pfile, WARNING, 1);
861 /* Report program identification. */
863 static void
864 do_ident (pfile)
865 cpp_reader *pfile;
867 cpp_token str;
869 cpp_get_token (pfile, &str);
870 if (str.type != CPP_STRING)
871 cpp_error (pfile, "invalid #ident");
872 else if (pfile->cb.ident)
873 (*pfile->cb.ident) (pfile, &str.val.str);
875 check_eol (pfile);
878 /* Pragmata handling. We handle some of these, and pass the rest on
879 to the front end. C99 defines three pragmas and says that no macro
880 expansion is to be performed on them; whether or not macro
881 expansion happens for other pragmas is implementation defined.
882 This implementation never macro-expands the text after #pragma. */
884 /* Sub-handlers for the pragmas needing treatment here.
885 They return 1 if the token buffer is to be popped, 0 if not. */
886 struct pragma_entry
888 struct pragma_entry *next;
889 const char *name;
890 size_t len;
891 int isnspace;
892 union {
893 void (*handler) PARAMS ((cpp_reader *));
894 struct pragma_entry *space;
895 } u;
898 void
899 cpp_register_pragma (pfile, space, name, handler)
900 cpp_reader *pfile;
901 const char *space;
902 const char *name;
903 void (*handler) PARAMS ((cpp_reader *));
905 struct pragma_entry **x, *new;
906 size_t len;
908 x = &pfile->pragmas;
909 if (space)
911 struct pragma_entry *p = pfile->pragmas;
912 len = strlen (space);
913 while (p)
915 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
917 x = &p->u.space;
918 goto found;
920 p = p->next;
922 cpp_ice (pfile, "unknown #pragma namespace %s", space);
923 return;
926 found:
927 new = xnew (struct pragma_entry);
928 new->name = name;
929 new->len = strlen (name);
930 new->isnspace = 0;
931 new->u.handler = handler;
933 new->next = *x;
934 *x = new;
937 void
938 cpp_register_pragma_space (pfile, space)
939 cpp_reader *pfile;
940 const char *space;
942 struct pragma_entry *new;
943 const struct pragma_entry *p = pfile->pragmas;
944 size_t len = strlen (space);
946 while (p)
948 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
949 /* Multiple different callers are allowed to register the same
950 namespace. */
951 return;
952 p = p->next;
955 new = xnew (struct pragma_entry);
956 new->name = space;
957 new->len = len;
958 new->isnspace = 1;
959 new->u.space = 0;
961 new->next = pfile->pragmas;
962 pfile->pragmas = new;
965 void
966 _cpp_init_internal_pragmas (pfile)
967 cpp_reader *pfile;
969 /* top level */
970 cpp_register_pragma (pfile, 0, "poison", do_pragma_poison);
971 cpp_register_pragma (pfile, 0, "once", do_pragma_once);
973 /* GCC namespace */
974 cpp_register_pragma_space (pfile, "GCC");
976 cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
977 cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
978 cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
981 static void
982 do_pragma (pfile)
983 cpp_reader *pfile;
985 const struct pragma_entry *p;
986 cpp_token tok;
987 const cpp_hashnode *node;
988 const U_CHAR *name;
989 size_t len;
990 int drop = 0;
992 p = pfile->pragmas;
993 pfile->state.prevent_expansion++;
994 cpp_start_lookahead (pfile);
996 new_space:
997 cpp_get_token (pfile, &tok);
998 if (tok.type == CPP_NAME)
1000 node = tok.val.node;
1001 name = node->name;
1002 len = node->length;
1003 while (p)
1005 if (strlen (p->name) == len && !memcmp (p->name, name, len))
1007 if (p->isnspace)
1009 p = p->u.space;
1010 goto new_space;
1012 else
1014 (*p->u.handler) (pfile);
1015 drop = 1;
1016 break;
1019 p = p->next;
1023 cpp_stop_lookahead (pfile, drop);
1024 pfile->state.prevent_expansion--;
1026 if (!drop && pfile->cb.def_pragma)
1027 (*pfile->cb.def_pragma) (pfile);
1030 static void
1031 do_pragma_once (pfile)
1032 cpp_reader *pfile;
1034 cpp_warning (pfile, "#pragma once is obsolete");
1036 if (pfile->buffer->prev == NULL)
1037 cpp_warning (pfile, "#pragma once in main file");
1038 else
1039 _cpp_never_reread (pfile->buffer->inc);
1041 check_eol (pfile);
1044 static void
1045 do_pragma_poison (pfile)
1046 cpp_reader *pfile;
1048 /* Poison these symbols so that all subsequent usage produces an
1049 error message. */
1050 cpp_token tok;
1051 cpp_hashnode *hp;
1053 pfile->state.poisoned_ok = 1;
1054 for (;;)
1056 _cpp_lex_token (pfile, &tok);
1057 if (tok.type == CPP_EOF)
1058 break;
1059 if (tok.type != CPP_NAME)
1061 cpp_error (pfile, "invalid #pragma GCC poison directive");
1062 break;
1065 hp = tok.val.node;
1066 if (hp->flags & NODE_POISONED)
1067 continue;
1069 if (hp->type == NT_MACRO)
1070 cpp_warning (pfile, "poisoning existing macro \"%s\"", hp->name);
1071 _cpp_free_definition (hp);
1072 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
1074 pfile->state.poisoned_ok = 0;
1076 #if 0 /* Doesn't quite work yet. */
1077 if (tok.type == CPP_EOF && pfile->cb.poison)
1078 (*pfile->cb.poison) (pfile);
1079 #endif
1082 /* Mark the current header as a system header. This will suppress
1083 some categories of warnings (notably those from -pedantic). It is
1084 intended for use in system libraries that cannot be implemented in
1085 conforming C, but cannot be certain that their headers appear in a
1086 system include directory. To prevent abuse, it is rejected in the
1087 primary source file. */
1088 static void
1089 do_pragma_system_header (pfile)
1090 cpp_reader *pfile;
1092 cpp_buffer *buffer = pfile->buffer;
1094 if (buffer->prev == 0)
1095 cpp_warning (pfile, "#pragma system_header ignored outside include file");
1096 else
1097 cpp_make_system_header (pfile, 1, 0);
1099 check_eol (pfile);
1102 /* Check the modified date of the current include file against a specified
1103 file. Issue a diagnostic, if the specified file is newer. We use this to
1104 determine if a fixed header should be refixed. */
1105 static void
1106 do_pragma_dependency (pfile)
1107 cpp_reader *pfile;
1109 cpp_token header, msg;
1110 int ordering;
1112 if (parse_include (pfile, &header))
1113 return;
1115 ordering = _cpp_compare_file_date (pfile, &header);
1116 if (ordering < 0)
1117 cpp_warning (pfile, "cannot find source %s",
1118 cpp_token_as_text (pfile, &header));
1119 else if (ordering > 0)
1121 cpp_warning (pfile, "current file is older than %s",
1122 cpp_token_as_text (pfile, &header));
1123 cpp_start_lookahead (pfile);
1124 cpp_get_token (pfile, &msg);
1125 cpp_stop_lookahead (pfile, msg.type == CPP_EOF);
1126 if (msg.type != CPP_EOF)
1127 do_diagnostic (pfile, WARNING, 0);
1131 /* Check syntax is "(string-literal)". Returns 0 on success. */
1132 static int
1133 get__Pragma_string (pfile, string)
1134 cpp_reader *pfile;
1135 cpp_token *string;
1137 cpp_token paren;
1139 cpp_get_token (pfile, &paren);
1140 if (paren.type != CPP_OPEN_PAREN)
1141 return 1;
1143 cpp_get_token (pfile, string);
1144 if (string->type != CPP_STRING && string->type != CPP_WSTRING)
1145 return 1;
1147 cpp_get_token (pfile, &paren);
1148 return paren.type != CPP_CLOSE_PAREN;
1151 /* Returns a malloced buffer containing a destringized cpp_string by
1152 removing the first \ of \" and \\ sequences. */
1153 static unsigned char *
1154 destringize (in, len)
1155 const cpp_string *in;
1156 unsigned int *len;
1158 const unsigned char *src, *limit;
1159 unsigned char *dest, *result;
1161 dest = result = (unsigned char *) xmalloc (in->len);
1162 for (src = in->text, limit = src + in->len; src < limit;)
1164 /* We know there is a character following the backslash. */
1165 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1166 src++;
1167 *dest++ = *src++;
1170 *len = dest - result;
1171 return result;
1174 void
1175 _cpp_do__Pragma (pfile)
1176 cpp_reader *pfile;
1178 cpp_token string;
1179 unsigned char *buffer;
1180 unsigned int len;
1182 if (get__Pragma_string (pfile, &string))
1184 cpp_error (pfile, "_Pragma takes a parenthesized string literal");
1185 return;
1188 buffer = destringize (&string.val.str, &len);
1189 run_directive (pfile, T_PRAGMA, BUF_PRAGMA, (char *) buffer, len);
1190 free ((PTR) buffer);
1193 /* Just ignore #sccs, on systems where we define it at all. */
1194 #ifdef SCCS_DIRECTIVE
1195 static void
1196 do_sccs (pfile)
1197 cpp_reader *pfile ATTRIBUTE_UNUSED;
1200 #endif
1202 static void
1203 do_ifdef (pfile)
1204 cpp_reader *pfile;
1206 int skip = 1;
1208 if (! pfile->buffer->was_skipping)
1210 const cpp_hashnode *node = lex_macro_node (pfile);
1212 if (node)
1213 skip = node->type != NT_MACRO;
1215 if (node)
1216 check_eol (pfile);
1219 push_conditional (pfile, skip, T_IFDEF, 0);
1222 static void
1223 do_ifndef (pfile)
1224 cpp_reader *pfile;
1226 int skip = 1;
1227 const cpp_hashnode *node = 0;
1229 if (! pfile->buffer->was_skipping)
1231 node = lex_macro_node (pfile);
1232 if (node)
1233 skip = node->type == NT_MACRO;
1235 if (node)
1236 check_eol (pfile);
1239 push_conditional (pfile, skip, T_IFNDEF, node);
1242 /* #if cooperates with parse_defined to handle multiple-include
1243 optimisations. If macro expansions or identifiers appear in the
1244 expression, we cannot treat it as a controlling conditional, since
1245 their values could change in the future. */
1247 static void
1248 do_if (pfile)
1249 cpp_reader *pfile;
1251 int skip = 1;
1252 const cpp_hashnode *cmacro = 0;
1254 if (! pfile->buffer->was_skipping)
1256 /* Controlling macro of #if ! defined () */
1257 pfile->mi_ind_cmacro = 0;
1258 skip = _cpp_parse_expr (pfile) == 0;
1259 cmacro = pfile->mi_ind_cmacro;
1262 push_conditional (pfile, skip, T_IF, cmacro);
1265 /* Flip skipping state if appropriate and continue without changing
1266 if_stack; this is so that the error message for missing #endif's
1267 etc. will point to the original #if. */
1269 static void
1270 do_else (pfile)
1271 cpp_reader *pfile;
1273 cpp_buffer *buffer = pfile->buffer;
1274 struct if_stack *ifs = buffer->if_stack;
1276 if (ifs == NULL)
1277 cpp_error (pfile, "#else without #if");
1278 else
1280 if (ifs->type == T_ELSE)
1282 cpp_error (pfile, "#else after #else");
1283 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1284 "the conditional began here");
1286 ifs->type = T_ELSE;
1288 /* Buffer->was_skipping is 1 if all conditionals in this chain
1289 have been false, 2 if a conditional has been true. */
1290 if (! ifs->was_skipping && buffer->was_skipping != 2)
1291 buffer->was_skipping = ! buffer->was_skipping;
1293 /* Invalidate any controlling macro. */
1294 ifs->mi_cmacro = 0;
1297 check_eol (pfile);
1300 /* handle a #elif directive by not changing if_stack either. see the
1301 comment above do_else. */
1303 static void
1304 do_elif (pfile)
1305 cpp_reader *pfile;
1307 cpp_buffer *buffer = pfile->buffer;
1308 struct if_stack *ifs = buffer->if_stack;
1310 if (ifs == NULL)
1311 cpp_error (pfile, "#elif without #if");
1312 else
1314 if (ifs->type == T_ELSE)
1316 cpp_error (pfile, "#elif after #else");
1317 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1318 "the conditional began here");
1320 ifs->type = T_ELIF;
1322 /* Don't evaluate #elif if our higher level is skipping. */
1323 if (! ifs->was_skipping)
1325 /* Buffer->was_skipping is 1 if all conditionals in this
1326 chain have been false, 2 if a conditional has been true. */
1327 if (buffer->was_skipping == 1)
1328 buffer->was_skipping = ! _cpp_parse_expr (pfile);
1329 else
1330 buffer->was_skipping = 2;
1332 /* Invalidate any controlling macro. */
1333 ifs->mi_cmacro = 0;
1338 /* #endif pops the if stack and resets pfile->skipping. */
1340 static void
1341 do_endif (pfile)
1342 cpp_reader *pfile;
1344 cpp_buffer *buffer = pfile->buffer;
1345 struct if_stack *ifs = buffer->if_stack;
1347 if (ifs == NULL)
1348 cpp_error (pfile, "#endif without #if");
1349 else
1351 /* If potential control macro, we go back outside again. */
1352 if (ifs->next == 0 && ifs->mi_cmacro)
1354 pfile->mi_state = MI_OUTSIDE;
1355 pfile->mi_cmacro = ifs->mi_cmacro;
1358 buffer->if_stack = ifs->next;
1359 buffer->was_skipping = ifs->was_skipping;
1360 obstack_free (pfile->buffer_ob, ifs);
1363 check_eol (pfile);
1366 /* Push an if_stack entry and set pfile->skipping accordingly.
1367 If this is a #ifndef starting at the beginning of a file,
1368 CMACRO is the macro name tested by the #ifndef. */
1370 static void
1371 push_conditional (pfile, skip, type, cmacro)
1372 cpp_reader *pfile;
1373 int skip;
1374 int type;
1375 const cpp_hashnode *cmacro;
1377 struct if_stack *ifs;
1378 cpp_buffer *buffer = pfile->buffer;
1380 ifs = xobnew (pfile->buffer_ob, struct if_stack);
1381 ifs->pos = pfile->directive_pos;
1382 ifs->next = buffer->if_stack;
1383 ifs->was_skipping = buffer->was_skipping;
1384 ifs->type = type;
1385 if (pfile->mi_state == MI_OUTSIDE && pfile->mi_cmacro == 0)
1386 ifs->mi_cmacro = cmacro;
1387 else
1388 ifs->mi_cmacro = 0;
1390 buffer->was_skipping = skip;
1391 buffer->if_stack = ifs;
1394 /* Read the tokens of the answer into the macro pool. Only commit the
1395 memory if we intend it as permanent storage, i.e. the #assert case.
1396 Returns 0 on success. */
1398 static int
1399 parse_answer (pfile, answerp, type)
1400 cpp_reader *pfile;
1401 struct answer **answerp;
1402 int type;
1404 cpp_token paren, *token;
1405 struct answer *answer;
1407 if (POOL_FRONT (&pfile->macro_pool) + sizeof (struct answer) >
1408 POOL_LIMIT (&pfile->macro_pool))
1409 _cpp_next_chunk (&pfile->macro_pool, sizeof (struct answer), 0);
1410 answer = (struct answer *) POOL_FRONT (&pfile->macro_pool);
1411 answer->count = 0;
1413 /* In a conditional, it is legal to not have an open paren. We
1414 should save the following token in this case. */
1415 if (type == T_IF)
1416 cpp_start_lookahead (pfile);
1417 cpp_get_token (pfile, &paren);
1418 if (type == T_IF)
1419 cpp_stop_lookahead (pfile, paren.type == CPP_OPEN_PAREN);
1421 /* If not a paren, see if we're OK. */
1422 if (paren.type != CPP_OPEN_PAREN)
1424 /* In a conditional no answer is a test for any answer. It
1425 could be followed by any token. */
1426 if (type == T_IF)
1427 return 0;
1429 /* #unassert with no answer is valid - it removes all answers. */
1430 if (type == T_UNASSERT && paren.type == CPP_EOF)
1431 return 0;
1433 cpp_error (pfile, "missing '(' after predicate");
1434 return 1;
1437 for (;;)
1439 token = &answer->first[answer->count];
1440 /* Check we have room for the token. */
1441 if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
1443 _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1444 (unsigned char **) &answer);
1445 token = &answer->first[answer->count];
1448 cpp_get_token (pfile, token);
1449 if (token->type == CPP_CLOSE_PAREN)
1450 break;
1452 if (token->type == CPP_EOF)
1454 cpp_error (pfile, "missing ')' to complete answer");
1455 return 1;
1457 answer->count++;
1460 if (answer->count == 0)
1462 cpp_error (pfile, "predicate's answer is empty");
1463 return 1;
1466 /* Drop whitespace at start. */
1467 answer->first->flags &= ~PREV_WHITE;
1468 *answerp = answer;
1470 if (type == T_ASSERT || type == T_UNASSERT)
1471 check_eol (pfile);
1472 return 0;
1475 /* Parses an assertion, returning a pointer to the hash node of the
1476 predicate, or 0 on error. If an answer was supplied, it is placed
1477 in ANSWERP, otherwise it is set to 0. */
1478 static cpp_hashnode *
1479 parse_assertion (pfile, answerp, type)
1480 cpp_reader *pfile;
1481 struct answer **answerp;
1482 int type;
1484 cpp_hashnode *result = 0;
1485 cpp_token predicate;
1487 /* We don't expand predicates or answers. */
1488 pfile->state.prevent_expansion++;
1490 *answerp = 0;
1491 cpp_get_token (pfile, &predicate);
1492 if (predicate.type == CPP_EOF)
1493 cpp_error (pfile, "assertion without predicate");
1494 else if (predicate.type != CPP_NAME)
1495 cpp_error (pfile, "predicate must be an identifier");
1496 else if (parse_answer (pfile, answerp, type) == 0)
1498 unsigned int len = predicate.val.node->length;
1499 unsigned char *sym = alloca (len + 1);
1501 /* Prefix '#' to get it out of macro namespace. */
1502 sym[0] = '#';
1503 memcpy (sym + 1, predicate.val.node->name, len);
1504 result = cpp_lookup (pfile, sym, len + 1);
1507 pfile->state.prevent_expansion--;
1508 return result;
1511 /* Returns a pointer to the pointer to the answer in the answer chain,
1512 or a pointer to NULL if the answer is not in the chain. */
1513 static struct answer **
1514 find_answer (node, candidate)
1515 cpp_hashnode *node;
1516 const struct answer *candidate;
1518 unsigned int i;
1519 struct answer **result;
1521 for (result = &node->value.answers; *result; result = &(*result)->next)
1523 struct answer *answer = *result;
1525 if (answer->count == candidate->count)
1527 for (i = 0; i < answer->count; i++)
1528 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1529 break;
1531 if (i == answer->count)
1532 break;
1536 return result;
1539 /* Test an assertion within a preprocessor conditional. Returns
1540 non-zero on failure, zero on success. On success, the result of
1541 the test is written into VALUE. */
1543 _cpp_test_assertion (pfile, value)
1544 cpp_reader *pfile;
1545 int *value;
1547 struct answer *answer;
1548 cpp_hashnode *node;
1550 node = parse_assertion (pfile, &answer, T_IF);
1551 if (node)
1552 *value = (node->type == NT_ASSERTION &&
1553 (answer == 0 || *find_answer (node, answer) != 0));
1555 /* We don't commit the memory for the answer - it's temporary only. */
1556 return node == 0;
1559 static void
1560 do_assert (pfile)
1561 cpp_reader *pfile;
1563 struct answer *new_answer;
1564 cpp_hashnode *node;
1566 node = parse_assertion (pfile, &new_answer, T_ASSERT);
1567 if (node)
1569 /* Place the new answer in the answer list. First check there
1570 is not a duplicate. */
1571 new_answer->next = 0;
1572 if (node->type == NT_ASSERTION)
1574 if (*find_answer (node, new_answer))
1576 cpp_warning (pfile, "\"%s\" re-asserted", node->name + 1);
1577 return;
1579 new_answer->next = node->value.answers;
1581 node->type = NT_ASSERTION;
1582 node->value.answers = new_answer;
1583 POOL_COMMIT (&pfile->macro_pool, (sizeof (struct answer)
1584 + (new_answer->count - 1)
1585 * sizeof (cpp_token)));
1589 static void
1590 do_unassert (pfile)
1591 cpp_reader *pfile;
1593 cpp_hashnode *node;
1594 struct answer *answer;
1596 node = parse_assertion (pfile, &answer, T_UNASSERT);
1597 /* It isn't an error to #unassert something that isn't asserted. */
1598 if (node && node->type == NT_ASSERTION)
1600 if (answer)
1602 struct answer **p = find_answer (node, answer), *temp;
1604 /* Remove the answer from the list. */
1605 temp = *p;
1606 if (temp)
1607 *p = temp->next;
1609 /* Did we free the last answer? */
1610 if (node->value.answers == 0)
1611 node->type = NT_VOID;
1613 else
1614 _cpp_free_definition (node);
1617 /* We don't commit the memory for the answer - it's temporary only. */
1620 /* These are for -D, -U, -A. */
1622 /* Process the string STR as if it appeared as the body of a #define.
1623 If STR is just an identifier, define it with value 1.
1624 If STR has anything after the identifier, then it should
1625 be identifier=definition. */
1627 void
1628 cpp_define (pfile, str)
1629 cpp_reader *pfile;
1630 const char *str;
1632 char *buf, *p;
1633 size_t count;
1635 /* Copy the entire option so we can modify it.
1636 Change the first "=" in the string to a space. If there is none,
1637 tack " 1" on the end. */
1639 /* Length including the null. */
1640 count = strlen (str);
1641 buf = (char *) alloca (count + 2);
1642 memcpy (buf, str, count);
1644 p = strchr (str, '=');
1645 if (p)
1646 buf[p - str] = ' ';
1647 else
1649 buf[count++] = ' ';
1650 buf[count++] = '1';
1653 run_directive (pfile, T_DEFINE, BUF_CL_OPTION, buf, count);
1656 /* Slight variant of the above for use by initialize_builtins. */
1657 void
1658 _cpp_define_builtin (pfile, str)
1659 cpp_reader *pfile;
1660 const char *str;
1662 run_directive (pfile, T_DEFINE, BUF_BUILTIN, str, strlen (str));
1665 /* Process MACRO as if it appeared as the body of an #undef. */
1666 void
1667 cpp_undef (pfile, macro)
1668 cpp_reader *pfile;
1669 const char *macro;
1671 run_directive (pfile, T_UNDEF, BUF_CL_OPTION, macro, strlen (macro));
1674 /* Process the string STR as if it appeared as the body of a #assert. */
1675 void
1676 cpp_assert (pfile, str)
1677 cpp_reader *pfile;
1678 const char *str;
1680 handle_assertion (pfile, str, T_ASSERT);
1683 /* Process STR as if it appeared as the body of an #unassert. */
1684 void
1685 cpp_unassert (pfile, str)
1686 cpp_reader *pfile;
1687 const char *str;
1689 handle_assertion (pfile, str, T_UNASSERT);
1692 /* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
1693 static void
1694 handle_assertion (pfile, str, type)
1695 cpp_reader *pfile;
1696 const char *str;
1697 int type;
1699 size_t count = strlen (str);
1700 const char *p = strchr (str, '=');
1702 if (p)
1704 /* Copy the entire option so we can modify it. Change the first
1705 "=" in the string to a '(', and tack a ')' on the end. */
1706 char *buf = (char *) alloca (count + 1);
1708 memcpy (buf, str, count);
1709 buf[p - str] = '(';
1710 buf[count++] = ')';
1711 str = buf;
1714 run_directive (pfile, type, BUF_CL_OPTION, str, count);
1717 /* Push a new buffer on the buffer stack. Returns the new buffer; it
1718 doesn't fail. It does not generate a file change call back; that
1719 is the responsibility of the caller. */
1720 cpp_buffer *
1721 cpp_push_buffer (pfile, buffer, len, type, filename)
1722 cpp_reader *pfile;
1723 const U_CHAR *buffer;
1724 size_t len;
1725 enum cpp_buffer_type type;
1726 const char *filename;
1728 cpp_buffer *new = xobnew (pfile->buffer_ob, cpp_buffer);
1730 if (type == BUF_FAKE)
1732 /* A copy of the current buffer, just with a new name and type. */
1733 memcpy (new, pfile->buffer, sizeof (cpp_buffer));
1734 new->type = BUF_FAKE;
1736 else
1738 if (type == BUF_BUILTIN)
1739 filename = _("<builtin>");
1740 else if (type == BUF_CL_OPTION)
1741 filename = _("<command line>");
1742 else if (type == BUF_PRAGMA)
1743 filename = "<_Pragma>";
1745 /* Clears, amongst other things, if_stack and mi_cmacro. */
1746 memset (new, 0, sizeof (cpp_buffer));
1748 new->line_base = new->buf = new->cur = buffer;
1749 new->rlimit = buffer + len;
1750 new->sysp = 0;
1752 /* No read ahead or extra char initially. */
1753 new->read_ahead = EOF;
1754 new->extra_char = EOF;
1756 /* Preprocessed files, builtins, _Pragma and command line
1757 options don't do trigraph and escaped newline processing. */
1758 new->from_stage3 = type != BUF_FILE || CPP_OPTION (pfile, preprocessed);
1760 pfile->lexer_pos.output_line = 1;
1763 new->nominal_fname = filename;
1764 new->type = type;
1765 new->prev = pfile->buffer;
1766 new->pfile = pfile;
1767 new->include_stack_listed = 0;
1768 new->lineno = 1;
1770 pfile->state.next_bol = 1;
1771 pfile->buffer_stack_depth++;
1772 pfile->buffer = new;
1774 return new;
1777 /* If called from do_line, pops a single buffer. Otherwise pops all
1778 buffers until a real file is reached. Generates appropriate
1779 call-backs. */
1780 cpp_buffer *
1781 cpp_pop_buffer (pfile)
1782 cpp_reader *pfile;
1784 cpp_buffer *buffer;
1785 struct if_stack *ifs;
1787 for (;;)
1789 buffer = pfile->buffer;
1790 /* Walk back up the conditional stack till we reach its level at
1791 entry to this file, issuing error messages. */
1792 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
1793 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1794 "unterminated #%s", dtable[ifs->type].name);
1796 if (buffer->type == BUF_FAKE)
1797 buffer->prev->cur = buffer->cur;
1798 else if (buffer->type == BUF_FILE)
1799 _cpp_pop_file_buffer (pfile, buffer);
1801 pfile->buffer = buffer->prev;
1802 pfile->buffer_stack_depth--;
1804 /* Callbacks only generated for faked or real files. */
1805 if (buffer->type != BUF_FILE && buffer->type != BUF_FAKE)
1806 break;
1808 /* No callback for EOF of last file. */
1809 if (!pfile->buffer)
1810 break;
1812 /* do_line does its own call backs. */
1813 pfile->buffer->include_stack_listed = 0;
1814 if (pfile->directive == &dtable[T_LINE])
1815 break;
1817 _cpp_do_file_change (pfile, FC_LEAVE, buffer->nominal_fname,
1818 buffer->lineno);
1819 if (pfile->buffer->type == BUF_FILE)
1820 break;
1822 cpp_warning (pfile, "file \"%s\" entered but not left",
1823 buffer->nominal_fname);
1826 obstack_free (pfile->buffer_ob, buffer);
1827 return pfile->buffer;
1830 #define obstack_chunk_alloc xmalloc
1831 #define obstack_chunk_free free
1832 void
1833 _cpp_init_stacks (pfile)
1834 cpp_reader *pfile;
1836 int i;
1837 cpp_hashnode *node;
1839 pfile->buffer_ob = xnew (struct obstack);
1840 obstack_init (pfile->buffer_ob);
1842 /* Register the directives. */
1843 for (i = 1; i < N_DIRECTIVES; i++)
1845 node = cpp_lookup (pfile, dtable[i - 1].name, dtable[i - 1].length);
1846 node->directive_index = i;
1850 void
1851 _cpp_cleanup_stacks (pfile)
1852 cpp_reader *pfile;
1854 obstack_free (pfile->buffer_ob, 0);
1855 free (pfile->buffer_ob);