2005-12-18 Benjamin Kosnik <bkoz@redhat.com>
[official-gcc.git] / libcpp / directives.c
blob7159f07a688689b3255a7cbcdc9ebda798bad71c
1 /* CPP Library. (Directive handling.)
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 Contributed by Per Bothner, 1994-95.
5 Based on CCCP program by Paul Rubin, June 1986
6 Adapted to ANSI C, Richard Stallman, Jan 1987
8 This program is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
11 later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
22 #include "config.h"
23 #include "system.h"
24 #include "cpplib.h"
25 #include "internal.h"
26 #include "mkdeps.h"
27 #include "obstack.h"
29 /* Stack of conditionals currently in progress
30 (including both successful and failing conditionals). */
31 struct if_stack
33 struct if_stack *next;
34 unsigned int line; /* Line where condition started. */
35 const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
36 bool skip_elses; /* Can future #else / #elif be skipped? */
37 bool was_skipping; /* If were skipping on entry. */
38 int type; /* Most recent conditional for diagnostics. */
41 /* Contains a registered pragma or pragma namespace. */
42 typedef void (*pragma_cb) (cpp_reader *);
43 struct pragma_entry
45 struct pragma_entry *next;
46 const cpp_hashnode *pragma; /* Name and length. */
47 bool is_nspace;
48 bool allow_expansion;
49 bool is_internal;
50 union {
51 pragma_cb handler;
52 struct pragma_entry *space;
53 } u;
56 /* Values for the origin field of struct directive. KANDR directives
57 come from traditional (K&R) C. STDC89 directives come from the
58 1989 C standard. EXTENSION directives are extensions. */
59 #define KANDR 0
60 #define STDC89 1
61 #define EXTENSION 2
63 /* Values for the flags field of struct directive. COND indicates a
64 conditional; IF_COND an opening conditional. INCL means to treat
65 "..." and <...> as q-char and h-char sequences respectively. IN_I
66 means this directive should be handled even if -fpreprocessed is in
67 effect (these are the directives with callback hooks).
69 EXPAND is set on directives that are always macro-expanded. */
70 #define COND (1 << 0)
71 #define IF_COND (1 << 1)
72 #define INCL (1 << 2)
73 #define IN_I (1 << 3)
74 #define EXPAND (1 << 4)
76 /* Defines one #-directive, including how to handle it. */
77 typedef void (*directive_handler) (cpp_reader *);
78 typedef struct directive directive;
79 struct directive
81 directive_handler handler; /* Function to handle directive. */
82 const uchar *name; /* Name of directive. */
83 unsigned short length; /* Length of name. */
84 unsigned char origin; /* Origin of directive. */
85 unsigned char flags; /* Flags describing this directive. */
88 /* Forward declarations. */
90 static void skip_rest_of_line (cpp_reader *);
91 static void check_eol (cpp_reader *);
92 static void start_directive (cpp_reader *);
93 static void prepare_directive_trad (cpp_reader *);
94 static void end_directive (cpp_reader *, int);
95 static void directive_diagnostics (cpp_reader *, const directive *, int);
96 static void run_directive (cpp_reader *, int, const char *, size_t);
97 static char *glue_header_name (cpp_reader *);
98 static const char *parse_include (cpp_reader *, int *, const cpp_token ***);
99 static void push_conditional (cpp_reader *, int, int, const cpp_hashnode *);
100 static unsigned int read_flag (cpp_reader *, unsigned int);
101 static int strtoul_for_line (const uchar *, unsigned int, unsigned long *);
102 static void do_diagnostic (cpp_reader *, int, int);
103 static cpp_hashnode *lex_macro_node (cpp_reader *);
104 static int undefine_macros (cpp_reader *, cpp_hashnode *, void *);
105 static void do_include_common (cpp_reader *, enum include_type);
106 static struct pragma_entry *lookup_pragma_entry (struct pragma_entry *,
107 const cpp_hashnode *);
108 static struct pragma_entry *insert_pragma_entry (cpp_reader *,
109 struct pragma_entry **,
110 const cpp_hashnode *,
111 pragma_cb,
112 bool, bool);
113 static void register_pragma (cpp_reader *, const char *, const char *,
114 pragma_cb, bool, bool);
115 static int count_registered_pragmas (struct pragma_entry *);
116 static char ** save_registered_pragmas (struct pragma_entry *, char **);
117 static char ** restore_registered_pragmas (cpp_reader *, struct pragma_entry *,
118 char **);
119 static void do_pragma_once (cpp_reader *);
120 static void do_pragma_poison (cpp_reader *);
121 static void do_pragma_system_header (cpp_reader *);
122 static void do_pragma_dependency (cpp_reader *);
123 static void do_linemarker (cpp_reader *);
124 static const cpp_token *get_token_no_padding (cpp_reader *);
125 static const cpp_token *get__Pragma_string (cpp_reader *);
126 static void destringize_and_run (cpp_reader *, const cpp_string *);
127 static int parse_answer (cpp_reader *, struct answer **, int);
128 static cpp_hashnode *parse_assertion (cpp_reader *, struct answer **, int);
129 static struct answer ** find_answer (cpp_hashnode *, const struct answer *);
130 static void handle_assertion (cpp_reader *, const char *, int);
132 /* This is the table of directive handlers. It is ordered by
133 frequency of occurrence; the numbers at the end are directive
134 counts from all the source code I have lying around (egcs and libc
135 CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
136 pcmcia-cs-3.0.9). This is no longer important as directive lookup
137 is now O(1). All extensions other than #warning and #include_next
138 are deprecated. The name is where the extension appears to have
139 come from. */
141 #define DIRECTIVE_TABLE \
142 D(define, T_DEFINE = 0, KANDR, IN_I) /* 270554 */ \
143 D(include, T_INCLUDE, KANDR, INCL | EXPAND) /* 52262 */ \
144 D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \
145 D(ifdef, T_IFDEF, KANDR, COND | IF_COND) /* 22000 */ \
146 D(if, T_IF, KANDR, COND | IF_COND | EXPAND) /* 18162 */ \
147 D(else, T_ELSE, KANDR, COND) /* 9863 */ \
148 D(ifndef, T_IFNDEF, KANDR, COND | IF_COND) /* 9675 */ \
149 D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \
150 D(line, T_LINE, KANDR, EXPAND) /* 2465 */ \
151 D(elif, T_ELIF, STDC89, COND | EXPAND) /* 610 */ \
152 D(error, T_ERROR, STDC89, 0) /* 475 */ \
153 D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \
154 D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \
155 D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL | EXPAND) /* 19 */ \
156 D(ident, T_IDENT, EXTENSION, IN_I) /* 11 */ \
157 D(import, T_IMPORT, EXTENSION, INCL | EXPAND) /* 0 ObjC */ \
158 D(assert, T_ASSERT, EXTENSION, 0) /* 0 SVR4 */ \
159 D(unassert, T_UNASSERT, EXTENSION, 0) /* 0 SVR4 */ \
160 D(sccs, T_SCCS, EXTENSION, IN_I) /* 0 SVR4? */
162 /* #sccs is synonymous with #ident. */
163 #define do_sccs do_ident
165 /* Use the table to generate a series of prototypes, an enum for the
166 directive names, and an array of directive handlers. */
168 #define D(name, t, o, f) static void do_##name (cpp_reader *);
169 DIRECTIVE_TABLE
170 #undef D
172 #define D(n, tag, o, f) tag,
173 enum
175 DIRECTIVE_TABLE
176 N_DIRECTIVES
178 #undef D
180 #define D(name, t, origin, flags) \
181 { do_##name, (const uchar *) #name, \
182 sizeof #name - 1, origin, flags },
183 static const directive dtable[] =
185 DIRECTIVE_TABLE
187 #undef D
188 #undef DIRECTIVE_TABLE
190 /* Wrapper struct directive for linemarkers.
191 The origin is more or less true - the original K+R cpp
192 did use this notation in its preprocessed output. */
193 static const directive linemarker_dir =
195 do_linemarker, U"#", 1, KANDR, IN_I
198 #define SEEN_EOL() (pfile->cur_token[-1].type == CPP_EOF)
200 /* Skip any remaining tokens in a directive. */
201 static void
202 skip_rest_of_line (cpp_reader *pfile)
204 /* Discard all stacked contexts. */
205 while (pfile->context->prev)
206 _cpp_pop_context (pfile);
208 /* Sweep up all tokens remaining on the line. */
209 if (! SEEN_EOL ())
210 while (_cpp_lex_token (pfile)->type != CPP_EOF)
214 /* Ensure there are no stray tokens at the end of a directive. */
215 static void
216 check_eol (cpp_reader *pfile)
218 if (! SEEN_EOL () && _cpp_lex_token (pfile)->type != CPP_EOF)
219 cpp_error (pfile, CPP_DL_PEDWARN, "extra tokens at end of #%s directive",
220 pfile->directive->name);
223 /* Ensure there are no stray tokens other than comments at the end of
224 a directive, and gather the comments. */
225 static const cpp_token **
226 check_eol_return_comments (cpp_reader *pfile)
228 size_t c;
229 size_t capacity = 8;
230 const cpp_token **buf;
232 buf = XNEWVEC (const cpp_token *, capacity);
233 c = 0;
234 if (! SEEN_EOL ())
236 while (1)
238 const cpp_token *tok;
240 tok = _cpp_lex_token (pfile);
241 if (tok->type == CPP_EOF)
242 break;
243 if (tok->type != CPP_COMMENT)
244 cpp_error (pfile, CPP_DL_PEDWARN,
245 "extra tokens at end of #%s directive",
246 pfile->directive->name);
247 else
249 if (c + 1 >= capacity)
251 capacity *= 2;
252 buf = XRESIZEVEC (const cpp_token *, buf, capacity);
254 buf[c] = tok;
255 ++c;
259 buf[c] = NULL;
260 return buf;
263 /* Called when entering a directive, _Pragma or command-line directive. */
264 static void
265 start_directive (cpp_reader *pfile)
267 /* Setup in-directive state. */
268 pfile->state.in_directive = 1;
269 pfile->state.save_comments = 0;
270 pfile->directive_result.type = CPP_PADDING;
272 /* Some handlers need the position of the # for diagnostics. */
273 pfile->directive_line = pfile->line_table->highest_line;
276 /* Called when leaving a directive, _Pragma or command-line directive. */
277 static void
278 end_directive (cpp_reader *pfile, int skip_line)
280 if (CPP_OPTION (pfile, traditional))
282 /* Revert change of prepare_directive_trad. */
283 pfile->state.prevent_expansion--;
285 if (pfile->directive != &dtable[T_DEFINE])
286 _cpp_remove_overlay (pfile);
288 /* We don't skip for an assembler #. */
289 else if (skip_line)
291 skip_rest_of_line (pfile);
292 if (!pfile->keep_tokens)
294 pfile->cur_run = &pfile->base_run;
295 pfile->cur_token = pfile->base_run.base;
299 /* Restore state. */
300 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
301 pfile->state.in_directive = 0;
302 pfile->state.in_expression = 0;
303 pfile->state.angled_headers = 0;
304 pfile->directive = 0;
307 /* Prepare to handle the directive in pfile->directive. */
308 static void
309 prepare_directive_trad (cpp_reader *pfile)
311 if (pfile->directive != &dtable[T_DEFINE])
313 bool no_expand = (pfile->directive
314 && ! (pfile->directive->flags & EXPAND));
315 bool was_skipping = pfile->state.skipping;
317 pfile->state.in_expression = (pfile->directive == &dtable[T_IF]
318 || pfile->directive == &dtable[T_ELIF]);
319 if (pfile->state.in_expression)
320 pfile->state.skipping = false;
322 if (no_expand)
323 pfile->state.prevent_expansion++;
324 _cpp_scan_out_logical_line (pfile, NULL);
325 if (no_expand)
326 pfile->state.prevent_expansion--;
328 pfile->state.skipping = was_skipping;
329 _cpp_overlay_buffer (pfile, pfile->out.base,
330 pfile->out.cur - pfile->out.base);
333 /* Stop ISO C from expanding anything. */
334 pfile->state.prevent_expansion++;
337 /* Output diagnostics for a directive DIR. INDENTED is nonzero if
338 the '#' was indented. */
339 static void
340 directive_diagnostics (cpp_reader *pfile, const directive *dir, int indented)
342 /* Issue -pedantic warnings for extensions. */
343 if (CPP_PEDANTIC (pfile)
344 && ! pfile->state.skipping
345 && dir->origin == EXTENSION)
346 cpp_error (pfile, CPP_DL_PEDWARN, "#%s is a GCC extension", dir->name);
348 /* Traditionally, a directive is ignored unless its # is in
349 column 1. Therefore in code intended to work with K+R
350 compilers, directives added by C89 must have their #
351 indented, and directives present in traditional C must not.
352 This is true even of directives in skipped conditional
353 blocks. #elif cannot be used at all. */
354 if (CPP_WTRADITIONAL (pfile))
356 if (dir == &dtable[T_ELIF])
357 cpp_error (pfile, CPP_DL_WARNING,
358 "suggest not using #elif in traditional C");
359 else if (indented && dir->origin == KANDR)
360 cpp_error (pfile, CPP_DL_WARNING,
361 "traditional C ignores #%s with the # indented",
362 dir->name);
363 else if (!indented && dir->origin != KANDR)
364 cpp_error (pfile, CPP_DL_WARNING,
365 "suggest hiding #%s from traditional C with an indented #",
366 dir->name);
370 /* Check if we have a known directive. INDENTED is nonzero if the
371 '#' of the directive was indented. This function is in this file
372 to save unnecessarily exporting dtable etc. to lex.c. Returns
373 nonzero if the line of tokens has been handled, zero if we should
374 continue processing the line. */
376 _cpp_handle_directive (cpp_reader *pfile, int indented)
378 const directive *dir = 0;
379 const cpp_token *dname;
380 bool was_parsing_args = pfile->state.parsing_args;
381 bool was_discarding_output = pfile->state.discarding_output;
382 int skip = 1;
384 if (was_discarding_output)
385 pfile->state.prevent_expansion = 0;
387 if (was_parsing_args)
389 if (CPP_OPTION (pfile, pedantic))
390 cpp_error (pfile, CPP_DL_PEDWARN,
391 "embedding a directive within macro arguments is not portable");
392 pfile->state.parsing_args = 0;
393 pfile->state.prevent_expansion = 0;
395 start_directive (pfile);
396 dname = _cpp_lex_token (pfile);
398 if (dname->type == CPP_NAME)
400 if (dname->val.node->is_directive)
401 dir = &dtable[dname->val.node->directive_index];
403 /* We do not recognize the # followed by a number extension in
404 assembler code. */
405 else if (dname->type == CPP_NUMBER && CPP_OPTION (pfile, lang) != CLK_ASM)
407 dir = &linemarker_dir;
408 if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed)
409 && ! pfile->state.skipping)
410 cpp_error (pfile, CPP_DL_PEDWARN,
411 "style of line directive is a GCC extension");
414 if (dir)
416 /* If we have a directive that is not an opening conditional,
417 invalidate any control macro. */
418 if (! (dir->flags & IF_COND))
419 pfile->mi_valid = false;
421 /* Kluge alert. In order to be sure that code like this
423 #define HASH #
424 HASH define foo bar
426 does not cause '#define foo bar' to get executed when
427 compiled with -save-temps, we recognize directives in
428 -fpreprocessed mode only if the # is in column 1. macro.c
429 puts a space in front of any '#' at the start of a macro. */
430 if (CPP_OPTION (pfile, preprocessed)
431 && (indented || !(dir->flags & IN_I)))
433 skip = 0;
434 dir = 0;
436 else
438 /* In failed conditional groups, all non-conditional
439 directives are ignored. Before doing that, whether
440 skipping or not, we should lex angle-bracketed headers
441 correctly, and maybe output some diagnostics. */
442 pfile->state.angled_headers = dir->flags & INCL;
443 pfile->state.directive_wants_padding = dir->flags & INCL;
444 if (! CPP_OPTION (pfile, preprocessed))
445 directive_diagnostics (pfile, dir, indented);
446 if (pfile->state.skipping && !(dir->flags & COND))
447 dir = 0;
450 else if (dname->type == CPP_EOF)
451 ; /* CPP_EOF is the "null directive". */
452 else
454 /* An unknown directive. Don't complain about it in assembly
455 source: we don't know where the comments are, and # may
456 introduce assembler pseudo-ops. Don't complain about invalid
457 directives in skipped conditional groups (6.10 p4). */
458 if (CPP_OPTION (pfile, lang) == CLK_ASM)
459 skip = 0;
460 else if (!pfile->state.skipping)
461 cpp_error (pfile, CPP_DL_ERROR, "invalid preprocessing directive #%s",
462 cpp_token_as_text (pfile, dname));
465 pfile->directive = dir;
466 if (CPP_OPTION (pfile, traditional))
467 prepare_directive_trad (pfile);
469 if (dir)
470 pfile->directive->handler (pfile);
471 else if (skip == 0)
472 _cpp_backup_tokens (pfile, 1);
474 end_directive (pfile, skip);
475 if (was_parsing_args)
477 /* Restore state when within macro args. */
478 pfile->state.parsing_args = 2;
479 pfile->state.prevent_expansion = 1;
481 if (was_discarding_output)
482 pfile->state.prevent_expansion = 1;
483 return skip;
486 /* Directive handler wrapper used by the command line option
487 processor. BUF is \n terminated. */
488 static void
489 run_directive (cpp_reader *pfile, int dir_no, const char *buf, size_t count)
491 cpp_push_buffer (pfile, (const uchar *) buf, count,
492 /* from_stage3 */ true);
493 /* Disgusting hack. */
494 if (dir_no == T_PRAGMA && pfile->buffer->prev)
495 pfile->buffer->file = pfile->buffer->prev->file;
496 start_directive (pfile);
498 /* This is a short-term fix to prevent a leading '#' being
499 interpreted as a directive. */
500 _cpp_clean_line (pfile);
502 pfile->directive = &dtable[dir_no];
503 if (CPP_OPTION (pfile, traditional))
504 prepare_directive_trad (pfile);
505 pfile->directive->handler (pfile);
506 end_directive (pfile, 1);
507 if (dir_no == T_PRAGMA)
508 pfile->buffer->file = NULL;
509 _cpp_pop_buffer (pfile);
512 /* Checks for validity the macro name in #define, #undef, #ifdef and
513 #ifndef directives. */
514 static cpp_hashnode *
515 lex_macro_node (cpp_reader *pfile)
517 const cpp_token *token = _cpp_lex_token (pfile);
519 /* The token immediately after #define must be an identifier. That
520 identifier may not be "defined", per C99 6.10.8p4.
521 In C++, it may not be any of the "named operators" either,
522 per C++98 [lex.digraph], [lex.key].
523 Finally, the identifier may not have been poisoned. (In that case
524 the lexer has issued the error message for us.) */
526 if (token->type == CPP_NAME)
528 cpp_hashnode *node = token->val.node;
530 if (node == pfile->spec_nodes.n_defined)
531 cpp_error (pfile, CPP_DL_ERROR,
532 "\"defined\" cannot be used as a macro name");
533 else if (! (node->flags & NODE_POISONED))
534 return node;
536 else if (token->flags & NAMED_OP)
537 cpp_error (pfile, CPP_DL_ERROR,
538 "\"%s\" cannot be used as a macro name as it is an operator in C++",
539 NODE_NAME (token->val.node));
540 else if (token->type == CPP_EOF)
541 cpp_error (pfile, CPP_DL_ERROR, "no macro name given in #%s directive",
542 pfile->directive->name);
543 else
544 cpp_error (pfile, CPP_DL_ERROR, "macro names must be identifiers");
546 return NULL;
549 /* Process a #define directive. Most work is done in macro.c. */
550 static void
551 do_define (cpp_reader *pfile)
553 cpp_hashnode *node = lex_macro_node (pfile);
555 if (node)
557 /* If we have been requested to expand comments into macros,
558 then re-enable saving of comments. */
559 pfile->state.save_comments =
560 ! CPP_OPTION (pfile, discard_comments_in_macro_exp);
562 if (_cpp_create_definition (pfile, node))
563 if (pfile->cb.define)
564 pfile->cb.define (pfile, pfile->directive_line, node);
568 /* Handle #undef. Mark the identifier NT_VOID in the hash table. */
569 static void
570 do_undef (cpp_reader *pfile)
572 cpp_hashnode *node = lex_macro_node (pfile);
574 if (node)
576 if (pfile->cb.undef)
577 pfile->cb.undef (pfile, pfile->directive_line, node);
579 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified
580 identifier is not currently defined as a macro name. */
581 if (node->type == NT_MACRO)
583 if (node->flags & NODE_WARN)
584 cpp_error (pfile, CPP_DL_WARNING,
585 "undefining \"%s\"", NODE_NAME (node));
587 if (CPP_OPTION (pfile, warn_unused_macros))
588 _cpp_warn_if_unused_macro (pfile, node, NULL);
590 _cpp_free_definition (node);
594 check_eol (pfile);
597 /* Undefine a single macro/assertion/whatever. */
599 static int
600 undefine_macros (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *h,
601 void *data_p ATTRIBUTE_UNUSED)
603 /* Body of _cpp_free_definition inlined here for speed.
604 Macros and assertions no longer have anything to free. */
605 h->type = NT_VOID;
606 h->flags &= ~(NODE_POISONED|NODE_BUILTIN|NODE_DISABLED);
607 return 1;
610 /* Undefine all macros and assertions. */
612 void
613 cpp_undef_all (cpp_reader *pfile)
615 cpp_forall_identifiers (pfile, undefine_macros, NULL);
619 /* Helper routine used by parse_include. Reinterpret the current line
620 as an h-char-sequence (< ... >); we are looking at the first token
621 after the <. Returns a malloced filename. */
622 static char *
623 glue_header_name (cpp_reader *pfile)
625 const cpp_token *token;
626 char *buffer;
627 size_t len, total_len = 0, capacity = 1024;
629 /* To avoid lexed tokens overwriting our glued name, we can only
630 allocate from the string pool once we've lexed everything. */
631 buffer = XNEWVEC (char, capacity);
632 for (;;)
634 token = get_token_no_padding (pfile);
636 if (token->type == CPP_GREATER)
637 break;
638 if (token->type == CPP_EOF)
640 cpp_error (pfile, CPP_DL_ERROR, "missing terminating > character");
641 break;
644 len = cpp_token_len (token) + 2; /* Leading space, terminating \0. */
645 if (total_len + len > capacity)
647 capacity = (capacity + len) * 2;
648 buffer = XRESIZEVEC (char, buffer, capacity);
651 if (token->flags & PREV_WHITE)
652 buffer[total_len++] = ' ';
654 total_len = (cpp_spell_token (pfile, token, (uchar *) &buffer[total_len],
655 true)
656 - (uchar *) buffer);
659 buffer[total_len] = '\0';
660 return buffer;
663 /* Returns the file name of #include, #include_next, #import and
664 #pragma dependency. The string is malloced and the caller should
665 free it. Returns NULL on error. */
666 static const char *
667 parse_include (cpp_reader *pfile, int *pangle_brackets,
668 const cpp_token ***buf)
670 char *fname;
671 const cpp_token *header;
673 /* Allow macro expansion. */
674 header = get_token_no_padding (pfile);
675 if (header->type == CPP_STRING || header->type == CPP_HEADER_NAME)
677 fname = XNEWVEC (char, header->val.str.len - 1);
678 memcpy (fname, header->val.str.text + 1, header->val.str.len - 2);
679 fname[header->val.str.len - 2] = '\0';
680 *pangle_brackets = header->type == CPP_HEADER_NAME;
682 else if (header->type == CPP_LESS)
684 fname = glue_header_name (pfile);
685 *pangle_brackets = 1;
687 else
689 const unsigned char *dir;
691 if (pfile->directive == &dtable[T_PRAGMA])
692 dir = U"pragma dependency";
693 else
694 dir = pfile->directive->name;
695 cpp_error (pfile, CPP_DL_ERROR, "#%s expects \"FILENAME\" or <FILENAME>",
696 dir);
698 return NULL;
701 if (buf == NULL || CPP_OPTION (pfile, discard_comments))
702 check_eol (pfile);
703 else
705 /* If we are not discarding comments, then gather them while
706 doing the eol check. */
707 *buf = check_eol_return_comments (pfile);
710 return fname;
713 /* Handle #include, #include_next and #import. */
714 static void
715 do_include_common (cpp_reader *pfile, enum include_type type)
717 const char *fname;
718 int angle_brackets;
719 const cpp_token **buf = NULL;
721 /* Re-enable saving of comments if requested, so that the include
722 callback can dump comments which follow #include. */
723 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
725 fname = parse_include (pfile, &angle_brackets, &buf);
726 if (!fname)
728 if (buf)
729 XDELETEVEC (buf);
730 return;
733 if (!*fname)
735 cpp_error (pfile, CPP_DL_ERROR, "empty filename in #%s",
736 pfile->directive->name);
737 XDELETEVEC (fname);
738 if (buf)
739 XDELETEVEC (buf);
740 return;
743 /* Prevent #include recursion. */
744 if (pfile->line_table->depth >= CPP_STACK_MAX)
745 cpp_error (pfile, CPP_DL_ERROR, "#include nested too deeply");
746 else
748 /* Get out of macro context, if we are. */
749 skip_rest_of_line (pfile);
751 if (pfile->cb.include)
752 pfile->cb.include (pfile, pfile->directive_line,
753 pfile->directive->name, fname, angle_brackets,
754 buf);
756 _cpp_stack_include (pfile, fname, angle_brackets, type);
759 XDELETEVEC (fname);
760 if (buf)
761 XDELETEVEC (buf);
764 static void
765 do_include (cpp_reader *pfile)
767 do_include_common (pfile, IT_INCLUDE);
770 static void
771 do_import (cpp_reader *pfile)
773 do_include_common (pfile, IT_IMPORT);
776 static void
777 do_include_next (cpp_reader *pfile)
779 enum include_type type = IT_INCLUDE_NEXT;
781 /* If this is the primary source file, warn and use the normal
782 search logic. */
783 if (! pfile->buffer->prev)
785 cpp_error (pfile, CPP_DL_WARNING,
786 "#include_next in primary source file");
787 type = IT_INCLUDE;
789 do_include_common (pfile, type);
792 /* Subroutine of do_linemarker. Read possible flags after file name.
793 LAST is the last flag seen; 0 if this is the first flag. Return the
794 flag if it is valid, 0 at the end of the directive. Otherwise
795 complain. */
796 static unsigned int
797 read_flag (cpp_reader *pfile, unsigned int last)
799 const cpp_token *token = _cpp_lex_token (pfile);
801 if (token->type == CPP_NUMBER && token->val.str.len == 1)
803 unsigned int flag = token->val.str.text[0] - '0';
805 if (flag > last && flag <= 4
806 && (flag != 4 || last == 3)
807 && (flag != 2 || last == 0))
808 return flag;
811 if (token->type != CPP_EOF)
812 cpp_error (pfile, CPP_DL_ERROR, "invalid flag \"%s\" in line directive",
813 cpp_token_as_text (pfile, token));
814 return 0;
817 /* Subroutine of do_line and do_linemarker. Convert a number in STR,
818 of length LEN, to binary; store it in NUMP, and return 0 if the
819 number was well-formed, 1 if not. Temporary, hopefully. */
820 static int
821 strtoul_for_line (const uchar *str, unsigned int len, long unsigned int *nump)
823 unsigned long reg = 0;
824 uchar c;
825 while (len--)
827 c = *str++;
828 if (!ISDIGIT (c))
829 return 1;
830 reg *= 10;
831 reg += c - '0';
833 *nump = reg;
834 return 0;
837 /* Interpret #line command.
838 Note that the filename string (if any) is a true string constant
839 (escapes are interpreted), unlike in #line. */
840 static void
841 do_line (cpp_reader *pfile)
843 const struct line_maps *line_table = pfile->line_table;
844 const struct line_map *map = &line_table->maps[line_table->used - 1];
846 /* skip_rest_of_line() may cause line table to be realloc()ed so note down
847 sysp right now. */
849 unsigned char map_sysp = map->sysp;
850 const cpp_token *token;
851 const char *new_file = map->to_file;
852 unsigned long new_lineno;
854 /* C99 raised the minimum limit on #line numbers. */
855 unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
857 /* #line commands expand macros. */
858 token = cpp_get_token (pfile);
859 if (token->type != CPP_NUMBER
860 || strtoul_for_line (token->val.str.text, token->val.str.len,
861 &new_lineno))
863 cpp_error (pfile, CPP_DL_ERROR,
864 "\"%s\" after #line is not a positive integer",
865 cpp_token_as_text (pfile, token));
866 return;
869 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
870 cpp_error (pfile, CPP_DL_PEDWARN, "line number out of range");
872 token = cpp_get_token (pfile);
873 if (token->type == CPP_STRING)
875 cpp_string s = { 0, 0 };
876 if (cpp_interpret_string_notranslate (pfile, &token->val.str, 1,
877 &s, false))
878 new_file = (const char *)s.text;
879 check_eol (pfile);
881 else if (token->type != CPP_EOF)
883 cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
884 cpp_token_as_text (pfile, token));
885 return;
888 skip_rest_of_line (pfile);
889 _cpp_do_file_change (pfile, LC_RENAME, new_file, new_lineno,
890 map_sysp);
893 /* Interpret the # 44 "file" [flags] notation, which has slightly
894 different syntax and semantics from #line: Flags are allowed,
895 and we never complain about the line number being too big. */
896 static void
897 do_linemarker (cpp_reader *pfile)
899 const struct line_maps *line_table = pfile->line_table;
900 const struct line_map *map = &line_table->maps[line_table->used - 1];
901 const cpp_token *token;
902 const char *new_file = map->to_file;
903 unsigned long new_lineno;
904 unsigned int new_sysp = map->sysp;
905 enum lc_reason reason = LC_RENAME;
906 int flag;
908 /* Back up so we can get the number again. Putting this in
909 _cpp_handle_directive risks two calls to _cpp_backup_tokens in
910 some circumstances, which can segfault. */
911 _cpp_backup_tokens (pfile, 1);
913 /* #line commands expand macros. */
914 token = cpp_get_token (pfile);
915 if (token->type != CPP_NUMBER
916 || strtoul_for_line (token->val.str.text, token->val.str.len,
917 &new_lineno))
919 cpp_error (pfile, CPP_DL_ERROR,
920 "\"%s\" after # is not a positive integer",
921 cpp_token_as_text (pfile, token));
922 return;
925 token = cpp_get_token (pfile);
926 if (token->type == CPP_STRING)
928 cpp_string s = { 0, 0 };
929 if (cpp_interpret_string_notranslate (pfile, &token->val.str,
930 1, &s, false))
931 new_file = (const char *)s.text;
933 new_sysp = 0;
934 flag = read_flag (pfile, 0);
935 if (flag == 1)
937 reason = LC_ENTER;
938 /* Fake an include for cpp_included (). */
939 _cpp_fake_include (pfile, new_file);
940 flag = read_flag (pfile, flag);
942 else if (flag == 2)
944 reason = LC_LEAVE;
945 flag = read_flag (pfile, flag);
947 if (flag == 3)
949 new_sysp = 1;
950 flag = read_flag (pfile, flag);
951 if (flag == 4)
952 new_sysp = 2;
953 pfile->buffer->sysp = new_sysp;
956 check_eol (pfile);
958 else if (token->type != CPP_EOF)
960 cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
961 cpp_token_as_text (pfile, token));
962 return;
965 skip_rest_of_line (pfile);
966 _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp);
969 /* Arrange the file_change callback. pfile->line has changed to
970 FILE_LINE of TO_FILE, for reason REASON. SYSP is 1 for a system
971 header, 2 for a system header that needs to be extern "C" protected,
972 and zero otherwise. */
973 void
974 _cpp_do_file_change (cpp_reader *pfile, enum lc_reason reason,
975 const char *to_file, unsigned int file_line,
976 unsigned int sysp)
978 const struct line_map *map = linemap_add (pfile->line_table, reason, sysp,
979 to_file, file_line);
980 if (map != NULL)
981 linemap_line_start (pfile->line_table, map->to_line, 127);
983 if (pfile->cb.file_change)
984 pfile->cb.file_change (pfile, map);
987 /* Report a warning or error detected by the program we are
988 processing. Use the directive's tokens in the error message. */
989 static void
990 do_diagnostic (cpp_reader *pfile, int code, int print_dir)
992 if (_cpp_begin_message (pfile, code, pfile->cur_token[-1].src_loc, 0))
994 if (print_dir)
995 fprintf (stderr, "#%s ", pfile->directive->name);
996 pfile->state.prevent_expansion++;
997 cpp_output_line (pfile, stderr);
998 pfile->state.prevent_expansion--;
1002 static void
1003 do_error (cpp_reader *pfile)
1005 do_diagnostic (pfile, CPP_DL_ERROR, 1);
1008 static void
1009 do_warning (cpp_reader *pfile)
1011 /* We want #warning diagnostics to be emitted in system headers too. */
1012 do_diagnostic (pfile, CPP_DL_WARNING_SYSHDR, 1);
1015 /* Report program identification. */
1016 static void
1017 do_ident (cpp_reader *pfile)
1019 const cpp_token *str = cpp_get_token (pfile);
1021 if (str->type != CPP_STRING)
1022 cpp_error (pfile, CPP_DL_ERROR, "invalid #%s directive",
1023 pfile->directive->name);
1024 else if (pfile->cb.ident)
1025 pfile->cb.ident (pfile, pfile->directive_line, &str->val.str);
1027 check_eol (pfile);
1030 /* Lookup a PRAGMA name in a singly-linked CHAIN. Returns the
1031 matching entry, or NULL if none is found. The returned entry could
1032 be the start of a namespace chain, or a pragma. */
1033 static struct pragma_entry *
1034 lookup_pragma_entry (struct pragma_entry *chain, const cpp_hashnode *pragma)
1036 while (chain && chain->pragma != pragma)
1037 chain = chain->next;
1039 return chain;
1042 /* Create and insert a pragma entry for NAME at the beginning of a
1043 singly-linked CHAIN. If handler is NULL, it is a namespace,
1044 otherwise it is a pragma and its handler. If INTERNAL is true
1045 this pragma is being inserted by libcpp itself. */
1046 static struct pragma_entry *
1047 insert_pragma_entry (cpp_reader *pfile, struct pragma_entry **chain,
1048 const cpp_hashnode *pragma, pragma_cb handler,
1049 bool allow_expansion, bool internal)
1051 struct pragma_entry *new_entry;
1053 new_entry = (struct pragma_entry *)
1054 _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry));
1055 new_entry->pragma = pragma;
1056 if (handler)
1058 new_entry->is_nspace = 0;
1059 new_entry->u.handler = handler;
1061 else
1063 new_entry->is_nspace = 1;
1064 new_entry->u.space = NULL;
1067 new_entry->allow_expansion = allow_expansion;
1068 new_entry->is_internal = internal;
1069 new_entry->next = *chain;
1070 *chain = new_entry;
1071 return new_entry;
1074 /* Register a pragma NAME in namespace SPACE. If SPACE is null, it
1075 goes in the global namespace. HANDLER is the handler it will call,
1076 which must be non-NULL. If ALLOW_EXPANSION is set, allow macro
1077 expansion while parsing pragma NAME. INTERNAL is true if this is a
1078 pragma registered by cpplib itself, false if it is registered via
1079 cpp_register_pragma */
1080 static void
1081 register_pragma (cpp_reader *pfile, const char *space, const char *name,
1082 pragma_cb handler, bool allow_expansion, bool internal)
1084 struct pragma_entry **chain = &pfile->pragmas;
1085 struct pragma_entry *entry;
1086 const cpp_hashnode *node;
1088 if (!handler)
1089 abort ();
1091 if (space)
1093 node = cpp_lookup (pfile, U space, strlen (space));
1094 entry = lookup_pragma_entry (*chain, node);
1095 if (!entry)
1096 entry = insert_pragma_entry (pfile, chain, node, NULL,
1097 allow_expansion, internal);
1098 else if (!entry->is_nspace)
1099 goto clash;
1100 chain = &entry->u.space;
1103 /* Check for duplicates. */
1104 node = cpp_lookup (pfile, U name, strlen (name));
1105 entry = lookup_pragma_entry (*chain, node);
1106 if (entry)
1108 if (entry->is_nspace)
1109 clash:
1110 cpp_error (pfile, CPP_DL_ICE,
1111 "registering \"%s\" as both a pragma and a pragma namespace",
1112 NODE_NAME (node));
1113 else if (space)
1114 cpp_error (pfile, CPP_DL_ICE, "#pragma %s %s is already registered",
1115 space, name);
1116 else
1117 cpp_error (pfile, CPP_DL_ICE, "#pragma %s is already registered", name);
1119 else
1120 insert_pragma_entry (pfile, chain, node, handler, allow_expansion,
1121 internal);
1124 /* Register a pragma NAME in namespace SPACE. If SPACE is null, it
1125 goes in the global namespace. HANDLER is the handler it will call,
1126 which must be non-NULL. If ALLOW_EXPANSION is set, allow macro
1127 expansion while parsing pragma NAME. This function is exported
1128 from libcpp. */
1129 void
1130 cpp_register_pragma (cpp_reader *pfile, const char *space, const char *name,
1131 pragma_cb handler, bool allow_expansion)
1133 register_pragma (pfile, space, name, handler, allow_expansion, false);
1136 /* Register the pragmas the preprocessor itself handles. */
1137 void
1138 _cpp_init_internal_pragmas (cpp_reader *pfile)
1140 /* Pragmas in the global namespace. */
1141 register_pragma (pfile, 0, "once", do_pragma_once, false, true);
1143 /* New GCC-specific pragmas should be put in the GCC namespace. */
1144 register_pragma (pfile, "GCC", "poison", do_pragma_poison, false, true);
1145 register_pragma (pfile, "GCC", "system_header", do_pragma_system_header,
1146 false, true);
1147 register_pragma (pfile, "GCC", "dependency", do_pragma_dependency,
1148 false, true);
1151 /* Return the number of registered pragmas in PE. */
1153 static int
1154 count_registered_pragmas (struct pragma_entry *pe)
1156 int ct = 0;
1157 for (; pe != NULL; pe = pe->next)
1159 if (pe->is_nspace)
1160 ct += count_registered_pragmas (pe->u.space);
1161 ct++;
1163 return ct;
1166 /* Save into SD the names of the registered pragmas referenced by PE,
1167 and return a pointer to the next free space in SD. */
1169 static char **
1170 save_registered_pragmas (struct pragma_entry *pe, char **sd)
1172 for (; pe != NULL; pe = pe->next)
1174 if (pe->is_nspace)
1175 sd = save_registered_pragmas (pe->u.space, sd);
1176 *sd++ = (char *) xmemdup (HT_STR (&pe->pragma->ident),
1177 HT_LEN (&pe->pragma->ident),
1178 HT_LEN (&pe->pragma->ident) + 1);
1180 return sd;
1183 /* Return a newly-allocated array which saves the names of the
1184 registered pragmas. */
1186 char **
1187 _cpp_save_pragma_names (cpp_reader *pfile)
1189 int ct = count_registered_pragmas (pfile->pragmas);
1190 char **result = XNEWVEC (char *, ct);
1191 (void) save_registered_pragmas (pfile->pragmas, result);
1192 return result;
1195 /* Restore from SD the names of the registered pragmas referenced by PE,
1196 and return a pointer to the next unused name in SD. */
1198 static char **
1199 restore_registered_pragmas (cpp_reader *pfile, struct pragma_entry *pe,
1200 char **sd)
1202 for (; pe != NULL; pe = pe->next)
1204 if (pe->is_nspace)
1205 sd = restore_registered_pragmas (pfile, pe->u.space, sd);
1206 pe->pragma = cpp_lookup (pfile, U *sd, strlen (*sd));
1207 free (*sd);
1208 sd++;
1210 return sd;
1213 /* Restore the names of the registered pragmas from SAVED. */
1215 void
1216 _cpp_restore_pragma_names (cpp_reader *pfile, char **saved)
1218 (void) restore_registered_pragmas (pfile, pfile->pragmas, saved);
1219 free (saved);
1222 /* Pragmata handling. We handle some, and pass the rest on to the
1223 front end. C99 defines three pragmas and says that no macro
1224 expansion is to be performed on them; whether or not macro
1225 expansion happens for other pragmas is implementation defined.
1226 This implementation never macro-expands the text after #pragma.
1228 The library user has the option of deferring execution of
1229 #pragmas not handled by cpplib, in which case they are converted
1230 to CPP_PRAGMA tokens and inserted into the output stream. */
1231 static void
1232 do_pragma (cpp_reader *pfile)
1234 const struct pragma_entry *p = NULL;
1235 const cpp_token *token, *pragma_token = pfile->cur_token;
1236 unsigned int count = 1;
1238 /* Save the current position so that defer_pragmas mode can
1239 copy the entire current line to a string. It will not work
1240 to use _cpp_backup_tokens as that does not reverse buffer->cur. */
1241 const uchar *line_start = CPP_BUFFER (pfile)->cur;
1243 pfile->state.prevent_expansion++;
1245 token = cpp_get_token (pfile);
1246 if (token->type == CPP_NAME)
1248 p = lookup_pragma_entry (pfile->pragmas, token->val.node);
1249 if (p && p->is_nspace)
1251 count = 2;
1252 token = cpp_get_token (pfile);
1253 if (token->type == CPP_NAME)
1254 p = lookup_pragma_entry (p->u.space, token->val.node);
1255 else
1256 p = NULL;
1260 if (p)
1262 if (p->is_internal || !CPP_OPTION (pfile, defer_pragmas))
1264 /* Since the handler below doesn't get the line number, that it
1265 might need for diagnostics, make sure it has the right
1266 numbers in place. */
1267 if (pfile->cb.line_change)
1268 (*pfile->cb.line_change) (pfile, pragma_token, false);
1269 /* Never expand macros if handling a deferred pragma, since
1270 the macro definitions now applicable may be different
1271 from those at the point the pragma appeared. */
1272 if (p->allow_expansion && !pfile->state.in_deferred_pragma)
1273 pfile->state.prevent_expansion--;
1274 (*p->u.handler) (pfile);
1275 if (p->allow_expansion && !pfile->state.in_deferred_pragma)
1276 pfile->state.prevent_expansion++;
1278 else
1280 /* Squirrel away the pragma text. Pragmas are
1281 newline-terminated. */
1282 const uchar *line_end;
1283 uchar *s;
1284 cpp_string body;
1285 cpp_token *ptok;
1287 line_end = ustrchr (line_start, '\n');
1289 body.len = (line_end - line_start) + 1;
1290 s = _cpp_unaligned_alloc (pfile, body.len + 1);
1291 memcpy (s, line_start, body.len);
1292 s[body.len] = '\0';
1293 body.text = s;
1295 /* Create a CPP_PRAGMA token. */
1296 ptok = &pfile->directive_result;
1297 ptok->src_loc = pragma_token->src_loc;
1298 ptok->type = CPP_PRAGMA;
1299 ptok->flags = pragma_token->flags | NO_EXPAND;
1300 ptok->val.str = body;
1303 else if (pfile->cb.def_pragma)
1305 _cpp_backup_tokens (pfile, count);
1306 pfile->cb.def_pragma (pfile, pfile->directive_line);
1309 pfile->state.prevent_expansion--;
1312 /* Handle #pragma once. */
1313 static void
1314 do_pragma_once (cpp_reader *pfile)
1316 if (pfile->buffer->prev == NULL)
1317 cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file");
1319 check_eol (pfile);
1320 _cpp_mark_file_once_only (pfile, pfile->buffer->file);
1323 /* Handle #pragma GCC poison, to poison one or more identifiers so
1324 that the lexer produces a hard error for each subsequent usage. */
1325 static void
1326 do_pragma_poison (cpp_reader *pfile)
1328 const cpp_token *tok;
1329 cpp_hashnode *hp;
1331 pfile->state.poisoned_ok = 1;
1332 for (;;)
1334 tok = _cpp_lex_token (pfile);
1335 if (tok->type == CPP_EOF)
1336 break;
1337 if (tok->type != CPP_NAME)
1339 cpp_error (pfile, CPP_DL_ERROR,
1340 "invalid #pragma GCC poison directive");
1341 break;
1344 hp = tok->val.node;
1345 if (hp->flags & NODE_POISONED)
1346 continue;
1348 if (hp->type == NT_MACRO)
1349 cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro \"%s\"",
1350 NODE_NAME (hp));
1351 _cpp_free_definition (hp);
1352 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
1354 pfile->state.poisoned_ok = 0;
1357 /* Mark the current header as a system header. This will suppress
1358 some categories of warnings (notably those from -pedantic). It is
1359 intended for use in system libraries that cannot be implemented in
1360 conforming C, but cannot be certain that their headers appear in a
1361 system include directory. To prevent abuse, it is rejected in the
1362 primary source file. */
1363 static void
1364 do_pragma_system_header (cpp_reader *pfile)
1366 cpp_buffer *buffer = pfile->buffer;
1368 if (buffer->prev == 0)
1369 cpp_error (pfile, CPP_DL_WARNING,
1370 "#pragma system_header ignored outside include file");
1371 else
1373 check_eol (pfile);
1374 skip_rest_of_line (pfile);
1375 cpp_make_system_header (pfile, 1, 0);
1379 /* Check the modified date of the current include file against a specified
1380 file. Issue a diagnostic, if the specified file is newer. We use this to
1381 determine if a fixed header should be refixed. */
1382 static void
1383 do_pragma_dependency (cpp_reader *pfile)
1385 const char *fname;
1386 int angle_brackets, ordering;
1388 fname = parse_include (pfile, &angle_brackets, NULL);
1389 if (!fname)
1390 return;
1392 ordering = _cpp_compare_file_date (pfile, fname, angle_brackets);
1393 if (ordering < 0)
1394 cpp_error (pfile, CPP_DL_WARNING, "cannot find source file %s", fname);
1395 else if (ordering > 0)
1397 cpp_error (pfile, CPP_DL_WARNING,
1398 "current file is older than %s", fname);
1399 if (cpp_get_token (pfile)->type != CPP_EOF)
1401 _cpp_backup_tokens (pfile, 1);
1402 do_diagnostic (pfile, CPP_DL_WARNING, 0);
1406 free ((void *) fname);
1409 /* Get a token but skip padding. */
1410 static const cpp_token *
1411 get_token_no_padding (cpp_reader *pfile)
1413 for (;;)
1415 const cpp_token *result = cpp_get_token (pfile);
1416 if (result->type != CPP_PADDING)
1417 return result;
1421 /* Check syntax is "(string-literal)". Returns the string on success,
1422 or NULL on failure. */
1423 static const cpp_token *
1424 get__Pragma_string (cpp_reader *pfile)
1426 const cpp_token *string;
1428 if (get_token_no_padding (pfile)->type != CPP_OPEN_PAREN)
1429 return NULL;
1431 string = get_token_no_padding (pfile);
1432 if (string->type != CPP_STRING && string->type != CPP_WSTRING)
1433 return NULL;
1435 if (get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
1436 return NULL;
1438 return string;
1441 /* Destringize IN into a temporary buffer, by removing the first \ of
1442 \" and \\ sequences, and process the result as a #pragma directive. */
1443 static void
1444 destringize_and_run (cpp_reader *pfile, const cpp_string *in)
1446 const unsigned char *src, *limit;
1447 char *dest, *result;
1449 dest = result = (char *) alloca (in->len - 1);
1450 src = in->text + 1 + (in->text[0] == 'L');
1451 limit = in->text + in->len - 1;
1452 while (src < limit)
1454 /* We know there is a character following the backslash. */
1455 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1456 src++;
1457 *dest++ = *src++;
1459 *dest = '\n';
1461 /* Ugh; an awful kludge. We are really not set up to be lexing
1462 tokens when in the middle of a macro expansion. Use a new
1463 context to force cpp_get_token to lex, and so skip_rest_of_line
1464 doesn't go beyond the end of the text. Also, remember the
1465 current lexing position so we can return to it later.
1467 Something like line-at-a-time lexing should remove the need for
1468 this. */
1470 cpp_context *saved_context = pfile->context;
1471 cpp_token *saved_cur_token = pfile->cur_token;
1472 tokenrun *saved_cur_run = pfile->cur_run;
1474 pfile->context = XNEW (cpp_context);
1475 pfile->context->macro = 0;
1476 pfile->context->prev = 0;
1477 run_directive (pfile, T_PRAGMA, result, dest - result);
1478 XDELETE (pfile->context);
1479 pfile->context = saved_context;
1480 pfile->cur_token = saved_cur_token;
1481 pfile->cur_run = saved_cur_run;
1484 /* See above comment. For the moment, we'd like
1486 token1 _Pragma ("foo") token2
1488 to be output as
1490 token1
1491 # 7 "file.c"
1492 #pragma foo
1493 # 7 "file.c"
1494 token2
1496 Getting the line markers is a little tricky. */
1497 if (pfile->cb.line_change)
1498 pfile->cb.line_change (pfile, pfile->cur_token, false);
1501 /* Handle the _Pragma operator. */
1502 void
1503 _cpp_do__Pragma (cpp_reader *pfile)
1505 const cpp_token *string = get__Pragma_string (pfile);
1506 pfile->directive_result.type = CPP_PADDING;
1508 if (string)
1509 destringize_and_run (pfile, &string->val.str);
1510 else
1511 cpp_error (pfile, CPP_DL_ERROR,
1512 "_Pragma takes a parenthesized string literal");
1515 /* Handle a pragma that the front end deferred until now. */
1516 void
1517 cpp_handle_deferred_pragma (cpp_reader *pfile, const cpp_string *s)
1519 cpp_context *saved_context = pfile->context;
1520 cpp_token *saved_cur_token = pfile->cur_token;
1521 tokenrun *saved_cur_run = pfile->cur_run;
1522 bool saved_defer_pragmas = CPP_OPTION (pfile, defer_pragmas);
1523 void (*saved_line_change) (cpp_reader *, const cpp_token *, int)
1524 = pfile->cb.line_change;
1526 pfile->context = XNEW (cpp_context);
1527 pfile->context->macro = 0;
1528 pfile->context->prev = 0;
1529 pfile->cb.line_change = NULL;
1530 pfile->state.in_deferred_pragma = true;
1531 CPP_OPTION (pfile, defer_pragmas) = false;
1533 run_directive (pfile, T_PRAGMA, (const char *)s->text, s->len);
1535 XDELETE (pfile->context);
1536 pfile->context = saved_context;
1537 pfile->cur_token = saved_cur_token;
1538 pfile->cur_run = saved_cur_run;
1539 pfile->cb.line_change = saved_line_change;
1540 pfile->state.in_deferred_pragma = false;
1541 CPP_OPTION (pfile, defer_pragmas) = saved_defer_pragmas;
1544 /* Handle #ifdef. */
1545 static void
1546 do_ifdef (cpp_reader *pfile)
1548 int skip = 1;
1550 if (! pfile->state.skipping)
1552 const cpp_hashnode *node = lex_macro_node (pfile);
1554 if (node)
1556 skip = node->type != NT_MACRO;
1557 _cpp_mark_macro_used (node);
1558 check_eol (pfile);
1562 push_conditional (pfile, skip, T_IFDEF, 0);
1565 /* Handle #ifndef. */
1566 static void
1567 do_ifndef (cpp_reader *pfile)
1569 int skip = 1;
1570 const cpp_hashnode *node = 0;
1572 if (! pfile->state.skipping)
1574 node = lex_macro_node (pfile);
1576 if (node)
1578 skip = node->type == NT_MACRO;
1579 _cpp_mark_macro_used (node);
1580 check_eol (pfile);
1584 push_conditional (pfile, skip, T_IFNDEF, node);
1587 /* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in
1588 pfile->mi_ind_cmacro so we can handle multiple-include
1589 optimizations. If macro expansion occurs in the expression, we
1590 cannot treat it as a controlling conditional, since the expansion
1591 could change in the future. That is handled by cpp_get_token. */
1592 static void
1593 do_if (cpp_reader *pfile)
1595 int skip = 1;
1597 if (! pfile->state.skipping)
1598 skip = _cpp_parse_expr (pfile) == false;
1600 push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro);
1603 /* Flip skipping state if appropriate and continue without changing
1604 if_stack; this is so that the error message for missing #endif's
1605 etc. will point to the original #if. */
1606 static void
1607 do_else (cpp_reader *pfile)
1609 cpp_buffer *buffer = pfile->buffer;
1610 struct if_stack *ifs = buffer->if_stack;
1612 if (ifs == NULL)
1613 cpp_error (pfile, CPP_DL_ERROR, "#else without #if");
1614 else
1616 if (ifs->type == T_ELSE)
1618 cpp_error (pfile, CPP_DL_ERROR, "#else after #else");
1619 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
1620 "the conditional began here");
1622 ifs->type = T_ELSE;
1624 /* Skip any future (erroneous) #elses or #elifs. */
1625 pfile->state.skipping = ifs->skip_elses;
1626 ifs->skip_elses = true;
1628 /* Invalidate any controlling macro. */
1629 ifs->mi_cmacro = 0;
1631 /* Only check EOL if was not originally skipping. */
1632 if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
1633 check_eol (pfile);
1637 /* Handle a #elif directive by not changing if_stack either. See the
1638 comment above do_else. */
1639 static void
1640 do_elif (cpp_reader *pfile)
1642 cpp_buffer *buffer = pfile->buffer;
1643 struct if_stack *ifs = buffer->if_stack;
1645 if (ifs == NULL)
1646 cpp_error (pfile, CPP_DL_ERROR, "#elif without #if");
1647 else
1649 if (ifs->type == T_ELSE)
1651 cpp_error (pfile, CPP_DL_ERROR, "#elif after #else");
1652 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
1653 "the conditional began here");
1655 ifs->type = T_ELIF;
1657 /* Only evaluate this if we aren't skipping elses. During
1658 evaluation, set skipping to false to get lexer warnings. */
1659 if (ifs->skip_elses)
1660 pfile->state.skipping = 1;
1661 else
1663 pfile->state.skipping = 0;
1664 pfile->state.skipping = ! _cpp_parse_expr (pfile);
1665 ifs->skip_elses = ! pfile->state.skipping;
1668 /* Invalidate any controlling macro. */
1669 ifs->mi_cmacro = 0;
1673 /* #endif pops the if stack and resets pfile->state.skipping. */
1674 static void
1675 do_endif (cpp_reader *pfile)
1677 cpp_buffer *buffer = pfile->buffer;
1678 struct if_stack *ifs = buffer->if_stack;
1680 if (ifs == NULL)
1681 cpp_error (pfile, CPP_DL_ERROR, "#endif without #if");
1682 else
1684 /* Only check EOL if was not originally skipping. */
1685 if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
1686 check_eol (pfile);
1688 /* If potential control macro, we go back outside again. */
1689 if (ifs->next == 0 && ifs->mi_cmacro)
1691 pfile->mi_valid = true;
1692 pfile->mi_cmacro = ifs->mi_cmacro;
1695 buffer->if_stack = ifs->next;
1696 pfile->state.skipping = ifs->was_skipping;
1697 obstack_free (&pfile->buffer_ob, ifs);
1701 /* Push an if_stack entry for a preprocessor conditional, and set
1702 pfile->state.skipping to SKIP. If TYPE indicates the conditional
1703 is #if or #ifndef, CMACRO is a potentially controlling macro, and
1704 we need to check here that we are at the top of the file. */
1705 static void
1706 push_conditional (cpp_reader *pfile, int skip, int type,
1707 const cpp_hashnode *cmacro)
1709 struct if_stack *ifs;
1710 cpp_buffer *buffer = pfile->buffer;
1712 ifs = XOBNEW (&pfile->buffer_ob, struct if_stack);
1713 ifs->line = pfile->directive_line;
1714 ifs->next = buffer->if_stack;
1715 ifs->skip_elses = pfile->state.skipping || !skip;
1716 ifs->was_skipping = pfile->state.skipping;
1717 ifs->type = type;
1718 /* This condition is effectively a test for top-of-file. */
1719 if (pfile->mi_valid && pfile->mi_cmacro == 0)
1720 ifs->mi_cmacro = cmacro;
1721 else
1722 ifs->mi_cmacro = 0;
1724 pfile->state.skipping = skip;
1725 buffer->if_stack = ifs;
1728 /* Read the tokens of the answer into the macro pool, in a directive
1729 of type TYPE. Only commit the memory if we intend it as permanent
1730 storage, i.e. the #assert case. Returns 0 on success, and sets
1731 ANSWERP to point to the answer. */
1732 static int
1733 parse_answer (cpp_reader *pfile, struct answer **answerp, int type)
1735 const cpp_token *paren;
1736 struct answer *answer;
1737 unsigned int acount;
1739 /* In a conditional, it is legal to not have an open paren. We
1740 should save the following token in this case. */
1741 paren = cpp_get_token (pfile);
1743 /* If not a paren, see if we're OK. */
1744 if (paren->type != CPP_OPEN_PAREN)
1746 /* In a conditional no answer is a test for any answer. It
1747 could be followed by any token. */
1748 if (type == T_IF)
1750 _cpp_backup_tokens (pfile, 1);
1751 return 0;
1754 /* #unassert with no answer is valid - it removes all answers. */
1755 if (type == T_UNASSERT && paren->type == CPP_EOF)
1756 return 0;
1758 cpp_error (pfile, CPP_DL_ERROR, "missing '(' after predicate");
1759 return 1;
1762 for (acount = 0;; acount++)
1764 size_t room_needed;
1765 const cpp_token *token = cpp_get_token (pfile);
1766 cpp_token *dest;
1768 if (token->type == CPP_CLOSE_PAREN)
1769 break;
1771 if (token->type == CPP_EOF)
1773 cpp_error (pfile, CPP_DL_ERROR, "missing ')' to complete answer");
1774 return 1;
1777 /* struct answer includes the space for one token. */
1778 room_needed = (sizeof (struct answer) + acount * sizeof (cpp_token));
1780 if (BUFF_ROOM (pfile->a_buff) < room_needed)
1781 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (struct answer));
1783 dest = &((struct answer *) BUFF_FRONT (pfile->a_buff))->first[acount];
1784 *dest = *token;
1786 /* Drop whitespace at start, for answer equivalence purposes. */
1787 if (acount == 0)
1788 dest->flags &= ~PREV_WHITE;
1791 if (acount == 0)
1793 cpp_error (pfile, CPP_DL_ERROR, "predicate's answer is empty");
1794 return 1;
1797 answer = (struct answer *) BUFF_FRONT (pfile->a_buff);
1798 answer->count = acount;
1799 answer->next = NULL;
1800 *answerp = answer;
1802 return 0;
1805 /* Parses an assertion directive of type TYPE, returning a pointer to
1806 the hash node of the predicate, or 0 on error. If an answer was
1807 supplied, it is placed in ANSWERP, otherwise it is set to 0. */
1808 static cpp_hashnode *
1809 parse_assertion (cpp_reader *pfile, struct answer **answerp, int type)
1811 cpp_hashnode *result = 0;
1812 const cpp_token *predicate;
1814 /* We don't expand predicates or answers. */
1815 pfile->state.prevent_expansion++;
1817 *answerp = 0;
1818 predicate = cpp_get_token (pfile);
1819 if (predicate->type == CPP_EOF)
1820 cpp_error (pfile, CPP_DL_ERROR, "assertion without predicate");
1821 else if (predicate->type != CPP_NAME)
1822 cpp_error (pfile, CPP_DL_ERROR, "predicate must be an identifier");
1823 else if (parse_answer (pfile, answerp, type) == 0)
1825 unsigned int len = NODE_LEN (predicate->val.node);
1826 unsigned char *sym = (unsigned char *) alloca (len + 1);
1828 /* Prefix '#' to get it out of macro namespace. */
1829 sym[0] = '#';
1830 memcpy (sym + 1, NODE_NAME (predicate->val.node), len);
1831 result = cpp_lookup (pfile, sym, len + 1);
1834 pfile->state.prevent_expansion--;
1835 return result;
1838 /* Returns a pointer to the pointer to CANDIDATE in the answer chain,
1839 or a pointer to NULL if the answer is not in the chain. */
1840 static struct answer **
1841 find_answer (cpp_hashnode *node, const struct answer *candidate)
1843 unsigned int i;
1844 struct answer **result;
1846 for (result = &node->value.answers; *result; result = &(*result)->next)
1848 struct answer *answer = *result;
1850 if (answer->count == candidate->count)
1852 for (i = 0; i < answer->count; i++)
1853 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1854 break;
1856 if (i == answer->count)
1857 break;
1861 return result;
1864 /* Test an assertion within a preprocessor conditional. Returns
1865 nonzero on failure, zero on success. On success, the result of
1866 the test is written into VALUE, otherwise the value 0. */
1868 _cpp_test_assertion (cpp_reader *pfile, unsigned int *value)
1870 struct answer *answer;
1871 cpp_hashnode *node;
1873 node = parse_assertion (pfile, &answer, T_IF);
1875 /* For recovery, an erroneous assertion expression is handled as a
1876 failing assertion. */
1877 *value = 0;
1879 if (node)
1880 *value = (node->type == NT_ASSERTION &&
1881 (answer == 0 || *find_answer (node, answer) != 0));
1882 else if (pfile->cur_token[-1].type == CPP_EOF)
1883 _cpp_backup_tokens (pfile, 1);
1885 /* We don't commit the memory for the answer - it's temporary only. */
1886 return node == 0;
1889 /* Handle #assert. */
1890 static void
1891 do_assert (cpp_reader *pfile)
1893 struct answer *new_answer;
1894 cpp_hashnode *node;
1896 node = parse_assertion (pfile, &new_answer, T_ASSERT);
1897 if (node)
1899 size_t answer_size;
1901 /* Place the new answer in the answer list. First check there
1902 is not a duplicate. */
1903 new_answer->next = 0;
1904 if (node->type == NT_ASSERTION)
1906 if (*find_answer (node, new_answer))
1908 cpp_error (pfile, CPP_DL_WARNING, "\"%s\" re-asserted",
1909 NODE_NAME (node) + 1);
1910 return;
1912 new_answer->next = node->value.answers;
1915 answer_size = sizeof (struct answer) + ((new_answer->count - 1)
1916 * sizeof (cpp_token));
1917 /* Commit or allocate storage for the object. */
1918 if (pfile->hash_table->alloc_subobject)
1920 struct answer *temp_answer = new_answer;
1921 new_answer = (struct answer *) pfile->hash_table->alloc_subobject
1922 (answer_size);
1923 memcpy (new_answer, temp_answer, answer_size);
1925 else
1926 BUFF_FRONT (pfile->a_buff) += answer_size;
1928 node->type = NT_ASSERTION;
1929 node->value.answers = new_answer;
1930 check_eol (pfile);
1934 /* Handle #unassert. */
1935 static void
1936 do_unassert (cpp_reader *pfile)
1938 cpp_hashnode *node;
1939 struct answer *answer;
1941 node = parse_assertion (pfile, &answer, T_UNASSERT);
1942 /* It isn't an error to #unassert something that isn't asserted. */
1943 if (node && node->type == NT_ASSERTION)
1945 if (answer)
1947 struct answer **p = find_answer (node, answer), *temp;
1949 /* Remove the answer from the list. */
1950 temp = *p;
1951 if (temp)
1952 *p = temp->next;
1954 /* Did we free the last answer? */
1955 if (node->value.answers == 0)
1956 node->type = NT_VOID;
1958 check_eol (pfile);
1960 else
1961 _cpp_free_definition (node);
1964 /* We don't commit the memory for the answer - it's temporary only. */
1967 /* These are for -D, -U, -A. */
1969 /* Process the string STR as if it appeared as the body of a #define.
1970 If STR is just an identifier, define it with value 1.
1971 If STR has anything after the identifier, then it should
1972 be identifier=definition. */
1973 void
1974 cpp_define (cpp_reader *pfile, const char *str)
1976 char *buf, *p;
1977 size_t count;
1979 /* Copy the entire option so we can modify it.
1980 Change the first "=" in the string to a space. If there is none,
1981 tack " 1" on the end. */
1983 count = strlen (str);
1984 buf = (char *) alloca (count + 3);
1985 memcpy (buf, str, count);
1987 p = strchr (str, '=');
1988 if (p)
1989 buf[p - str] = ' ';
1990 else
1992 buf[count++] = ' ';
1993 buf[count++] = '1';
1995 buf[count] = '\n';
1997 run_directive (pfile, T_DEFINE, buf, count);
2000 /* Slight variant of the above for use by initialize_builtins. */
2001 void
2002 _cpp_define_builtin (cpp_reader *pfile, const char *str)
2004 size_t len = strlen (str);
2005 char *buf = (char *) alloca (len + 1);
2006 memcpy (buf, str, len);
2007 buf[len] = '\n';
2008 run_directive (pfile, T_DEFINE, buf, len);
2011 /* Process MACRO as if it appeared as the body of an #undef. */
2012 void
2013 cpp_undef (cpp_reader *pfile, const char *macro)
2015 size_t len = strlen (macro);
2016 char *buf = (char *) alloca (len + 1);
2017 memcpy (buf, macro, len);
2018 buf[len] = '\n';
2019 run_directive (pfile, T_UNDEF, buf, len);
2022 /* Process the string STR as if it appeared as the body of a #assert. */
2023 void
2024 cpp_assert (cpp_reader *pfile, const char *str)
2026 handle_assertion (pfile, str, T_ASSERT);
2029 /* Process STR as if it appeared as the body of an #unassert. */
2030 void
2031 cpp_unassert (cpp_reader *pfile, const char *str)
2033 handle_assertion (pfile, str, T_UNASSERT);
2036 /* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
2037 static void
2038 handle_assertion (cpp_reader *pfile, const char *str, int type)
2040 size_t count = strlen (str);
2041 const char *p = strchr (str, '=');
2043 /* Copy the entire option so we can modify it. Change the first
2044 "=" in the string to a '(', and tack a ')' on the end. */
2045 char *buf = (char *) alloca (count + 2);
2047 memcpy (buf, str, count);
2048 if (p)
2050 buf[p - str] = '(';
2051 buf[count++] = ')';
2053 buf[count] = '\n';
2054 str = buf;
2056 run_directive (pfile, type, str, count);
2059 /* The number of errors for a given reader. */
2060 unsigned int
2061 cpp_errors (cpp_reader *pfile)
2063 return pfile->errors;
2066 /* The options structure. */
2067 cpp_options *
2068 cpp_get_options (cpp_reader *pfile)
2070 return &pfile->opts;
2073 /* The callbacks structure. */
2074 cpp_callbacks *
2075 cpp_get_callbacks (cpp_reader *pfile)
2077 return &pfile->cb;
2080 /* Copy the given callbacks structure to our own. */
2081 void
2082 cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
2084 pfile->cb = *cb;
2087 /* The dependencies structure. (Creates one if it hasn't already been.) */
2088 struct deps *
2089 cpp_get_deps (cpp_reader *pfile)
2091 if (!pfile->deps)
2092 pfile->deps = deps_init ();
2093 return pfile->deps;
2096 /* Push a new buffer on the buffer stack. Returns the new buffer; it
2097 doesn't fail. It does not generate a file change call back; that
2098 is the responsibility of the caller. */
2099 cpp_buffer *
2100 cpp_push_buffer (cpp_reader *pfile, const uchar *buffer, size_t len,
2101 int from_stage3)
2103 cpp_buffer *new_buffer = XOBNEW (&pfile->buffer_ob, cpp_buffer);
2105 /* Clears, amongst other things, if_stack and mi_cmacro. */
2106 memset (new_buffer, 0, sizeof (cpp_buffer));
2108 new_buffer->next_line = new_buffer->buf = buffer;
2109 new_buffer->rlimit = buffer + len;
2110 new_buffer->from_stage3 = from_stage3;
2111 new_buffer->prev = pfile->buffer;
2112 new_buffer->need_line = true;
2114 pfile->buffer = new_buffer;
2116 return new_buffer;
2119 /* Pops a single buffer, with a file change call-back if appropriate.
2120 Then pushes the next -include file, if any remain. */
2121 void
2122 _cpp_pop_buffer (cpp_reader *pfile)
2124 cpp_buffer *buffer = pfile->buffer;
2125 struct _cpp_file *inc = buffer->file;
2126 struct if_stack *ifs;
2128 /* Walk back up the conditional stack till we reach its level at
2129 entry to this file, issuing error messages. */
2130 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
2131 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
2132 "unterminated #%s", dtable[ifs->type].name);
2134 /* In case of a missing #endif. */
2135 pfile->state.skipping = 0;
2137 /* _cpp_do_file_change expects pfile->buffer to be the new one. */
2138 pfile->buffer = buffer->prev;
2140 free (buffer->notes);
2142 /* Free the buffer object now; we may want to push a new buffer
2143 in _cpp_push_next_include_file. */
2144 obstack_free (&pfile->buffer_ob, buffer);
2146 if (inc)
2148 _cpp_pop_file_buffer (pfile, inc);
2150 _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
2154 /* Enter all recognized directives in the hash table. */
2155 void
2156 _cpp_init_directives (cpp_reader *pfile)
2158 unsigned int i;
2159 cpp_hashnode *node;
2161 for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
2163 node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
2164 node->is_directive = 1;
2165 node->directive_index = i;