* java/lang/natString.cc (rehash): Don't bother with memset;
[official-gcc.git] / gcc / cpplib.c
blob00fb1483cc0e7e02a1b45bed35e86be75e4e9c61
1 /* CPP Library. (Directive handling.)
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
22 #include "config.h"
23 #include "system.h"
25 #include "cpplib.h"
26 #include "cpphash.h"
27 #include "intl.h"
28 #include "obstack.h"
29 #include "symcat.h"
31 /* Chained list of answers to an assertion. */
32 struct answer
34 struct answer *next;
35 unsigned int count;
36 cpp_token first[1];
39 /* Stack of conditionals currently in progress
40 (including both successful and failing conditionals). */
42 struct if_stack
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. */
54 #define KANDR 0
55 #define STDC89 1
56 #define EXTENSION 2
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). */
63 #define COND (1 << 0)
64 #define IF_COND (1 << 1)
65 #define INCL (1 << 2)
66 #define IN_I (1 << 3)
68 /* Defines one #-directive, including how to handle it. */
69 typedef void (*directive_handler) PARAMS ((cpp_reader *));
70 typedef struct directive directive;
71 struct 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,
87 enum cpp_buffer_type,
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,
95 unsigned long *));
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_include_common PARAMS ((cpp_reader *, enum include_type));
99 static void do_pragma_once PARAMS ((cpp_reader *));
100 static void do_pragma_poison PARAMS ((cpp_reader *));
101 static void do_pragma_system_header PARAMS ((cpp_reader *));
102 static void do_pragma_dependency PARAMS ((cpp_reader *));
103 static int get__Pragma_string PARAMS ((cpp_reader *, cpp_token *));
104 static unsigned char *destringize PARAMS ((const cpp_string *,
105 unsigned int *));
106 static int parse_answer PARAMS ((cpp_reader *, struct answer **, int));
107 static cpp_hashnode *parse_assertion PARAMS ((cpp_reader *, struct answer **,
108 int));
109 static struct answer ** find_answer PARAMS ((cpp_hashnode *,
110 const struct answer *));
111 static void handle_assertion PARAMS ((cpp_reader *, const char *, int));
113 /* This is the table of directive handlers. It is ordered by
114 frequency of occurrence; the numbers at the end are directive
115 counts from all the source code I have lying around (egcs and libc
116 CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
117 pcmcia-cs-3.0.9). This is no longer important as directive lookup
118 is now O(1). All extensions other than #warning and #include_next
119 are deprecated. The name is where the extension appears to have
120 come from. */
122 #define DIRECTIVE_TABLE \
123 D(define, T_DEFINE = 0, KANDR, IN_I) /* 270554 */ \
124 D(include, T_INCLUDE, KANDR, INCL) /* 52262 */ \
125 D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \
126 D(ifdef, T_IFDEF, KANDR, COND | IF_COND) /* 22000 */ \
127 D(if, T_IF, KANDR, COND | IF_COND) /* 18162 */ \
128 D(else, T_ELSE, KANDR, COND) /* 9863 */ \
129 D(ifndef, T_IFNDEF, KANDR, COND | IF_COND) /* 9675 */ \
130 D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \
131 D(line, T_LINE, KANDR, IN_I) /* 2465 */ \
132 D(elif, T_ELIF, STDC89, COND) /* 610 */ \
133 D(error, T_ERROR, STDC89, 0) /* 475 */ \
134 D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \
135 D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \
136 D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL) /* 19 */ \
137 D(ident, T_IDENT, EXTENSION, IN_I) /* 11 */ \
138 D(import, T_IMPORT, EXTENSION, INCL) /* 0 ObjC */ \
139 D(assert, T_ASSERT, EXTENSION, 0) /* 0 SVR4 */ \
140 D(unassert, T_UNASSERT, EXTENSION, 0) /* 0 SVR4 */ \
141 SCCS_ENTRY /* 0 SVR4? */
143 /* #sccs is not always recognized. */
144 #ifdef SCCS_DIRECTIVE
145 # define SCCS_ENTRY D(sccs, T_SCCS, EXTENSION, 0)
146 #else
147 # define SCCS_ENTRY /* nothing */
148 #endif
150 /* Use the table to generate a series of prototypes, an enum for the
151 directive names, and an array of directive handlers. */
153 /* The directive-processing functions are declared to return int
154 instead of void, because some old compilers have trouble with
155 pointers to functions returning void. */
157 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
158 #define D(name, t, o, f) static void CONCAT2(do_,name) PARAMS ((cpp_reader *));
159 DIRECTIVE_TABLE
160 #undef D
162 #define D(n, tag, o, f) tag,
163 enum
165 DIRECTIVE_TABLE
166 N_DIRECTIVES
168 #undef D
170 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
171 #define D(name, t, origin, flags) \
172 { CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
173 sizeof STRINGX(name) - 1, origin, flags },
174 static const directive dtable[] =
176 DIRECTIVE_TABLE
178 #undef D
179 #undef DIRECTIVE_TABLE
181 /* Skip any remaining tokens in a directive. */
182 static void
183 skip_rest_of_line (pfile)
184 cpp_reader *pfile;
186 cpp_token token;
188 /* Discard all input lookaheads. */
189 while (pfile->la_read)
190 _cpp_release_lookahead (pfile);
192 /* Discard all stacked contexts. */
193 while (pfile->context != &pfile->base_context)
194 _cpp_pop_context (pfile);
196 /* Sweep up all tokens remaining on the line. */
197 pfile->state.prevent_expansion++;
198 while (!pfile->state.next_bol)
199 _cpp_lex_token (pfile, &token);
200 pfile->state.prevent_expansion--;
203 /* Ensure there are no stray tokens at the end of a directive. */
204 static void
205 check_eol (pfile)
206 cpp_reader *pfile;
208 if (!pfile->state.next_bol)
210 cpp_token token;
212 _cpp_lex_token (pfile, &token);
213 if (token.type != CPP_EOF)
214 cpp_pedwarn (pfile, "extra tokens at end of #%s directive",
215 pfile->directive->name);
219 /* Called when entering a directive, _Pragma or command-line directive. */
220 static void
221 start_directive (pfile)
222 cpp_reader *pfile;
224 cpp_buffer *buffer = pfile->buffer;
226 /* Setup in-directive state. */
227 pfile->state.in_directive = 1;
228 pfile->state.save_comments = 0;
230 /* Some handlers need the position of the # for diagnostics. */
231 pfile->directive_pos = pfile->lexer_pos;
233 /* Don't save directive tokens for external clients. */
234 pfile->la_saved = pfile->la_write;
235 pfile->la_write = 0;
237 /* Turn off skipping. */
238 buffer->was_skipping = pfile->skipping;
239 pfile->skipping = 0;
242 /* Called when leaving a directive, _Pragma or command-line directive. */
243 static void
244 end_directive (pfile, skip_line)
245 cpp_reader *pfile;
246 int skip_line;
248 cpp_buffer *buffer = pfile->buffer;
250 /* Restore pfile->skipping before skip_rest_of_line, so that e.g.
251 __VA_ARGS__ in the rest of the directive doesn't warn. */
252 pfile->skipping = buffer->was_skipping;
254 /* We don't skip for an assembler #. */
255 if (skip_line)
256 skip_rest_of_line (pfile);
258 /* Restore state. */
259 pfile->la_write = pfile->la_saved;
260 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
261 pfile->state.in_directive = 0;
262 pfile->state.angled_headers = 0;
263 pfile->state.line_extension = 0;
264 pfile->directive = 0;
267 /* Check if a token's name matches that of a known directive. Put in
268 this file to save exporting dtable and other unneeded information. */
270 _cpp_handle_directive (pfile, indented)
271 cpp_reader *pfile;
272 int indented;
274 cpp_buffer *buffer = pfile->buffer;
275 const directive *dir = 0;
276 cpp_token dname;
277 int skip = 1;
279 start_directive (pfile);
281 /* Lex the directive name directly. */
282 _cpp_lex_token (pfile, &dname);
284 if (dname.type == CPP_NAME)
286 unsigned int index = dname.val.node->directive_index;
287 if (index)
288 dir = &dtable[index - 1];
290 else if (dname.type == CPP_NUMBER)
292 /* # followed by a number is equivalent to #line. Do not
293 recognize this form in assembly language source files or
294 skipped conditional groups. Complain about this form if
295 we're being pedantic, but not if this is regurgitated input
296 (preprocessed or fed back in by the C++ frontend). */
297 if (! buffer->was_skipping && CPP_OPTION (pfile, lang) != CLK_ASM)
299 dir = &dtable[T_LINE];
300 pfile->state.line_extension = 1;
301 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
302 if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed))
303 cpp_pedwarn (pfile, "# followed by integer");
307 pfile->directive = dir;
308 if (dir)
310 /* Make sure we lex headers correctly, whether skipping or not. */
311 pfile->state.angled_headers = dir->flags & INCL;
313 /* If we are rescanning preprocessed input, only directives tagged
314 with IN_I are honored, and the warnings below are suppressed. */
315 if (! CPP_OPTION (pfile, preprocessed) || dir->flags & IN_I)
317 /* Traditionally, a directive is ignored unless its # is in
318 column 1. Therefore in code intended to work with K+R
319 compilers, directives added by C89 must have their #
320 indented, and directives present in traditional C must
321 not. This is true even of directives in skipped
322 conditional blocks. */
323 if (CPP_WTRADITIONAL (pfile))
325 if (dir == &dtable[T_ELIF])
326 cpp_warning (pfile,
327 "suggest not using #elif in traditional C");
328 else if (indented && dir->origin == KANDR)
329 cpp_warning (pfile,
330 "traditional C ignores #%s with the # indented",
331 dir->name);
332 else if (!indented && dir->origin != KANDR)
333 cpp_warning (pfile,
334 "suggest hiding #%s from traditional C with an indented #",
335 dir->name);
338 /* If we are skipping a failed conditional group, all
339 non-conditional directives are ignored. */
340 if (! buffer->was_skipping || (dir->flags & COND))
342 /* Issue -pedantic warnings for extensions. */
343 if (CPP_PEDANTIC (pfile) && dir->origin == EXTENSION)
344 cpp_pedwarn (pfile, "#%s is a GCC extension", dir->name);
346 /* If we have a directive that is not an opening
347 conditional, invalidate any control macro. */
348 if (! (dir->flags & IF_COND))
349 pfile->mi_state = MI_FAILED;
351 (*dir->handler) (pfile);
355 else if (dname.type != CPP_EOF && ! buffer->was_skipping)
357 /* An unknown directive. Don't complain about it in assembly
358 source: we don't know where the comments are, and # may
359 introduce assembler pseudo-ops. Don't complain about invalid
360 directives in skipped conditional groups (6.10 p4). */
361 if (CPP_OPTION (pfile, lang) == CLK_ASM)
363 /* Output the # and lookahead token for the assembler. */
364 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
365 skip = 0;
367 else
368 cpp_error (pfile, "invalid preprocessing directive #%s",
369 cpp_token_as_text (pfile, &dname));
372 end_directive (pfile, skip);
373 return skip;
376 /* Directive handler wrapper used by the command line option
377 processor. */
378 static void
379 run_directive (pfile, dir_no, type, buf, count)
380 cpp_reader *pfile;
381 int dir_no;
382 enum cpp_buffer_type type;
383 const char *buf;
384 size_t count;
386 unsigned int output_line = pfile->lexer_pos.output_line;
387 cpp_buffer *buffer;
389 buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count, type, 0);
391 if (dir_no == T_PRAGMA)
393 /* A kludge to avoid line markers for _Pragma. */
394 pfile->lexer_pos.output_line = output_line;
395 /* Avoid interpretation of directives in a _Pragma string. */
396 pfile->state.next_bol = 0;
399 start_directive (pfile);
400 pfile->state.prevent_expansion++;
401 (void) (*dtable[dir_no].handler) (pfile);
402 pfile->state.prevent_expansion--;
403 check_eol (pfile);
404 end_directive (pfile, 1);
406 cpp_pop_buffer (pfile);
409 /* Checks for validity the macro name in #define, #undef, #ifdef and
410 #ifndef directives. */
411 static cpp_hashnode *
412 lex_macro_node (pfile)
413 cpp_reader *pfile;
415 cpp_token token;
417 /* Lex the macro name directly. */
418 _cpp_lex_token (pfile, &token);
420 /* The token immediately after #define must be an identifier. That
421 identifier is not allowed to be "defined". See predefined macro
422 names (6.10.8.4). In C++, it is not allowed to be any of the
423 <iso646.h> macro names (which are keywords in C++) either. */
425 if (token.type != CPP_NAME)
427 if (token.type == CPP_EOF)
428 cpp_error (pfile, "no macro name given in #%s directive",
429 pfile->directive->name);
430 else if (token.flags & NAMED_OP)
431 cpp_error (pfile,
432 "\"%s\" cannot be used as a macro name as it is an operator in C++",
433 token.val.node->name);
434 else
435 cpp_error (pfile, "macro names must be identifiers");
437 else
439 cpp_hashnode *node = token.val.node;
441 /* In Objective C, some keywords begin with '@', but general
442 identifiers do not, and you're not allowed to #define them. */
443 if (node == pfile->spec_nodes.n_defined || node->name[0] == '@')
444 cpp_error (pfile, "\"%s\" cannot be used as a macro name", node->name);
445 else if (!(node->flags & NODE_POISONED))
446 return node;
449 return 0;
452 /* Process a #define directive. Most work is done in cppmacro.c. */
453 static void
454 do_define (pfile)
455 cpp_reader *pfile;
457 cpp_hashnode *node = lex_macro_node (pfile);
459 if (node)
461 if (_cpp_create_definition (pfile, node))
462 if (pfile->cb.define)
463 (*pfile->cb.define) (pfile, node);
467 /* Handle #undef. Marks the identifier NT_VOID in the hash table. */
468 static void
469 do_undef (pfile)
470 cpp_reader *pfile;
472 cpp_hashnode *node = lex_macro_node (pfile);
474 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier
475 is not currently defined as a macro name. */
476 if (node && node->type == NT_MACRO)
478 if (pfile->cb.undef)
479 (*pfile->cb.undef) (pfile, node);
481 if (node->flags & NODE_WARN)
482 cpp_warning (pfile, "undefining \"%s\"", node->name);
484 _cpp_free_definition (node);
486 check_eol (pfile);
489 /* Helper routine used by parse_include. Reinterpret the current line
490 as an h-char-sequence (< ... >); we are looking at the first token
491 after the <. Returns zero on success. */
492 static int
493 glue_header_name (pfile, header)
494 cpp_reader *pfile;
495 cpp_token *header;
497 cpp_token token;
498 unsigned char *buffer, *token_mem;
499 size_t len, total_len = 0, capacity = 1024;
501 /* To avoid lexed tokens overwriting our glued name, we can only
502 allocate from the string pool once we've lexed everything. */
504 buffer = (unsigned char *) xmalloc (capacity);
505 for (;;)
507 cpp_get_token (pfile, &token);
509 if (token.type == CPP_GREATER || token.type == CPP_EOF)
510 break;
512 len = cpp_token_len (&token);
513 if (total_len + len > capacity)
515 capacity = (capacity + len) * 2;
516 buffer = (unsigned char *) xrealloc (buffer, capacity);
519 if (token.flags & PREV_WHITE)
520 buffer[total_len++] = ' ';
522 total_len = cpp_spell_token (pfile, &token, &buffer[total_len]) - buffer;
525 if (token.type == CPP_EOF)
526 cpp_error (pfile, "missing terminating > character");
527 else
529 token_mem = _cpp_pool_alloc (&pfile->ident_pool, total_len + 1);
530 memcpy (token_mem, buffer, total_len);
531 token_mem[total_len] = '\0';
533 header->type = CPP_HEADER_NAME;
534 header->flags &= ~PREV_WHITE;
535 header->val.str.len = total_len;
536 header->val.str.text = token_mem;
539 free ((PTR) buffer);
540 return token.type == CPP_EOF;
543 /* Parse the header name of #include, #include_next, #import and
544 #pragma dependency. Returns zero on success. */
545 static int
546 parse_include (pfile, header)
547 cpp_reader *pfile;
548 cpp_token *header;
550 int is_pragma = pfile->directive == &dtable[T_PRAGMA];
551 const unsigned char *dir;
553 if (is_pragma)
554 dir = U"pragma dependency";
555 else
556 dir = pfile->directive->name;
558 /* Allow macro expansion. */
559 cpp_get_token (pfile, header);
560 if (header->type != CPP_STRING && header->type != CPP_HEADER_NAME)
562 if (header->type != CPP_LESS)
564 cpp_error (pfile, "#%s expects \"FILENAME\" or <FILENAME>", dir);
565 return 1;
567 if (glue_header_name (pfile, header))
568 return 1;
571 if (header->val.str.len == 0)
573 cpp_error (pfile, "empty file name in #%s", dir);
574 return 1;
577 if (!is_pragma)
579 check_eol (pfile);
580 /* Get out of macro context, if we are. */
581 skip_rest_of_line (pfile);
582 if (pfile->cb.include)
583 (*pfile->cb.include) (pfile, dir, header);
586 return 0;
589 /* Handle #include, #include_next and #import. */
590 static void
591 do_include_common (pfile, type)
592 cpp_reader *pfile;
593 enum include_type type;
595 cpp_token header;
597 if (!parse_include (pfile, &header))
599 /* Prevent #include recursion. */
600 if (pfile->buffer_stack_depth >= CPP_STACK_MAX)
601 cpp_fatal (pfile, "#include nested too deeply");
602 else if (pfile->context->prev)
603 cpp_ice (pfile, "attempt to push file buffer with contexts stacked");
604 else
606 /* For #include_next, if this is the primary source file,
607 warn and use the normal search logic. */
608 if (type == IT_INCLUDE_NEXT && ! pfile->buffer->prev)
610 cpp_warning (pfile, "#include_next in primary source file");
611 type = IT_INCLUDE;
614 _cpp_execute_include (pfile, &header, type);
619 static void
620 do_include (pfile)
621 cpp_reader *pfile;
623 do_include_common (pfile, IT_INCLUDE);
626 static void
627 do_import (pfile)
628 cpp_reader *pfile;
630 if (!pfile->import_warning && CPP_OPTION (pfile, warn_import))
632 pfile->import_warning = 1;
633 cpp_warning (pfile,
634 "#import is obsolete, use an #ifndef wrapper in the header file");
637 do_include_common (pfile, IT_IMPORT);
640 static void
641 do_include_next (pfile)
642 cpp_reader *pfile;
644 do_include_common (pfile, IT_INCLUDE_NEXT);
647 /* Subroutine of do_line. Read possible flags after file name. LAST
648 is the last flag seen; 0 if this is the first flag. Return the flag
649 if it is valid, 0 at the end of the directive. Otherwise complain. */
651 static unsigned int
652 read_flag (pfile, last)
653 cpp_reader *pfile;
654 unsigned int last;
656 cpp_token token;
658 _cpp_lex_token (pfile, &token);
659 if (token.type == CPP_NUMBER && token.val.str.len == 1)
661 unsigned int flag = token.val.str.text[0] - '0';
663 if (flag > last && flag <= 4
664 && (flag != 4 || last == 3)
665 && (flag != 2 || last == 0))
666 return flag;
669 if (token.type != CPP_EOF)
670 cpp_error (pfile, "invalid flag \"%s\" in line directive",
671 cpp_token_as_text (pfile, &token));
672 return 0;
675 /* Another subroutine of do_line. Convert a number in STR, of length
676 LEN, to binary; store it in NUMP, and return 0 if the number was
677 well-formed, 1 if not. Temporary, hopefully. */
678 static int
679 strtoul_for_line (str, len, nump)
680 const U_CHAR *str;
681 unsigned int len;
682 unsigned long *nump;
684 unsigned long reg = 0;
685 U_CHAR c;
686 while (len--)
688 c = *str++;
689 if (!ISDIGIT (c))
690 return 1;
691 reg *= 10;
692 reg += c - '0';
694 *nump = reg;
695 return 0;
698 /* Interpret #line command.
699 Note that the filename string (if any) is treated as if it were an
700 include filename. That means no escape handling. */
702 static void
703 do_line (pfile)
704 cpp_reader *pfile;
706 cpp_buffer *buffer = pfile->buffer;
707 const char *filename = buffer->nominal_fname;
708 unsigned int lineno = buffer->lineno;
709 enum cpp_fc_reason reason = FC_RENAME;
710 unsigned long new_lineno;
711 unsigned int cap;
712 cpp_token token;
714 /* C99 raised the minimum limit on #line numbers. */
715 cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
717 /* #line commands expand macros. */
718 cpp_get_token (pfile, &token);
719 if (token.type != CPP_NUMBER
720 || strtoul_for_line (token.val.str.text, token.val.str.len, &new_lineno))
722 cpp_error (pfile, "\"%s\" after #line is not a positive integer",
723 cpp_token_as_text (pfile, &token));
724 return;
727 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
728 cpp_pedwarn (pfile, "line number out of range");
730 cpp_get_token (pfile, &token);
731 if (token.type == CPP_STRING)
733 char *fname;
734 unsigned int len = token.val.str.len + 1;
736 fname = (char *) _cpp_pool_alloc (&pfile->ident_pool, len);
737 memcpy (fname, token.val.str.text, len);
738 _cpp_simplify_pathname (fname);
740 /* Only accept flags for the # 55 form. */
741 if (! pfile->state.line_extension)
742 check_eol (pfile);
743 else
745 int flag = 0, sysp = 0;
747 flag = read_flag (pfile, flag);
748 if (flag == 1)
750 reason = FC_ENTER;
751 flag = read_flag (pfile, flag);
753 else if (flag == 2)
755 reason = FC_LEAVE;
756 flag = read_flag (pfile, flag);
758 if (flag == 3)
760 sysp = 1;
761 flag = read_flag (pfile, flag);
762 if (flag == 4)
763 sysp = 2, read_flag (pfile, flag);
766 if (reason == FC_ENTER)
768 /* Fake a buffer stack for diagnostics. */
769 cpp_push_buffer (pfile, 0, 0, BUF_FAKE, fname);
770 /* Fake an include for cpp_included. */
771 _cpp_fake_include (pfile, fname);
772 buffer = pfile->buffer;
774 else if (reason == FC_LEAVE)
776 if (buffer->type != BUF_FAKE)
777 cpp_warning (pfile, "file \"%s\" left but not entered",
778 buffer->nominal_fname);
779 else
781 cpp_pop_buffer (pfile);
782 buffer = pfile->buffer;
783 if (strcmp (buffer->nominal_fname, fname))
784 cpp_warning (pfile, "expected to return to file \"%s\"",
785 buffer->nominal_fname);
786 if (buffer->lineno + 1 != new_lineno)
787 cpp_warning (pfile, "expected to return to line number %u",
788 buffer->lineno + 1);
789 if (buffer->sysp != sysp)
790 cpp_warning (pfile, "header flags for \"%s\" have changed",
791 buffer->nominal_fname);
794 buffer->sysp = sysp;
796 buffer->nominal_fname = fname;
798 else if (token.type != CPP_EOF)
800 cpp_error (pfile, "\"%s\" is not a valid filename",
801 cpp_token_as_text (pfile, &token));
802 return;
805 /* Our line number is incremented after the directive is processed. */
806 buffer->lineno = new_lineno - 1;
807 _cpp_do_file_change (pfile, reason, filename, lineno);
810 /* Arrange the file_change callback. */
811 void
812 _cpp_do_file_change (pfile, reason, from_file, from_lineno)
813 cpp_reader *pfile;
814 enum cpp_fc_reason reason;
815 const char *from_file;
816 unsigned int from_lineno;
818 if (pfile->cb.file_change)
820 cpp_file_change fc;
821 cpp_buffer *buffer = pfile->buffer;
823 fc.reason = reason;
824 fc.to.filename = buffer->nominal_fname;
825 fc.to.lineno = buffer->lineno + 1;
826 fc.sysp = buffer->sysp;
827 fc.externc = CPP_OPTION (pfile, cplusplus) && buffer->sysp == 2;
829 /* Caller doesn't need to handle FC_ENTER. */
830 if (reason == FC_ENTER)
832 if (buffer->prev)
834 from_file = buffer->prev->nominal_fname;
835 from_lineno = buffer->prev->lineno;
837 else
838 from_file = 0;
840 /* Special case for file "foo.i" with "# 1 foo.c" on first line. */
841 else if (reason == FC_RENAME && ! buffer->prev
842 && pfile->directive_pos.line == 1)
843 from_file = 0;
845 fc.from.filename = from_file;
846 fc.from.lineno = from_lineno;
847 pfile->cb.file_change (pfile, &fc);
852 * Report a warning or error detected by the program we are
853 * processing. Use the directive's tokens in the error message.
856 static void
857 do_diagnostic (pfile, code, print_dir)
858 cpp_reader *pfile;
859 enum error_type code;
860 int print_dir;
862 if (_cpp_begin_message (pfile, code, NULL, 0))
864 if (print_dir)
865 fprintf (stderr, "#%s ", pfile->directive->name);
866 pfile->state.prevent_expansion++;
867 cpp_output_line (pfile, stderr);
868 pfile->state.prevent_expansion--;
872 static void
873 do_error (pfile)
874 cpp_reader *pfile;
876 do_diagnostic (pfile, ERROR, 1);
879 static void
880 do_warning (pfile)
881 cpp_reader *pfile;
883 do_diagnostic (pfile, WARNING, 1);
886 /* Report program identification. */
888 static void
889 do_ident (pfile)
890 cpp_reader *pfile;
892 cpp_token str;
894 cpp_get_token (pfile, &str);
895 if (str.type != CPP_STRING)
896 cpp_error (pfile, "invalid #ident");
897 else if (pfile->cb.ident)
898 (*pfile->cb.ident) (pfile, &str.val.str);
900 check_eol (pfile);
903 /* Pragmata handling. We handle some of these, and pass the rest on
904 to the front end. C99 defines three pragmas and says that no macro
905 expansion is to be performed on them; whether or not macro
906 expansion happens for other pragmas is implementation defined.
907 This implementation never macro-expands the text after #pragma. */
909 /* Sub-handlers for the pragmas needing treatment here.
910 They return 1 if the token buffer is to be popped, 0 if not. */
911 struct pragma_entry
913 struct pragma_entry *next;
914 const char *name;
915 size_t len;
916 int isnspace;
917 union {
918 void (*handler) PARAMS ((cpp_reader *));
919 struct pragma_entry *space;
920 } u;
923 void
924 cpp_register_pragma (pfile, space, name, handler)
925 cpp_reader *pfile;
926 const char *space;
927 const char *name;
928 void (*handler) PARAMS ((cpp_reader *));
930 struct pragma_entry **x, *new;
931 size_t len;
933 x = &pfile->pragmas;
934 if (space)
936 struct pragma_entry *p = pfile->pragmas;
937 len = strlen (space);
938 while (p)
940 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
942 x = &p->u.space;
943 goto found;
945 p = p->next;
947 cpp_ice (pfile, "unknown #pragma namespace %s", space);
948 return;
951 found:
952 new = xnew (struct pragma_entry);
953 new->name = name;
954 new->len = strlen (name);
955 new->isnspace = 0;
956 new->u.handler = handler;
958 new->next = *x;
959 *x = new;
962 void
963 cpp_register_pragma_space (pfile, space)
964 cpp_reader *pfile;
965 const char *space;
967 struct pragma_entry *new;
968 const struct pragma_entry *p = pfile->pragmas;
969 size_t len = strlen (space);
971 while (p)
973 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
974 /* Multiple different callers are allowed to register the same
975 namespace. */
976 return;
977 p = p->next;
980 new = xnew (struct pragma_entry);
981 new->name = space;
982 new->len = len;
983 new->isnspace = 1;
984 new->u.space = 0;
986 new->next = pfile->pragmas;
987 pfile->pragmas = new;
990 void
991 _cpp_init_internal_pragmas (pfile)
992 cpp_reader *pfile;
994 /* top level */
995 cpp_register_pragma (pfile, 0, "poison", do_pragma_poison);
996 cpp_register_pragma (pfile, 0, "once", do_pragma_once);
998 /* GCC namespace */
999 cpp_register_pragma_space (pfile, "GCC");
1001 cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
1002 cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
1003 cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
1006 static void
1007 do_pragma (pfile)
1008 cpp_reader *pfile;
1010 const struct pragma_entry *p;
1011 cpp_token tok;
1012 const cpp_hashnode *node;
1013 const U_CHAR *name;
1014 size_t len;
1015 int drop = 0;
1017 p = pfile->pragmas;
1018 pfile->state.prevent_expansion++;
1019 cpp_start_lookahead (pfile);
1021 new_space:
1022 cpp_get_token (pfile, &tok);
1023 if (tok.type == CPP_NAME)
1025 node = tok.val.node;
1026 name = node->name;
1027 len = node->length;
1028 while (p)
1030 if (strlen (p->name) == len && !memcmp (p->name, name, len))
1032 if (p->isnspace)
1034 p = p->u.space;
1035 goto new_space;
1037 else
1039 (*p->u.handler) (pfile);
1040 drop = 1;
1041 break;
1044 p = p->next;
1048 cpp_stop_lookahead (pfile, drop);
1049 pfile->state.prevent_expansion--;
1051 if (!drop && pfile->cb.def_pragma)
1052 (*pfile->cb.def_pragma) (pfile);
1055 static void
1056 do_pragma_once (pfile)
1057 cpp_reader *pfile;
1059 cpp_warning (pfile, "#pragma once is obsolete");
1061 if (pfile->buffer->prev == NULL)
1062 cpp_warning (pfile, "#pragma once in main file");
1063 else
1064 _cpp_never_reread (pfile->buffer->inc);
1066 check_eol (pfile);
1069 static void
1070 do_pragma_poison (pfile)
1071 cpp_reader *pfile;
1073 /* Poison these symbols so that all subsequent usage produces an
1074 error message. */
1075 cpp_token tok;
1076 cpp_hashnode *hp;
1078 pfile->state.poisoned_ok = 1;
1079 for (;;)
1081 _cpp_lex_token (pfile, &tok);
1082 if (tok.type == CPP_EOF)
1083 break;
1084 if (tok.type != CPP_NAME)
1086 cpp_error (pfile, "invalid #pragma GCC poison directive");
1087 break;
1090 hp = tok.val.node;
1091 if (hp->flags & NODE_POISONED)
1092 continue;
1094 if (hp->type == NT_MACRO)
1095 cpp_warning (pfile, "poisoning existing macro \"%s\"", hp->name);
1096 _cpp_free_definition (hp);
1097 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
1099 pfile->state.poisoned_ok = 0;
1101 #if 0 /* Doesn't quite work yet. */
1102 if (tok.type == CPP_EOF && pfile->cb.poison)
1103 (*pfile->cb.poison) (pfile);
1104 #endif
1107 /* Mark the current header as a system header. This will suppress
1108 some categories of warnings (notably those from -pedantic). It is
1109 intended for use in system libraries that cannot be implemented in
1110 conforming C, but cannot be certain that their headers appear in a
1111 system include directory. To prevent abuse, it is rejected in the
1112 primary source file. */
1113 static void
1114 do_pragma_system_header (pfile)
1115 cpp_reader *pfile;
1117 cpp_buffer *buffer = pfile->buffer;
1119 if (buffer->prev == 0)
1120 cpp_warning (pfile, "#pragma system_header ignored outside include file");
1121 else
1122 cpp_make_system_header (pfile, 1, 0);
1124 check_eol (pfile);
1127 /* Check the modified date of the current include file against a specified
1128 file. Issue a diagnostic, if the specified file is newer. We use this to
1129 determine if a fixed header should be refixed. */
1130 static void
1131 do_pragma_dependency (pfile)
1132 cpp_reader *pfile;
1134 cpp_token header, msg;
1135 int ordering;
1137 if (parse_include (pfile, &header))
1138 return;
1140 ordering = _cpp_compare_file_date (pfile, &header);
1141 if (ordering < 0)
1142 cpp_warning (pfile, "cannot find source %s",
1143 cpp_token_as_text (pfile, &header));
1144 else if (ordering > 0)
1146 cpp_warning (pfile, "current file is older than %s",
1147 cpp_token_as_text (pfile, &header));
1148 cpp_start_lookahead (pfile);
1149 cpp_get_token (pfile, &msg);
1150 cpp_stop_lookahead (pfile, msg.type == CPP_EOF);
1151 if (msg.type != CPP_EOF)
1152 do_diagnostic (pfile, WARNING, 0);
1156 /* Check syntax is "(string-literal)". Returns 0 on success. */
1157 static int
1158 get__Pragma_string (pfile, string)
1159 cpp_reader *pfile;
1160 cpp_token *string;
1162 cpp_token paren;
1164 cpp_get_token (pfile, &paren);
1165 if (paren.type != CPP_OPEN_PAREN)
1166 return 1;
1168 cpp_get_token (pfile, string);
1169 if (string->type != CPP_STRING && string->type != CPP_WSTRING)
1170 return 1;
1172 cpp_get_token (pfile, &paren);
1173 return paren.type != CPP_CLOSE_PAREN;
1176 /* Returns a malloced buffer containing a destringized cpp_string by
1177 removing the first \ of \" and \\ sequences. */
1178 static unsigned char *
1179 destringize (in, len)
1180 const cpp_string *in;
1181 unsigned int *len;
1183 const unsigned char *src, *limit;
1184 unsigned char *dest, *result;
1186 dest = result = (unsigned char *) xmalloc (in->len);
1187 for (src = in->text, limit = src + in->len; src < limit;)
1189 /* We know there is a character following the backslash. */
1190 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1191 src++;
1192 *dest++ = *src++;
1195 *len = dest - result;
1196 return result;
1199 void
1200 _cpp_do__Pragma (pfile)
1201 cpp_reader *pfile;
1203 cpp_token string;
1204 unsigned char *buffer;
1205 unsigned int len;
1207 if (get__Pragma_string (pfile, &string))
1209 cpp_error (pfile, "_Pragma takes a parenthesized string literal");
1210 return;
1213 buffer = destringize (&string.val.str, &len);
1214 run_directive (pfile, T_PRAGMA, BUF_PRAGMA, (char *) buffer, len);
1215 free ((PTR) buffer);
1218 /* Just ignore #sccs, on systems where we define it at all. */
1219 #ifdef SCCS_DIRECTIVE
1220 static void
1221 do_sccs (pfile)
1222 cpp_reader *pfile ATTRIBUTE_UNUSED;
1225 #endif
1227 static void
1228 do_ifdef (pfile)
1229 cpp_reader *pfile;
1231 int skip = 1;
1233 if (! pfile->buffer->was_skipping)
1235 const cpp_hashnode *node = lex_macro_node (pfile);
1237 if (node)
1238 skip = node->type != NT_MACRO;
1240 if (node)
1241 check_eol (pfile);
1244 push_conditional (pfile, skip, T_IFDEF, 0);
1247 static void
1248 do_ifndef (pfile)
1249 cpp_reader *pfile;
1251 int skip = 1;
1252 const cpp_hashnode *node = 0;
1254 if (! pfile->buffer->was_skipping)
1256 node = lex_macro_node (pfile);
1257 if (node)
1258 skip = node->type == NT_MACRO;
1260 if (node)
1261 check_eol (pfile);
1264 push_conditional (pfile, skip, T_IFNDEF, node);
1267 /* #if cooperates with parse_defined to handle multiple-include
1268 optimisations. If macro expansions or identifiers appear in the
1269 expression, we cannot treat it as a controlling conditional, since
1270 their values could change in the future. */
1272 static void
1273 do_if (pfile)
1274 cpp_reader *pfile;
1276 int skip = 1;
1277 const cpp_hashnode *cmacro = 0;
1279 if (! pfile->buffer->was_skipping)
1281 /* Controlling macro of #if ! defined () */
1282 pfile->mi_ind_cmacro = 0;
1283 skip = _cpp_parse_expr (pfile) == 0;
1284 cmacro = pfile->mi_ind_cmacro;
1287 push_conditional (pfile, skip, T_IF, cmacro);
1290 /* Flip skipping state if appropriate and continue without changing
1291 if_stack; this is so that the error message for missing #endif's
1292 etc. will point to the original #if. */
1294 static void
1295 do_else (pfile)
1296 cpp_reader *pfile;
1298 cpp_buffer *buffer = pfile->buffer;
1299 struct if_stack *ifs = buffer->if_stack;
1301 if (ifs == NULL)
1302 cpp_error (pfile, "#else without #if");
1303 else
1305 if (ifs->type == T_ELSE)
1307 cpp_error (pfile, "#else after #else");
1308 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1309 "the conditional began here");
1311 ifs->type = T_ELSE;
1313 /* Buffer->was_skipping is 1 if all conditionals in this chain
1314 have been false, 2 if a conditional has been true. */
1315 if (! ifs->was_skipping && buffer->was_skipping != 2)
1316 buffer->was_skipping = ! buffer->was_skipping;
1318 /* Invalidate any controlling macro. */
1319 ifs->mi_cmacro = 0;
1322 check_eol (pfile);
1325 /* handle a #elif directive by not changing if_stack either. see the
1326 comment above do_else. */
1328 static void
1329 do_elif (pfile)
1330 cpp_reader *pfile;
1332 cpp_buffer *buffer = pfile->buffer;
1333 struct if_stack *ifs = buffer->if_stack;
1335 if (ifs == NULL)
1336 cpp_error (pfile, "#elif without #if");
1337 else
1339 if (ifs->type == T_ELSE)
1341 cpp_error (pfile, "#elif after #else");
1342 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1343 "the conditional began here");
1345 ifs->type = T_ELIF;
1347 /* Don't evaluate #elif if our higher level is skipping. */
1348 if (! ifs->was_skipping)
1350 /* Buffer->was_skipping is 1 if all conditionals in this
1351 chain have been false, 2 if a conditional has been true. */
1352 if (buffer->was_skipping == 1)
1353 buffer->was_skipping = ! _cpp_parse_expr (pfile);
1354 else
1355 buffer->was_skipping = 2;
1357 /* Invalidate any controlling macro. */
1358 ifs->mi_cmacro = 0;
1363 /* #endif pops the if stack and resets pfile->skipping. */
1365 static void
1366 do_endif (pfile)
1367 cpp_reader *pfile;
1369 cpp_buffer *buffer = pfile->buffer;
1370 struct if_stack *ifs = buffer->if_stack;
1372 if (ifs == NULL)
1373 cpp_error (pfile, "#endif without #if");
1374 else
1376 /* If potential control macro, we go back outside again. */
1377 if (ifs->next == 0 && ifs->mi_cmacro)
1379 pfile->mi_state = MI_OUTSIDE;
1380 pfile->mi_cmacro = ifs->mi_cmacro;
1383 buffer->if_stack = ifs->next;
1384 buffer->was_skipping = ifs->was_skipping;
1385 obstack_free (pfile->buffer_ob, ifs);
1388 check_eol (pfile);
1391 /* Push an if_stack entry and set pfile->skipping accordingly.
1392 If this is a #ifndef starting at the beginning of a file,
1393 CMACRO is the macro name tested by the #ifndef. */
1395 static void
1396 push_conditional (pfile, skip, type, cmacro)
1397 cpp_reader *pfile;
1398 int skip;
1399 int type;
1400 const cpp_hashnode *cmacro;
1402 struct if_stack *ifs;
1403 cpp_buffer *buffer = pfile->buffer;
1405 ifs = xobnew (pfile->buffer_ob, struct if_stack);
1406 ifs->pos = pfile->directive_pos;
1407 ifs->next = buffer->if_stack;
1408 ifs->was_skipping = buffer->was_skipping;
1409 ifs->type = type;
1410 if (pfile->mi_state == MI_OUTSIDE && pfile->mi_cmacro == 0)
1411 ifs->mi_cmacro = cmacro;
1412 else
1413 ifs->mi_cmacro = 0;
1415 buffer->was_skipping = skip;
1416 buffer->if_stack = ifs;
1419 /* Read the tokens of the answer into the macro pool. Only commit the
1420 memory if we intend it as permanent storage, i.e. the #assert case.
1421 Returns 0 on success. */
1423 static int
1424 parse_answer (pfile, answerp, type)
1425 cpp_reader *pfile;
1426 struct answer **answerp;
1427 int type;
1429 cpp_token paren, *token;
1430 struct answer *answer;
1432 if (POOL_FRONT (&pfile->macro_pool) + sizeof (struct answer) >
1433 POOL_LIMIT (&pfile->macro_pool))
1434 _cpp_next_chunk (&pfile->macro_pool, sizeof (struct answer), 0);
1435 answer = (struct answer *) POOL_FRONT (&pfile->macro_pool);
1436 answer->count = 0;
1438 /* In a conditional, it is legal to not have an open paren. We
1439 should save the following token in this case. */
1440 if (type == T_IF)
1441 cpp_start_lookahead (pfile);
1442 cpp_get_token (pfile, &paren);
1443 if (type == T_IF)
1444 cpp_stop_lookahead (pfile, paren.type == CPP_OPEN_PAREN);
1446 /* If not a paren, see if we're OK. */
1447 if (paren.type != CPP_OPEN_PAREN)
1449 /* In a conditional no answer is a test for any answer. It
1450 could be followed by any token. */
1451 if (type == T_IF)
1452 return 0;
1454 /* #unassert with no answer is valid - it removes all answers. */
1455 if (type == T_UNASSERT && paren.type == CPP_EOF)
1456 return 0;
1458 cpp_error (pfile, "missing '(' after predicate");
1459 return 1;
1462 for (;;)
1464 token = &answer->first[answer->count];
1465 /* Check we have room for the token. */
1466 if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
1468 _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1469 (unsigned char **) &answer);
1470 token = &answer->first[answer->count];
1473 cpp_get_token (pfile, token);
1474 if (token->type == CPP_CLOSE_PAREN)
1475 break;
1477 if (token->type == CPP_EOF)
1479 cpp_error (pfile, "missing ')' to complete answer");
1480 return 1;
1482 answer->count++;
1485 if (answer->count == 0)
1487 cpp_error (pfile, "predicate's answer is empty");
1488 return 1;
1491 /* Drop whitespace at start. */
1492 answer->first->flags &= ~PREV_WHITE;
1493 *answerp = answer;
1495 if (type == T_ASSERT || type == T_UNASSERT)
1496 check_eol (pfile);
1497 return 0;
1500 /* Parses an assertion, returning a pointer to the hash node of the
1501 predicate, or 0 on error. If an answer was supplied, it is placed
1502 in ANSWERP, otherwise it is set to 0. */
1503 static cpp_hashnode *
1504 parse_assertion (pfile, answerp, type)
1505 cpp_reader *pfile;
1506 struct answer **answerp;
1507 int type;
1509 cpp_hashnode *result = 0;
1510 cpp_token predicate;
1512 /* We don't expand predicates or answers. */
1513 pfile->state.prevent_expansion++;
1515 *answerp = 0;
1516 cpp_get_token (pfile, &predicate);
1517 if (predicate.type == CPP_EOF)
1518 cpp_error (pfile, "assertion without predicate");
1519 else if (predicate.type != CPP_NAME)
1520 cpp_error (pfile, "predicate must be an identifier");
1521 else if (parse_answer (pfile, answerp, type) == 0)
1523 unsigned int len = predicate.val.node->length;
1524 unsigned char *sym = alloca (len + 1);
1526 /* Prefix '#' to get it out of macro namespace. */
1527 sym[0] = '#';
1528 memcpy (sym + 1, predicate.val.node->name, len);
1529 result = cpp_lookup (pfile, sym, len + 1);
1532 pfile->state.prevent_expansion--;
1533 return result;
1536 /* Returns a pointer to the pointer to the answer in the answer chain,
1537 or a pointer to NULL if the answer is not in the chain. */
1538 static struct answer **
1539 find_answer (node, candidate)
1540 cpp_hashnode *node;
1541 const struct answer *candidate;
1543 unsigned int i;
1544 struct answer **result;
1546 for (result = &node->value.answers; *result; result = &(*result)->next)
1548 struct answer *answer = *result;
1550 if (answer->count == candidate->count)
1552 for (i = 0; i < answer->count; i++)
1553 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1554 break;
1556 if (i == answer->count)
1557 break;
1561 return result;
1564 /* Test an assertion within a preprocessor conditional. Returns
1565 non-zero on failure, zero on success. On success, the result of
1566 the test is written into VALUE. */
1568 _cpp_test_assertion (pfile, value)
1569 cpp_reader *pfile;
1570 int *value;
1572 struct answer *answer;
1573 cpp_hashnode *node;
1575 node = parse_assertion (pfile, &answer, T_IF);
1576 if (node)
1577 *value = (node->type == NT_ASSERTION &&
1578 (answer == 0 || *find_answer (node, answer) != 0));
1580 /* We don't commit the memory for the answer - it's temporary only. */
1581 return node == 0;
1584 static void
1585 do_assert (pfile)
1586 cpp_reader *pfile;
1588 struct answer *new_answer;
1589 cpp_hashnode *node;
1591 node = parse_assertion (pfile, &new_answer, T_ASSERT);
1592 if (node)
1594 /* Place the new answer in the answer list. First check there
1595 is not a duplicate. */
1596 new_answer->next = 0;
1597 if (node->type == NT_ASSERTION)
1599 if (*find_answer (node, new_answer))
1601 cpp_warning (pfile, "\"%s\" re-asserted", node->name + 1);
1602 return;
1604 new_answer->next = node->value.answers;
1606 node->type = NT_ASSERTION;
1607 node->value.answers = new_answer;
1608 POOL_COMMIT (&pfile->macro_pool, (sizeof (struct answer)
1609 + (new_answer->count - 1)
1610 * sizeof (cpp_token)));
1614 static void
1615 do_unassert (pfile)
1616 cpp_reader *pfile;
1618 cpp_hashnode *node;
1619 struct answer *answer;
1621 node = parse_assertion (pfile, &answer, T_UNASSERT);
1622 /* It isn't an error to #unassert something that isn't asserted. */
1623 if (node && node->type == NT_ASSERTION)
1625 if (answer)
1627 struct answer **p = find_answer (node, answer), *temp;
1629 /* Remove the answer from the list. */
1630 temp = *p;
1631 if (temp)
1632 *p = temp->next;
1634 /* Did we free the last answer? */
1635 if (node->value.answers == 0)
1636 node->type = NT_VOID;
1638 else
1639 _cpp_free_definition (node);
1642 /* We don't commit the memory for the answer - it's temporary only. */
1645 /* These are for -D, -U, -A. */
1647 /* Process the string STR as if it appeared as the body of a #define.
1648 If STR is just an identifier, define it with value 1.
1649 If STR has anything after the identifier, then it should
1650 be identifier=definition. */
1652 void
1653 cpp_define (pfile, str)
1654 cpp_reader *pfile;
1655 const char *str;
1657 char *buf, *p;
1658 size_t count;
1660 /* Copy the entire option so we can modify it.
1661 Change the first "=" in the string to a space. If there is none,
1662 tack " 1" on the end. */
1664 /* Length including the null. */
1665 count = strlen (str);
1666 buf = (char *) alloca (count + 2);
1667 memcpy (buf, str, count);
1669 p = strchr (str, '=');
1670 if (p)
1671 buf[p - str] = ' ';
1672 else
1674 buf[count++] = ' ';
1675 buf[count++] = '1';
1678 run_directive (pfile, T_DEFINE, BUF_CL_OPTION, buf, count);
1681 /* Slight variant of the above for use by initialize_builtins. */
1682 void
1683 _cpp_define_builtin (pfile, str)
1684 cpp_reader *pfile;
1685 const char *str;
1687 run_directive (pfile, T_DEFINE, BUF_BUILTIN, str, strlen (str));
1690 /* Process MACRO as if it appeared as the body of an #undef. */
1691 void
1692 cpp_undef (pfile, macro)
1693 cpp_reader *pfile;
1694 const char *macro;
1696 run_directive (pfile, T_UNDEF, BUF_CL_OPTION, macro, strlen (macro));
1699 /* Process the string STR as if it appeared as the body of a #assert. */
1700 void
1701 cpp_assert (pfile, str)
1702 cpp_reader *pfile;
1703 const char *str;
1705 handle_assertion (pfile, str, T_ASSERT);
1708 /* Process STR as if it appeared as the body of an #unassert. */
1709 void
1710 cpp_unassert (pfile, str)
1711 cpp_reader *pfile;
1712 const char *str;
1714 handle_assertion (pfile, str, T_UNASSERT);
1717 /* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
1718 static void
1719 handle_assertion (pfile, str, type)
1720 cpp_reader *pfile;
1721 const char *str;
1722 int type;
1724 size_t count = strlen (str);
1725 const char *p = strchr (str, '=');
1727 if (p)
1729 /* Copy the entire option so we can modify it. Change the first
1730 "=" in the string to a '(', and tack a ')' on the end. */
1731 char *buf = (char *) alloca (count + 1);
1733 memcpy (buf, str, count);
1734 buf[p - str] = '(';
1735 buf[count++] = ')';
1736 str = buf;
1739 run_directive (pfile, type, BUF_CL_OPTION, str, count);
1742 /* The number of errors for a given reader. */
1743 unsigned int
1744 cpp_errors (pfile)
1745 cpp_reader *pfile;
1747 return pfile->errors;
1750 /* The options structure. */
1751 cpp_options *
1752 cpp_get_options (pfile)
1753 cpp_reader *pfile;
1755 return &pfile->opts;
1758 /* The callbacks structure. */
1759 cpp_callbacks *
1760 cpp_get_callbacks (pfile)
1761 cpp_reader *pfile;
1763 return &pfile->cb;
1766 /* Copy the given callbacks structure to our own. */
1767 void
1768 cpp_set_callbacks (pfile, cb)
1769 cpp_reader *pfile;
1770 cpp_callbacks *cb;
1772 pfile->cb = *cb;
1775 /* Push a new buffer on the buffer stack. Returns the new buffer; it
1776 doesn't fail. It does not generate a file change call back; that
1777 is the responsibility of the caller. */
1778 cpp_buffer *
1779 cpp_push_buffer (pfile, buffer, len, type, filename)
1780 cpp_reader *pfile;
1781 const U_CHAR *buffer;
1782 size_t len;
1783 enum cpp_buffer_type type;
1784 const char *filename;
1786 cpp_buffer *new = xobnew (pfile->buffer_ob, cpp_buffer);
1788 if (type == BUF_FAKE)
1790 /* A copy of the current buffer, just with a new name and type. */
1791 memcpy (new, pfile->buffer, sizeof (cpp_buffer));
1792 new->type = BUF_FAKE;
1794 else
1796 if (type == BUF_BUILTIN)
1797 filename = _("<builtin>");
1798 else if (type == BUF_CL_OPTION)
1799 filename = _("<command line>");
1800 else if (type == BUF_PRAGMA)
1801 filename = "<_Pragma>";
1803 /* Clears, amongst other things, if_stack and mi_cmacro. */
1804 memset (new, 0, sizeof (cpp_buffer));
1806 new->line_base = new->buf = new->cur = buffer;
1807 new->rlimit = buffer + len;
1808 new->sysp = 0;
1810 /* No read ahead or extra char initially. */
1811 new->read_ahead = EOF;
1812 new->extra_char = EOF;
1814 /* Preprocessed files, builtins, _Pragma and command line
1815 options don't do trigraph and escaped newline processing. */
1816 new->from_stage3 = type != BUF_FILE || CPP_OPTION (pfile, preprocessed);
1818 pfile->lexer_pos.output_line = 1;
1821 new->nominal_fname = filename;
1822 new->type = type;
1823 new->prev = pfile->buffer;
1824 new->pfile = pfile;
1825 new->include_stack_listed = 0;
1826 new->lineno = 1;
1828 pfile->state.next_bol = 1;
1829 pfile->buffer_stack_depth++;
1830 pfile->buffer = new;
1832 return new;
1835 /* If called from do_line, pops a single buffer. Otherwise pops all
1836 buffers until a real file is reached. Generates appropriate
1837 call-backs. */
1838 cpp_buffer *
1839 cpp_pop_buffer (pfile)
1840 cpp_reader *pfile;
1842 cpp_buffer *buffer;
1843 struct if_stack *ifs;
1845 for (;;)
1847 buffer = pfile->buffer;
1848 /* Walk back up the conditional stack till we reach its level at
1849 entry to this file, issuing error messages. */
1850 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
1851 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1852 "unterminated #%s", dtable[ifs->type].name);
1854 if (buffer->type == BUF_FAKE)
1855 buffer->prev->cur = buffer->cur;
1856 else if (buffer->type == BUF_FILE)
1857 _cpp_pop_file_buffer (pfile, buffer);
1859 pfile->buffer = buffer->prev;
1860 pfile->buffer_stack_depth--;
1862 /* Callbacks only generated for faked or real files. */
1863 if (buffer->type != BUF_FILE && buffer->type != BUF_FAKE)
1864 break;
1866 /* No callback for EOF of last file. */
1867 if (!pfile->buffer)
1868 break;
1870 /* do_line does its own call backs. */
1871 pfile->buffer->include_stack_listed = 0;
1872 if (pfile->directive == &dtable[T_LINE])
1873 break;
1875 _cpp_do_file_change (pfile, FC_LEAVE, buffer->nominal_fname,
1876 buffer->lineno);
1877 if (pfile->buffer->type == BUF_FILE)
1878 break;
1880 cpp_warning (pfile, "file \"%s\" entered but not left",
1881 buffer->nominal_fname);
1884 obstack_free (pfile->buffer_ob, buffer);
1885 return pfile->buffer;
1888 #define obstack_chunk_alloc xmalloc
1889 #define obstack_chunk_free free
1890 void
1891 _cpp_init_stacks (pfile)
1892 cpp_reader *pfile;
1894 unsigned int i;
1895 cpp_hashnode *node;
1897 pfile->buffer_ob = xnew (struct obstack);
1898 obstack_init (pfile->buffer_ob);
1900 /* Register the directives. */
1901 for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
1903 node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
1904 node->directive_index = i + 1;
1908 void
1909 _cpp_cleanup_stacks (pfile)
1910 cpp_reader *pfile;
1912 obstack_free (pfile->buffer_ob, 0);
1913 free (pfile->buffer_ob);