1 /* CPP Library. (Directive handling.)
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000 Free Software Foundation, Inc.
4 Contributed by Per Bothner, 1994-95.
5 Based on CCCP program by Paul Rubin, June 1986
6 Adapted to ANSI C, Richard Stallman, Jan 1987
8 This program is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
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 /* Chained list of answers to an assertion. */
39 /* Stack of conditionals currently in progress
40 (including both successful and failing conditionals). */
44 struct if_stack *next;
45 cpp_lexer_pos pos; /* line and column where condition started */
46 const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
47 unsigned char was_skipping; /* Value of pfile->skipping before this if. */
48 int type; /* type of last directive seen in this group */
51 /* Values for the origin field of struct directive. KANDR directives
52 come from traditional (K&R) C. STDC89 directives come from the
53 1989 C standard. EXTENSION directives are extensions. */
58 /* Values for the flags field of struct directive. COND indicates a
59 conditional; IF_COND an opening conditional. INCL means to treat
60 "..." and <...> as q-char and h-char sequences respectively. IN_I
61 means this directive should be handled even if -fpreprocessed is in
62 effect (these are the directives with callback hooks). */
64 #define IF_COND (1 << 1)
68 /* Defines one #-directive, including how to handle it. */
69 typedef void (*directive_handler) PARAMS ((cpp_reader *));
70 typedef struct directive directive;
73 directive_handler handler; /* Function to handle directive. */
74 const U_CHAR *name; /* Name of directive. */
75 unsigned short length; /* Length of name. */
76 unsigned char origin; /* Origin of directive. */
77 unsigned char flags; /* Flags describing this directive. */
80 /* Forward declarations. */
82 static void skip_rest_of_line PARAMS ((cpp_reader *));
83 static void check_eol PARAMS ((cpp_reader *));
84 static void start_directive PARAMS ((cpp_reader *));
85 static void end_directive PARAMS ((cpp_reader *, int));
86 static void run_directive PARAMS ((cpp_reader *, int,
88 const char *, size_t));
89 static int glue_header_name PARAMS ((cpp_reader *, cpp_token *));
90 static int parse_include PARAMS ((cpp_reader *, cpp_token *));
91 static void push_conditional PARAMS ((cpp_reader *, int, int,
92 const cpp_hashnode *));
93 static unsigned int read_flag PARAMS ((cpp_reader *, unsigned int));
94 static int strtoul_for_line PARAMS ((const U_CHAR *, unsigned int,
96 static void do_diagnostic PARAMS ((cpp_reader *, enum error_type, int));
97 static cpp_hashnode *lex_macro_node PARAMS ((cpp_reader *));
98 static void do_pragma_once PARAMS ((cpp_reader *));
99 static void do_pragma_poison PARAMS ((cpp_reader *));
100 static void do_pragma_system_header PARAMS ((cpp_reader *));
101 static void do_pragma_dependency PARAMS ((cpp_reader *));
102 static int get__Pragma_string PARAMS ((cpp_reader *, cpp_token *));
103 static unsigned char *destringize PARAMS ((const cpp_string *,
105 static int parse_answer PARAMS ((cpp_reader *, struct answer **, int));
106 static cpp_hashnode *parse_assertion PARAMS ((cpp_reader *, struct answer **,
108 static struct answer ** find_answer PARAMS ((cpp_hashnode *,
109 const struct answer *));
110 static void handle_assertion PARAMS ((cpp_reader *, const char *, int));
111 static void do_file_change PARAMS ((cpp_reader *, enum cpp_fc_reason,
112 const char *, unsigned int));
114 /* This is the table of directive handlers. It is ordered by
115 frequency of occurrence; the numbers at the end are directive
116 counts from all the source code I have lying around (egcs and libc
117 CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
118 pcmcia-cs-3.0.9). This is no longer important as directive lookup
119 is now O(1). All extensions other than #warning and #include_next
120 are deprecated. The name is where the extension appears to have
123 #define DIRECTIVE_TABLE \
124 D(define, T_DEFINE = 0, KANDR, IN_I) /* 270554 */ \
125 D(include, T_INCLUDE, KANDR, INCL) /* 52262 */ \
126 D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \
127 D(ifdef, T_IFDEF, KANDR, COND | IF_COND) /* 22000 */ \
128 D(if, T_IF, KANDR, COND | IF_COND) /* 18162 */ \
129 D(else, T_ELSE, KANDR, COND) /* 9863 */ \
130 D(ifndef, T_IFNDEF, KANDR, COND | IF_COND) /* 9675 */ \
131 D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \
132 D(line, T_LINE, KANDR, IN_I) /* 2465 */ \
133 D(elif, T_ELIF, KANDR, COND) /* 610 */ \
134 D(error, T_ERROR, STDC89, 0) /* 475 */ \
135 D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \
136 D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \
137 D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL) /* 19 */ \
138 D(ident, T_IDENT, EXTENSION, IN_I) /* 11 */ \
139 D(import, T_IMPORT, EXTENSION, INCL) /* 0 ObjC */ \
140 D(assert, T_ASSERT, EXTENSION, 0) /* 0 SVR4 */ \
141 D(unassert, T_UNASSERT, EXTENSION, 0) /* 0 SVR4 */ \
142 SCCS_ENTRY /* 0 SVR4? */
144 /* #sccs is not always recognized. */
145 #ifdef SCCS_DIRECTIVE
146 # define SCCS_ENTRY D(sccs, T_SCCS, EXTENSION, 0)
148 # define SCCS_ENTRY /* nothing */
151 /* Use the table to generate a series of prototypes, an enum for the
152 directive names, and an array of directive handlers. */
154 /* The directive-processing functions are declared to return int
155 instead of void, because some old compilers have trouble with
156 pointers to functions returning void. */
158 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
159 #define D(name, t, o, f) static void CONCAT2(do_,name) PARAMS ((cpp_reader *));
163 #define D(n, tag, o, f) tag,
172 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
173 #define D(name, t, origin, flags) \
174 { CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
175 sizeof STRINGX(name) - 1, origin, flags },
176 static const directive dtable[] =
181 #undef DIRECTIVE_TABLE
183 /* Skip any remaining tokens in a directive. */
185 skip_rest_of_line (pfile)
190 /* Discard all input lookaheads. */
191 while (pfile->la_read)
192 _cpp_release_lookahead (pfile);
194 /* Discard all stacked contexts. */
195 while (pfile->context != &pfile->base_context)
196 _cpp_pop_context (pfile);
198 /* Sweep up all tokens remaining on the line. */
199 pfile->state.prevent_expansion++;
200 while (!pfile->state.next_bol)
201 _cpp_lex_token (pfile, &token);
202 pfile->state.prevent_expansion--;
205 /* Ensure there are no stray tokens at the end of a directive. */
210 if (!pfile->state.next_bol)
214 _cpp_lex_token (pfile, &token);
215 if (token.type != CPP_EOF)
216 cpp_pedwarn (pfile, "extra tokens at end of #%s directive",
217 pfile->directive->name);
221 /* Called when entering a directive, _Pragma or command-line directive. */
223 start_directive (pfile)
226 cpp_buffer *buffer = pfile->buffer;
228 /* Setup in-directive state. */
229 pfile->state.in_directive = 1;
230 pfile->state.save_comments = 0;
232 /* Some handlers need the position of the # for diagnostics. */
233 pfile->directive_pos = pfile->lexer_pos;
235 /* Don't save directive tokens for external clients. */
236 pfile->la_saved = pfile->la_write;
239 /* Turn off skipping. */
240 buffer->was_skipping = pfile->skipping;
244 /* Called when leaving a directive, _Pragma or command-line directive. */
246 end_directive (pfile, skip_line)
250 cpp_buffer *buffer = pfile->buffer;
252 /* Restore pfile->skipping before skip_rest_of_line, so that e.g.
253 __VA_ARGS__ in the rest of the directive doesn't warn. */
254 pfile->skipping = buffer->was_skipping;
256 /* We don't skip for an assembler #. */
258 skip_rest_of_line (pfile);
261 pfile->la_write = pfile->la_saved;
262 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
263 pfile->state.in_directive = 0;
264 pfile->state.angled_headers = 0;
265 pfile->state.line_extension = 0;
266 pfile->directive = 0;
269 /* Check if a token's name matches that of a known directive. Put in
270 this file to save exporting dtable and other unneeded information. */
272 _cpp_handle_directive (pfile, indented)
276 cpp_buffer *buffer = pfile->buffer;
277 const directive *dir = 0;
281 start_directive (pfile);
283 /* Lex the directive name directly. */
284 _cpp_lex_token (pfile, &dname);
286 if (dname.type == CPP_NAME)
288 unsigned int index = dname.val.node->directive_index;
290 dir = &dtable[index - 1];
292 else if (dname.type == CPP_NUMBER)
294 /* # followed by a number is equivalent to #line. Do not
295 recognize this form in assembly language source files or
296 skipped conditional groups. Complain about this form if
297 we're being pedantic, but not if this is regurgitated input
298 (preprocessed or fed back in by the C++ frontend). */
299 if (! buffer->was_skipping && CPP_OPTION (pfile, lang) != CLK_ASM)
301 dir = &dtable[T_LINE];
302 pfile->state.line_extension = 1;
303 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
304 if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed))
305 cpp_pedwarn (pfile, "# followed by integer");
309 pfile->directive = dir;
312 /* Make sure we lex headers correctly, whether skipping or not. */
313 pfile->state.angled_headers = dir->flags & INCL;
315 /* If we are rescanning preprocessed input, only directives tagged
316 with IN_I are honored, and the warnings below are suppressed. */
317 if (! CPP_OPTION (pfile, preprocessed) || dir->flags & IN_I)
319 /* Traditionally, a directive is ignored unless its # is in
320 column 1. Therefore in code intended to work with K+R
321 compilers, directives added by C89 must have their #
322 indented, and directives present in traditional C must
323 not. This is true even of directives in skipped
324 conditional blocks. */
325 if (CPP_WTRADITIONAL (pfile))
327 if (indented && dir->origin == KANDR)
329 "traditional C ignores #%s with the # indented",
331 else if (!indented && dir->origin != KANDR)
333 "suggest hiding #%s from traditional C with an indented #",
337 /* If we are skipping a failed conditional group, all
338 non-conditional directives are ignored. */
339 if (! buffer->was_skipping || (dir->flags & COND))
341 /* Issue -pedantic warnings for extensions. */
342 if (CPP_PEDANTIC (pfile) && dir->origin == EXTENSION)
343 cpp_pedwarn (pfile, "#%s is a GCC extension", dir->name);
345 /* If we have a directive that is not an opening
346 conditional, invalidate any control macro. */
347 if (! (dir->flags & IF_COND))
348 pfile->mi_state = MI_FAILED;
350 (*dir->handler) (pfile);
354 else if (dname.type != CPP_EOF && ! pfile->skipping)
356 /* An unknown directive. Don't complain about it in assembly
357 source: we don't know where the comments are, and # may
358 introduce assembler pseudo-ops. Don't complain about invalid
359 directives in skipped conditional groups (6.10 p4). */
360 if (CPP_OPTION (pfile, lang) == CLK_ASM)
362 /* Output the # and lookahead token for the assembler. */
363 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
367 cpp_error (pfile, "invalid preprocessing directive #%s",
368 cpp_token_as_text (pfile, &dname));
371 end_directive (pfile, skip);
375 /* Directive handler wrapper used by the command line option
378 run_directive (pfile, dir_no, type, buf, count)
381 enum cpp_buffer_type type;
385 unsigned int output_line = pfile->lexer_pos.output_line;
388 buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count, type, 0);
390 if (dir_no == T_PRAGMA)
392 /* A kludge to avoid line markers for _Pragma. */
393 pfile->lexer_pos.output_line = output_line;
394 /* Avoid interpretation of directives in a _Pragma string. */
395 pfile->state.next_bol = 0;
398 start_directive (pfile);
399 pfile->state.prevent_expansion++;
400 (void) (*dtable[dir_no].handler) (pfile);
401 pfile->state.prevent_expansion--;
403 end_directive (pfile, 1);
405 cpp_pop_buffer (pfile);
408 /* Checks for validity the macro name in #define, #undef, #ifdef and
409 #ifndef directives. */
410 static cpp_hashnode *
411 lex_macro_node (pfile)
416 /* Lex the macro name directly. */
417 _cpp_lex_token (pfile, &token);
419 /* The token immediately after #define must be an identifier. That
420 identifier is not allowed to be "defined". See predefined macro
421 names (6.10.8.4). In C++, it is not allowed to be any of the
422 <iso646.h> macro names (which are keywords in C++) either. */
424 if (token.type != CPP_NAME)
426 if (token.type == CPP_EOF)
427 cpp_error (pfile, "no macro name given in #%s directive",
428 pfile->directive->name);
429 else if (token.flags & NAMED_OP)
431 "\"%s\" cannot be used as a macro name as it is an operator in C++",
432 token.val.node->name);
434 cpp_error (pfile, "macro names must be identifiers");
438 cpp_hashnode *node = token.val.node;
440 /* In Objective C, some keywords begin with '@', but general
441 identifiers do not, and you're not allowed to #define them. */
442 if (node == pfile->spec_nodes.n_defined || node->name[0] == '@')
443 cpp_error (pfile, "\"%s\" cannot be used as a macro name", node->name);
444 else if (!(node->flags & NODE_POISONED))
451 /* Process a #define directive. Most work is done in cppmacro.c. */
456 cpp_hashnode *node = lex_macro_node (pfile);
460 /* Use the permanent pool for storage. */
461 pfile->string_pool = &pfile->ident_pool;
463 if (_cpp_create_definition (pfile, node))
464 if (pfile->cb.define)
465 (*pfile->cb.define) (pfile, node);
467 /* Revert to the temporary pool. */
468 pfile->string_pool = &pfile->temp_string_pool;
472 /* Handle #undef. Marks the identifier NT_VOID in the hash table. */
477 cpp_hashnode *node = lex_macro_node (pfile);
479 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier
480 is not currently defined as a macro name. */
481 if (node && node->type == NT_MACRO)
484 (*pfile->cb.undef) (pfile, node);
486 if (node->flags & NODE_BUILTIN)
487 cpp_warning (pfile, "undefining \"%s\"", node->name);
489 _cpp_free_definition (node);
494 /* Helper routine used by parse_include. Reinterpret the current line
495 as an h-char-sequence (< ... >); we are looking at the first token
496 after the <. Returns zero on success. */
498 glue_header_name (pfile, header)
503 unsigned char *buffer, *token_mem;
504 size_t len, total_len = 0, capacity = 1024;
506 /* To avoid lexed tokens overwriting our glued name, we can only
507 allocate from the string pool once we've lexed everything. */
509 buffer = (unsigned char *) xmalloc (capacity);
512 cpp_get_token (pfile, &token);
514 if (token.type == CPP_GREATER || token.type == CPP_EOF)
517 len = cpp_token_len (&token);
518 if (total_len + len > capacity)
520 capacity = (capacity + len) * 2;
521 buffer = (unsigned char *) xrealloc (buffer, capacity);
524 if (token.flags & PREV_WHITE)
525 buffer[total_len++] = ' ';
527 total_len = cpp_spell_token (pfile, &token, &buffer[total_len]) - buffer;
530 if (token.type == CPP_EOF)
531 cpp_error (pfile, "missing terminating > character");
534 token_mem = _cpp_pool_alloc (pfile->string_pool, total_len);
535 memcpy (token_mem, buffer, total_len);
537 header->type = CPP_HEADER_NAME;
538 header->flags &= ~PREV_WHITE;
539 header->val.str.len = total_len;
540 header->val.str.text = token_mem;
544 return token.type == CPP_EOF;
547 /* Parse the header name of #include, #include_next, #import and
548 #pragma dependency. Returns zero on success. */
550 parse_include (pfile, header)
554 int is_pragma = pfile->directive == &dtable[T_PRAGMA];
555 const unsigned char *dir;
558 dir = U"pragma dependency";
560 dir = pfile->directive->name;
562 /* Allow macro expansion. */
563 cpp_get_token (pfile, header);
564 if (header->type != CPP_STRING && header->type != CPP_HEADER_NAME)
566 if (header->type != CPP_LESS)
568 cpp_error (pfile, "#%s expects \"FILENAME\" or <FILENAME>", dir);
571 if (glue_header_name (pfile, header))
575 if (header->val.str.len == 0)
577 cpp_error (pfile, "empty file name in #%s", dir);
584 /* Get out of macro context, if we are. */
585 skip_rest_of_line (pfile);
586 if (pfile->cb.include)
587 (*pfile->cb.include) (pfile, dir, header);
599 if (!parse_include (pfile, &header))
600 _cpp_execute_include (pfile, &header, 0, 0);
609 if (!pfile->import_warning && CPP_OPTION (pfile, warn_import))
611 pfile->import_warning = 1;
613 "#import is obsolete, use an #ifndef wrapper in the header file");
616 if (!parse_include (pfile, &header))
617 _cpp_execute_include (pfile, &header, 1, 0);
621 do_include_next (pfile)
626 if (!parse_include (pfile, &header))
627 _cpp_execute_include (pfile, &header, 0, 1);
630 /* Subroutine of do_line. Read possible flags after file name. LAST
631 is the last flag seen; 0 if this is the first flag. Return the flag
632 if it is valid, 0 at the end of the directive. Otherwise complain. */
635 read_flag (pfile, last)
641 _cpp_lex_token (pfile, &token);
642 if (token.type == CPP_NUMBER && token.val.str.len == 1)
644 unsigned int flag = token.val.str.text[0] - '0';
646 if (flag > last && flag <= 4
647 && (flag != 4 || last == 3)
648 && (flag != 2 || last == 0))
652 if (token.type != CPP_EOF)
653 cpp_error (pfile, "invalid flag \"%s\" in line directive",
654 cpp_token_as_text (pfile, &token));
658 /* Another subroutine of do_line. Convert a number in STR, of length
659 LEN, to binary; store it in NUMP, and return 0 if the number was
660 well-formed, 1 if not. Temporary, hopefully. */
662 strtoul_for_line (str, len, nump)
667 unsigned long reg = 0;
681 /* Interpret #line command.
682 Note that the filename string (if any) is treated as if it were an
683 include filename. That means no escape handling. */
689 cpp_buffer *buffer = pfile->buffer;
690 const char *filename = buffer->nominal_fname;
691 unsigned int lineno = buffer->lineno;
692 enum cpp_fc_reason reason = FC_RENAME;
693 unsigned long new_lineno;
697 /* C99 raised the minimum limit on #line numbers. */
698 cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
700 /* #line commands expand macros. */
701 cpp_get_token (pfile, &token);
702 if (token.type != CPP_NUMBER
703 || strtoul_for_line (token.val.str.text, token.val.str.len, &new_lineno))
705 cpp_error (pfile, "\"%s\" after #line is not a positive integer",
706 cpp_token_as_text (pfile, &token));
710 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
711 cpp_pedwarn (pfile, "line number out of range");
713 cpp_get_token (pfile, &token);
714 if (token.type == CPP_STRING)
719 /* FIXME: memory leak. */
720 len = token.val.str.len;
721 fname = xmalloc (len + 1);
722 memcpy (fname, token.val.str.text, len);
725 _cpp_simplify_pathname (fname);
727 if (! pfile->state.line_extension)
731 int flag = 0, sysp = 0;
733 flag = read_flag (pfile, flag);
737 flag = read_flag (pfile, flag);
742 flag = read_flag (pfile, flag);
747 flag = read_flag (pfile, flag);
749 sysp = 2, read_flag (pfile, flag);
752 if (reason == FC_ENTER)
754 cpp_push_buffer (pfile, 0, 0, BUF_FAKE, fname);
755 buffer = pfile->buffer;
757 else if (reason == FC_LEAVE)
759 if (buffer->type != BUF_FAKE)
760 cpp_warning (pfile, "file \"%s\" left but not entered",
761 buffer->nominal_fname);
764 cpp_pop_buffer (pfile);
765 buffer = pfile->buffer;
766 if (strcmp (buffer->nominal_fname, fname))
767 cpp_warning (pfile, "expected to return to file \"%s\"",
768 buffer->nominal_fname);
769 if (buffer->lineno + 1 != new_lineno)
770 cpp_warning (pfile, "expected to return to line number %u",
772 if (buffer->sysp != sysp)
773 cpp_warning (pfile, "header flags for \"%s\" have changed",
774 buffer->nominal_fname);
778 cpp_make_system_header (pfile, sysp, sysp == 2);
781 buffer->nominal_fname = fname;
783 else if (token.type != CPP_EOF)
785 cpp_error (pfile, "\"%s\" is not a valid filename",
786 cpp_token_as_text (pfile, &token));
790 /* Our line number is incremented after the directive is processed. */
791 buffer->lineno = new_lineno - 1;
793 if (reason == FC_RENAME)
795 /* Special case for file "foo.i" with "# 1 foo.c" on first line. */
796 if (! buffer->prev && pfile->directive_pos.line == 1)
798 do_file_change (pfile, reason, filename, lineno);
802 /* Arrange the file_change callback. */
804 do_file_change (pfile, reason, from_file, from_lineno)
806 enum cpp_fc_reason reason;
807 const char *from_file;
808 unsigned int from_lineno;
810 if (pfile->cb.change_file)
813 cpp_buffer *buffer = pfile->buffer;
816 fc.from.filename = from_file;
817 fc.from.lineno = from_lineno;
818 fc.to.filename = buffer->nominal_fname;
819 fc.to.lineno = buffer->lineno + 1;
820 fc.sysp = buffer->sysp;
821 fc.externc = CPP_OPTION (pfile, cplusplus) && buffer->sysp == 2;
822 pfile->cb.change_file (pfile, &fc);
827 * Report a warning or error detected by the program we are
828 * processing. Use the directive's tokens in the error message.
832 do_diagnostic (pfile, code, print_dir)
834 enum error_type code;
837 if (_cpp_begin_message (pfile, code, NULL, 0))
840 fprintf (stderr, "#%s ", pfile->directive->name);
841 pfile->state.prevent_expansion++;
842 cpp_output_line (pfile, stderr);
843 pfile->state.prevent_expansion--;
851 do_diagnostic (pfile, ERROR, 1);
858 do_diagnostic (pfile, WARNING, 1);
861 /* Report program identification. */
869 cpp_get_token (pfile, &str);
870 if (str.type != CPP_STRING)
871 cpp_error (pfile, "invalid #ident");
872 else if (pfile->cb.ident)
873 (*pfile->cb.ident) (pfile, &str.val.str);
878 /* Pragmata handling. We handle some of these, and pass the rest on
879 to the front end. C99 defines three pragmas and says that no macro
880 expansion is to be performed on them; whether or not macro
881 expansion happens for other pragmas is implementation defined.
882 This implementation never macro-expands the text after #pragma. */
884 /* Sub-handlers for the pragmas needing treatment here.
885 They return 1 if the token buffer is to be popped, 0 if not. */
888 struct pragma_entry *next;
893 void (*handler) PARAMS ((cpp_reader *));
894 struct pragma_entry *space;
899 cpp_register_pragma (pfile, space, name, handler)
903 void (*handler) PARAMS ((cpp_reader *));
905 struct pragma_entry **x, *new;
911 struct pragma_entry *p = pfile->pragmas;
912 len = strlen (space);
915 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
922 cpp_ice (pfile, "unknown #pragma namespace %s", space);
927 new = xnew (struct pragma_entry);
929 new->len = strlen (name);
931 new->u.handler = handler;
938 cpp_register_pragma_space (pfile, space)
942 struct pragma_entry *new;
943 const struct pragma_entry *p = pfile->pragmas;
944 size_t len = strlen (space);
948 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
949 /* Multiple different callers are allowed to register the same
955 new = xnew (struct pragma_entry);
961 new->next = pfile->pragmas;
962 pfile->pragmas = new;
966 _cpp_init_internal_pragmas (pfile)
970 cpp_register_pragma (pfile, 0, "poison", do_pragma_poison);
971 cpp_register_pragma (pfile, 0, "once", do_pragma_once);
974 cpp_register_pragma_space (pfile, "GCC");
976 cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
977 cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
978 cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
985 const struct pragma_entry *p;
987 const cpp_hashnode *node;
993 pfile->state.prevent_expansion++;
994 cpp_start_lookahead (pfile);
997 cpp_get_token (pfile, &tok);
998 if (tok.type == CPP_NAME)
1000 node = tok.val.node;
1005 if (strlen (p->name) == len && !memcmp (p->name, name, len))
1014 (*p->u.handler) (pfile);
1023 cpp_stop_lookahead (pfile, drop);
1024 pfile->state.prevent_expansion--;
1026 if (!drop && pfile->cb.def_pragma)
1027 (*pfile->cb.def_pragma) (pfile);
1031 do_pragma_once (pfile)
1034 cpp_warning (pfile, "#pragma once is obsolete");
1036 if (pfile->buffer->prev == NULL)
1037 cpp_warning (pfile, "#pragma once in main file");
1039 _cpp_never_reread (pfile->buffer->inc);
1045 do_pragma_poison (pfile)
1048 /* Poison these symbols so that all subsequent usage produces an
1053 pfile->state.poisoned_ok = 1;
1056 _cpp_lex_token (pfile, &tok);
1057 if (tok.type == CPP_EOF)
1059 if (tok.type != CPP_NAME)
1061 cpp_error (pfile, "invalid #pragma GCC poison directive");
1066 if (hp->flags & NODE_POISONED)
1069 if (hp->type == NT_MACRO)
1070 cpp_warning (pfile, "poisoning existing macro \"%s\"", hp->name);
1071 _cpp_free_definition (hp);
1072 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
1074 pfile->state.poisoned_ok = 0;
1076 #if 0 /* Doesn't quite work yet. */
1077 if (tok.type == CPP_EOF && pfile->cb.poison)
1078 (*pfile->cb.poison) (pfile);
1082 /* Mark the current header as a system header. This will suppress
1083 some categories of warnings (notably those from -pedantic). It is
1084 intended for use in system libraries that cannot be implemented in
1085 conforming C, but cannot be certain that their headers appear in a
1086 system include directory. To prevent abuse, it is rejected in the
1087 primary source file. */
1089 do_pragma_system_header (pfile)
1092 cpp_buffer *buffer = pfile->buffer;
1094 if (buffer->prev == 0)
1095 cpp_warning (pfile, "#pragma system_header ignored outside include file");
1097 cpp_make_system_header (pfile, 1, 0);
1102 /* Check the modified date of the current include file against a specified
1103 file. Issue a diagnostic, if the specified file is newer. We use this to
1104 determine if a fixed header should be refixed. */
1106 do_pragma_dependency (pfile)
1109 cpp_token header, msg;
1112 if (parse_include (pfile, &header))
1115 ordering = _cpp_compare_file_date (pfile, &header);
1117 cpp_warning (pfile, "cannot find source %s",
1118 cpp_token_as_text (pfile, &header));
1119 else if (ordering > 0)
1121 cpp_warning (pfile, "current file is older than %s",
1122 cpp_token_as_text (pfile, &header));
1123 cpp_start_lookahead (pfile);
1124 cpp_get_token (pfile, &msg);
1125 cpp_stop_lookahead (pfile, msg.type == CPP_EOF);
1126 if (msg.type != CPP_EOF)
1127 do_diagnostic (pfile, WARNING, 0);
1131 /* Check syntax is "(string-literal)". Returns 0 on success. */
1133 get__Pragma_string (pfile, string)
1139 cpp_get_token (pfile, &paren);
1140 if (paren.type != CPP_OPEN_PAREN)
1143 cpp_get_token (pfile, string);
1144 if (string->type != CPP_STRING && string->type != CPP_WSTRING)
1147 cpp_get_token (pfile, &paren);
1148 return paren.type != CPP_CLOSE_PAREN;
1151 /* Returns a malloced buffer containing a destringized cpp_string by
1152 removing the first \ of \" and \\ sequences. */
1153 static unsigned char *
1154 destringize (in, len)
1155 const cpp_string *in;
1158 const unsigned char *src, *limit;
1159 unsigned char *dest, *result;
1161 dest = result = (unsigned char *) xmalloc (in->len);
1162 for (src = in->text, limit = src + in->len; src < limit;)
1164 /* We know there is a character following the backslash. */
1165 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1170 *len = dest - result;
1175 _cpp_do__Pragma (pfile)
1179 unsigned char *buffer;
1182 if (get__Pragma_string (pfile, &string))
1184 cpp_error (pfile, "_Pragma takes a parenthesized string literal");
1188 buffer = destringize (&string.val.str, &len);
1189 run_directive (pfile, T_PRAGMA, BUF_PRAGMA, (char *) buffer, len);
1190 free ((PTR) buffer);
1193 /* Just ignore #sccs, on systems where we define it at all. */
1194 #ifdef SCCS_DIRECTIVE
1197 cpp_reader *pfile ATTRIBUTE_UNUSED;
1208 if (! pfile->buffer->was_skipping)
1210 const cpp_hashnode *node = lex_macro_node (pfile);
1213 skip = node->type != NT_MACRO;
1219 push_conditional (pfile, skip, T_IFDEF, 0);
1227 const cpp_hashnode *node = 0;
1229 if (! pfile->buffer->was_skipping)
1231 node = lex_macro_node (pfile);
1233 skip = node->type == NT_MACRO;
1239 push_conditional (pfile, skip, T_IFNDEF, node);
1242 /* #if cooperates with parse_defined to handle multiple-include
1243 optimisations. If macro expansions or identifiers appear in the
1244 expression, we cannot treat it as a controlling conditional, since
1245 their values could change in the future. */
1252 const cpp_hashnode *cmacro = 0;
1254 if (! pfile->buffer->was_skipping)
1256 /* Controlling macro of #if ! defined () */
1257 pfile->mi_ind_cmacro = 0;
1258 skip = _cpp_parse_expr (pfile) == 0;
1259 cmacro = pfile->mi_ind_cmacro;
1262 push_conditional (pfile, skip, T_IF, cmacro);
1265 /* Flip skipping state if appropriate and continue without changing
1266 if_stack; this is so that the error message for missing #endif's
1267 etc. will point to the original #if. */
1273 cpp_buffer *buffer = pfile->buffer;
1274 struct if_stack *ifs = buffer->if_stack;
1277 cpp_error (pfile, "#else without #if");
1280 if (ifs->type == T_ELSE)
1282 cpp_error (pfile, "#else after #else");
1283 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1284 "the conditional began here");
1288 /* Buffer->was_skipping is 1 if all conditionals in this chain
1289 have been false, 2 if a conditional has been true. */
1290 if (! ifs->was_skipping && buffer->was_skipping != 2)
1291 buffer->was_skipping = ! buffer->was_skipping;
1293 /* Invalidate any controlling macro. */
1300 /* handle a #elif directive by not changing if_stack either. see the
1301 comment above do_else. */
1307 cpp_buffer *buffer = pfile->buffer;
1308 struct if_stack *ifs = buffer->if_stack;
1311 cpp_error (pfile, "#elif without #if");
1314 if (ifs->type == T_ELSE)
1316 cpp_error (pfile, "#elif after #else");
1317 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1318 "the conditional began here");
1322 /* Don't evaluate #elif if our higher level is skipping. */
1323 if (! ifs->was_skipping)
1325 /* Buffer->was_skipping is 1 if all conditionals in this
1326 chain have been false, 2 if a conditional has been true. */
1327 if (buffer->was_skipping == 1)
1328 buffer->was_skipping = ! _cpp_parse_expr (pfile);
1330 buffer->was_skipping = 2;
1332 /* Invalidate any controlling macro. */
1338 /* #endif pops the if stack and resets pfile->skipping. */
1344 cpp_buffer *buffer = pfile->buffer;
1345 struct if_stack *ifs = buffer->if_stack;
1348 cpp_error (pfile, "#endif without #if");
1351 /* If potential control macro, we go back outside again. */
1352 if (ifs->next == 0 && ifs->mi_cmacro)
1354 pfile->mi_state = MI_OUTSIDE;
1355 pfile->mi_cmacro = ifs->mi_cmacro;
1358 buffer->if_stack = ifs->next;
1359 buffer->was_skipping = ifs->was_skipping;
1360 obstack_free (pfile->buffer_ob, ifs);
1366 /* Push an if_stack entry and set pfile->skipping accordingly.
1367 If this is a #ifndef starting at the beginning of a file,
1368 CMACRO is the macro name tested by the #ifndef. */
1371 push_conditional (pfile, skip, type, cmacro)
1375 const cpp_hashnode *cmacro;
1377 struct if_stack *ifs;
1378 cpp_buffer *buffer = pfile->buffer;
1380 ifs = xobnew (pfile->buffer_ob, struct if_stack);
1381 ifs->pos = pfile->directive_pos;
1382 ifs->next = buffer->if_stack;
1383 ifs->was_skipping = buffer->was_skipping;
1385 if (pfile->mi_state == MI_OUTSIDE && pfile->mi_cmacro == 0)
1386 ifs->mi_cmacro = cmacro;
1390 buffer->was_skipping = skip;
1391 buffer->if_stack = ifs;
1394 /* Read the tokens of the answer into the macro pool. Only commit the
1395 memory if we intend it as permanent storage, i.e. the #assert case.
1396 Returns 0 on success. */
1399 parse_answer (pfile, answerp, type)
1401 struct answer **answerp;
1404 cpp_token paren, *token;
1405 struct answer *answer;
1407 if (POOL_FRONT (&pfile->macro_pool) + sizeof (struct answer) >
1408 POOL_LIMIT (&pfile->macro_pool))
1409 _cpp_next_chunk (&pfile->macro_pool, sizeof (struct answer), 0);
1410 answer = (struct answer *) POOL_FRONT (&pfile->macro_pool);
1413 /* In a conditional, it is legal to not have an open paren. We
1414 should save the following token in this case. */
1416 cpp_start_lookahead (pfile);
1417 cpp_get_token (pfile, &paren);
1419 cpp_stop_lookahead (pfile, paren.type == CPP_OPEN_PAREN);
1421 /* If not a paren, see if we're OK. */
1422 if (paren.type != CPP_OPEN_PAREN)
1424 /* In a conditional no answer is a test for any answer. It
1425 could be followed by any token. */
1429 /* #unassert with no answer is valid - it removes all answers. */
1430 if (type == T_UNASSERT && paren.type == CPP_EOF)
1433 cpp_error (pfile, "missing '(' after predicate");
1439 token = &answer->first[answer->count];
1440 /* Check we have room for the token. */
1441 if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
1443 _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1444 (unsigned char **) &answer);
1445 token = &answer->first[answer->count];
1448 cpp_get_token (pfile, token);
1449 if (token->type == CPP_CLOSE_PAREN)
1452 if (token->type == CPP_EOF)
1454 cpp_error (pfile, "missing ')' to complete answer");
1460 if (answer->count == 0)
1462 cpp_error (pfile, "predicate's answer is empty");
1466 /* Drop whitespace at start. */
1467 answer->first->flags &= ~PREV_WHITE;
1470 if (type == T_ASSERT || type == T_UNASSERT)
1475 /* Parses an assertion, returning a pointer to the hash node of the
1476 predicate, or 0 on error. If an answer was supplied, it is placed
1477 in ANSWERP, otherwise it is set to 0. */
1478 static cpp_hashnode *
1479 parse_assertion (pfile, answerp, type)
1481 struct answer **answerp;
1484 cpp_hashnode *result = 0;
1485 cpp_token predicate;
1487 /* We don't expand predicates or answers. */
1488 pfile->state.prevent_expansion++;
1490 /* Use the permanent pool for storage (for the answers). */
1491 pfile->string_pool = &pfile->ident_pool;
1494 cpp_get_token (pfile, &predicate);
1495 if (predicate.type == CPP_EOF)
1496 cpp_error (pfile, "assertion without predicate");
1497 else if (predicate.type != CPP_NAME)
1498 cpp_error (pfile, "predicate must be an identifier");
1499 else if (parse_answer (pfile, answerp, type) == 0)
1501 unsigned int len = predicate.val.node->length;
1502 unsigned char *sym = alloca (len + 1);
1504 /* Prefix '#' to get it out of macro namespace. */
1506 memcpy (sym + 1, predicate.val.node->name, len);
1507 result = cpp_lookup (pfile, sym, len + 1);
1510 pfile->string_pool = &pfile->temp_string_pool;
1511 pfile->state.prevent_expansion--;
1515 /* Returns a pointer to the pointer to the answer in the answer chain,
1516 or a pointer to NULL if the answer is not in the chain. */
1517 static struct answer **
1518 find_answer (node, candidate)
1520 const struct answer *candidate;
1523 struct answer **result;
1525 for (result = &node->value.answers; *result; result = &(*result)->next)
1527 struct answer *answer = *result;
1529 if (answer->count == candidate->count)
1531 for (i = 0; i < answer->count; i++)
1532 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1535 if (i == answer->count)
1543 /* Test an assertion within a preprocessor conditional. Returns
1544 non-zero on failure, zero on success. On success, the result of
1545 the test is written into VALUE. */
1547 _cpp_test_assertion (pfile, value)
1551 struct answer *answer;
1554 node = parse_assertion (pfile, &answer, T_IF);
1556 *value = (node->type == NT_ASSERTION &&
1557 (answer == 0 || *find_answer (node, answer) != 0));
1559 /* We don't commit the memory for the answer - it's temporary only. */
1567 struct answer *new_answer;
1570 node = parse_assertion (pfile, &new_answer, T_ASSERT);
1573 /* Place the new answer in the answer list. First check there
1574 is not a duplicate. */
1575 new_answer->next = 0;
1576 if (node->type == NT_ASSERTION)
1578 if (*find_answer (node, new_answer))
1580 cpp_warning (pfile, "\"%s\" re-asserted", node->name + 1);
1583 new_answer->next = node->value.answers;
1585 node->type = NT_ASSERTION;
1586 node->value.answers = new_answer;
1587 POOL_COMMIT (&pfile->macro_pool, (sizeof (struct answer)
1588 + (new_answer->count - 1)
1589 * sizeof (cpp_token)));
1598 struct answer *answer;
1600 node = parse_assertion (pfile, &answer, T_UNASSERT);
1601 /* It isn't an error to #unassert something that isn't asserted. */
1602 if (node && node->type == NT_ASSERTION)
1606 struct answer **p = find_answer (node, answer), *temp;
1608 /* Remove the answer from the list. */
1613 /* Did we free the last answer? */
1614 if (node->value.answers == 0)
1615 node->type = NT_VOID;
1618 _cpp_free_definition (node);
1621 /* We don't commit the memory for the answer - it's temporary only. */
1624 /* These are for -D, -U, -A. */
1626 /* Process the string STR as if it appeared as the body of a #define.
1627 If STR is just an identifier, define it with value 1.
1628 If STR has anything after the identifier, then it should
1629 be identifier=definition. */
1632 cpp_define (pfile, str)
1639 /* Copy the entire option so we can modify it.
1640 Change the first "=" in the string to a space. If there is none,
1641 tack " 1" on the end. */
1643 /* Length including the null. */
1644 count = strlen (str);
1645 buf = (char *) alloca (count + 2);
1646 memcpy (buf, str, count);
1648 p = strchr (str, '=');
1657 run_directive (pfile, T_DEFINE, BUF_CL_OPTION, buf, count);
1660 /* Slight variant of the above for use by initialize_builtins. */
1662 _cpp_define_builtin (pfile, str)
1666 run_directive (pfile, T_DEFINE, BUF_BUILTIN, str, strlen (str));
1669 /* Process MACRO as if it appeared as the body of an #undef. */
1671 cpp_undef (pfile, macro)
1675 run_directive (pfile, T_UNDEF, BUF_CL_OPTION, macro, strlen (macro));
1678 /* Process the string STR as if it appeared as the body of a #assert. */
1680 cpp_assert (pfile, str)
1684 handle_assertion (pfile, str, T_ASSERT);
1687 /* Process STR as if it appeared as the body of an #unassert. */
1689 cpp_unassert (pfile, str)
1693 handle_assertion (pfile, str, T_UNASSERT);
1696 /* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
1698 handle_assertion (pfile, str, type)
1703 size_t count = strlen (str);
1704 const char *p = strchr (str, '=');
1708 /* Copy the entire option so we can modify it. Change the first
1709 "=" in the string to a '(', and tack a ')' on the end. */
1710 char *buf = (char *) alloca (count + 1);
1712 memcpy (buf, str, count);
1718 run_directive (pfile, type, BUF_CL_OPTION, str, count);
1721 /* Push a new buffer on the buffer stack. Buffer can be NULL, but
1722 then LEN should be 0. Returns the new buffer; it doesn't fail. */
1725 cpp_push_buffer (pfile, buffer, len, type, filename)
1727 const U_CHAR *buffer;
1729 enum cpp_buffer_type type;
1730 const char *filename;
1732 cpp_buffer *new = xobnew (pfile->buffer_ob, cpp_buffer);
1734 if (type == BUF_FAKE)
1736 /* A copy of the current buffer, just with a new name and type. */
1737 memcpy (new, pfile->buffer, sizeof (cpp_buffer));
1738 new->type = BUF_FAKE;
1742 if (type == BUF_BUILTIN)
1743 filename = _("<builtin>");
1744 else if (type == BUF_CL_OPTION)
1745 filename = _("<command line>");
1746 else if (type == BUF_PRAGMA)
1747 filename = "<_Pragma>";
1749 /* Clears, amongst other things, if_stack and mi_cmacro. */
1750 memset (new, 0, sizeof (cpp_buffer));
1752 new->line_base = new->buf = new->cur = buffer;
1753 new->rlimit = buffer + len;
1755 /* No read ahead or extra char initially. */
1756 new->read_ahead = EOF;
1757 new->extra_char = EOF;
1759 /* Preprocessed files, builtins, _Pragma and command line
1760 options don't do trigraph and escaped newline processing. */
1761 new->from_stage3 = type != BUF_FILE || CPP_OPTION (pfile, preprocessed);
1763 pfile->lexer_pos.output_line = 1;
1766 new->nominal_fname = filename;
1768 new->prev = pfile->buffer;
1770 new->include_stack_listed = 0;
1772 pfile->state.next_bol = 1;
1773 pfile->buffer_stack_depth++;
1774 pfile->buffer = new;
1776 if (type == BUF_FILE || type == BUF_FAKE)
1778 const char *filename = 0;
1779 unsigned int lineno = 0;
1783 filename = new->prev->nominal_fname;
1784 lineno = new->prev->lineno;
1787 do_file_change (pfile, FC_ENTER, filename, lineno);
1795 cpp_pop_buffer (pfile)
1799 struct if_stack *ifs;
1800 int in_do_line = pfile->directive == &dtable[T_LINE];
1804 buffer = pfile->buffer;
1805 /* Walk back up the conditional stack till we reach its level at
1806 entry to this file, issuing error messages. */
1807 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
1808 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1809 "unterminated #%s", dtable[ifs->type].name);
1811 if (buffer->type == BUF_FAKE)
1814 cpp_warning (pfile, "file \"%s\" entered but not left",
1815 buffer->nominal_fname);
1817 buffer->prev->cur = buffer->cur;
1819 else if (buffer->type == BUF_FILE)
1820 _cpp_pop_file_buffer (pfile, buffer);
1822 pfile->buffer = buffer->prev;
1823 pfile->buffer_stack_depth--;
1825 if ((buffer->type == BUF_FILE || buffer->type == BUF_FAKE)
1828 do_file_change (pfile, FC_LEAVE, buffer->nominal_fname,
1830 pfile->buffer->include_stack_listed = 0;
1833 while (pfile->buffer && pfile->buffer->type == BUF_FAKE && !in_do_line);
1835 obstack_free (pfile->buffer_ob, buffer);
1836 return pfile->buffer;
1839 #define obstack_chunk_alloc xmalloc
1840 #define obstack_chunk_free free
1842 _cpp_init_stacks (pfile)
1848 pfile->buffer_ob = xnew (struct obstack);
1849 obstack_init (pfile->buffer_ob);
1851 /* Register the directives. */
1852 for (i = 1; i < N_DIRECTIVES; i++)
1854 node = cpp_lookup (pfile, dtable[i - 1].name, dtable[i - 1].length);
1855 node->directive_index = i;
1860 _cpp_cleanup_stacks (pfile)
1863 obstack_free (pfile->buffer_ob, 0);
1864 free (pfile->buffer_ob);