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
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. */
31 /* Stack of conditionals currently in progress
32 (including both successful and failing conditionals). */
36 struct if_stack *next;
37 unsigned int lineno; /* line number where condition started */
38 unsigned int colno; /* and column */
39 int was_skipping; /* value of pfile->skipping before this if */
40 const cpp_hashnode *cmacro; /* macro name for #ifndef around entire file */
41 int type; /* type of last directive seen in this group */
44 /* Forward declarations. */
46 static void validate_else PARAMS ((cpp_reader *, const U_CHAR *));
47 static int parse_include PARAMS ((cpp_reader *, const U_CHAR *, int,
48 const U_CHAR **, unsigned int *,
50 static void push_conditional PARAMS ((cpp_reader *, int, int,
51 const cpp_hashnode *));
52 static void pass_thru_directive PARAMS ((cpp_reader *));
53 static int read_line_number PARAMS ((cpp_reader *, int *));
54 static int strtoul_for_line PARAMS ((const U_CHAR *, unsigned int,
57 static const cpp_hashnode *
58 parse_ifdef PARAMS ((cpp_reader *, const U_CHAR *));
59 static const cpp_hashnode *
60 detect_if_not_defined PARAMS ((cpp_reader *));
62 get_define_node PARAMS ((cpp_reader *));
63 static void dump_macro_name PARAMS ((cpp_reader *, cpp_hashnode *));
64 static void unwind_if_stack PARAMS ((cpp_reader *, cpp_buffer *));
67 #define str_match(sym, len, str) \
68 ((len) == (sizeof (str) - 1) && !ustrncmp ((sym), U(str), sizeof (str) - 1))
70 /* This is the table of directive handlers. It is ordered by
71 frequency of occurrence; the numbers at the end are directive
72 counts from all the source code I have lying around (egcs and libc
73 CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
76 The entries with a dash and a name after the count are extensions,
77 of which all but #warning and #include_next are deprecated. The name
78 is where the extension appears to have come from. */
80 /* #sccs is not always recognized. */
82 # define SCCS_ENTRY D(sccs, T_SCCS, EXTENSION, 0)
84 # define SCCS_ENTRY /* nothing */
87 #define DIRECTIVE_TABLE \
88 D(define, T_DEFINE = 0, KANDR, COMMENTS) /* 270554 */ \
89 D(include, T_INCLUDE, KANDR, EXPAND | INCL) /* 52262 */ \
90 D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \
91 D(ifdef, T_IFDEF, KANDR, COND) /* 22000 */ \
92 D(if, T_IF, KANDR, COND | EXPAND) /* 18162 */ \
93 D(else, T_ELSE, KANDR, COND) /* 9863 */ \
94 D(ifndef, T_IFNDEF, KANDR, COND) /* 9675 */ \
95 D(undef, T_UNDEF, KANDR, 0) /* 4837 */ \
96 D(line, T_LINE, KANDR, EXPAND) /* 2465 */ \
97 D(elif, T_ELIF, KANDR, COND | EXPAND) /* 610 */ \
98 D(error, T_ERROR, STDC89, 0) /* 475 */ \
99 D(pragma, T_PRAGMA, STDC89, 0) /* 195 */ \
100 D(warning, T_WARNING, EXTENSION, 0) /* 22 GNU */ \
101 D(include_next, T_INCLUDE_NEXT, EXTENSION, EXPAND | INCL) /* 19 GNU */ \
102 D(ident, T_IDENT, EXTENSION, 0) /* 11 SVR4 */ \
103 D(import, T_IMPORT, EXTENSION, EXPAND | INCL) /* 0 ObjC */ \
104 D(assert, T_ASSERT, EXTENSION, 0) /* 0 SVR4 */ \
105 D(unassert, T_UNASSERT, EXTENSION, 0) /* 0 SVR4 */ \
106 SCCS_ENTRY /* 0 SVR2? */
108 /* Use the table to generate a series of prototypes, an enum for the
109 directive names, and an array of directive handlers. */
111 /* The directive-processing functions are declared to return int
112 instead of void, because some old compilers have trouble with
113 pointers to functions returning void. */
115 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
116 #define D(name, t, o, f) static int CONCAT2(do_,name) PARAMS ((cpp_reader *));
120 #define D(n, tag, o, f) tag,
128 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
129 #define D(name, t, origin, flags) \
130 { CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
131 sizeof STRINGX(name) - 1, origin, flags },
132 static const struct directive dtable[] =
137 #undef DIRECTIVE_TABLE
139 /* Check if a token's name matches that of a known directive. Put in
140 this file to save exporting dtable and other unneeded information. */
141 const struct directive *
142 _cpp_check_directive (pfile, token, bol)
144 const cpp_token *token;
149 /* If we are rescanning preprocessed input, don't obey any directives
151 if (CPP_OPTION (pfile, preprocessed))
154 for (i = 0; i < N_DIRECTIVES; i++)
155 if (pfile->spec_nodes->dirs[i] == token->val.node)
157 /* If we are skipping a failed conditional group, all non-conditional
158 directives are ignored. */
159 if (pfile->skipping && !(dtable[i].flags & COND))
162 /* In -traditional mode, a directive is ignored unless its #
164 if (!bol && dtable[i].origin == KANDR && CPP_WTRADITIONAL (pfile))
165 cpp_warning (pfile, "traditional C ignores #%s with the # indented",
168 /* Issue -pedantic warnings for extended directives. */
169 if (CPP_PEDANTIC (pfile) && dtable[i].origin == EXTENSION)
170 cpp_pedwarn (pfile, "ISO C does not allow #%s", dtable[i].name);
172 /* -Wtraditional gives warnings about directives with inappropriate
174 if (bol && dtable[i].origin != KANDR && CPP_WTRADITIONAL (pfile))
176 "suggest hiding #%s from traditional C with an indented #",
185 const struct directive *
186 _cpp_check_linemarker (pfile, token, bol)
188 const cpp_token *token ATTRIBUTE_UNUSED;
191 /* # followed by a number is equivalent to #line. Do not recognize
192 this form in assembly language source files or skipped
193 conditional groups. Complain about this form if we're being
194 pedantic, but not if this is regurgitated input (preprocessed or
195 fed back in by the C++ frontend). */
196 if (pfile->skipping || CPP_OPTION (pfile, lang_asm))
199 if (CPP_PEDANTIC (pfile) && CPP_BUFFER (pfile)->inc
200 && ! CPP_OPTION (pfile, preprocessed))
201 cpp_pedwarn (pfile, "# followed by integer");
203 /* In -traditional mode, a directive is ignored unless its #
205 if (!bol && CPP_WTRADITIONAL (pfile))
206 cpp_warning (pfile, "traditional C ignores #%s with the # indented",
207 dtable[T_LINE].name);
209 return &dtable[T_LINE];
213 dump_macro_name (pfile, node)
217 CPP_PUTS (pfile, "#define ", sizeof "#define " - 1);
218 CPP_PUTS (pfile, node->name, node->length);
221 /* Pass the current directive through to the output file. */
223 pass_thru_directive (pfile)
226 /* XXX This output may be genuinely needed even when there is no
228 if (! pfile->printer)
230 /* Flush first (temporary). */
231 cpp_output_tokens (pfile, pfile->printer, pfile->token_list.line);
232 _cpp_dump_list (pfile, &pfile->token_list, pfile->first_directive_token, 1);
235 static cpp_hashnode *
236 get_define_node (pfile)
240 const cpp_token *token;
242 /* Skip any -C comments. */
243 while ((token = _cpp_get_token (pfile))->type == CPP_COMMENT)
246 if (token->type != CPP_NAME)
248 cpp_error_with_line (pfile, token->line, token->col,
249 "macro names must be identifiers");
253 /* That identifier is not allowed to be "defined". See predefined
254 macro names (6.10.8.4). */
255 node = token->val.node;
257 if (node == pfile->spec_nodes->n_defined)
259 cpp_error_with_line (pfile, pfile->token_list.line, token->col,
260 "\"defined\" is not a legal macro name");
264 /* Check for poisoned identifiers now. */
265 if (node->type == T_POISON)
267 cpp_error (pfile, "attempt to use poisoned \"%s\"", node->name);
274 /* Process a #define command. */
281 if ((node = get_define_node (pfile)))
282 if (_cpp_create_definition (pfile, node))
284 if (CPP_OPTION (pfile, debug_output)
285 || CPP_OPTION (pfile, dump_macros) == dump_definitions)
286 _cpp_dump_definition (pfile, node);
287 else if (CPP_OPTION (pfile, dump_macros) == dump_names)
288 dump_macro_name (pfile, node);
293 /* Remove the definition of a symbol from the symbol table. */
298 cpp_hashnode *node = get_define_node (pfile);
300 if (_cpp_get_token (pfile)->type != CPP_EOF)
301 cpp_pedwarn (pfile, "junk on line after #undef");
303 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier
304 is not currently defined as a macro name. */
305 if (node && node->type != T_VOID)
307 /* If we are generating additional info for debugging (with -g) we
308 need to pass through all effective #undef commands. */
309 if (CPP_OPTION (pfile, debug_output)
310 || CPP_OPTION (pfile, dump_macros) == dump_definitions
311 || CPP_OPTION (pfile, dump_macros) == dump_names)
312 pass_thru_directive (pfile);
314 if (node->type != T_MACRO)
315 cpp_warning (pfile, "undefining \"%s\"", node->name);
317 _cpp_free_definition (node);
325 /* Handle #include and #import. */
328 parse_include (pfile, dir, trail, strp, lenp, abp)
336 const cpp_token *name = _cpp_get_token (pfile);
338 if (name->type != CPP_STRING && name->type != CPP_HEADER_NAME)
340 if (name->type == CPP_LESS)
341 name = _cpp_glue_header_name (pfile);
344 cpp_error (pfile, "#%s expects \"FILENAME\" or <FILENAME>", dir);
348 if (name->val.str.len == 0)
350 cpp_error (pfile, "empty file name in #%s", dir);
354 if (!trail && _cpp_get_token (pfile)->type != CPP_EOF)
355 cpp_error (pfile, "junk at end of #%s", dir);
357 *lenp = name->val.str.len;
358 *strp = name->val.str.text;
359 *abp = (name->type == CPP_HEADER_NAME);
371 if (parse_include (pfile, dtable[T_INCLUDE].name, 0, &str, &len, &ab))
374 _cpp_execute_include (pfile, str, len, 0, 0, ab);
375 if (CPP_OPTION (pfile, dump_includes))
376 pass_thru_directive (pfile);
388 if (CPP_OPTION (pfile, warn_import)
389 && !CPP_IN_SYSTEM_HEADER (pfile) && !pfile->import_warning)
391 pfile->import_warning = 1;
393 "#import is obsolete, use an #ifndef wrapper in the header file");
396 if (parse_include (pfile, dtable[T_IMPORT].name, 0, &str, &len, &ab))
399 _cpp_execute_include (pfile, str, len, 1, 0, ab);
400 if (CPP_OPTION (pfile, dump_includes))
401 pass_thru_directive (pfile);
406 do_include_next (pfile)
411 struct file_name_list *search_start = 0;
414 if (parse_include (pfile, dtable[T_INCLUDE_NEXT].name, 0, &str, &len, &ab))
417 /* For #include_next, skip in the search path past the dir in which
418 the current file was found. If this is the last directory in the
419 search path, don't include anything. If the current file was
420 specified with an absolute path, use the normal search logic. If
421 this is the primary source file, use the normal search logic and
422 generate a warning. */
423 if (CPP_PREV_BUFFER (CPP_BUFFER (pfile)))
425 if (CPP_BUFFER (pfile)->inc->foundhere)
427 search_start = CPP_BUFFER (pfile)->inc->foundhere->next;
433 cpp_warning (pfile, "#include_next in primary source file");
435 _cpp_execute_include (pfile, str, len, 0, search_start, ab);
436 if (CPP_OPTION (pfile, dump_includes))
437 pass_thru_directive (pfile);
442 /* Subroutine of do_line. Read next token from PFILE without adding it to
443 the output buffer. If it is a number between 1 and 4, store it in *NUM
444 and return 1; otherwise, return 0 and complain if we aren't at the end
448 read_line_number (pfile, num)
452 const cpp_token *tok = _cpp_get_token (pfile);
453 enum cpp_ttype type = tok->type;
454 const U_CHAR *p = tok->val.str.text;
455 unsigned int len = tok->val.str.len;
457 if (type == CPP_NUMBER && len == 1 && p[0] >= '1' && p[0] <= '4')
465 cpp_error (pfile, "invalid format #line");
470 /* Another subroutine of do_line. Convert a number in STR, of length
471 LEN, to binary; store it in NUMP, and return 0 if the number was
472 legal, 1 if not. Temporary, hopefully. */
474 strtoul_for_line (str, len, nump)
479 unsigned long reg = 0;
493 /* Interpret #line command.
494 Note that the filename string (if any) is treated as if it were an
495 include filename. That means no escape handling. */
501 cpp_buffer *ip = CPP_BUFFER (pfile);
502 unsigned long new_lineno, old_lineno;
503 /* C99 raised the minimum limit on #line numbers. */
504 unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
505 int action_number = 0;
510 const cpp_token *tok;
512 tok = _cpp_get_token (pfile);
514 str = tok->val.str.text;
515 len = tok->val.str.len;
517 if (type != CPP_NUMBER || strtoul_for_line (str, len, &new_lineno))
519 cpp_error (pfile, "token after #line is not a positive integer");
523 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
524 cpp_pedwarn (pfile, "line number out of range");
526 old_lineno = ip->lineno;
527 ip->lineno = new_lineno;
528 tok = _cpp_get_token (pfile);
530 str = tok->val.str.text;
531 len = tok->val.str.len;
535 else if (type != CPP_STRING)
537 cpp_error (pfile, "second token after #line is not a string");
538 ip->lineno = old_lineno; /* malformed #line should have no effect */
542 fname = alloca (len + 1);
543 memcpy (fname, str, len);
546 if (strcmp (fname, ip->nominal_fname))
548 if (!strcmp (fname, ip->inc->name))
549 ip->nominal_fname = ip->inc->name;
551 ip->nominal_fname = _cpp_fake_include (pfile, fname);
554 if (read_line_number (pfile, &action_number) == 0)
557 if (CPP_PEDANTIC (pfile))
558 cpp_pedwarn (pfile, "garbage at end of #line");
560 /* This is somewhat questionable: change the buffer stack
561 depth so that output_line_command thinks we've stacked
563 if (action_number == 1)
565 pfile->buffer_stack_depth++;
566 cpp_make_system_header (pfile, ip, 0);
567 read_line_number (pfile, &action_number);
569 else if (action_number == 2)
571 pfile->buffer_stack_depth--;
572 cpp_make_system_header (pfile, ip, 0);
573 read_line_number (pfile, &action_number);
575 if (action_number == 3)
577 cpp_make_system_header (pfile, ip, 1);
578 read_line_number (pfile, &action_number);
580 if (action_number == 4)
582 cpp_make_system_header (pfile, ip, 2);
583 read_line_number (pfile, &action_number);
592 * Report an error detected by the program we are processing.
593 * Use the text of the line in the error message.
594 * (We use error because it prints the filename & line#.)
601 U_CHAR *text, *limit;
604 _cpp_dump_list (pfile, &pfile->token_list, pfile->first_directive_token, 0);
605 limit = pfile->limit;
607 cpp_error (pfile, "%.*s", (int)(limit - text), text);
613 * Report a warning detected by the program we are processing.
614 * Use the text of the line in the warning message, then continue.
621 U_CHAR *text, *limit;
624 _cpp_dump_list (pfile, &pfile->token_list, pfile->first_directive_token, 0);
625 limit = pfile->limit;
627 cpp_warning (pfile, "%.*s", (int)(limit - text), text);
631 /* Report program identification. */
637 /* Next token should be a string constant. */
638 if (_cpp_get_token (pfile)->type == CPP_STRING)
639 /* And then a newline. */
640 if (_cpp_get_token (pfile)->type == CPP_EOF)
642 /* Good - ship it. */
643 pass_thru_directive (pfile);
647 cpp_error (pfile, "invalid #ident");
651 /* Pragmata handling. We handle some of these, and pass the rest on
652 to the front end. C99 defines three pragmas and says that no macro
653 expansion is to be performed on them; whether or not macro
654 expansion happens for other pragmas is implementation defined.
655 This implementation never macro-expands the text after #pragma.
657 We currently do not support the _Pragma operator. Support for that
658 has to be coordinated with the front end. Proposed implementation:
659 both #pragma blah blah and _Pragma("blah blah") become
660 __builtin_pragma(blah blah) and we teach the parser about that. */
662 /* Sub-handlers for the pragmas needing treatment here.
663 They return 1 if the token buffer is to be popped, 0 if not. */
667 int (*handler) PARAMS ((cpp_reader *));
670 static int pragma_dispatch
671 PARAMS ((cpp_reader *, const struct pragma_entry *, const cpp_hashnode *));
672 static int do_pragma_once PARAMS ((cpp_reader *));
673 static int do_pragma_implementation PARAMS ((cpp_reader *));
674 static int do_pragma_poison PARAMS ((cpp_reader *));
675 static int do_pragma_system_header PARAMS ((cpp_reader *));
676 static int do_pragma_gcc PARAMS ((cpp_reader *));
677 static int do_pragma_dependency PARAMS ((cpp_reader *));
679 static const struct pragma_entry top_pragmas[] =
681 {"once", do_pragma_once},
682 {"implementation", do_pragma_implementation},
683 {"poison", do_pragma_poison},
684 {"GCC", do_pragma_gcc},
688 static const struct pragma_entry gcc_pragmas[] =
690 {"implementation", do_pragma_implementation},
691 {"poison", do_pragma_poison},
692 {"system_header", do_pragma_system_header},
693 {"dependency", do_pragma_dependency},
697 static int pragma_dispatch (pfile, table, node)
699 const struct pragma_entry *table;
700 const cpp_hashnode *node;
702 const U_CHAR *p = node->name;
703 size_t len = node->length;
705 for (; table->name; table++)
706 if (strlen (table->name) == len && !memcmp (p, table->name, len))
707 return (*table->handler) (pfile);
715 const cpp_token *tok;
718 tok = _cpp_get_token (pfile);
719 if (tok->type == CPP_EOF)
721 else if (tok->type != CPP_NAME)
723 cpp_error (pfile, "malformed #pragma directive");
727 pop = pragma_dispatch (pfile, top_pragmas, tok->val.node);
729 pass_thru_directive (pfile);
734 do_pragma_gcc (pfile)
737 const cpp_token *tok;
739 tok = _cpp_get_token (pfile);
740 if (tok->type == CPP_EOF)
742 else if (tok->type != CPP_NAME)
745 return pragma_dispatch (pfile, gcc_pragmas, tok->val.node);
749 do_pragma_once (pfile)
752 cpp_buffer *ip = CPP_BUFFER (pfile);
754 /* Allow #pragma once in system headers, since that's not the user's
756 if (!CPP_IN_SYSTEM_HEADER (pfile))
757 cpp_warning (pfile, "#pragma once is obsolete");
759 if (CPP_PREV_BUFFER (ip) == NULL)
760 cpp_warning (pfile, "#pragma once outside include file");
762 ip->inc->cmacro = NEVER_REREAD;
768 do_pragma_implementation (pfile)
771 /* Be quiet about `#pragma implementation' for a file only if it hasn't
772 been included yet. */
773 const cpp_token *tok = _cpp_get_token (pfile);
776 if (tok->type == CPP_EOF)
778 else if (tok->type != CPP_STRING
779 || _cpp_get_token (pfile)->type != CPP_EOF)
781 cpp_error (pfile, "malformed #pragma implementation");
785 /* Make a NUL-terminated copy of the string. */
786 copy = alloca (tok->val.str.len + 1);
787 memcpy (copy, tok->val.str.text, tok->val.str.len);
788 copy[tok->val.str.len] = '\0';
790 if (cpp_included (pfile, copy))
792 "#pragma implementation for %s appears after file is included",
798 do_pragma_poison (pfile)
801 /* Poison these symbols so that all subsequent usage produces an
803 const cpp_token *tok;
807 /* As a rule, don't include #pragma poison commands in output,
808 unless the user asks for them. */
809 writeit = (CPP_OPTION (pfile, debug_output)
810 || CPP_OPTION (pfile, dump_macros) == dump_definitions
811 || CPP_OPTION (pfile, dump_macros) == dump_names);
815 tok = _cpp_get_token (pfile);
816 if (tok->type == CPP_EOF)
818 if (tok->type != CPP_NAME)
820 cpp_error (pfile, "invalid #pragma poison directive");
825 if (hp->type == T_POISON)
826 ; /* It is allowed to poison the same identifier twice. */
829 if (hp->type != T_VOID)
830 cpp_warning (pfile, "poisoning existing macro \"%s\"", hp->name);
831 _cpp_free_definition (hp);
838 /* Mark the current header as a system header. This will suppress
839 some categories of warnings (notably those from -pedantic). It is
840 intended for use in system libraries that cannot be implemented in
841 conforming C, but cannot be certain that their headers appear in a
842 system include directory. To prevent abuse, it is rejected in the
843 primary source file. */
845 do_pragma_system_header (pfile)
848 cpp_buffer *ip = CPP_BUFFER (pfile);
849 if (CPP_PREV_BUFFER (ip) == NULL)
850 cpp_warning (pfile, "#pragma system_header outside include file");
852 cpp_make_system_header (pfile, ip, 1);
857 /* Check the modified date of the current include file against a specified
858 file. Issue a diagnostic, if the specified file is newer. We use this to
859 determine if a fixed header should be refixed. */
861 do_pragma_dependency (pfile)
869 if (parse_include (pfile, U"pragma dependency", 1, &name, &len, &ab))
872 left = ab ? '<' : '"';
873 right = ab ? '>' : '"';
875 ordering = _cpp_compare_file_date (pfile, name, len, ab);
877 cpp_warning (pfile, "cannot find source %c%s%c", left, name, right);
878 else if (ordering > 0)
880 const cpp_token *msg = _cpp_get_token (pfile);
882 cpp_warning (pfile, "current file is older than %c%s%c",
884 if (msg->type != CPP_EOF)
886 U_CHAR *text, *limit;
889 _cpp_dump_list (pfile, &pfile->token_list, msg, 0);
890 limit = pfile->limit;
892 cpp_warning (pfile, "%.*s", (int)(limit - text), text);
898 /* Just ignore #sccs, on systems where we define it at all. */
899 #ifdef SCCS_DIRECTIVE
902 cpp_reader *pfile ATTRIBUTE_UNUSED;
908 /* We've found an `#if' directive. If the only thing before it in
909 this file is white space, and if it is of the form
910 `#if ! defined SYMBOL', then SYMBOL is a possible controlling macro
911 for inclusion of this file. (See redundant_include_p in cppfiles.c
912 for an explanation of controlling macros.) If so, return the
913 hash node for SYMBOL. Otherwise, return NULL. */
915 static const cpp_hashnode *
916 detect_if_not_defined (pfile)
919 const cpp_token *token;
920 cpp_hashnode *cmacro = 0;
922 /* We are guaranteed that tokens are consecutive and end in CPP_EOF. */
923 token = pfile->first_directive_token + 2;
925 if (token->type != CPP_NOT)
929 if (token->type != CPP_NAME
930 || token->val.node != pfile->spec_nodes->n_defined)
934 if (token->type == CPP_OPEN_PAREN)
937 if (token->type != CPP_NAME)
940 cmacro = token->val.node;
942 if (token[-1].type == CPP_OPEN_PAREN)
945 if (token->type != CPP_CLOSE_PAREN)
950 if (token->type != CPP_EOF)
956 /* Parse an #ifdef or #ifndef directive. Returns the hash node of the
957 macro being tested, and issues various error messages. */
959 static const cpp_hashnode *
960 parse_ifdef (pfile, name)
965 const cpp_hashnode *node = 0;
967 const cpp_token *token = _cpp_get_token (pfile);
971 cpp_pedwarn (pfile, "#%s with no argument", name);
972 else if (type != CPP_NAME)
973 cpp_pedwarn (pfile, "#%s with invalid argument", name);
974 else if (_cpp_get_token (pfile)->type != CPP_EOF)
975 cpp_pedwarn (pfile, "garbage at end of #%s", name);
977 if (type == CPP_NAME)
978 node = token->val.node;
979 if (node && node->type == T_POISON)
981 cpp_error (pfile, "attempt to use poisoned identifier \"%s\"",
989 /* #ifdef is dead simple. */
995 const cpp_hashnode *node = 0;
997 if (! pfile->skipping)
998 node = parse_ifdef (pfile, dtable[T_IFDEF].name);
1000 push_conditional (pfile, !(node && node->type != T_VOID), T_IFDEF, 0);
1004 /* #ifndef is a tad more complex, because we need to check for a
1005 no-reinclusion wrapper. */
1011 int start_of_file = 0;
1012 const cpp_hashnode *node = 0;
1014 if (! pfile->skipping)
1016 start_of_file = (pfile->token_list.flags & BEG_OF_FILE);
1017 node = parse_ifdef (pfile, dtable[T_IFNDEF].name);
1020 push_conditional (pfile, node && node->type != T_VOID,
1021 T_IFNDEF, start_of_file ? node : 0);
1025 /* #if is straightforward; just call _cpp_parse_expr, then conditional_skip.
1026 Also, check for a reinclude preventer of the form #if !defined (MACRO). */
1032 const cpp_hashnode *cmacro = 0;
1035 if (! pfile->skipping)
1037 if (pfile->token_list.flags & BEG_OF_FILE)
1038 cmacro = detect_if_not_defined (pfile);
1039 value = _cpp_parse_expr (pfile);
1041 push_conditional (pfile, value == 0, T_IF, cmacro);
1045 /* #else flips pfile->skipping and continues without changing
1046 if_stack; this is so that the error message for missing #endif's
1047 etc. will point to the original #if. */
1053 struct if_stack *ifs = CPP_BUFFER (pfile)->if_stack;
1054 validate_else (pfile, dtable[T_ELSE].name);
1058 cpp_error (pfile, "#else without #if");
1061 if (ifs->type == T_ELSE)
1063 cpp_error (pfile, "#else after #else");
1064 cpp_error_with_line (pfile, ifs->lineno, ifs->colno,
1065 "the conditional began here");
1068 /* #ifndef can't have its special treatment for containing the whole file
1069 if it has a #else clause. */
1072 if (! ifs->was_skipping)
1074 /* If pfile->skipping is 2, one of the blocks in an #if/#elif/... chain
1075 succeeded, so we mustn't do the else block. */
1076 if (pfile->skipping < 2)
1077 pfile->skipping = ! pfile->skipping;
1083 * handle a #elif directive by not changing if_stack either.
1084 * see the comment above do_else.
1091 struct if_stack *ifs = CPP_BUFFER (pfile)->if_stack;
1095 cpp_error (pfile, "#elif without #if");
1098 if (ifs->type == T_ELSE)
1100 cpp_error (pfile, "#elif after #else");
1101 cpp_error_with_line (pfile, ifs->lineno, ifs->colno,
1102 "the conditional began here");
1106 if (ifs->was_skipping)
1107 return 0; /* Don't evaluate a nested #if */
1109 if (pfile->skipping != 1)
1111 pfile->skipping = 2; /* one block succeeded, so don't do any others */
1115 pfile->skipping = ! _cpp_parse_expr (pfile);
1119 /* #endif pops the if stack and resets pfile->skipping. */
1125 struct if_stack *ifs = CPP_BUFFER (pfile)->if_stack;
1127 validate_else (pfile, dtable[T_ENDIF].name);
1130 cpp_error (pfile, "#endif without #if");
1133 CPP_BUFFER (pfile)->if_stack = ifs->next;
1134 pfile->skipping = ifs->was_skipping;
1135 pfile->potential_control_macro = ifs->cmacro;
1136 obstack_free (pfile->buffer_ob, ifs);
1142 /* Push an if_stack entry and set pfile->skipping accordingly.
1143 If this is a #ifndef starting at the beginning of a file,
1144 CMACRO is the macro name tested by the #ifndef. */
1147 push_conditional (pfile, skip, type, cmacro)
1151 const cpp_hashnode *cmacro;
1153 struct if_stack *ifs;
1155 ifs = xobnew (pfile->buffer_ob, struct if_stack);
1156 ifs->lineno = _cpp_get_line (pfile, &ifs->colno);
1157 ifs->next = CPP_BUFFER (pfile)->if_stack;
1158 ifs->cmacro = cmacro;
1159 ifs->was_skipping = pfile->skipping;
1162 if (!pfile->skipping)
1163 pfile->skipping = skip;
1165 CPP_BUFFER (pfile)->if_stack = ifs;
1168 /* Issue -pedantic warning for text which is not a comment following
1169 an #else or #endif. */
1172 validate_else (pfile, directive)
1174 const U_CHAR *directive;
1176 if (CPP_PEDANTIC (pfile) && _cpp_get_token (pfile)->type != CPP_EOF)
1177 cpp_pedwarn (pfile, "ISO C forbids text after #%s", directive);
1180 /* Called when we reach the end of a file. Walk back up the
1181 conditional stack till we reach its level at entry to this file,
1182 issuing error messages. Then force skipping off. */
1184 unwind_if_stack (pfile, pbuf)
1188 struct if_stack *ifs, *nifs;
1190 for (ifs = pbuf->if_stack; ifs; ifs = nifs)
1192 cpp_error_with_line (pfile, ifs->lineno, ifs->colno, "unterminated #%s",
1193 dtable[ifs->type].name);
1195 /* No need to free - they'll all go away with the buffer. */
1197 pfile->skipping = 0;
1200 /* Parses an assertion, returning a pointer to the hash node of the
1201 predicate, or 0 on error. If an answer was supplied, it is
1202 allocated and placed in ANSWERP, otherwise it is set to 0. We use
1203 _cpp_get_raw_token, since we cannot assume tokens are consecutive
1204 in a #if statement (we may be in a macro), and we don't want to
1207 _cpp_parse_assertion (pfile, answerp)
1209 struct answer **answerp;
1211 struct answer *answer = 0;
1214 const cpp_token *token, *predicate;
1215 const struct directive *d = pfile->token_list.directive;
1216 unsigned int len = 0;
1218 predicate = _cpp_get_raw_token (pfile);
1219 if (predicate->type == CPP_EOF)
1221 cpp_error (pfile, "assertion without predicate");
1224 else if (predicate->type != CPP_NAME)
1226 cpp_error (pfile, "predicate must be an identifier");
1230 token = _cpp_get_raw_token (pfile);
1231 if (token->type != CPP_OPEN_PAREN)
1233 /* #unassert and #if are OK without predicate. */
1234 if (d == &dtable[T_UNASSERT])
1236 if (token->type == CPP_EOF)
1239 else if (d != &dtable[T_ASSERT])
1241 _cpp_push_token (pfile, token);
1244 cpp_error (pfile, "missing '(' after predicate");
1248 /* Allocate a struct answer, and copy the answer to it. */
1249 answer = (struct answer *) xmalloc (sizeof (struct answer));
1250 list = &answer->list;
1251 _cpp_init_toklist (list, NO_DUMMY_TOKEN);
1257 token = _cpp_get_raw_token (pfile);
1259 if (token->type == CPP_EOF)
1261 cpp_error (pfile, "missing ')' to complete answer");
1264 if (token->type == CPP_CLOSE_PAREN)
1267 /* Copy the token. */
1268 _cpp_expand_token_space (list, 1);
1269 dest = &list->tokens[list->tokens_used++];
1272 if (token_spellings[token->type].type == SPELL_STRING)
1274 _cpp_expand_name_space (list, token->val.str.len);
1275 dest->val.str.text = list->namebuf + list->name_used;
1276 memcpy (list->namebuf + list->name_used,
1277 token->val.str.text, token->val.str.len);
1278 list->name_used += token->val.str.len;
1282 if (list->tokens_used == 0)
1284 cpp_error (pfile, "predicate's answer is empty");
1288 /* Drop whitespace at start. */
1289 list->tokens[0].flags &= ~PREV_WHITE;
1291 if ((d == &dtable[T_ASSERT] || d == &dtable[T_UNASSERT])
1292 && token[1].type != CPP_EOF)
1294 cpp_error (pfile, "junk at end of assertion");
1300 len = predicate->val.node->length;
1301 sym = alloca (len + 1);
1303 /* Prefix '#' to get it out of macro namespace. */
1305 memcpy (sym + 1, predicate->val.node->name, len);
1306 return cpp_lookup (pfile, sym, len + 1);
1309 FREE_ANSWER (answer);
1313 /* Returns a pointer to the pointer to the answer in the answer chain,
1314 or a pointer to NULL if the answer is not in the chain. */
1316 _cpp_find_answer (node, candidate)
1318 const cpp_toklist *candidate;
1320 struct answer **result;
1322 for (result = &node->value.answers; *result; result = &(*result)->next)
1323 if (_cpp_equiv_toklists (&(*result)->list, candidate))
1329 #define WARNING(msgid) do { cpp_warning(pfile, msgid); goto error; } while (0)
1330 #define ERROR(msgid) do { cpp_error(pfile, msgid); goto error; } while (0)
1331 #define ICE(msgid) do { cpp_ice(pfile, msgid); goto error; } while (0)
1336 struct answer *new_answer;
1339 node = _cpp_parse_assertion (pfile, &new_answer);
1342 new_answer->next = 0;
1343 new_answer->list.line = pfile->token_list.line;
1344 new_answer->list.file = pfile->token_list.file;
1346 if (node->type == T_ASSERTION)
1348 if (*_cpp_find_answer (node, &new_answer->list))
1350 new_answer->next = node->value.answers;
1352 node->type = T_ASSERTION;
1353 node->value.answers = new_answer;
1358 cpp_warning (pfile, "\"%.*s\" re-asserted",
1359 node->length - 1, node->name + 1);
1360 FREE_ANSWER (new_answer);
1369 struct answer *answer, *temp, *next;
1371 node = _cpp_parse_assertion (pfile, &answer);
1374 /* It isn't an error to #unassert something that isn't asserted. */
1375 if (node->type == T_ASSERTION)
1379 struct answer **p = _cpp_find_answer (node, &answer->list);
1387 if (node->value.answers == 0)
1388 node->type = T_VOID;
1392 for (temp = node->value.answers; temp; temp = next)
1397 node->type = T_VOID;
1402 FREE_ANSWER (answer);
1407 /* These are for -D, -U, -A. */
1409 /* Process the string STR as if it appeared as the body of a #define.
1410 If STR is just an identifier, define it with value 1.
1411 If STR has anything after the identifier, then it should
1412 be identifier=definition. */
1415 cpp_define (pfile, str)
1422 p = strchr (str, '=');
1423 /* Copy the entire option so we can modify it.
1424 Change the first "=" in the string to a space. If there is none,
1425 tack " 1" on the end. Then add a newline and a NUL. */
1429 count = strlen (str) + 2;
1430 buf = (char *) alloca (count);
1431 memcpy (buf, str, count - 2);
1433 buf[count - 2] = '\n';
1434 buf[count - 1] = '\0';
1438 count = strlen (str) + 4;
1439 buf = (char *) alloca (count);
1440 memcpy (buf, str, count - 4);
1441 strcpy (&buf[count-4], " 1\n");
1444 _cpp_run_directive (pfile, &dtable[T_DEFINE], buf, count - 1);
1447 /* Process MACRO as if it appeared as the body of an #undef. */
1449 cpp_undef (pfile, macro)
1453 _cpp_run_directive (pfile, &dtable[T_UNDEF], macro, strlen (macro));
1456 /* Process the string STR as if it appeared as the body of a #assert. */
1458 cpp_assert (pfile, str)
1462 _cpp_run_directive (pfile, &dtable[T_ASSERT], str, strlen (str));
1465 /* Process STR as if it appeared as the body of an #unassert. */
1467 cpp_unassert (pfile, str)
1471 _cpp_run_directive (pfile, &dtable[T_UNASSERT], str, strlen (str));
1474 /* Determine whether the identifier ID, of length LEN, is a defined macro. */
1476 cpp_defined (pfile, id, len)
1481 cpp_hashnode *hp = cpp_lookup (pfile, id, len);
1482 if (hp->type == T_POISON)
1484 cpp_error (pfile, "attempt to use poisoned \"%s\"", hp->name);
1487 return (hp->type != T_VOID);
1490 /* Allocate a new cpp_buffer for PFILE, and push it on the input buffer stack.
1491 If BUFFER != NULL, then use the LENGTH characters in BUFFER
1492 as the new input buffer.
1493 Return the new buffer, or NULL on failure. */
1496 cpp_push_buffer (pfile, buffer, length)
1498 const U_CHAR *buffer;
1501 cpp_buffer *buf = CPP_BUFFER (pfile);
1503 if (++pfile->buffer_stack_depth == CPP_STACK_MAX)
1505 cpp_fatal (pfile, "#include nested too deep");
1508 if (pfile->cur_context > 0)
1510 cpp_ice (pfile, "buffer pushed with contexts stacked");
1511 _cpp_skip_rest_of_line (pfile);
1514 new = xobnew (pfile->buffer_ob, cpp_buffer);
1515 memset (new, 0, sizeof (cpp_buffer));
1517 new->line_base = new->buf = new->cur = buffer;
1518 new->rlimit = buffer + length;
1522 CPP_BUFFER (pfile) = new;
1527 cpp_pop_buffer (pfile)
1530 cpp_buffer *buf = CPP_BUFFER (pfile);
1532 unwind_if_stack (pfile, buf);
1534 _cpp_pop_file_buffer (pfile, buf);
1536 CPP_BUFFER (pfile) = CPP_PREV_BUFFER (buf);
1537 obstack_free (pfile->buffer_ob, buf);
1538 pfile->buffer_stack_depth--;
1539 return CPP_BUFFER (pfile);
1542 #define obstack_chunk_alloc xmalloc
1543 #define obstack_chunk_free free
1544 #define DSC(x) U x, sizeof x - 1
1546 _cpp_init_stacks (pfile)
1550 struct spec_nodes *s;
1552 pfile->buffer_ob = xnew (struct obstack);
1553 obstack_init (pfile->buffer_ob);
1555 /* Perhaps not the ideal place to put this. */
1556 pfile->spec_nodes = s = xnew (struct spec_nodes);
1557 s->n_L = cpp_lookup (pfile, DSC("L"));
1558 s->n_defined = cpp_lookup (pfile, DSC("defined"));
1559 s->n__STRICT_ANSI__ = cpp_lookup (pfile, DSC("__STRICT_ANSI__"));
1560 s->n__CHAR_UNSIGNED__ = cpp_lookup (pfile, DSC("__CHAR_UNSIGNED__"));
1561 s->n__VA_ARGS__ = cpp_lookup (pfile, DSC("__VA_ARGS__"));
1562 for (i = 0; i < N_DIRECTIVES; i++)
1563 s->dirs[i] = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
1567 _cpp_cleanup_stacks (pfile)
1570 obstack_free (pfile->buffer_ob, 0);
1571 free (pfile->buffer_ob);