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. */
30 /* `struct directive' defines one #-directive, including how to handle it. */
34 directive_handler func; /* Function to handle directive. */
35 const U_CHAR *name; /* Name of directive. */
36 unsigned short length; /* Length of name. */
37 unsigned short flags; /* Flags describing this directive. */
40 /* Stack of conditionals currently in progress
41 (including both successful and failing conditionals). */
45 struct if_stack *next;
46 int lineno; /* line number where condition started */
47 int if_succeeded; /* truth of last condition in this group */
48 const U_CHAR *control_macro; /* macro name for #ifndef around entire file */
49 int type; /* type of last directive seen in this group */
51 typedef struct if_stack IF_STACK;
53 /* Forward declarations. */
55 static void validate_else PARAMS ((cpp_reader *, const U_CHAR *));
56 static int parse_ifdef PARAMS ((cpp_reader *, const U_CHAR *));
57 static unsigned int parse_include PARAMS ((cpp_reader *, const U_CHAR *));
58 static int conditional_skip PARAMS ((cpp_reader *, int, int,
60 static int skip_if_group PARAMS ((cpp_reader *));
61 static void pass_thru_directive PARAMS ((const U_CHAR *, size_t,
63 static int read_line_number PARAMS ((cpp_reader *, int *));
64 static U_CHAR *detect_if_not_defined PARAMS ((cpp_reader *));
65 static int consider_directive_while_skipping
66 PARAMS ((cpp_reader *, IF_STACK *));
68 /* Values for the flags field of the table below. KANDR and COND
69 directives come from traditional (K&R) C. The difference is, if we
70 care about it while skipping a failed conditional block, its origin
71 is COND. STDC89 directives come from the 1989 C standard.
72 EXTENSION directives are extensions, with origins noted below. */
80 #define ORIGIN(f) ((f) & ORIGIN_MASK)
81 #define TRAD_DIRECT_P(f) (ORIGIN (f) == KANDR || ORIGIN (f) == COND)
83 /* This is the table of directive handlers. It is ordered by
84 frequency of occurrence; the numbers at the end are directive
85 counts from all the source code I have lying around (egcs and libc
86 CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
89 The entries with a dash and a name after the count are extensions,
90 of which all but #warning and #include_next are deprecated. The name
91 is where the extension appears to have come from. */
93 /* #sccs is not always recognized. */
95 # define SCCS_ENTRY D(sccs, T_SCCS, EXTENSION) /* 0 - SVR2? */
97 # define SCCS_ENTRY /* nothing */
100 #define DIRECTIVE_TABLE \
101 D(define, T_DEFINE = 0, KANDR) /* 270554 */ \
102 D(include, T_INCLUDE, KANDR | SYNTAX_INCLUDE) /* 52262 */ \
103 D(endif, T_ENDIF, COND) /* 45855 */ \
104 D(ifdef, T_IFDEF, COND) /* 22000 */ \
105 D(if, T_IF, COND) /* 18162 */ \
106 D(else, T_ELSE, COND) /* 9863 */ \
107 D(ifndef, T_IFNDEF, COND) /* 9675 */ \
108 D(undef, T_UNDEF, KANDR) /* 4837 */ \
109 D(line, T_LINE, KANDR) /* 2465 */ \
110 D(elif, T_ELIF, COND) /* 610 */ \
111 D(error, T_ERROR, STDC89) /* 475 */ \
112 D(pragma, T_PRAGMA, STDC89) /* 195 */ \
113 D(warning, T_WARNING, EXTENSION) /* 22 GNU */ \
114 D(include_next, T_INCLUDE_NEXT, EXTENSION | SYNTAX_INCLUDE) /* 19 GNU */ \
115 D(ident, T_IDENT, EXTENSION) /* 11 SVR4 */ \
116 D(import, T_IMPORT, EXTENSION | SYNTAX_INCLUDE) /* 0 ObjC */ \
117 D(assert, T_ASSERT, EXTENSION | SYNTAX_ASSERT) /* 0 SVR4 */ \
118 D(unassert, T_UNASSERT, EXTENSION | SYNTAX_ASSERT) /* 0 SVR4 */ \
121 /* Use the table to generate a series of prototypes, an enum for the
122 directive names, and an array of directive handlers. */
124 /* The directive-processing functions are declared to return int
125 instead of void, because some old compilers have trouble with
126 pointers to functions returning void. */
128 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
129 #define D(name, t, f) static int CONCAT2(do_,name) PARAMS ((cpp_reader *));
133 #define D(n, tag, f) tag,
141 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
142 #define D(name, t, flags) \
143 { CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
144 sizeof STRINGX(name) - 1, flags },
145 static const struct directive dtable[] =
150 #undef DIRECTIVE_TABLE
152 /* Check if a token's name matches that of a known directive. Put in
153 this file to save exporting dtable and other unneeded information. */
155 _cpp_check_directive (list, token)
159 const U_CHAR *name = list->namebuf + token->val.name.offset;
160 size_t len = token->val.name.len;
163 list->dir_handler = 0;
166 for (i = 0; i < N_DIRECTIVES; i++)
167 if (dtable[i].length == len && !ustrncmp (dtable[i].name, name, len))
169 list->dir_handler = dtable[i].func;
170 list->dir_flags = dtable[i].flags;
175 /* Handle a possible # directive.
176 '#' has already been read. */
179 _cpp_handle_directive (pfile)
186 long old_written = CPP_WRITTEN (pfile);
189 if (CPP_IS_MACRO_BUFFER (CPP_BUFFER (pfile)))
191 cpp_ice (pfile, "handle_directive called on macro buffer");
195 /* -traditional directives are recognized only with the # in column 1. */
196 hash_at_bol = CPP_IN_COLUMN_1 (pfile);
198 /* Scan the next token, then pretend we didn't. */
199 CPP_SET_MARK (pfile);
200 pfile->no_macro_expand++;
201 tok = _cpp_get_directive_token (pfile);
202 pfile->no_macro_expand--;
204 ident = pfile->token_buffer + old_written;
205 len = CPP_PWRITTEN (pfile) - ident;
206 CPP_SET_WRITTEN (pfile, old_written);
207 CPP_GOTO_MARK (pfile);
209 /* # followed by a number is equivalent to #line. Do not recognize
210 this form in assembly language source files. Complain about this
211 form if we're being pedantic, but not if this is regurgitated
212 input (preprocessed or fed back in by the C++ frontend). */
213 if (tok == CPP_NUMBER)
215 if (CPP_OPTION (pfile, lang_asm))
218 if (CPP_PEDANTIC (pfile)
219 && CPP_BUFFER (pfile)->ihash
220 && ! CPP_OPTION (pfile, preprocessed))
221 cpp_pedwarn (pfile, "# followed by integer");
226 /* If we are rescanning preprocessed input, don't obey any directives
228 else if (CPP_OPTION (pfile, preprocessed))
231 /* A line of just # becomes blank. */
232 else if (tok == CPP_VSPACE)
235 /* A NAME token might in fact be a directive! */
236 else if (tok == CPP_NAME)
238 for (i = 0; i < N_DIRECTIVES; i++)
240 if (dtable[i].length == len
241 && !ustrncmp (dtable[i].name, ident, len))
244 /* Don't complain about invalid directives in assembly source,
245 we don't know where the comments are, and # may introduce
246 assembler pseudo-ops. */
247 if (!CPP_OPTION (pfile, lang_asm))
248 cpp_error (pfile, "invalid preprocessing directive #%s", ident);
251 /* And anything else means the # wasn't a directive marker. */
257 /* In -traditional mode, a directive is ignored unless its # is in
259 if (CPP_TRADITIONAL (pfile) && !hash_at_bol)
261 if (CPP_WTRADITIONAL (pfile))
262 cpp_warning (pfile, "ignoring #%s because of its indented #",
267 /* no_directives is set when we are parsing macro arguments. Directives
268 in macro arguments are undefined behavior (C99 6.10.3.11); this
269 implementation chooses to make them hard errors. */
270 if (pfile->no_directives)
272 cpp_error (pfile, "#%s may not be used inside a macro argument",
274 _cpp_skip_rest_of_line (pfile);
278 /* Issue -pedantic warnings for extended directives. */
279 if (CPP_PEDANTIC (pfile) && ORIGIN (dtable[i].flags) == EXTENSION)
280 cpp_pedwarn (pfile, "ISO C does not allow #%s", dtable[i].name);
282 /* -Wtraditional gives warnings about directives with inappropriate
284 if (CPP_WTRADITIONAL (pfile))
286 if (!hash_at_bol && TRAD_DIRECT_P (dtable[i].flags))
287 cpp_warning (pfile, "traditional C ignores #%s with the # indented",
289 else if (hash_at_bol && ! TRAD_DIRECT_P (dtable[i].flags))
291 "suggest hiding #%s from traditional C with an indented #",
295 /* Unfortunately, it's necessary to scan the directive name again,
296 now we know we're going to consume it. FIXME. */
298 pfile->no_macro_expand++;
299 _cpp_get_directive_token (pfile);
300 pfile->no_macro_expand--;
301 CPP_SET_WRITTEN (pfile, old_written);
303 /* Some directives (e.g. #if) may return a request to execute
304 another directive handler immediately. No directive ever
305 requests that #define be executed immediately, so it is safe for
306 the loop to terminate when some function returns 0 (== T_DEFINE). */
307 while ((i = dtable[i].func (pfile)));
311 /* Pass a directive through to the output file.
312 BUF points to the contents of the directive, as a contiguous string.
313 LEN is the length of the string pointed to by BUF.
314 KEYWORD is the keyword-table entry for the directive. */
317 pass_thru_directive (buf, len, pfile, keyword)
323 const struct directive *kt = &dtable[keyword];
324 register unsigned klen = kt->length;
326 CPP_RESERVE (pfile, 1 + klen + len);
327 CPP_PUTC_Q (pfile, '#');
328 CPP_PUTS_Q (pfile, kt->name, klen);
329 if (len != 0 && buf[0] != ' ')
330 CPP_PUTC_Q (pfile, ' ');
331 CPP_PUTS_Q (pfile, buf, len);
334 /* Process a #define command. */
343 cpp_toklist *list = &pfile->directbuf;
345 pfile->no_macro_expand++;
346 pfile->parsing_define_directive++;
347 CPP_OPTION (pfile, discard_comments)++;
349 _cpp_scan_line (pfile, list);
351 /* First token on the line must be a NAME. There must be at least
352 one token (the VSPACE at the end). */
353 if (TOK_TYPE (list, 0) != CPP_NAME)
355 cpp_error_with_line (pfile, list->line, TOK_COL (list, 0),
356 "#define must be followed by an identifier");
360 sym = TOK_NAME (list, 0);
361 len = TOK_LEN (list, 0);
363 /* That NAME is not allowed to be "defined". (Not clear if the
364 standard requires this.) */
365 if (len == 7 && !ustrncmp (sym, U"defined", 7))
367 cpp_error_with_line (pfile, list->line, TOK_COL (list, 0),
368 "\"defined\" is not a legal macro name");
372 node = _cpp_lookup (pfile, sym, len);
373 /* Check for poisoned identifiers now. All other checks
374 are done in cpphash.c. */
375 if (node->type == T_POISON)
377 cpp_error (pfile, "redefining poisoned `%.*s'", len, sym);
381 if (_cpp_create_definition (pfile, list, node) == 0)
384 if (CPP_OPTION (pfile, debug_output)
385 || CPP_OPTION (pfile, dump_macros) == dump_definitions)
386 _cpp_dump_definition (pfile, node);
387 else if (CPP_OPTION (pfile, dump_macros) == dump_names)
388 pass_thru_directive (sym, len, pfile, T_DEFINE);
391 pfile->no_macro_expand--;
392 pfile->parsing_define_directive--;
393 CPP_OPTION (pfile, discard_comments)--;
397 /* Handle #include and #import. */
400 parse_include (pfile, name)
404 long old_written = CPP_WRITTEN (pfile);
405 enum cpp_ttype token;
408 pfile->parsing_include_directive++;
409 token = _cpp_get_directive_token (pfile);
410 pfile->parsing_include_directive--;
412 len = CPP_WRITTEN (pfile) - old_written;
414 if (token == CPP_STRING)
415 ; /* No special treatment required. */
417 else if (token == CPP_NAME)
419 /* Support '#include xyz' like VAX-C. It is taken as
420 '#include <xyz.h>' and generates a warning. */
421 cpp_warning (pfile, "#%s filename is obsolete, use #%s <filename.h>",
424 /* Rewrite the token to <xyz.h>. */
425 CPP_RESERVE (pfile, 4);
427 memmove (pfile->token_buffer + old_written + 1,
428 pfile->token_buffer + old_written,
429 CPP_WRITTEN (pfile) - old_written);
430 pfile->token_buffer[old_written] = '<';
431 CPP_PUTS_Q (pfile, ".h>", 2);
436 cpp_error (pfile, "`#%s' expects \"FILENAME\" or <FILENAME>", name);
437 CPP_SET_WRITTEN (pfile, old_written);
438 _cpp_skip_rest_of_line (pfile);
442 if (_cpp_get_directive_token (pfile) != CPP_VSPACE)
444 cpp_error (pfile, "junk at end of `#%s'", name);
445 _cpp_skip_rest_of_line (pfile);
448 CPP_SET_WRITTEN (pfile, old_written);
451 cpp_error (pfile, "empty file name in `#%s'", name);
463 len = parse_include (pfile, dtable[T_INCLUDE].name);
466 token = (U_CHAR *) alloca (len + 1);
467 memcpy (token, CPP_PWRITTEN (pfile), len);
470 if (CPP_OPTION (pfile, dump_includes))
471 pass_thru_directive (token, len, pfile, T_INCLUDE);
473 _cpp_execute_include (pfile, token, len, 0, 0);
484 if (CPP_OPTION (pfile, warn_import)
485 && !CPP_BUFFER (pfile)->system_header_p && !pfile->import_warning)
487 pfile->import_warning = 1;
489 "#import is obsolete, use an #ifndef wrapper in the header file");
492 len = parse_include (pfile, dtable[T_IMPORT].name);
495 token = (U_CHAR *) alloca (len + 1);
496 memcpy (token, CPP_PWRITTEN (pfile), len);
499 if (CPP_OPTION (pfile, dump_includes))
500 pass_thru_directive (token, len, pfile, T_IMPORT);
502 _cpp_execute_include (pfile, token, len, 1, 0);
507 do_include_next (pfile)
512 struct file_name_list *search_start = 0;
514 len = parse_include (pfile, dtable[T_INCLUDE_NEXT].name);
517 token = (U_CHAR *) alloca (len + 1);
518 memcpy (token, CPP_PWRITTEN (pfile), len);
521 if (CPP_OPTION (pfile, dump_includes))
522 pass_thru_directive (token, len, pfile, T_INCLUDE_NEXT);
524 /* For #include_next, skip in the search path past the dir in which the
525 containing file was found. Treat files specified using an absolute path
526 as if there are no more directories to search. Treat the primary source
527 file like any other included source, but generate a warning. */
528 if (CPP_PREV_BUFFER (CPP_BUFFER (pfile)))
530 if (CPP_BUFFER (pfile)->ihash->foundhere != ABSOLUTE_PATH)
531 search_start = CPP_BUFFER (pfile)->ihash->foundhere->next;
534 cpp_warning (pfile, "#include_next in primary source file");
536 _cpp_execute_include (pfile, token, len, 0, search_start);
540 /* Subroutine of do_line. Read next token from PFILE without adding it to
541 the output buffer. If it is a number between 1 and 4, store it in *NUM
542 and return 1; otherwise, return 0 and complain if we aren't at the end
546 read_line_number (pfile, num)
550 long save_written = CPP_WRITTEN (pfile);
552 enum cpp_ttype token = _cpp_get_directive_token (pfile);
553 p = pfile->token_buffer + save_written;
555 if (token == CPP_NUMBER && p + 1 == CPP_PWRITTEN (pfile)
556 && p[0] >= '1' && p[0] <= '4')
559 CPP_SET_WRITTEN (pfile, save_written);
564 if (token != CPP_VSPACE && token != CPP_EOF)
565 cpp_error (pfile, "invalid format `#line' command");
566 CPP_SET_WRITTEN (pfile, save_written);
571 /* Interpret #line command.
572 Note that the filename string (if any) is treated as if it were an
573 include filename. That means no escape handling. */
579 cpp_buffer *ip = CPP_BUFFER (pfile);
580 unsigned int new_lineno;
581 long old_written = CPP_WRITTEN (pfile);
582 enum cpp_ttype token;
585 token = _cpp_get_directive_token (pfile);
587 if (token != CPP_NUMBER)
589 cpp_error (pfile, "token after `#line' is not an integer");
590 goto bad_line_directive;
593 CPP_PUTC (pfile, '\0'); /* not terminated for us */
594 new_lineno = strtoul ((const char *) (pfile->token_buffer + old_written),
598 cpp_error (pfile, "token after `#line' is not an integer");
599 goto bad_line_directive;
601 CPP_SET_WRITTEN (pfile, old_written);
603 if (CPP_PEDANTIC (pfile) && (new_lineno <= 0 || new_lineno > 32767))
604 cpp_pedwarn (pfile, "line number out of range in `#line' command");
606 token = _cpp_get_directive_token (pfile);
608 if (token == CPP_STRING)
610 U_CHAR *fname = pfile->token_buffer + old_written + 1;
611 U_CHAR *end_name = CPP_PWRITTEN (pfile) - 1;
612 int action_number = 0;
614 if (read_line_number (pfile, &action_number))
616 if (CPP_PEDANTIC (pfile))
617 cpp_pedwarn (pfile, "garbage at end of `#line' command");
619 /* This is somewhat questionable: change the buffer stack
620 depth so that output_line_command thinks we've stacked
622 if (action_number == 1)
624 pfile->buffer_stack_depth++;
625 ip->system_header_p = 0;
626 read_line_number (pfile, &action_number);
628 else if (action_number == 2)
630 pfile->buffer_stack_depth--;
631 ip->system_header_p = 0;
632 read_line_number (pfile, &action_number);
634 if (action_number == 3)
636 ip->system_header_p = 1;
637 read_line_number (pfile, &action_number);
639 if (action_number == 4)
641 ip->system_header_p = 2;
642 read_line_number (pfile, &action_number);
648 if (strcmp ((const char *)fname, ip->nominal_fname))
650 if (!strcmp ((const char *)fname, ip->ihash->name))
651 ip->nominal_fname = ip->ihash->name;
653 ip->nominal_fname = _cpp_fake_ihash (pfile, (const char *)fname);
656 else if (token != CPP_VSPACE && token != CPP_EOF)
658 cpp_error (pfile, "token after `#line %d' is not a string", new_lineno);
659 goto bad_line_directive;
662 /* The Newline at the end of this line remains to be processed.
663 To put the next line at the specified line number,
664 we must store a line number now that is one less. */
665 ip->lineno = new_lineno - 1;
666 CPP_SET_WRITTEN (pfile, old_written);
670 _cpp_skip_rest_of_line (pfile);
671 CPP_SET_WRITTEN (pfile, old_written);
675 /* Remove the definition of a symbol from the symbol table.
676 According to the C standard, it is not an error to undef
677 something that has no definitions. */
685 long here = CPP_WRITTEN (pfile);
686 enum cpp_ttype token;
688 pfile->no_macro_expand++;
689 token = _cpp_get_directive_token (pfile);
690 pfile->no_macro_expand--;
692 if (token != CPP_NAME)
694 cpp_error (pfile, "token after #undef is not an identifier");
695 _cpp_skip_rest_of_line (pfile);
698 len = CPP_WRITTEN (pfile) - here;
700 token = _cpp_get_directive_token (pfile);
701 if (token != CPP_VSPACE)
703 cpp_pedwarn (pfile, "junk on line after #undef");
704 _cpp_skip_rest_of_line (pfile);
707 name = pfile->token_buffer + here;
708 CPP_SET_WRITTEN (pfile, here);
710 hp = _cpp_lookup (pfile, name, len);
711 if (hp->type == T_VOID)
712 ; /* Not defined in the first place - do nothing. */
713 else if (hp->type == T_POISON)
714 cpp_error (pfile, "cannot undefine poisoned \"%s\"", hp->name);
717 /* If we are generating additional info for debugging (with -g) we
718 need to pass through all effective #undef commands. */
719 if (CPP_OPTION (pfile, debug_output))
720 pass_thru_directive (hp->name, len, pfile, T_UNDEF);
722 if (hp->type != T_MACRO && hp->type != T_FMACRO
723 && hp->type != T_EMPTY && hp->type != T_IDENTITY)
724 cpp_warning (pfile, "undefining `%s'", hp->name);
726 _cpp_free_definition (hp);
734 * Report an error detected by the program we are processing.
735 * Use the text of the line in the error message.
736 * (We use error because it prints the filename & line#.)
743 const U_CHAR *text, *limit;
745 _cpp_skip_hspace (pfile);
746 text = CPP_BUFFER (pfile)->cur;
747 _cpp_skip_rest_of_line (pfile);
748 limit = CPP_BUFFER (pfile)->cur;
750 cpp_error (pfile, "#error %.*s", (int)(limit - text), text);
755 * Report a warning detected by the program we are processing.
756 * Use the text of the line in the warning message, then continue.
763 const U_CHAR *text, *limit;
765 _cpp_skip_hspace (pfile);
766 text = CPP_BUFFER (pfile)->cur;
767 _cpp_skip_rest_of_line (pfile);
768 limit = CPP_BUFFER (pfile)->cur;
770 cpp_warning (pfile, "#warning %.*s", (int)(limit - text), text);
774 /* Report program identification. */
780 long old_written = CPP_WRITTEN (pfile);
782 CPP_PUTS (pfile, "#ident ", 7);
784 /* Next token should be a string constant. */
785 if (_cpp_get_directive_token (pfile) == CPP_STRING)
786 /* And then a newline. */
787 if (_cpp_get_directive_token (pfile) == CPP_VSPACE)
788 /* Good - ship it. */
791 cpp_error (pfile, "invalid #ident");
792 _cpp_skip_rest_of_line (pfile);
793 CPP_SET_WRITTEN (pfile, old_written); /* discard directive */
798 /* Pragmata handling. We handle some of these, and pass the rest on
799 to the front end. C99 defines three pragmas and says that no macro
800 expansion is to be performed on them; whether or not macro
801 expansion happens for other pragmas is implementation defined.
802 This implementation never macro-expands the text after #pragma.
804 We currently do not support the _Pragma operator. Support for that
805 has to be coordinated with the front end. Proposed implementation:
806 both #pragma blah blah and _Pragma("blah blah") become
807 __builtin_pragma(blah blah) and we teach the parser about that. */
809 /* Sub-handlers for the pragmas needing treatment here.
810 They return 1 if the token buffer is to be popped, 0 if not. */
811 static int do_pragma_once PARAMS ((cpp_reader *));
812 static int do_pragma_implementation PARAMS ((cpp_reader *));
813 static int do_pragma_poison PARAMS ((cpp_reader *));
814 static int do_pragma_default PARAMS ((cpp_reader *));
823 enum cpp_ttype token;
825 here = CPP_WRITTEN (pfile);
826 CPP_PUTS (pfile, "#pragma ", 8);
828 key = CPP_WRITTEN (pfile);
829 pfile->no_macro_expand++;
830 token = _cpp_get_directive_token (pfile);
831 if (token != CPP_NAME)
833 if (token == CPP_VSPACE)
839 buf = pfile->token_buffer + key;
840 CPP_PUTC (pfile, ' ');
842 #define tokis(x) !strncmp((char *) buf, x, sizeof(x) - 1)
844 pop = do_pragma_once (pfile);
845 else if (tokis ("implementation"))
846 pop = do_pragma_implementation (pfile);
847 else if (tokis ("poison"))
848 pop = do_pragma_poison (pfile);
850 pop = do_pragma_default (pfile);
853 if (_cpp_get_directive_token (pfile) != CPP_VSPACE)
857 CPP_SET_WRITTEN (pfile, here);
858 pfile->no_macro_expand--;
862 cpp_error (pfile, "malformed #pragma directive");
863 _cpp_skip_rest_of_line (pfile);
865 CPP_SET_WRITTEN (pfile, here);
866 pfile->no_macro_expand--;
871 do_pragma_default (pfile)
874 while (_cpp_get_directive_token (pfile) != CPP_VSPACE)
875 CPP_PUTC (pfile, ' ');
880 do_pragma_once (pfile)
883 cpp_buffer *ip = CPP_BUFFER (pfile);
885 /* Allow #pragma once in system headers, since that's not the user's
887 if (!ip->system_header_p)
888 cpp_warning (pfile, "`#pragma once' is obsolete");
890 if (CPP_PREV_BUFFER (ip) == NULL)
891 cpp_warning (pfile, "`#pragma once' outside include file");
893 ip->ihash->control_macro = U""; /* never repeat */
899 do_pragma_implementation (pfile)
902 /* Be quiet about `#pragma implementation' for a file only if it hasn't
903 been included yet. */
904 enum cpp_ttype token;
905 long written = CPP_WRITTEN (pfile);
910 token = _cpp_get_directive_token (pfile);
911 if (token == CPP_VSPACE)
913 else if (token != CPP_STRING)
915 cpp_error (pfile, "malformed #pragma implementation");
919 /* Trim the leading and trailing quote marks from the string. */
920 name = pfile->token_buffer + written + 1;
921 len = CPP_PWRITTEN (pfile) - name;
923 memcpy (copy, name, len - 1);
924 copy[len - 1] = '\0';
926 if (cpp_included (pfile, copy))
928 "`#pragma implementation' for `%s' appears after file is included",
934 do_pragma_poison (pfile)
937 /* Poison these symbols so that all subsequent usage produces an
943 enum cpp_ttype token;
946 /* As a rule, don't include #pragma poison commands in output,
947 unless the user asks for them. */
948 writeit = (CPP_OPTION (pfile, debug_output)
949 || CPP_OPTION (pfile, dump_macros) == dump_definitions
950 || CPP_OPTION (pfile, dump_macros) == dump_names);
954 written = CPP_WRITTEN (pfile);
955 token = _cpp_get_directive_token (pfile);
956 if (token == CPP_VSPACE)
958 if (token != CPP_NAME)
960 cpp_error (pfile, "invalid #pragma poison directive");
961 _cpp_skip_rest_of_line (pfile);
965 p = pfile->token_buffer + written;
966 len = CPP_PWRITTEN (pfile) - p;
967 hp = _cpp_lookup (pfile, p, len);
968 if (hp->type == T_POISON)
969 ; /* It is allowed to poison the same identifier twice. */
972 if (hp->type != T_VOID)
973 cpp_warning (pfile, "poisoning existing macro `%s'", hp->name);
974 _cpp_free_definition (hp);
978 CPP_PUTC (pfile, ' ');
983 /* Just ignore #sccs, on systems where we define it at all. */
984 #ifdef SCCS_DIRECTIVE
989 _cpp_skip_rest_of_line (pfile);
994 /* We've found an `#if' directive. If the only thing before it in
995 this file is white space, and if it is of the form
996 `#if ! defined SYMBOL', then SYMBOL is a possible controlling macro
997 for inclusion of this file. (See redundant_include_p in cppfiles.c
998 for an explanation of controlling macros.) If so, return a
999 malloced copy of SYMBOL. Otherwise, return NULL. */
1002 detect_if_not_defined (pfile)
1005 U_CHAR *control_macro = 0;
1006 enum cpp_ttype token;
1007 unsigned int base_offset;
1008 unsigned int token_offset;
1009 unsigned int need_rparen = 0;
1010 unsigned int token_len;
1012 if (pfile->only_seen_white != 2)
1015 /* Save state required for restore. */
1016 pfile->no_macro_expand++;
1017 CPP_SET_MARK (pfile);
1018 base_offset = CPP_WRITTEN (pfile);
1021 if (_cpp_get_directive_token (pfile) != CPP_OTHER
1022 || CPP_WRITTEN (pfile) != (size_t) base_offset + 1
1023 || CPP_PWRITTEN (pfile)[-1] != '!')
1026 /* ...then `defined', */
1027 token_offset = CPP_WRITTEN (pfile);
1028 token = _cpp_get_directive_token (pfile);
1029 if (token != CPP_NAME)
1031 if (ustrncmp (pfile->token_buffer + token_offset, U"defined", 7))
1034 /* ...then an optional '(' and the name, */
1035 token_offset = CPP_WRITTEN (pfile);
1036 token = _cpp_get_directive_token (pfile);
1037 if (token == CPP_OPEN_PAREN)
1039 token_offset = CPP_WRITTEN (pfile);
1041 token = _cpp_get_directive_token (pfile);
1043 if (token != CPP_NAME)
1046 token_len = CPP_WRITTEN (pfile) - token_offset;
1048 /* ...then the ')', if necessary, */
1049 if (need_rparen && _cpp_get_directive_token (pfile) != CPP_CLOSE_PAREN)
1052 /* ...and make sure there's nothing else on the line. */
1053 if (_cpp_get_directive_token (pfile) != CPP_VSPACE)
1056 /* We have a legitimate controlling macro for this header. */
1057 control_macro = (U_CHAR *) xmalloc (token_len + 1);
1058 memcpy (control_macro, pfile->token_buffer + token_offset, token_len);
1059 control_macro[token_len] = '\0';
1062 CPP_SET_WRITTEN (pfile, base_offset);
1063 pfile->no_macro_expand--;
1064 CPP_GOTO_MARK (pfile);
1066 return control_macro;
1070 * #if is straightforward; just call _cpp_parse_expr, then conditional_skip.
1071 * Also, check for a reinclude preventer of the form #if !defined (MACRO).
1078 U_CHAR *control_macro = detect_if_not_defined (pfile);
1079 int value = _cpp_parse_expr (pfile);
1080 return conditional_skip (pfile, value == 0, T_IF, control_macro);
1084 * handle a #elif directive by not changing if_stack either.
1085 * see the comment above do_else.
1092 if (pfile->if_stack == CPP_BUFFER (pfile)->if_stack)
1094 cpp_error (pfile, "`#elif' not within a conditional");
1099 if (pfile->if_stack->type == T_ELSE)
1101 cpp_error (pfile, "`#elif' after `#else'");
1102 cpp_error_with_line (pfile, pfile->if_stack->lineno, 0,
1103 "the conditional began here");
1105 pfile->if_stack->type = T_ELIF;
1108 if (pfile->if_stack->if_succeeded)
1110 _cpp_skip_rest_of_line (pfile);
1111 return skip_if_group (pfile);
1113 if (_cpp_parse_expr (pfile) == 0)
1114 return skip_if_group (pfile);
1116 ++pfile->if_stack->if_succeeded; /* continue processing input */
1120 /* Parse an #ifdef or #ifndef directive. Returns 1 for defined, 0 for
1121 not defined; the macro tested is left in the token buffer (but
1125 parse_ifdef (pfile, name)
1131 enum cpp_ttype token;
1132 long old_written = CPP_WRITTEN (pfile);
1135 pfile->no_macro_expand++;
1136 token = _cpp_get_directive_token (pfile);
1137 pfile->no_macro_expand--;
1139 ident = pfile->token_buffer + old_written;
1140 len = CPP_WRITTEN (pfile) - old_written;
1142 if (token == CPP_VSPACE)
1144 if (! CPP_TRADITIONAL (pfile))
1145 cpp_pedwarn (pfile, "`#%s' with no argument", name);
1149 else if (token == CPP_NAME)
1151 defined = cpp_defined (pfile, ident, len);
1152 CPP_PUTC (pfile, '\0'); /* so it can be copied with xstrdup */
1157 if (! CPP_TRADITIONAL (pfile))
1158 cpp_error (pfile, "`#%s' with invalid argument", name);
1161 if (!CPP_TRADITIONAL (pfile))
1163 if (_cpp_get_directive_token (pfile) == CPP_VSPACE)
1166 cpp_pedwarn (pfile, "garbage at end of `#%s' argument", name);
1168 _cpp_skip_rest_of_line (pfile);
1171 CPP_SET_WRITTEN (pfile, old_written); /* Pop */
1175 /* #ifdef is dead simple. */
1181 int skip = ! parse_ifdef (pfile, dtable[T_IFDEF].name);
1182 return conditional_skip (pfile, skip, T_IFDEF, 0);
1185 /* #ifndef is a tad more complex, because we need to check for a
1186 no-reinclusion wrapper. */
1192 int start_of_file, skip;
1193 U_CHAR *control_macro = 0;
1195 start_of_file = pfile->only_seen_white == 2;
1196 skip = parse_ifdef (pfile, dtable[T_IFNDEF].name);
1198 if (start_of_file && !skip)
1199 control_macro = uxstrdup (CPP_PWRITTEN (pfile));
1201 return conditional_skip (pfile, skip, T_IFNDEF, control_macro);
1204 /* Push TYPE on stack; then, if SKIP is nonzero, skip ahead.
1205 If this is a #ifndef starting at the beginning of a file,
1206 CONTROL_MACRO is the macro name tested by the #ifndef.
1207 Otherwise, CONTROL_MACRO is 0. */
1210 conditional_skip (pfile, skip, type, control_macro)
1214 U_CHAR *control_macro;
1218 temp = (IF_STACK *) xcalloc (1, sizeof (IF_STACK));
1219 temp->lineno = CPP_BUFFER (pfile)->lineno;
1220 temp->next = pfile->if_stack;
1221 temp->control_macro = control_macro;
1222 pfile->if_stack = temp;
1224 pfile->if_stack->type = type;
1227 return skip_if_group (pfile);
1229 ++pfile->if_stack->if_succeeded;
1233 /* Subroutine of skip_if_group. Examine one preprocessing directive
1234 and return 0 if skipping should continue, or the directive number
1235 of the directive that ends the block if it should halt.
1237 Also adjusts the if_stack as appropriate. The `#' has been read,
1238 but not the identifier. */
1241 consider_directive_while_skipping (pfile, stack)
1250 /* -traditional directives are recognized only with the # in column 1. */
1251 hash_at_bol = CPP_IN_COLUMN_1 (pfile);
1253 ident = CPP_WRITTEN (pfile);
1254 if (_cpp_get_directive_token (pfile) != CPP_NAME)
1256 len = CPP_WRITTEN (pfile) - ident;
1258 for (i = 0; i < N_DIRECTIVES; i++)
1260 if (dtable[i].length == len
1261 && !ustrncmp (dtable[i].name, pfile->token_buffer + ident, len))
1262 goto real_directive;
1268 /* If it's not a directive of interest to us, return now. */
1269 if (ORIGIN (dtable[i].flags) != COND)
1272 /* First, deal with -traditional and -Wtraditional.
1273 All COND directives are from K+R. */
1277 if (CPP_TRADITIONAL (pfile))
1279 if (CPP_WTRADITIONAL (pfile))
1280 cpp_warning (pfile, "ignoring #%s because of its indented #",
1284 if (CPP_WTRADITIONAL (pfile))
1285 cpp_warning (pfile, "traditional C ignores %s with the # indented",
1292 cpp_ice (pfile, "non COND directive in switch in c_d_w_s");
1298 temp = (IF_STACK *) xcalloc (1, sizeof (IF_STACK));
1299 temp->lineno = CPP_BUFFER (pfile)->lineno;
1300 temp->next = pfile->if_stack;
1302 pfile->if_stack = temp;
1306 if (pfile->if_stack != stack)
1307 validate_else (pfile, dtable[i].name);
1310 if (pfile->if_stack == stack)
1313 pfile->if_stack->type = i;
1317 if (pfile->if_stack != stack)
1318 validate_else (pfile, dtable[i].name);
1320 if (pfile->if_stack == stack)
1323 temp = pfile->if_stack;
1324 pfile->if_stack = temp->next;
1330 /* Skip to #endif, #else, or #elif. Consumes the directive that
1331 causes it to stop, but not its argument. Returns the number of
1332 that directive, which must be passed back up to
1333 _cpp_handle_directive, which will execute it. */
1335 skip_if_group (pfile)
1338 enum cpp_ttype token;
1339 IF_STACK *save_if_stack = pfile->if_stack; /* don't pop past here */
1343 /* We are no longer at the start of the file. */
1344 pfile->only_seen_white = 0;
1346 old_written = CPP_WRITTEN (pfile);
1347 pfile->no_macro_expand++;
1350 /* We are at the end of a line.
1351 XXX Serious layering violation here. */
1352 int c = CPP_BUF_PEEK (CPP_BUFFER (pfile));
1354 break; /* Caller will issue error. */
1356 cpp_ice (pfile, "character %c at end of line in skip_if_group", c);
1357 CPP_BUFFER (pfile)->cur++;
1358 CPP_BUMP_LINE (pfile);
1359 CPP_SET_WRITTEN (pfile, old_written);
1360 pfile->only_seen_white = 1;
1362 token = _cpp_get_directive_token (pfile);
1364 if (token == CPP_DIRECTIVE)
1366 ret = consider_directive_while_skipping (pfile, save_if_stack);
1371 if (token != CPP_VSPACE)
1372 _cpp_skip_rest_of_line (pfile);
1374 CPP_SET_WRITTEN (pfile, old_written);
1375 pfile->no_macro_expand--;
1380 * handle a #else directive. Do this by just continuing processing
1381 * without changing if_stack ; this is so that the error message
1382 * for missing #endif's etc. will point to the original #if. It
1383 * is possible that something different would be better.
1390 validate_else (pfile, dtable[T_ELSE].name);
1391 _cpp_skip_rest_of_line (pfile);
1393 if (pfile->if_stack == CPP_BUFFER (pfile)->if_stack)
1395 cpp_error (pfile, "`#else' not within a conditional");
1400 /* #ifndef can't have its special treatment for containing the whole file
1401 if it has a #else clause. */
1402 pfile->if_stack->control_macro = 0;
1404 if (pfile->if_stack->type == T_ELSE)
1406 cpp_error (pfile, "`#else' after `#else'");
1407 cpp_error_with_line (pfile, pfile->if_stack->lineno, 0,
1408 "the conditional began here");
1410 pfile->if_stack->type = T_ELSE;
1413 if (pfile->if_stack->if_succeeded)
1414 return skip_if_group (pfile);
1416 ++pfile->if_stack->if_succeeded; /* continue processing input */
1421 * unstack after #endif command
1428 validate_else (pfile, dtable[T_ENDIF].name);
1429 _cpp_skip_rest_of_line (pfile);
1431 if (pfile->if_stack == CPP_BUFFER (pfile)->if_stack)
1432 cpp_error (pfile, "`#endif' not within a conditional");
1435 IF_STACK *temp = pfile->if_stack;
1436 pfile->if_stack = temp->next;
1437 if (temp->control_macro != 0)
1438 pfile->potential_control_macro = temp->control_macro;
1444 /* Issue -pedantic warning for text which is not a comment following
1445 an #else or #endif. Do not warn in system headers, as this is harmless
1446 and very common on old systems. */
1449 validate_else (pfile, directive)
1451 const U_CHAR *directive;
1454 if (! CPP_PEDANTIC (pfile))
1457 old_written = CPP_WRITTEN (pfile);
1458 pfile->no_macro_expand++;
1459 if (_cpp_get_directive_token (pfile) != CPP_VSPACE)
1461 "text following `#%s' violates ANSI standard", directive);
1462 CPP_SET_WRITTEN (pfile, old_written);
1463 pfile->no_macro_expand--;
1466 /* Called when we reach the end of a macro buffer. Walk back up the
1467 conditional stack till we reach its level at entry to this file,
1468 issuing error messages. */
1470 _cpp_unwind_if_stack (pfile, pbuf)
1474 struct if_stack *ifs, *nifs;
1476 for (ifs = pfile->if_stack;
1477 ifs != pbuf->if_stack;
1480 cpp_error_with_line (pfile, ifs->lineno, 0,
1481 "unterminated `#%s' conditional",
1482 dtable[ifs->type].name);
1487 pfile->if_stack = ifs;
1497 HASHNODE *base, *this;
1500 old_written = CPP_WRITTEN (pfile); /* remember where it starts */
1501 ret = _cpp_parse_assertion (pfile);
1506 cpp_error (pfile, "missing token-sequence in #assert");
1509 tlen = CPP_WRITTEN (pfile) - old_written;
1511 if (_cpp_get_directive_token (pfile) != CPP_VSPACE)
1513 cpp_error (pfile, "junk at end of #assert");
1516 sym = pfile->token_buffer + old_written;
1518 this = _cpp_lookup (pfile, sym, tlen);
1519 if (this->type == T_ASSERT)
1521 cpp_warning (pfile, "%s re-asserted", sym);
1525 blen = ustrchr (sym, '(') - sym;
1526 base = _cpp_lookup (pfile, sym, blen);
1527 if (base->type == T_VOID)
1529 base->type = T_ASSERT;
1530 base->value.aschain = 0;
1533 this->type = T_ASSERT;
1534 this->value.aschain = base->value.aschain;
1535 base->value.aschain = this;
1538 _cpp_skip_rest_of_line (pfile);
1539 CPP_SET_WRITTEN (pfile, old_written);
1550 long baselen, thislen;
1551 HASHNODE *base, *this, *next;
1553 old_written = CPP_WRITTEN (pfile);
1554 ret = _cpp_parse_assertion (pfile);
1557 thislen = CPP_WRITTEN (pfile) - old_written;
1559 if (_cpp_get_directive_token (pfile) != CPP_VSPACE)
1561 cpp_error (pfile, "junk at end of #unassert");
1564 sym = pfile->token_buffer + old_written;
1565 CPP_SET_WRITTEN (pfile, old_written);
1569 base = _cpp_lookup (pfile, sym, thislen);
1570 if (base->type == T_VOID)
1571 goto out; /* It isn't an error to #undef what isn't #defined,
1572 so it isn't an error to #unassert what isn't
1573 #asserted either. */
1575 for (this = base->value.aschain; this; this = next)
1577 next = this->value.aschain;
1578 this->value.aschain = NULL;
1579 this->type = T_VOID;
1581 base->value.aschain = NULL;
1582 base->type = T_VOID;
1586 baselen = ustrchr (sym, '(') - sym;
1587 base = _cpp_lookup (pfile, sym, baselen);
1588 if (base->type == T_VOID) goto out;
1589 this = _cpp_lookup (pfile, sym, thislen);
1590 if (this->type == T_VOID) goto out;
1593 while (next->value.aschain != this)
1594 next = next->value.aschain;
1596 next->value.aschain = this->value.aschain;
1597 this->value.aschain = NULL;
1598 this->type = T_VOID;
1600 if (base->value.aschain == NULL)
1601 /* Last answer for this predicate deleted. */
1602 base->type = T_VOID;
1607 _cpp_skip_rest_of_line (pfile);
1608 CPP_SET_WRITTEN (pfile, old_written);
1612 /* These are for -D, -U, -A. */
1614 /* Process the string STR as if it appeared as the body of a #define.
1615 If STR is just an identifier, define it with value 1.
1616 If STR has anything after the identifier, then it should
1617 be identifier=definition. */
1620 cpp_define (pfile, str)
1627 p = strchr (str, '=');
1628 /* Copy the entire option so we can modify it.
1629 Change the first "=" in the string to a space. If there is none,
1630 tack " 1" on the end. Then add a newline and a NUL. */
1634 count = strlen (str) + 2;
1635 buf = (char *) alloca (count);
1636 memcpy (buf, str, count - 2);
1638 buf[count - 2] = '\n';
1639 buf[count - 1] = '\0';
1643 count = strlen (str) + 4;
1644 buf = (char *) alloca (count);
1645 memcpy (buf, str, count - 4);
1646 strcpy (&buf[count-4], " 1\n");
1649 if (cpp_push_buffer (pfile, (U_CHAR *)buf, count - 1) != NULL)
1652 cpp_pop_buffer (pfile);
1656 /* Process MACRO as if it appeared as the body of an #undef. */
1658 cpp_undef (pfile, macro)
1662 /* Copy the string so we can append a newline. */
1663 size_t len = strlen (macro);
1664 char *buf = (char *) alloca (len + 2);
1665 memcpy (buf, macro, len);
1667 buf[len + 1] = '\0';
1668 if (cpp_push_buffer (pfile, (U_CHAR *)buf, len + 1) != NULL)
1671 cpp_pop_buffer (pfile);
1675 /* Process the string STR as if it appeared as the body of a #assert. */
1677 cpp_assert (pfile, str)
1681 if (cpp_push_buffer (pfile, (const U_CHAR *)str, strlen (str)) != NULL)
1684 cpp_pop_buffer (pfile);
1688 /* Process STR as if it appeared as the body of an #unassert. */
1690 cpp_unassert (pfile, str)
1694 if (cpp_push_buffer (pfile, (const U_CHAR *)str, strlen (str)) != NULL)
1696 do_unassert (pfile);
1697 cpp_pop_buffer (pfile);
1701 /* Determine whether the identifier ID, of length LEN, is a defined macro. */
1703 cpp_defined (pfile, id, len)
1708 HASHNODE *hp = _cpp_lookup (pfile, id, len);
1709 if (hp->type == T_POISON)
1711 cpp_error (pfile, "attempt to use poisoned `%s'", hp->name);
1714 return (hp->type != T_VOID);