* configure.in: Don't check for putenv.
[official-gcc.git] / gcc / cpplib.c
blob5a523e034a1038d3d9adfbe8712f9ac4208419bc
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"
30 /* Chained list of answers to an assertion. */
31 struct answer
33 struct answer *next;
34 unsigned int count;
35 cpp_token first[1];
38 /* Stack of conditionals currently in progress
39 (including both successful and failing conditionals). */
41 struct if_stack
43 struct if_stack *next;
44 cpp_lexer_pos pos; /* line and column where condition started */
45 const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
46 unsigned char was_skipping; /* Value of pfile->skipping before this if. */
47 int type; /* type of last directive seen in this group */
50 /* Values for the origin field of struct directive. KANDR directives
51 come from traditional (K&R) C. STDC89 directives come from the
52 1989 C standard. EXTENSION directives are extensions. */
53 #define KANDR 0
54 #define STDC89 1
55 #define EXTENSION 2
57 /* Values for the flags field of struct directive. COND indicates a
58 conditional; IF_COND an opening conditional. INCL means to treat
59 "..." and <...> as q-char and h-char sequences respectively. IN_I
60 means this directive should be handled even if -fpreprocessed is in
61 effect (these are the directives with callback hooks). */
62 #define COND (1 << 0)
63 #define IF_COND (1 << 1)
64 #define INCL (1 << 2)
65 #define IN_I (1 << 3)
67 /* Defines one #-directive, including how to handle it. */
68 typedef void (*directive_handler) PARAMS ((cpp_reader *));
69 typedef struct directive directive;
70 struct directive
72 directive_handler handler; /* Function to handle directive. */
73 const U_CHAR *name; /* Name of directive. */
74 unsigned short length; /* Length of name. */
75 unsigned char origin; /* Origin of directive. */
76 unsigned char flags; /* Flags describing this directive. */
79 /* Forward declarations. */
81 static void skip_rest_of_line PARAMS ((cpp_reader *));
82 static void check_eol PARAMS ((cpp_reader *));
83 static void start_directive PARAMS ((cpp_reader *));
84 static void end_directive PARAMS ((cpp_reader *, int));
85 static void run_directive PARAMS ((cpp_reader *, int,
86 enum cpp_buffer_type,
87 const char *, size_t));
88 static int glue_header_name PARAMS ((cpp_reader *, cpp_token *));
89 static int parse_include PARAMS ((cpp_reader *, cpp_token *));
90 static void push_conditional PARAMS ((cpp_reader *, int, int,
91 const cpp_hashnode *));
92 static unsigned int read_flag PARAMS ((cpp_reader *, unsigned int));
93 static int strtoul_for_line PARAMS ((const U_CHAR *, unsigned int,
94 unsigned long *));
95 static void do_diagnostic PARAMS ((cpp_reader *, enum error_type, int));
96 static cpp_hashnode *lex_macro_node PARAMS ((cpp_reader *));
97 static void do_include_common PARAMS ((cpp_reader *, enum include_type));
98 static void do_pragma_once PARAMS ((cpp_reader *));
99 static void do_pragma_poison PARAMS ((cpp_reader *));
100 static void do_pragma_system_header PARAMS ((cpp_reader *));
101 static void do_pragma_dependency PARAMS ((cpp_reader *));
102 static int get__Pragma_string PARAMS ((cpp_reader *, cpp_token *));
103 static unsigned char *destringize PARAMS ((const cpp_string *,
104 unsigned int *));
105 static int parse_answer PARAMS ((cpp_reader *, struct answer **, int));
106 static cpp_hashnode *parse_assertion PARAMS ((cpp_reader *, struct answer **,
107 int));
108 static struct answer ** find_answer PARAMS ((cpp_hashnode *,
109 const struct answer *));
110 static void handle_assertion PARAMS ((cpp_reader *, const char *, int));
112 /* This is the table of directive handlers. It is ordered by
113 frequency of occurrence; the numbers at the end are directive
114 counts from all the source code I have lying around (egcs and libc
115 CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
116 pcmcia-cs-3.0.9). This is no longer important as directive lookup
117 is now O(1). All extensions other than #warning and #include_next
118 are deprecated. The name is where the extension appears to have
119 come from. */
121 #define DIRECTIVE_TABLE \
122 D(define, T_DEFINE = 0, KANDR, IN_I) /* 270554 */ \
123 D(include, T_INCLUDE, KANDR, INCL) /* 52262 */ \
124 D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \
125 D(ifdef, T_IFDEF, KANDR, COND | IF_COND) /* 22000 */ \
126 D(if, T_IF, KANDR, COND | IF_COND) /* 18162 */ \
127 D(else, T_ELSE, KANDR, COND) /* 9863 */ \
128 D(ifndef, T_IFNDEF, KANDR, COND | IF_COND) /* 9675 */ \
129 D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \
130 D(line, T_LINE, KANDR, IN_I) /* 2465 */ \
131 D(elif, T_ELIF, STDC89, COND) /* 610 */ \
132 D(error, T_ERROR, STDC89, 0) /* 475 */ \
133 D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \
134 D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \
135 D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL) /* 19 */ \
136 D(ident, T_IDENT, EXTENSION, IN_I) /* 11 */ \
137 D(import, T_IMPORT, EXTENSION, INCL) /* 0 ObjC */ \
138 D(assert, T_ASSERT, EXTENSION, 0) /* 0 SVR4 */ \
139 D(unassert, T_UNASSERT, EXTENSION, 0) /* 0 SVR4 */ \
140 SCCS_ENTRY /* 0 SVR4? */
142 /* #sccs is not always recognized. */
143 #ifdef SCCS_DIRECTIVE
144 # define SCCS_ENTRY D(sccs, T_SCCS, EXTENSION, 0)
145 #else
146 # define SCCS_ENTRY /* nothing */
147 #endif
149 /* Use the table to generate a series of prototypes, an enum for the
150 directive names, and an array of directive handlers. */
152 /* The directive-processing functions are declared to return int
153 instead of void, because some old compilers have trouble with
154 pointers to functions returning void. */
156 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
157 #define D(name, t, o, f) static void CONCAT2(do_,name) PARAMS ((cpp_reader *));
158 DIRECTIVE_TABLE
159 #undef D
161 #define D(n, tag, o, f) tag,
162 enum
164 DIRECTIVE_TABLE
165 N_DIRECTIVES
167 #undef D
169 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
170 #define D(name, t, origin, flags) \
171 { CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
172 sizeof STRINGX(name) - 1, origin, flags },
173 static const directive dtable[] =
175 DIRECTIVE_TABLE
177 #undef D
178 #undef DIRECTIVE_TABLE
180 /* Skip any remaining tokens in a directive. */
181 static void
182 skip_rest_of_line (pfile)
183 cpp_reader *pfile;
185 cpp_token token;
187 /* Discard all input lookaheads. */
188 while (pfile->la_read)
189 _cpp_release_lookahead (pfile);
191 /* Discard all stacked contexts. */
192 while (pfile->context != &pfile->base_context)
193 _cpp_pop_context (pfile);
195 /* Sweep up all tokens remaining on the line. */
196 pfile->state.prevent_expansion++;
197 while (!pfile->state.next_bol)
198 _cpp_lex_token (pfile, &token);
199 pfile->state.prevent_expansion--;
202 /* Ensure there are no stray tokens at the end of a directive. */
203 static void
204 check_eol (pfile)
205 cpp_reader *pfile;
207 if (!pfile->state.next_bol)
209 cpp_token token;
211 _cpp_lex_token (pfile, &token);
212 if (token.type != CPP_EOF)
213 cpp_pedwarn (pfile, "extra tokens at end of #%s directive",
214 pfile->directive->name);
218 /* Called when entering a directive, _Pragma or command-line directive. */
219 static void
220 start_directive (pfile)
221 cpp_reader *pfile;
223 cpp_buffer *buffer = pfile->buffer;
225 /* Setup in-directive state. */
226 pfile->state.in_directive = 1;
227 pfile->state.save_comments = 0;
229 /* Some handlers need the position of the # for diagnostics. */
230 pfile->directive_pos = pfile->lexer_pos;
232 /* Don't save directive tokens for external clients. */
233 pfile->la_saved = pfile->la_write;
234 pfile->la_write = 0;
236 /* Turn off skipping. */
237 buffer->was_skipping = pfile->skipping;
238 pfile->skipping = 0;
241 /* Called when leaving a directive, _Pragma or command-line directive. */
242 static void
243 end_directive (pfile, skip_line)
244 cpp_reader *pfile;
245 int skip_line;
247 cpp_buffer *buffer = pfile->buffer;
249 /* Restore pfile->skipping before skip_rest_of_line, so that e.g.
250 __VA_ARGS__ in the rest of the directive doesn't warn. */
251 pfile->skipping = buffer->was_skipping;
253 /* We don't skip for an assembler #. */
254 if (skip_line)
255 skip_rest_of_line (pfile);
257 /* Restore state. */
258 pfile->la_write = pfile->la_saved;
259 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
260 pfile->state.in_directive = 0;
261 pfile->state.angled_headers = 0;
262 pfile->state.line_extension = 0;
263 pfile->directive = 0;
266 /* Check if a token's name matches that of a known directive. Put in
267 this file to save exporting dtable and other unneeded information. */
269 _cpp_handle_directive (pfile, indented)
270 cpp_reader *pfile;
271 int indented;
273 cpp_buffer *buffer = pfile->buffer;
274 const directive *dir = 0;
275 cpp_token dname;
276 int skip = 1;
278 start_directive (pfile);
280 /* Lex the directive name directly. */
281 _cpp_lex_token (pfile, &dname);
283 if (dname.type == CPP_NAME)
285 unsigned int index = dname.val.node->directive_index;
286 if (index)
287 dir = &dtable[index - 1];
289 else if (dname.type == CPP_NUMBER)
291 /* # followed by a number is equivalent to #line. Do not
292 recognize this form in assembly language source files or
293 skipped conditional groups. Complain about this form if
294 we're being pedantic, but not if this is regurgitated input
295 (preprocessed or fed back in by the C++ frontend). */
296 if (! buffer->was_skipping && CPP_OPTION (pfile, lang) != CLK_ASM)
298 dir = &dtable[T_LINE];
299 pfile->state.line_extension = 1;
300 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
301 if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed))
302 cpp_pedwarn (pfile, "# followed by integer");
306 pfile->directive = dir;
307 if (dir)
309 /* Make sure we lex headers correctly, whether skipping or not. */
310 pfile->state.angled_headers = dir->flags & INCL;
312 /* If we are rescanning preprocessed input, only directives tagged
313 with IN_I are honored, and the warnings below are suppressed. */
314 if (! CPP_OPTION (pfile, preprocessed) || dir->flags & IN_I)
316 /* Traditionally, a directive is ignored unless its # is in
317 column 1. Therefore in code intended to work with K+R
318 compilers, directives added by C89 must have their #
319 indented, and directives present in traditional C must
320 not. This is true even of directives in skipped
321 conditional blocks. */
322 if (CPP_WTRADITIONAL (pfile))
324 if (dir == &dtable[T_ELIF])
325 cpp_warning (pfile,
326 "suggest not using #elif in traditional C");
327 else if (indented && dir->origin == KANDR)
328 cpp_warning (pfile,
329 "traditional C ignores #%s with the # indented",
330 dir->name);
331 else if (!indented && dir->origin != KANDR)
332 cpp_warning (pfile,
333 "suggest hiding #%s from traditional C with an indented #",
334 dir->name);
337 /* If we are skipping a failed conditional group, all
338 non-conditional directives are ignored. */
339 if (! buffer->was_skipping || (dir->flags & COND))
341 /* Issue -pedantic warnings for extensions. */
342 if (CPP_PEDANTIC (pfile) && dir->origin == EXTENSION)
343 cpp_pedwarn (pfile, "#%s is a GCC extension", dir->name);
345 /* If we have a directive that is not an opening
346 conditional, invalidate any control macro. */
347 if (! (dir->flags & IF_COND))
348 pfile->mi_state = MI_FAILED;
350 (*dir->handler) (pfile);
354 else if (dname.type != CPP_EOF && ! buffer->was_skipping)
356 /* An unknown directive. Don't complain about it in assembly
357 source: we don't know where the comments are, and # may
358 introduce assembler pseudo-ops. Don't complain about invalid
359 directives in skipped conditional groups (6.10 p4). */
360 if (CPP_OPTION (pfile, lang) == CLK_ASM)
362 /* Output the # and lookahead token for the assembler. */
363 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
364 skip = 0;
366 else
367 cpp_error (pfile, "invalid preprocessing directive #%s",
368 cpp_token_as_text (pfile, &dname));
371 end_directive (pfile, skip);
372 return skip;
375 /* Directive handler wrapper used by the command line option
376 processor. */
377 static void
378 run_directive (pfile, dir_no, type, buf, count)
379 cpp_reader *pfile;
380 int dir_no;
381 enum cpp_buffer_type type;
382 const char *buf;
383 size_t count;
385 unsigned int output_line = pfile->lexer_pos.output_line;
386 cpp_buffer *buffer;
388 buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count, type, 0);
390 if (dir_no == T_PRAGMA)
392 /* A kludge to avoid line markers for _Pragma. */
393 pfile->lexer_pos.output_line = output_line;
394 /* Avoid interpretation of directives in a _Pragma string. */
395 pfile->state.next_bol = 0;
398 start_directive (pfile);
399 pfile->state.prevent_expansion++;
400 (void) (*dtable[dir_no].handler) (pfile);
401 pfile->state.prevent_expansion--;
402 check_eol (pfile);
403 end_directive (pfile, 1);
405 cpp_pop_buffer (pfile);
408 /* Checks for validity the macro name in #define, #undef, #ifdef and
409 #ifndef directives. */
410 static cpp_hashnode *
411 lex_macro_node (pfile)
412 cpp_reader *pfile;
414 cpp_token token;
416 /* Lex the macro name directly. */
417 _cpp_lex_token (pfile, &token);
419 /* The token immediately after #define must be an identifier. That
420 identifier is not allowed to be "defined". See predefined macro
421 names (6.10.8.4). In C++, it is not allowed to be any of the
422 <iso646.h> macro names (which are keywords in C++) either. */
424 if (token.type != CPP_NAME)
426 if (token.type == CPP_EOF)
427 cpp_error (pfile, "no macro name given in #%s directive",
428 pfile->directive->name);
429 else if (token.flags & NAMED_OP)
430 cpp_error (pfile,
431 "\"%s\" cannot be used as a macro name as it is an operator in C++",
432 token.val.node->name);
433 else
434 cpp_error (pfile, "macro names must be identifiers");
436 else
438 cpp_hashnode *node = token.val.node;
440 /* In Objective C, some keywords begin with '@', but general
441 identifiers do not, and you're not allowed to #define them. */
442 if (node == pfile->spec_nodes.n_defined || node->name[0] == '@')
443 cpp_error (pfile, "\"%s\" cannot be used as a macro name", node->name);
444 else if (!(node->flags & NODE_POISONED))
445 return node;
448 return 0;
451 /* Process a #define directive. Most work is done in cppmacro.c. */
452 static void
453 do_define (pfile)
454 cpp_reader *pfile;
456 cpp_hashnode *node = lex_macro_node (pfile);
458 if (node)
460 if (_cpp_create_definition (pfile, node))
461 if (pfile->cb.define)
462 (*pfile->cb.define) (pfile, node);
466 /* Handle #undef. Marks the identifier NT_VOID in the hash table. */
467 static void
468 do_undef (pfile)
469 cpp_reader *pfile;
471 cpp_hashnode *node = lex_macro_node (pfile);
473 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier
474 is not currently defined as a macro name. */
475 if (node && node->type == NT_MACRO)
477 if (pfile->cb.undef)
478 (*pfile->cb.undef) (pfile, node);
480 if (node->flags & NODE_WARN)
481 cpp_warning (pfile, "undefining \"%s\"", node->name);
483 _cpp_free_definition (node);
485 check_eol (pfile);
488 /* Helper routine used by parse_include. Reinterpret the current line
489 as an h-char-sequence (< ... >); we are looking at the first token
490 after the <. Returns zero on success. */
491 static int
492 glue_header_name (pfile, header)
493 cpp_reader *pfile;
494 cpp_token *header;
496 cpp_token token;
497 unsigned char *buffer, *token_mem;
498 size_t len, total_len = 0, capacity = 1024;
500 /* To avoid lexed tokens overwriting our glued name, we can only
501 allocate from the string pool once we've lexed everything. */
503 buffer = (unsigned char *) xmalloc (capacity);
504 for (;;)
506 cpp_get_token (pfile, &token);
508 if (token.type == CPP_GREATER || token.type == CPP_EOF)
509 break;
511 len = cpp_token_len (&token);
512 if (total_len + len > capacity)
514 capacity = (capacity + len) * 2;
515 buffer = (unsigned char *) xrealloc (buffer, capacity);
518 if (token.flags & PREV_WHITE)
519 buffer[total_len++] = ' ';
521 total_len = cpp_spell_token (pfile, &token, &buffer[total_len]) - buffer;
524 if (token.type == CPP_EOF)
525 cpp_error (pfile, "missing terminating > character");
526 else
528 token_mem = _cpp_pool_alloc (&pfile->ident_pool, total_len + 1);
529 memcpy (token_mem, buffer, total_len);
530 token_mem[total_len] = '\0';
532 header->type = CPP_HEADER_NAME;
533 header->flags &= ~PREV_WHITE;
534 header->val.str.len = total_len;
535 header->val.str.text = token_mem;
538 free ((PTR) buffer);
539 return token.type == CPP_EOF;
542 /* Parse the header name of #include, #include_next, #import and
543 #pragma dependency. Returns zero on success. */
544 static int
545 parse_include (pfile, header)
546 cpp_reader *pfile;
547 cpp_token *header;
549 int is_pragma = pfile->directive == &dtable[T_PRAGMA];
550 const unsigned char *dir;
552 if (is_pragma)
553 dir = U"pragma dependency";
554 else
555 dir = pfile->directive->name;
557 /* Allow macro expansion. */
558 cpp_get_token (pfile, header);
559 if (header->type != CPP_STRING && header->type != CPP_HEADER_NAME)
561 if (header->type != CPP_LESS)
563 cpp_error (pfile, "#%s expects \"FILENAME\" or <FILENAME>", dir);
564 return 1;
566 if (glue_header_name (pfile, header))
567 return 1;
570 if (header->val.str.len == 0)
572 cpp_error (pfile, "empty file name in #%s", dir);
573 return 1;
576 if (!is_pragma)
578 check_eol (pfile);
579 /* Get out of macro context, if we are. */
580 skip_rest_of_line (pfile);
581 if (pfile->cb.include)
582 (*pfile->cb.include) (pfile, dir, header);
585 return 0;
588 /* Handle #include, #include_next and #import. */
589 static void
590 do_include_common (pfile, type)
591 cpp_reader *pfile;
592 enum include_type type;
594 cpp_token header;
596 if (!parse_include (pfile, &header))
598 /* Prevent #include recursion. */
599 if (pfile->buffer_stack_depth >= CPP_STACK_MAX)
600 cpp_fatal (pfile, "#include nested too deeply");
601 else if (pfile->context->prev)
602 cpp_ice (pfile, "attempt to push file buffer with contexts stacked");
603 else
605 /* For #include_next, if this is the primary source file,
606 warn and use the normal search logic. */
607 if (type == IT_INCLUDE_NEXT && ! pfile->buffer->prev)
609 cpp_warning (pfile, "#include_next in primary source file");
610 type = IT_INCLUDE;
613 _cpp_execute_include (pfile, &header, type);
618 static void
619 do_include (pfile)
620 cpp_reader *pfile;
622 do_include_common (pfile, IT_INCLUDE);
625 static void
626 do_import (pfile)
627 cpp_reader *pfile;
629 if (!pfile->import_warning && CPP_OPTION (pfile, warn_import))
631 pfile->import_warning = 1;
632 cpp_warning (pfile,
633 "#import is obsolete, use an #ifndef wrapper in the header file");
636 do_include_common (pfile, IT_IMPORT);
639 static void
640 do_include_next (pfile)
641 cpp_reader *pfile;
643 do_include_common (pfile, IT_INCLUDE_NEXT);
646 /* Subroutine of do_line. Read possible flags after file name. LAST
647 is the last flag seen; 0 if this is the first flag. Return the flag
648 if it is valid, 0 at the end of the directive. Otherwise complain. */
650 static unsigned int
651 read_flag (pfile, last)
652 cpp_reader *pfile;
653 unsigned int last;
655 cpp_token token;
657 _cpp_lex_token (pfile, &token);
658 if (token.type == CPP_NUMBER && token.val.str.len == 1)
660 unsigned int flag = token.val.str.text[0] - '0';
662 if (flag > last && flag <= 4
663 && (flag != 4 || last == 3)
664 && (flag != 2 || last == 0))
665 return flag;
668 if (token.type != CPP_EOF)
669 cpp_error (pfile, "invalid flag \"%s\" in line directive",
670 cpp_token_as_text (pfile, &token));
671 return 0;
674 /* Another subroutine of do_line. Convert a number in STR, of length
675 LEN, to binary; store it in NUMP, and return 0 if the number was
676 well-formed, 1 if not. Temporary, hopefully. */
677 static int
678 strtoul_for_line (str, len, nump)
679 const U_CHAR *str;
680 unsigned int len;
681 unsigned long *nump;
683 unsigned long reg = 0;
684 U_CHAR c;
685 while (len--)
687 c = *str++;
688 if (!ISDIGIT (c))
689 return 1;
690 reg *= 10;
691 reg += c - '0';
693 *nump = reg;
694 return 0;
697 /* Interpret #line command.
698 Note that the filename string (if any) is treated as if it were an
699 include filename. That means no escape handling. */
701 static void
702 do_line (pfile)
703 cpp_reader *pfile;
705 cpp_buffer *buffer = pfile->buffer;
706 const char *filename = buffer->nominal_fname;
707 unsigned int lineno = buffer->lineno;
708 enum cpp_fc_reason reason = FC_RENAME;
709 unsigned long new_lineno;
710 unsigned int cap;
711 cpp_token token;
713 /* C99 raised the minimum limit on #line numbers. */
714 cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
716 /* #line commands expand macros. */
717 cpp_get_token (pfile, &token);
718 if (token.type != CPP_NUMBER
719 || strtoul_for_line (token.val.str.text, token.val.str.len, &new_lineno))
721 cpp_error (pfile, "\"%s\" after #line is not a positive integer",
722 cpp_token_as_text (pfile, &token));
723 return;
726 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
727 cpp_pedwarn (pfile, "line number out of range");
729 cpp_get_token (pfile, &token);
730 if (token.type == CPP_STRING)
732 char *fname;
733 unsigned int len = token.val.str.len + 1;
735 fname = (char *) _cpp_pool_alloc (&pfile->ident_pool, len);
736 memcpy (fname, token.val.str.text, len);
737 _cpp_simplify_pathname (fname);
739 /* Only accept flags for the # 55 form. */
740 if (! pfile->state.line_extension)
741 check_eol (pfile);
742 else
744 int flag = 0, sysp = 0;
746 flag = read_flag (pfile, flag);
747 if (flag == 1)
749 reason = FC_ENTER;
750 flag = read_flag (pfile, flag);
752 else if (flag == 2)
754 reason = FC_LEAVE;
755 flag = read_flag (pfile, flag);
757 if (flag == 3)
759 sysp = 1;
760 flag = read_flag (pfile, flag);
761 if (flag == 4)
762 sysp = 2, read_flag (pfile, flag);
765 if (reason == FC_ENTER)
767 /* Fake a buffer stack for diagnostics. */
768 cpp_push_buffer (pfile, 0, 0, BUF_FAKE, fname);
769 /* Fake an include for cpp_included. */
770 _cpp_fake_include (pfile, fname);
771 buffer = pfile->buffer;
773 else if (reason == FC_LEAVE)
775 if (buffer->type != BUF_FAKE)
776 cpp_warning (pfile, "file \"%s\" left but not entered",
777 buffer->nominal_fname);
778 else
780 cpp_pop_buffer (pfile);
781 buffer = pfile->buffer;
782 if (strcmp (buffer->nominal_fname, fname))
783 cpp_warning (pfile, "expected to return to file \"%s\"",
784 buffer->nominal_fname);
785 if (buffer->lineno + 1 != new_lineno)
786 cpp_warning (pfile, "expected to return to line number %u",
787 buffer->lineno + 1);
788 if (buffer->sysp != sysp)
789 cpp_warning (pfile, "header flags for \"%s\" have changed",
790 buffer->nominal_fname);
793 buffer->sysp = sysp;
795 buffer->nominal_fname = fname;
797 else if (token.type != CPP_EOF)
799 cpp_error (pfile, "\"%s\" is not a valid filename",
800 cpp_token_as_text (pfile, &token));
801 return;
804 /* Our line number is incremented after the directive is processed. */
805 buffer->lineno = new_lineno - 1;
806 _cpp_do_file_change (pfile, reason, filename, lineno);
809 /* Arrange the file_change callback. */
810 void
811 _cpp_do_file_change (pfile, reason, from_file, from_lineno)
812 cpp_reader *pfile;
813 enum cpp_fc_reason reason;
814 const char *from_file;
815 unsigned int from_lineno;
817 if (pfile->cb.file_change)
819 cpp_file_change fc;
820 cpp_buffer *buffer = pfile->buffer;
822 fc.reason = reason;
823 fc.to.filename = buffer->nominal_fname;
824 fc.to.lineno = buffer->lineno + 1;
825 fc.sysp = buffer->sysp;
826 fc.externc = CPP_OPTION (pfile, cplusplus) && buffer->sysp == 2;
828 /* Caller doesn't need to handle FC_ENTER. */
829 if (reason == FC_ENTER)
831 if (buffer->prev)
833 from_file = buffer->prev->nominal_fname;
834 from_lineno = buffer->prev->lineno;
836 else
837 from_file = 0;
839 /* Special case for file "foo.i" with "# 1 foo.c" on first line. */
840 else if (reason == FC_RENAME && ! buffer->prev
841 && pfile->directive_pos.line == 1)
842 from_file = 0;
844 fc.from.filename = from_file;
845 fc.from.lineno = from_lineno;
846 pfile->cb.file_change (pfile, &fc);
851 * Report a warning or error detected by the program we are
852 * processing. Use the directive's tokens in the error message.
855 static void
856 do_diagnostic (pfile, code, print_dir)
857 cpp_reader *pfile;
858 enum error_type code;
859 int print_dir;
861 if (_cpp_begin_message (pfile, code, NULL, 0))
863 if (print_dir)
864 fprintf (stderr, "#%s ", pfile->directive->name);
865 pfile->state.prevent_expansion++;
866 cpp_output_line (pfile, stderr);
867 pfile->state.prevent_expansion--;
871 static void
872 do_error (pfile)
873 cpp_reader *pfile;
875 do_diagnostic (pfile, ERROR, 1);
878 static void
879 do_warning (pfile)
880 cpp_reader *pfile;
882 do_diagnostic (pfile, WARNING, 1);
885 /* Report program identification. */
887 static void
888 do_ident (pfile)
889 cpp_reader *pfile;
891 cpp_token str;
893 cpp_get_token (pfile, &str);
894 if (str.type != CPP_STRING)
895 cpp_error (pfile, "invalid #ident");
896 else if (pfile->cb.ident)
897 (*pfile->cb.ident) (pfile, &str.val.str);
899 check_eol (pfile);
902 /* Pragmata handling. We handle some of these, and pass the rest on
903 to the front end. C99 defines three pragmas and says that no macro
904 expansion is to be performed on them; whether or not macro
905 expansion happens for other pragmas is implementation defined.
906 This implementation never macro-expands the text after #pragma. */
908 /* Sub-handlers for the pragmas needing treatment here.
909 They return 1 if the token buffer is to be popped, 0 if not. */
910 struct pragma_entry
912 struct pragma_entry *next;
913 const char *name;
914 size_t len;
915 int isnspace;
916 union {
917 void (*handler) PARAMS ((cpp_reader *));
918 struct pragma_entry *space;
919 } u;
922 void
923 cpp_register_pragma (pfile, space, name, handler)
924 cpp_reader *pfile;
925 const char *space;
926 const char *name;
927 void (*handler) PARAMS ((cpp_reader *));
929 struct pragma_entry **x, *new;
930 size_t len;
932 x = &pfile->pragmas;
933 if (space)
935 struct pragma_entry *p = pfile->pragmas;
936 len = strlen (space);
937 while (p)
939 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
941 x = &p->u.space;
942 goto found;
944 p = p->next;
946 cpp_ice (pfile, "unknown #pragma namespace %s", space);
947 return;
950 found:
951 new = xnew (struct pragma_entry);
952 new->name = name;
953 new->len = strlen (name);
954 new->isnspace = 0;
955 new->u.handler = handler;
957 new->next = *x;
958 *x = new;
961 void
962 cpp_register_pragma_space (pfile, space)
963 cpp_reader *pfile;
964 const char *space;
966 struct pragma_entry *new;
967 const struct pragma_entry *p = pfile->pragmas;
968 size_t len = strlen (space);
970 while (p)
972 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
973 /* Multiple different callers are allowed to register the same
974 namespace. */
975 return;
976 p = p->next;
979 new = xnew (struct pragma_entry);
980 new->name = space;
981 new->len = len;
982 new->isnspace = 1;
983 new->u.space = 0;
985 new->next = pfile->pragmas;
986 pfile->pragmas = new;
989 void
990 _cpp_init_internal_pragmas (pfile)
991 cpp_reader *pfile;
993 /* top level */
994 cpp_register_pragma (pfile, 0, "poison", do_pragma_poison);
995 cpp_register_pragma (pfile, 0, "once", do_pragma_once);
997 /* GCC namespace */
998 cpp_register_pragma_space (pfile, "GCC");
1000 cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
1001 cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
1002 cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
1005 static void
1006 do_pragma (pfile)
1007 cpp_reader *pfile;
1009 const struct pragma_entry *p;
1010 cpp_token tok;
1011 const cpp_hashnode *node;
1012 const U_CHAR *name;
1013 size_t len;
1014 int drop = 0;
1016 p = pfile->pragmas;
1017 pfile->state.prevent_expansion++;
1018 cpp_start_lookahead (pfile);
1020 new_space:
1021 cpp_get_token (pfile, &tok);
1022 if (tok.type == CPP_NAME)
1024 node = tok.val.node;
1025 name = node->name;
1026 len = node->length;
1027 while (p)
1029 if (strlen (p->name) == len && !memcmp (p->name, name, len))
1031 if (p->isnspace)
1033 p = p->u.space;
1034 goto new_space;
1036 else
1038 (*p->u.handler) (pfile);
1039 drop = 1;
1040 break;
1043 p = p->next;
1047 cpp_stop_lookahead (pfile, drop);
1048 pfile->state.prevent_expansion--;
1050 if (!drop && pfile->cb.def_pragma)
1051 (*pfile->cb.def_pragma) (pfile);
1054 static void
1055 do_pragma_once (pfile)
1056 cpp_reader *pfile;
1058 cpp_warning (pfile, "#pragma once is obsolete");
1060 if (pfile->buffer->prev == NULL)
1061 cpp_warning (pfile, "#pragma once in main file");
1062 else
1063 _cpp_never_reread (pfile->buffer->inc);
1065 check_eol (pfile);
1068 static void
1069 do_pragma_poison (pfile)
1070 cpp_reader *pfile;
1072 /* Poison these symbols so that all subsequent usage produces an
1073 error message. */
1074 cpp_token tok;
1075 cpp_hashnode *hp;
1077 pfile->state.poisoned_ok = 1;
1078 for (;;)
1080 _cpp_lex_token (pfile, &tok);
1081 if (tok.type == CPP_EOF)
1082 break;
1083 if (tok.type != CPP_NAME)
1085 cpp_error (pfile, "invalid #pragma GCC poison directive");
1086 break;
1089 hp = tok.val.node;
1090 if (hp->flags & NODE_POISONED)
1091 continue;
1093 if (hp->type == NT_MACRO)
1094 cpp_warning (pfile, "poisoning existing macro \"%s\"", hp->name);
1095 _cpp_free_definition (hp);
1096 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
1098 pfile->state.poisoned_ok = 0;
1100 #if 0 /* Doesn't quite work yet. */
1101 if (tok.type == CPP_EOF && pfile->cb.poison)
1102 (*pfile->cb.poison) (pfile);
1103 #endif
1106 /* Mark the current header as a system header. This will suppress
1107 some categories of warnings (notably those from -pedantic). It is
1108 intended for use in system libraries that cannot be implemented in
1109 conforming C, but cannot be certain that their headers appear in a
1110 system include directory. To prevent abuse, it is rejected in the
1111 primary source file. */
1112 static void
1113 do_pragma_system_header (pfile)
1114 cpp_reader *pfile;
1116 cpp_buffer *buffer = pfile->buffer;
1118 if (buffer->prev == 0)
1119 cpp_warning (pfile, "#pragma system_header ignored outside include file");
1120 else
1121 cpp_make_system_header (pfile, 1, 0);
1123 check_eol (pfile);
1126 /* Check the modified date of the current include file against a specified
1127 file. Issue a diagnostic, if the specified file is newer. We use this to
1128 determine if a fixed header should be refixed. */
1129 static void
1130 do_pragma_dependency (pfile)
1131 cpp_reader *pfile;
1133 cpp_token header, msg;
1134 int ordering;
1136 if (parse_include (pfile, &header))
1137 return;
1139 ordering = _cpp_compare_file_date (pfile, &header);
1140 if (ordering < 0)
1141 cpp_warning (pfile, "cannot find source %s",
1142 cpp_token_as_text (pfile, &header));
1143 else if (ordering > 0)
1145 cpp_warning (pfile, "current file is older than %s",
1146 cpp_token_as_text (pfile, &header));
1147 cpp_start_lookahead (pfile);
1148 cpp_get_token (pfile, &msg);
1149 cpp_stop_lookahead (pfile, msg.type == CPP_EOF);
1150 if (msg.type != CPP_EOF)
1151 do_diagnostic (pfile, WARNING, 0);
1155 /* Check syntax is "(string-literal)". Returns 0 on success. */
1156 static int
1157 get__Pragma_string (pfile, string)
1158 cpp_reader *pfile;
1159 cpp_token *string;
1161 cpp_token paren;
1163 cpp_get_token (pfile, &paren);
1164 if (paren.type != CPP_OPEN_PAREN)
1165 return 1;
1167 cpp_get_token (pfile, string);
1168 if (string->type != CPP_STRING && string->type != CPP_WSTRING)
1169 return 1;
1171 cpp_get_token (pfile, &paren);
1172 return paren.type != CPP_CLOSE_PAREN;
1175 /* Returns a malloced buffer containing a destringized cpp_string by
1176 removing the first \ of \" and \\ sequences. */
1177 static unsigned char *
1178 destringize (in, len)
1179 const cpp_string *in;
1180 unsigned int *len;
1182 const unsigned char *src, *limit;
1183 unsigned char *dest, *result;
1185 dest = result = (unsigned char *) xmalloc (in->len);
1186 for (src = in->text, limit = src + in->len; src < limit;)
1188 /* We know there is a character following the backslash. */
1189 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1190 src++;
1191 *dest++ = *src++;
1194 *len = dest - result;
1195 return result;
1198 void
1199 _cpp_do__Pragma (pfile)
1200 cpp_reader *pfile;
1202 cpp_token string;
1203 unsigned char *buffer;
1204 unsigned int len;
1206 if (get__Pragma_string (pfile, &string))
1208 cpp_error (pfile, "_Pragma takes a parenthesized string literal");
1209 return;
1212 buffer = destringize (&string.val.str, &len);
1213 run_directive (pfile, T_PRAGMA, BUF_PRAGMA, (char *) buffer, len);
1214 free ((PTR) buffer);
1217 /* Just ignore #sccs, on systems where we define it at all. */
1218 #ifdef SCCS_DIRECTIVE
1219 static void
1220 do_sccs (pfile)
1221 cpp_reader *pfile ATTRIBUTE_UNUSED;
1224 #endif
1226 static void
1227 do_ifdef (pfile)
1228 cpp_reader *pfile;
1230 int skip = 1;
1232 if (! pfile->buffer->was_skipping)
1234 const cpp_hashnode *node = lex_macro_node (pfile);
1236 if (node)
1237 skip = node->type != NT_MACRO;
1239 if (node)
1240 check_eol (pfile);
1243 push_conditional (pfile, skip, T_IFDEF, 0);
1246 static void
1247 do_ifndef (pfile)
1248 cpp_reader *pfile;
1250 int skip = 1;
1251 const cpp_hashnode *node = 0;
1253 if (! pfile->buffer->was_skipping)
1255 node = lex_macro_node (pfile);
1256 if (node)
1257 skip = node->type == NT_MACRO;
1259 if (node)
1260 check_eol (pfile);
1263 push_conditional (pfile, skip, T_IFNDEF, node);
1266 /* #if cooperates with parse_defined to handle multiple-include
1267 optimisations. If macro expansions or identifiers appear in the
1268 expression, we cannot treat it as a controlling conditional, since
1269 their values could change in the future. */
1271 static void
1272 do_if (pfile)
1273 cpp_reader *pfile;
1275 int skip = 1;
1276 const cpp_hashnode *cmacro = 0;
1278 if (! pfile->buffer->was_skipping)
1280 /* Controlling macro of #if ! defined () */
1281 pfile->mi_ind_cmacro = 0;
1282 skip = _cpp_parse_expr (pfile) == 0;
1283 cmacro = pfile->mi_ind_cmacro;
1286 push_conditional (pfile, skip, T_IF, cmacro);
1289 /* Flip skipping state if appropriate and continue without changing
1290 if_stack; this is so that the error message for missing #endif's
1291 etc. will point to the original #if. */
1293 static void
1294 do_else (pfile)
1295 cpp_reader *pfile;
1297 cpp_buffer *buffer = pfile->buffer;
1298 struct if_stack *ifs = buffer->if_stack;
1300 if (ifs == NULL)
1301 cpp_error (pfile, "#else without #if");
1302 else
1304 if (ifs->type == T_ELSE)
1306 cpp_error (pfile, "#else after #else");
1307 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1308 "the conditional began here");
1310 ifs->type = T_ELSE;
1312 /* Buffer->was_skipping is 1 if all conditionals in this chain
1313 have been false, 2 if a conditional has been true. */
1314 if (! ifs->was_skipping && buffer->was_skipping != 2)
1315 buffer->was_skipping = ! buffer->was_skipping;
1317 /* Invalidate any controlling macro. */
1318 ifs->mi_cmacro = 0;
1321 check_eol (pfile);
1324 /* handle a #elif directive by not changing if_stack either. see the
1325 comment above do_else. */
1327 static void
1328 do_elif (pfile)
1329 cpp_reader *pfile;
1331 cpp_buffer *buffer = pfile->buffer;
1332 struct if_stack *ifs = buffer->if_stack;
1334 if (ifs == NULL)
1335 cpp_error (pfile, "#elif without #if");
1336 else
1338 if (ifs->type == T_ELSE)
1340 cpp_error (pfile, "#elif after #else");
1341 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1342 "the conditional began here");
1344 ifs->type = T_ELIF;
1346 /* Don't evaluate #elif if our higher level is skipping. */
1347 if (! ifs->was_skipping)
1349 /* Buffer->was_skipping is 1 if all conditionals in this
1350 chain have been false, 2 if a conditional has been true. */
1351 if (buffer->was_skipping == 1)
1352 buffer->was_skipping = ! _cpp_parse_expr (pfile);
1353 else
1354 buffer->was_skipping = 2;
1356 /* Invalidate any controlling macro. */
1357 ifs->mi_cmacro = 0;
1362 /* #endif pops the if stack and resets pfile->skipping. */
1364 static void
1365 do_endif (pfile)
1366 cpp_reader *pfile;
1368 cpp_buffer *buffer = pfile->buffer;
1369 struct if_stack *ifs = buffer->if_stack;
1371 if (ifs == NULL)
1372 cpp_error (pfile, "#endif without #if");
1373 else
1375 /* If potential control macro, we go back outside again. */
1376 if (ifs->next == 0 && ifs->mi_cmacro)
1378 pfile->mi_state = MI_OUTSIDE;
1379 pfile->mi_cmacro = ifs->mi_cmacro;
1382 buffer->if_stack = ifs->next;
1383 buffer->was_skipping = ifs->was_skipping;
1384 obstack_free (pfile->buffer_ob, ifs);
1387 check_eol (pfile);
1390 /* Push an if_stack entry and set pfile->skipping accordingly.
1391 If this is a #ifndef starting at the beginning of a file,
1392 CMACRO is the macro name tested by the #ifndef. */
1394 static void
1395 push_conditional (pfile, skip, type, cmacro)
1396 cpp_reader *pfile;
1397 int skip;
1398 int type;
1399 const cpp_hashnode *cmacro;
1401 struct if_stack *ifs;
1402 cpp_buffer *buffer = pfile->buffer;
1404 ifs = xobnew (pfile->buffer_ob, struct if_stack);
1405 ifs->pos = pfile->directive_pos;
1406 ifs->next = buffer->if_stack;
1407 ifs->was_skipping = buffer->was_skipping;
1408 ifs->type = type;
1409 if (pfile->mi_state == MI_OUTSIDE && pfile->mi_cmacro == 0)
1410 ifs->mi_cmacro = cmacro;
1411 else
1412 ifs->mi_cmacro = 0;
1414 buffer->was_skipping = skip;
1415 buffer->if_stack = ifs;
1418 /* Read the tokens of the answer into the macro pool. Only commit the
1419 memory if we intend it as permanent storage, i.e. the #assert case.
1420 Returns 0 on success. */
1422 static int
1423 parse_answer (pfile, answerp, type)
1424 cpp_reader *pfile;
1425 struct answer **answerp;
1426 int type;
1428 cpp_token paren, *token;
1429 struct answer *answer;
1431 if (POOL_FRONT (&pfile->macro_pool) + sizeof (struct answer) >
1432 POOL_LIMIT (&pfile->macro_pool))
1433 _cpp_next_chunk (&pfile->macro_pool, sizeof (struct answer), 0);
1434 answer = (struct answer *) POOL_FRONT (&pfile->macro_pool);
1435 answer->count = 0;
1437 /* In a conditional, it is legal to not have an open paren. We
1438 should save the following token in this case. */
1439 if (type == T_IF)
1440 cpp_start_lookahead (pfile);
1441 cpp_get_token (pfile, &paren);
1442 if (type == T_IF)
1443 cpp_stop_lookahead (pfile, paren.type == CPP_OPEN_PAREN);
1445 /* If not a paren, see if we're OK. */
1446 if (paren.type != CPP_OPEN_PAREN)
1448 /* In a conditional no answer is a test for any answer. It
1449 could be followed by any token. */
1450 if (type == T_IF)
1451 return 0;
1453 /* #unassert with no answer is valid - it removes all answers. */
1454 if (type == T_UNASSERT && paren.type == CPP_EOF)
1455 return 0;
1457 cpp_error (pfile, "missing '(' after predicate");
1458 return 1;
1461 for (;;)
1463 token = &answer->first[answer->count];
1464 /* Check we have room for the token. */
1465 if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
1467 _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1468 (unsigned char **) &answer);
1469 token = &answer->first[answer->count];
1472 cpp_get_token (pfile, token);
1473 if (token->type == CPP_CLOSE_PAREN)
1474 break;
1476 if (token->type == CPP_EOF)
1478 cpp_error (pfile, "missing ')' to complete answer");
1479 return 1;
1481 answer->count++;
1484 if (answer->count == 0)
1486 cpp_error (pfile, "predicate's answer is empty");
1487 return 1;
1490 /* Drop whitespace at start. */
1491 answer->first->flags &= ~PREV_WHITE;
1492 *answerp = answer;
1494 if (type == T_ASSERT || type == T_UNASSERT)
1495 check_eol (pfile);
1496 return 0;
1499 /* Parses an assertion, returning a pointer to the hash node of the
1500 predicate, or 0 on error. If an answer was supplied, it is placed
1501 in ANSWERP, otherwise it is set to 0. */
1502 static cpp_hashnode *
1503 parse_assertion (pfile, answerp, type)
1504 cpp_reader *pfile;
1505 struct answer **answerp;
1506 int type;
1508 cpp_hashnode *result = 0;
1509 cpp_token predicate;
1511 /* We don't expand predicates or answers. */
1512 pfile->state.prevent_expansion++;
1514 *answerp = 0;
1515 cpp_get_token (pfile, &predicate);
1516 if (predicate.type == CPP_EOF)
1517 cpp_error (pfile, "assertion without predicate");
1518 else if (predicate.type != CPP_NAME)
1519 cpp_error (pfile, "predicate must be an identifier");
1520 else if (parse_answer (pfile, answerp, type) == 0)
1522 unsigned int len = predicate.val.node->length;
1523 unsigned char *sym = alloca (len + 1);
1525 /* Prefix '#' to get it out of macro namespace. */
1526 sym[0] = '#';
1527 memcpy (sym + 1, predicate.val.node->name, len);
1528 result = cpp_lookup (pfile, sym, len + 1);
1531 pfile->state.prevent_expansion--;
1532 return result;
1535 /* Returns a pointer to the pointer to the answer in the answer chain,
1536 or a pointer to NULL if the answer is not in the chain. */
1537 static struct answer **
1538 find_answer (node, candidate)
1539 cpp_hashnode *node;
1540 const struct answer *candidate;
1542 unsigned int i;
1543 struct answer **result;
1545 for (result = &node->value.answers; *result; result = &(*result)->next)
1547 struct answer *answer = *result;
1549 if (answer->count == candidate->count)
1551 for (i = 0; i < answer->count; i++)
1552 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1553 break;
1555 if (i == answer->count)
1556 break;
1560 return result;
1563 /* Test an assertion within a preprocessor conditional. Returns
1564 non-zero on failure, zero on success. On success, the result of
1565 the test is written into VALUE. */
1567 _cpp_test_assertion (pfile, value)
1568 cpp_reader *pfile;
1569 int *value;
1571 struct answer *answer;
1572 cpp_hashnode *node;
1574 node = parse_assertion (pfile, &answer, T_IF);
1575 if (node)
1576 *value = (node->type == NT_ASSERTION &&
1577 (answer == 0 || *find_answer (node, answer) != 0));
1579 /* We don't commit the memory for the answer - it's temporary only. */
1580 return node == 0;
1583 static void
1584 do_assert (pfile)
1585 cpp_reader *pfile;
1587 struct answer *new_answer;
1588 cpp_hashnode *node;
1590 node = parse_assertion (pfile, &new_answer, T_ASSERT);
1591 if (node)
1593 /* Place the new answer in the answer list. First check there
1594 is not a duplicate. */
1595 new_answer->next = 0;
1596 if (node->type == NT_ASSERTION)
1598 if (*find_answer (node, new_answer))
1600 cpp_warning (pfile, "\"%s\" re-asserted", node->name + 1);
1601 return;
1603 new_answer->next = node->value.answers;
1605 node->type = NT_ASSERTION;
1606 node->value.answers = new_answer;
1607 POOL_COMMIT (&pfile->macro_pool, (sizeof (struct answer)
1608 + (new_answer->count - 1)
1609 * sizeof (cpp_token)));
1613 static void
1614 do_unassert (pfile)
1615 cpp_reader *pfile;
1617 cpp_hashnode *node;
1618 struct answer *answer;
1620 node = parse_assertion (pfile, &answer, T_UNASSERT);
1621 /* It isn't an error to #unassert something that isn't asserted. */
1622 if (node && node->type == NT_ASSERTION)
1624 if (answer)
1626 struct answer **p = find_answer (node, answer), *temp;
1628 /* Remove the answer from the list. */
1629 temp = *p;
1630 if (temp)
1631 *p = temp->next;
1633 /* Did we free the last answer? */
1634 if (node->value.answers == 0)
1635 node->type = NT_VOID;
1637 else
1638 _cpp_free_definition (node);
1641 /* We don't commit the memory for the answer - it's temporary only. */
1644 /* These are for -D, -U, -A. */
1646 /* Process the string STR as if it appeared as the body of a #define.
1647 If STR is just an identifier, define it with value 1.
1648 If STR has anything after the identifier, then it should
1649 be identifier=definition. */
1651 void
1652 cpp_define (pfile, str)
1653 cpp_reader *pfile;
1654 const char *str;
1656 char *buf, *p;
1657 size_t count;
1659 /* Copy the entire option so we can modify it.
1660 Change the first "=" in the string to a space. If there is none,
1661 tack " 1" on the end. */
1663 /* Length including the null. */
1664 count = strlen (str);
1665 buf = (char *) alloca (count + 2);
1666 memcpy (buf, str, count);
1668 p = strchr (str, '=');
1669 if (p)
1670 buf[p - str] = ' ';
1671 else
1673 buf[count++] = ' ';
1674 buf[count++] = '1';
1677 run_directive (pfile, T_DEFINE, BUF_CL_OPTION, buf, count);
1680 /* Slight variant of the above for use by initialize_builtins. */
1681 void
1682 _cpp_define_builtin (pfile, str)
1683 cpp_reader *pfile;
1684 const char *str;
1686 run_directive (pfile, T_DEFINE, BUF_BUILTIN, str, strlen (str));
1689 /* Process MACRO as if it appeared as the body of an #undef. */
1690 void
1691 cpp_undef (pfile, macro)
1692 cpp_reader *pfile;
1693 const char *macro;
1695 run_directive (pfile, T_UNDEF, BUF_CL_OPTION, macro, strlen (macro));
1698 /* Process the string STR as if it appeared as the body of a #assert. */
1699 void
1700 cpp_assert (pfile, str)
1701 cpp_reader *pfile;
1702 const char *str;
1704 handle_assertion (pfile, str, T_ASSERT);
1707 /* Process STR as if it appeared as the body of an #unassert. */
1708 void
1709 cpp_unassert (pfile, str)
1710 cpp_reader *pfile;
1711 const char *str;
1713 handle_assertion (pfile, str, T_UNASSERT);
1716 /* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
1717 static void
1718 handle_assertion (pfile, str, type)
1719 cpp_reader *pfile;
1720 const char *str;
1721 int type;
1723 size_t count = strlen (str);
1724 const char *p = strchr (str, '=');
1726 if (p)
1728 /* Copy the entire option so we can modify it. Change the first
1729 "=" in the string to a '(', and tack a ')' on the end. */
1730 char *buf = (char *) alloca (count + 1);
1732 memcpy (buf, str, count);
1733 buf[p - str] = '(';
1734 buf[count++] = ')';
1735 str = buf;
1738 run_directive (pfile, type, BUF_CL_OPTION, str, count);
1741 /* The number of errors for a given reader. */
1742 unsigned int
1743 cpp_errors (pfile)
1744 cpp_reader *pfile;
1746 return pfile->errors;
1749 /* The options structure. */
1750 cpp_options *
1751 cpp_get_options (pfile)
1752 cpp_reader *pfile;
1754 return &pfile->opts;
1757 /* The callbacks structure. */
1758 cpp_callbacks *
1759 cpp_get_callbacks (pfile)
1760 cpp_reader *pfile;
1762 return &pfile->cb;
1765 /* Copy the given callbacks structure to our own. */
1766 void
1767 cpp_set_callbacks (pfile, cb)
1768 cpp_reader *pfile;
1769 cpp_callbacks *cb;
1771 pfile->cb = *cb;
1774 /* Push a new buffer on the buffer stack. Returns the new buffer; it
1775 doesn't fail. It does not generate a file change call back; that
1776 is the responsibility of the caller. */
1777 cpp_buffer *
1778 cpp_push_buffer (pfile, buffer, len, type, filename)
1779 cpp_reader *pfile;
1780 const U_CHAR *buffer;
1781 size_t len;
1782 enum cpp_buffer_type type;
1783 const char *filename;
1785 cpp_buffer *new = xobnew (pfile->buffer_ob, cpp_buffer);
1787 if (type == BUF_FAKE)
1789 /* A copy of the current buffer, just with a new name and type. */
1790 memcpy (new, pfile->buffer, sizeof (cpp_buffer));
1791 new->type = BUF_FAKE;
1793 else
1795 if (type == BUF_BUILTIN)
1796 filename = _("<builtin>");
1797 else if (type == BUF_CL_OPTION)
1798 filename = _("<command line>");
1799 else if (type == BUF_PRAGMA)
1800 filename = "<_Pragma>";
1802 /* Clears, amongst other things, if_stack and mi_cmacro. */
1803 memset (new, 0, sizeof (cpp_buffer));
1805 new->line_base = new->buf = new->cur = buffer;
1806 new->rlimit = buffer + len;
1807 new->sysp = 0;
1809 /* No read ahead or extra char initially. */
1810 new->read_ahead = EOF;
1811 new->extra_char = EOF;
1813 /* Preprocessed files, builtins, _Pragma and command line
1814 options don't do trigraph and escaped newline processing. */
1815 new->from_stage3 = type != BUF_FILE || CPP_OPTION (pfile, preprocessed);
1817 pfile->lexer_pos.output_line = 1;
1820 new->nominal_fname = filename;
1821 new->type = type;
1822 new->prev = pfile->buffer;
1823 new->pfile = pfile;
1824 new->include_stack_listed = 0;
1825 new->lineno = 1;
1827 pfile->state.next_bol = 1;
1828 pfile->buffer_stack_depth++;
1829 pfile->buffer = new;
1831 return new;
1834 /* If called from do_line, pops a single buffer. Otherwise pops all
1835 buffers until a real file is reached. Generates appropriate
1836 call-backs. */
1837 cpp_buffer *
1838 cpp_pop_buffer (pfile)
1839 cpp_reader *pfile;
1841 cpp_buffer *buffer;
1842 struct if_stack *ifs;
1844 for (;;)
1846 buffer = pfile->buffer;
1847 /* Walk back up the conditional stack till we reach its level at
1848 entry to this file, issuing error messages. */
1849 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
1850 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1851 "unterminated #%s", dtable[ifs->type].name);
1853 if (buffer->type == BUF_FAKE)
1854 buffer->prev->cur = buffer->cur;
1855 else if (buffer->type == BUF_FILE)
1856 _cpp_pop_file_buffer (pfile, buffer);
1858 pfile->buffer = buffer->prev;
1859 pfile->buffer_stack_depth--;
1861 /* Callbacks only generated for faked or real files. */
1862 if (buffer->type != BUF_FILE && buffer->type != BUF_FAKE)
1863 break;
1865 /* No callback for EOF of last file. */
1866 if (!pfile->buffer)
1867 break;
1869 /* do_line does its own call backs. */
1870 pfile->buffer->include_stack_listed = 0;
1871 if (pfile->directive == &dtable[T_LINE])
1872 break;
1874 _cpp_do_file_change (pfile, FC_LEAVE, buffer->nominal_fname,
1875 buffer->lineno);
1876 if (pfile->buffer->type == BUF_FILE)
1877 break;
1879 cpp_warning (pfile, "file \"%s\" entered but not left",
1880 buffer->nominal_fname);
1883 obstack_free (pfile->buffer_ob, buffer);
1884 return pfile->buffer;
1887 #define obstack_chunk_alloc xmalloc
1888 #define obstack_chunk_free free
1889 void
1890 _cpp_init_stacks (pfile)
1891 cpp_reader *pfile;
1893 unsigned int i;
1894 cpp_hashnode *node;
1896 pfile->buffer_ob = xnew (struct obstack);
1897 obstack_init (pfile->buffer_ob);
1899 /* Register the directives. */
1900 for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
1902 node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
1903 node->directive_index = i + 1;
1907 void
1908 _cpp_cleanup_stacks (pfile)
1909 cpp_reader *pfile;
1911 obstack_free (pfile->buffer_ob, 0);
1912 free (pfile->buffer_ob);