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) /* 0 SVR4 */ \
118 D(unassert, T_UNASSERT, EXTENSION) /* 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 = token->val.name.text;
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_system_header PARAMS ((cpp_reader *));
815 static int do_pragma_default PARAMS ((cpp_reader *));
824 enum cpp_ttype token;
826 here = CPP_WRITTEN (pfile);
827 CPP_PUTS (pfile, "#pragma ", 8);
829 key = CPP_WRITTEN (pfile);
830 pfile->no_macro_expand++;
831 token = _cpp_get_directive_token (pfile);
832 if (token != CPP_NAME)
834 if (token == CPP_VSPACE)
840 buf = pfile->token_buffer + key;
841 CPP_PUTC (pfile, ' ');
843 #define tokis(x) !strncmp((char *) buf, x, sizeof(x) - 1)
845 pop = do_pragma_once (pfile);
846 else if (tokis ("implementation"))
847 pop = do_pragma_implementation (pfile);
848 else if (tokis ("poison"))
849 pop = do_pragma_poison (pfile);
850 else if (tokis ("system_header"))
851 pop = do_pragma_system_header (pfile);
853 pop = do_pragma_default (pfile);
856 if (_cpp_get_directive_token (pfile) != CPP_VSPACE)
860 CPP_SET_WRITTEN (pfile, here);
861 pfile->no_macro_expand--;
865 cpp_error (pfile, "malformed #pragma directive");
866 _cpp_skip_rest_of_line (pfile);
868 CPP_SET_WRITTEN (pfile, here);
869 pfile->no_macro_expand--;
874 do_pragma_default (pfile)
877 while (_cpp_get_directive_token (pfile) != CPP_VSPACE)
878 CPP_PUTC (pfile, ' ');
883 do_pragma_once (pfile)
886 cpp_buffer *ip = CPP_BUFFER (pfile);
888 /* Allow #pragma once in system headers, since that's not the user's
890 if (!ip->system_header_p)
891 cpp_warning (pfile, "`#pragma once' is obsolete");
893 if (CPP_PREV_BUFFER (ip) == NULL)
894 cpp_warning (pfile, "`#pragma once' outside include file");
896 ip->ihash->control_macro = U""; /* never repeat */
902 do_pragma_implementation (pfile)
905 /* Be quiet about `#pragma implementation' for a file only if it hasn't
906 been included yet. */
907 enum cpp_ttype token;
908 long written = CPP_WRITTEN (pfile);
913 token = _cpp_get_directive_token (pfile);
914 if (token == CPP_VSPACE)
916 else if (token != CPP_STRING)
918 cpp_error (pfile, "malformed #pragma implementation");
922 /* Trim the leading and trailing quote marks from the string. */
923 name = pfile->token_buffer + written + 1;
924 len = CPP_PWRITTEN (pfile) - name;
926 memcpy (copy, name, len - 1);
927 copy[len - 1] = '\0';
929 if (cpp_included (pfile, copy))
931 "`#pragma implementation' for `%s' appears after file is included",
937 do_pragma_poison (pfile)
940 /* Poison these symbols so that all subsequent usage produces an
946 enum cpp_ttype token;
949 /* As a rule, don't include #pragma poison commands in output,
950 unless the user asks for them. */
951 writeit = (CPP_OPTION (pfile, debug_output)
952 || CPP_OPTION (pfile, dump_macros) == dump_definitions
953 || CPP_OPTION (pfile, dump_macros) == dump_names);
957 written = CPP_WRITTEN (pfile);
958 token = _cpp_get_directive_token (pfile);
959 if (token == CPP_VSPACE)
961 if (token != CPP_NAME)
963 cpp_error (pfile, "invalid #pragma poison directive");
964 _cpp_skip_rest_of_line (pfile);
968 p = pfile->token_buffer + written;
969 len = CPP_PWRITTEN (pfile) - p;
970 hp = _cpp_lookup (pfile, p, len);
971 if (hp->type == T_POISON)
972 ; /* It is allowed to poison the same identifier twice. */
975 if (hp->type != T_VOID)
976 cpp_warning (pfile, "poisoning existing macro `%s'", hp->name);
977 _cpp_free_definition (hp);
981 CPP_PUTC (pfile, ' ');
986 /* Mark the current header as a system header. This will suppress
987 some categories of warnings (notably those from -pedantic). It is
988 intended for use in system libraries that cannot be implemented in
989 conforming C, but cannot be certain that their headers appear in a
990 system include directory. To prevent abuse, it is rejected in the
991 primary source file. */
993 do_pragma_system_header (pfile)
996 cpp_buffer *ip = cpp_file_buffer (pfile);
997 if (CPP_PREV_BUFFER (ip) == NULL)
998 cpp_warning (pfile, "#pragma system_header outside include file");
1000 ip->system_header_p = 1;
1005 /* Just ignore #sccs, on systems where we define it at all. */
1006 #ifdef SCCS_DIRECTIVE
1011 _cpp_skip_rest_of_line (pfile);
1016 /* We've found an `#if' directive. If the only thing before it in
1017 this file is white space, and if it is of the form
1018 `#if ! defined SYMBOL', then SYMBOL is a possible controlling macro
1019 for inclusion of this file. (See redundant_include_p in cppfiles.c
1020 for an explanation of controlling macros.) If so, return a
1021 malloced copy of SYMBOL. Otherwise, return NULL. */
1024 detect_if_not_defined (pfile)
1027 U_CHAR *control_macro = 0;
1028 enum cpp_ttype token;
1029 unsigned int base_offset;
1030 unsigned int token_offset;
1031 unsigned int need_rparen = 0;
1032 unsigned int token_len;
1034 if (pfile->only_seen_white != 2)
1037 /* Save state required for restore. */
1038 pfile->no_macro_expand++;
1039 CPP_SET_MARK (pfile);
1040 base_offset = CPP_WRITTEN (pfile);
1043 if (_cpp_get_directive_token (pfile) != CPP_OTHER
1044 || CPP_WRITTEN (pfile) != (size_t) base_offset + 1
1045 || CPP_PWRITTEN (pfile)[-1] != '!')
1048 /* ...then `defined', */
1049 token_offset = CPP_WRITTEN (pfile);
1050 token = _cpp_get_directive_token (pfile);
1051 if (token != CPP_NAME)
1053 if (ustrncmp (pfile->token_buffer + token_offset, U"defined", 7))
1056 /* ...then an optional '(' and the name, */
1057 token_offset = CPP_WRITTEN (pfile);
1058 token = _cpp_get_directive_token (pfile);
1059 if (token == CPP_OPEN_PAREN)
1061 token_offset = CPP_WRITTEN (pfile);
1063 token = _cpp_get_directive_token (pfile);
1065 if (token != CPP_NAME)
1068 token_len = CPP_WRITTEN (pfile) - token_offset;
1070 /* ...then the ')', if necessary, */
1071 if (need_rparen && _cpp_get_directive_token (pfile) != CPP_CLOSE_PAREN)
1074 /* ...and make sure there's nothing else on the line. */
1075 if (_cpp_get_directive_token (pfile) != CPP_VSPACE)
1078 /* We have a legitimate controlling macro for this header. */
1079 control_macro = (U_CHAR *) xmalloc (token_len + 1);
1080 memcpy (control_macro, pfile->token_buffer + token_offset, token_len);
1081 control_macro[token_len] = '\0';
1084 CPP_SET_WRITTEN (pfile, base_offset);
1085 pfile->no_macro_expand--;
1086 CPP_GOTO_MARK (pfile);
1088 return control_macro;
1092 * #if is straightforward; just call _cpp_parse_expr, then conditional_skip.
1093 * Also, check for a reinclude preventer of the form #if !defined (MACRO).
1100 U_CHAR *control_macro = detect_if_not_defined (pfile);
1101 int value = _cpp_parse_expr (pfile);
1102 return conditional_skip (pfile, value == 0, T_IF, control_macro);
1106 * handle a #elif directive by not changing if_stack either.
1107 * see the comment above do_else.
1114 if (pfile->if_stack == CPP_BUFFER (pfile)->if_stack)
1116 cpp_error (pfile, "`#elif' not within a conditional");
1121 if (pfile->if_stack->type == T_ELSE)
1123 cpp_error (pfile, "`#elif' after `#else'");
1124 cpp_error_with_line (pfile, pfile->if_stack->lineno, 0,
1125 "the conditional began here");
1127 pfile->if_stack->type = T_ELIF;
1130 if (pfile->if_stack->if_succeeded)
1132 _cpp_skip_rest_of_line (pfile);
1133 return skip_if_group (pfile);
1135 if (_cpp_parse_expr (pfile) == 0)
1136 return skip_if_group (pfile);
1138 ++pfile->if_stack->if_succeeded; /* continue processing input */
1142 /* Parse an #ifdef or #ifndef directive. Returns 1 for defined, 0 for
1143 not defined; the macro tested is left in the token buffer (but
1147 parse_ifdef (pfile, name)
1153 enum cpp_ttype token;
1154 long old_written = CPP_WRITTEN (pfile);
1157 pfile->no_macro_expand++;
1158 token = _cpp_get_directive_token (pfile);
1159 pfile->no_macro_expand--;
1161 ident = pfile->token_buffer + old_written;
1162 len = CPP_WRITTEN (pfile) - old_written;
1164 if (token == CPP_VSPACE)
1166 if (! CPP_TRADITIONAL (pfile))
1167 cpp_pedwarn (pfile, "`#%s' with no argument", name);
1171 else if (token == CPP_NAME)
1173 defined = cpp_defined (pfile, ident, len);
1174 CPP_PUTC (pfile, '\0'); /* so it can be copied with xstrdup */
1179 if (! CPP_TRADITIONAL (pfile))
1180 cpp_error (pfile, "`#%s' with invalid argument", name);
1183 if (!CPP_TRADITIONAL (pfile))
1185 if (_cpp_get_directive_token (pfile) == CPP_VSPACE)
1188 cpp_pedwarn (pfile, "garbage at end of `#%s' argument", name);
1190 _cpp_skip_rest_of_line (pfile);
1193 CPP_SET_WRITTEN (pfile, old_written); /* Pop */
1197 /* #ifdef is dead simple. */
1203 int skip = ! parse_ifdef (pfile, dtable[T_IFDEF].name);
1204 return conditional_skip (pfile, skip, T_IFDEF, 0);
1207 /* #ifndef is a tad more complex, because we need to check for a
1208 no-reinclusion wrapper. */
1214 int start_of_file, skip;
1215 U_CHAR *control_macro = 0;
1217 start_of_file = pfile->only_seen_white == 2;
1218 skip = parse_ifdef (pfile, dtable[T_IFNDEF].name);
1220 if (start_of_file && !skip)
1221 control_macro = uxstrdup (CPP_PWRITTEN (pfile));
1223 return conditional_skip (pfile, skip, T_IFNDEF, control_macro);
1226 /* Push TYPE on stack; then, if SKIP is nonzero, skip ahead.
1227 If this is a #ifndef starting at the beginning of a file,
1228 CONTROL_MACRO is the macro name tested by the #ifndef.
1229 Otherwise, CONTROL_MACRO is 0. */
1232 conditional_skip (pfile, skip, type, control_macro)
1236 U_CHAR *control_macro;
1240 temp = (IF_STACK *) xcalloc (1, sizeof (IF_STACK));
1241 temp->lineno = CPP_BUFFER (pfile)->lineno;
1242 temp->next = pfile->if_stack;
1243 temp->control_macro = control_macro;
1244 pfile->if_stack = temp;
1246 pfile->if_stack->type = type;
1249 return skip_if_group (pfile);
1251 ++pfile->if_stack->if_succeeded;
1255 /* Subroutine of skip_if_group. Examine one preprocessing directive
1256 and return 0 if skipping should continue, or the directive number
1257 of the directive that ends the block if it should halt.
1259 Also adjusts the if_stack as appropriate. The `#' has been read,
1260 but not the identifier. */
1263 consider_directive_while_skipping (pfile, stack)
1272 /* -traditional directives are recognized only with the # in column 1. */
1273 hash_at_bol = CPP_IN_COLUMN_1 (pfile);
1275 ident = CPP_WRITTEN (pfile);
1276 if (_cpp_get_directive_token (pfile) != CPP_NAME)
1278 len = CPP_WRITTEN (pfile) - ident;
1280 for (i = 0; i < N_DIRECTIVES; i++)
1282 if (dtable[i].length == len
1283 && !ustrncmp (dtable[i].name, pfile->token_buffer + ident, len))
1284 goto real_directive;
1290 /* If it's not a directive of interest to us, return now. */
1291 if (ORIGIN (dtable[i].flags) != COND)
1294 /* First, deal with -traditional and -Wtraditional.
1295 All COND directives are from K+R. */
1299 if (CPP_TRADITIONAL (pfile))
1301 if (CPP_WTRADITIONAL (pfile))
1302 cpp_warning (pfile, "ignoring #%s because of its indented #",
1306 if (CPP_WTRADITIONAL (pfile))
1307 cpp_warning (pfile, "traditional C ignores %s with the # indented",
1314 cpp_ice (pfile, "non COND directive in switch in c_d_w_s");
1320 temp = (IF_STACK *) xcalloc (1, sizeof (IF_STACK));
1321 temp->lineno = CPP_BUFFER (pfile)->lineno;
1322 temp->next = pfile->if_stack;
1324 pfile->if_stack = temp;
1328 if (pfile->if_stack != stack)
1329 validate_else (pfile, dtable[i].name);
1332 if (pfile->if_stack == stack)
1335 pfile->if_stack->type = i;
1339 if (pfile->if_stack != stack)
1340 validate_else (pfile, dtable[i].name);
1342 if (pfile->if_stack == stack)
1345 temp = pfile->if_stack;
1346 pfile->if_stack = temp->next;
1352 /* Skip to #endif, #else, or #elif. Consumes the directive that
1353 causes it to stop, but not its argument. Returns the number of
1354 that directive, which must be passed back up to
1355 _cpp_handle_directive, which will execute it. */
1357 skip_if_group (pfile)
1360 enum cpp_ttype token;
1361 IF_STACK *save_if_stack = pfile->if_stack; /* don't pop past here */
1365 /* We are no longer at the start of the file. */
1366 pfile->only_seen_white = 0;
1368 old_written = CPP_WRITTEN (pfile);
1369 pfile->no_macro_expand++;
1372 /* We are at the end of a line.
1373 XXX Serious layering violation here. */
1374 int c = CPP_BUF_PEEK (CPP_BUFFER (pfile));
1376 break; /* Caller will issue error. */
1378 cpp_ice (pfile, "character %c at end of line in skip_if_group", c);
1379 CPP_BUFFER (pfile)->cur++;
1380 CPP_BUMP_LINE (pfile);
1381 CPP_SET_WRITTEN (pfile, old_written);
1382 pfile->only_seen_white = 1;
1384 token = _cpp_get_directive_token (pfile);
1386 if (token == CPP_DIRECTIVE)
1388 ret = consider_directive_while_skipping (pfile, save_if_stack);
1393 if (token != CPP_VSPACE)
1394 _cpp_skip_rest_of_line (pfile);
1396 CPP_SET_WRITTEN (pfile, old_written);
1397 pfile->no_macro_expand--;
1402 * handle a #else directive. Do this by just continuing processing
1403 * without changing if_stack ; this is so that the error message
1404 * for missing #endif's etc. will point to the original #if. It
1405 * is possible that something different would be better.
1412 validate_else (pfile, dtable[T_ELSE].name);
1413 _cpp_skip_rest_of_line (pfile);
1415 if (pfile->if_stack == CPP_BUFFER (pfile)->if_stack)
1417 cpp_error (pfile, "`#else' not within a conditional");
1422 /* #ifndef can't have its special treatment for containing the whole file
1423 if it has a #else clause. */
1424 pfile->if_stack->control_macro = 0;
1426 if (pfile->if_stack->type == T_ELSE)
1428 cpp_error (pfile, "`#else' after `#else'");
1429 cpp_error_with_line (pfile, pfile->if_stack->lineno, 0,
1430 "the conditional began here");
1432 pfile->if_stack->type = T_ELSE;
1435 if (pfile->if_stack->if_succeeded)
1436 return skip_if_group (pfile);
1438 ++pfile->if_stack->if_succeeded; /* continue processing input */
1443 * unstack after #endif command
1450 validate_else (pfile, dtable[T_ENDIF].name);
1451 _cpp_skip_rest_of_line (pfile);
1453 if (pfile->if_stack == CPP_BUFFER (pfile)->if_stack)
1454 cpp_error (pfile, "`#endif' not within a conditional");
1457 IF_STACK *temp = pfile->if_stack;
1458 pfile->if_stack = temp->next;
1459 if (temp->control_macro != 0)
1460 pfile->potential_control_macro = temp->control_macro;
1466 /* Issue -pedantic warning for text which is not a comment following
1467 an #else or #endif. Do not warn in system headers, as this is harmless
1468 and very common on old systems. */
1471 validate_else (pfile, directive)
1473 const U_CHAR *directive;
1476 if (! CPP_PEDANTIC (pfile))
1479 old_written = CPP_WRITTEN (pfile);
1480 pfile->no_macro_expand++;
1481 if (_cpp_get_directive_token (pfile) != CPP_VSPACE)
1483 "text following `#%s' violates ANSI standard", directive);
1484 CPP_SET_WRITTEN (pfile, old_written);
1485 pfile->no_macro_expand--;
1488 /* Called when we reach the end of a macro buffer. Walk back up the
1489 conditional stack till we reach its level at entry to this file,
1490 issuing error messages. */
1492 _cpp_unwind_if_stack (pfile, pbuf)
1496 struct if_stack *ifs, *nifs;
1498 for (ifs = pfile->if_stack;
1499 ifs != pbuf->if_stack;
1502 cpp_error_with_line (pfile, ifs->lineno, 0,
1503 "unterminated `#%s' conditional",
1504 dtable[ifs->type].name);
1509 pfile->if_stack = ifs;
1519 HASHNODE *base, *this;
1522 old_written = CPP_WRITTEN (pfile); /* remember where it starts */
1523 ret = _cpp_parse_assertion (pfile);
1528 cpp_error (pfile, "missing token-sequence in #assert");
1531 tlen = CPP_WRITTEN (pfile) - old_written;
1533 if (_cpp_get_directive_token (pfile) != CPP_VSPACE)
1535 cpp_error (pfile, "junk at end of #assert");
1538 sym = pfile->token_buffer + old_written;
1540 this = _cpp_lookup (pfile, sym, tlen);
1541 if (this->type == T_ASSERT)
1543 cpp_warning (pfile, "%s re-asserted", sym);
1547 blen = ustrchr (sym, '(') - sym;
1548 base = _cpp_lookup (pfile, sym, blen);
1549 if (base->type == T_VOID)
1551 base->type = T_ASSERT;
1552 base->value.aschain = 0;
1555 this->type = T_ASSERT;
1556 this->value.aschain = base->value.aschain;
1557 base->value.aschain = this;
1560 _cpp_skip_rest_of_line (pfile);
1561 CPP_SET_WRITTEN (pfile, old_written);
1572 long baselen, thislen;
1573 HASHNODE *base, *this, *next;
1575 old_written = CPP_WRITTEN (pfile);
1576 ret = _cpp_parse_assertion (pfile);
1579 thislen = CPP_WRITTEN (pfile) - old_written;
1581 if (_cpp_get_directive_token (pfile) != CPP_VSPACE)
1583 cpp_error (pfile, "junk at end of #unassert");
1586 sym = pfile->token_buffer + old_written;
1587 CPP_SET_WRITTEN (pfile, old_written);
1591 base = _cpp_lookup (pfile, sym, thislen);
1592 if (base->type == T_VOID)
1593 goto out; /* It isn't an error to #undef what isn't #defined,
1594 so it isn't an error to #unassert what isn't
1595 #asserted either. */
1597 for (this = base->value.aschain; this; this = next)
1599 next = this->value.aschain;
1600 this->value.aschain = NULL;
1601 this->type = T_VOID;
1603 base->value.aschain = NULL;
1604 base->type = T_VOID;
1608 baselen = ustrchr (sym, '(') - sym;
1609 base = _cpp_lookup (pfile, sym, baselen);
1610 if (base->type == T_VOID) goto out;
1611 this = _cpp_lookup (pfile, sym, thislen);
1612 if (this->type == T_VOID) goto out;
1615 while (next->value.aschain != this)
1616 next = next->value.aschain;
1618 next->value.aschain = this->value.aschain;
1619 this->value.aschain = NULL;
1620 this->type = T_VOID;
1622 if (base->value.aschain == NULL)
1623 /* Last answer for this predicate deleted. */
1624 base->type = T_VOID;
1629 _cpp_skip_rest_of_line (pfile);
1630 CPP_SET_WRITTEN (pfile, old_written);
1634 /* These are for -D, -U, -A. */
1636 /* Process the string STR as if it appeared as the body of a #define.
1637 If STR is just an identifier, define it with value 1.
1638 If STR has anything after the identifier, then it should
1639 be identifier=definition. */
1642 cpp_define (pfile, str)
1649 p = strchr (str, '=');
1650 /* Copy the entire option so we can modify it.
1651 Change the first "=" in the string to a space. If there is none,
1652 tack " 1" on the end. Then add a newline and a NUL. */
1656 count = strlen (str) + 2;
1657 buf = (char *) alloca (count);
1658 memcpy (buf, str, count - 2);
1660 buf[count - 2] = '\n';
1661 buf[count - 1] = '\0';
1665 count = strlen (str) + 4;
1666 buf = (char *) alloca (count);
1667 memcpy (buf, str, count - 4);
1668 strcpy (&buf[count-4], " 1\n");
1671 if (cpp_push_buffer (pfile, (U_CHAR *)buf, count - 1) != NULL)
1674 cpp_pop_buffer (pfile);
1678 /* Process MACRO as if it appeared as the body of an #undef. */
1680 cpp_undef (pfile, macro)
1684 /* Copy the string so we can append a newline. */
1685 size_t len = strlen (macro);
1686 char *buf = (char *) alloca (len + 2);
1687 memcpy (buf, macro, len);
1689 buf[len + 1] = '\0';
1690 if (cpp_push_buffer (pfile, (U_CHAR *)buf, len + 1) != NULL)
1693 cpp_pop_buffer (pfile);
1697 /* Process the string STR as if it appeared as the body of a #assert. */
1699 cpp_assert (pfile, str)
1703 if (cpp_push_buffer (pfile, (const U_CHAR *)str, strlen (str)) != NULL)
1706 cpp_pop_buffer (pfile);
1710 /* Process STR as if it appeared as the body of an #unassert. */
1712 cpp_unassert (pfile, str)
1716 if (cpp_push_buffer (pfile, (const U_CHAR *)str, strlen (str)) != NULL)
1718 do_unassert (pfile);
1719 cpp_pop_buffer (pfile);
1723 /* Determine whether the identifier ID, of length LEN, is a defined macro. */
1725 cpp_defined (pfile, id, len)
1730 HASHNODE *hp = _cpp_lookup (pfile, id, len);
1731 if (hp->type == T_POISON)
1733 cpp_error (pfile, "attempt to use poisoned `%s'", hp->name);
1736 return (hp->type != T_VOID);