]> gcc.gnu.org Git - gcc.git/blame - gcc/cpplib.c
tree.h (mark_tree_hashtable): New function.
[gcc.git] / gcc / cpplib.c
CommitLineData
a949941c 1/* CPP Library. (Directive handling.)
5e7b4e25
JL
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000 Free Software Foundation, Inc.
4c8cc616 4 Contributed by Per Bothner, 1994-95.
d8bfa78c 5 Based on CCCP program by Paul Rubin, June 1986
7f2935c7
PB
6 Adapted to ANSI C, Richard Stallman, Jan 1987
7
8This program is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 2, or (at your option) any
11later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
956d6950 20Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
7f2935c7 21
956d6950 22#include "config.h"
b04cd507 23#include "system.h"
7f2935c7 24
956d6950
JL
25#include "cpplib.h"
26#include "cpphash.h"
ab87f8c8 27#include "intl.h"
c71f835b 28#include "obstack.h"
07aa0b04 29#include "symcat.h"
7f2935c7 30
93c80368
NB
31/* Chained list of answers to an assertion. */
32struct answer
33{
34 struct answer *next;
35 unsigned int count;
36 cpp_token first[1];
37};
38
88ae23e7
ZW
39/* Stack of conditionals currently in progress
40 (including both successful and failing conditionals). */
41
42struct if_stack
43{
44 struct if_stack *next;
93c80368
NB
45 cpp_lexer_pos pos; /* line and column where condition started */
46 const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
b528a07e 47 unsigned char was_skipping; /* Value of pfile->skipping before this if. */
168d3732 48 int type; /* type of last directive seen in this group */
88ae23e7 49};
88ae23e7 50
93c80368
NB
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
57
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)
67
68/* Defines one #-directive, including how to handle it. */
69typedef void (*directive_handler) PARAMS ((cpp_reader *));
70typedef struct directive directive;
71struct directive
72{
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. */
78};
79
1316f1f7
ZW
80/* Forward declarations. */
81
93c80368
NB
82static void skip_rest_of_line PARAMS ((cpp_reader *));
83static void check_eol PARAMS ((cpp_reader *));
fe6c2db9
NB
84static void start_directive PARAMS ((cpp_reader *));
85static void end_directive PARAMS ((cpp_reader *, int));
93c80368 86static void run_directive PARAMS ((cpp_reader *, int,
7b03adc6 87 const char *, size_t,
93c80368
NB
88 const char *));
89static int glue_header_name PARAMS ((cpp_reader *, cpp_token *));
90static int parse_include PARAMS ((cpp_reader *, cpp_token *));
041c3194
ZW
91static void push_conditional PARAMS ((cpp_reader *, int, int,
92 const cpp_hashnode *));
c71f835b
ZW
93static int read_line_number PARAMS ((cpp_reader *, int *));
94static int strtoul_for_line PARAMS ((const U_CHAR *, unsigned int,
041c3194 95 unsigned long *));
29b10746 96static void do_diagnostic PARAMS ((cpp_reader *, enum error_type, int));
b528a07e 97static cpp_hashnode *lex_macro_node PARAMS ((cpp_reader *));
93c80368
NB
98static void do_pragma_once PARAMS ((cpp_reader *));
99static void do_pragma_poison PARAMS ((cpp_reader *));
100static void do_pragma_system_header PARAMS ((cpp_reader *));
101static void do_pragma_dependency PARAMS ((cpp_reader *));
a5c3cccd
NB
102static int get__Pragma_string PARAMS ((cpp_reader *, cpp_token *));
103static unsigned char *destringize PARAMS ((const cpp_string *,
104 unsigned int *));
93c80368
NB
105static int parse_answer PARAMS ((cpp_reader *, struct answer **, int));
106static cpp_hashnode *parse_assertion PARAMS ((cpp_reader *, struct answer **,
107 int));
108static struct answer ** find_answer PARAMS ((cpp_hashnode *,
109 const struct answer *));
86368122 110static void handle_assertion PARAMS ((cpp_reader *, const char *, int));
d481b69b 111
168d3732
ZW
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
93c80368
NB
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. */
168d3732 120
93c80368
NB
121#define DIRECTIVE_TABLE \
122D(define, T_DEFINE = 0, KANDR, IN_I) /* 270554 */ \
123D(include, T_INCLUDE, KANDR, INCL) /* 52262 */ \
124D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \
125D(ifdef, T_IFDEF, KANDR, COND | IF_COND) /* 22000 */ \
126D(if, T_IF, KANDR, COND | IF_COND) /* 18162 */ \
127D(else, T_ELSE, KANDR, COND) /* 9863 */ \
128D(ifndef, T_IFNDEF, KANDR, COND | IF_COND) /* 9675 */ \
129D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \
130D(line, T_LINE, KANDR, IN_I) /* 2465 */ \
131D(elif, T_ELIF, KANDR, COND) /* 610 */ \
132D(error, T_ERROR, STDC89, 0) /* 475 */ \
133D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \
134D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \
135D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL) /* 19 */ \
136D(ident, T_IDENT, EXTENSION, IN_I) /* 11 */ \
137D(import, T_IMPORT, EXTENSION, INCL) /* 0 ObjC */ \
138D(assert, T_ASSERT, EXTENSION, 0) /* 0 SVR4 */ \
139D(unassert, T_UNASSERT, EXTENSION, 0) /* 0 SVR4 */ \
140SCCS_ENTRY /* 0 SVR4? */
168d3732 141
07aa0b04
ZW
142/* #sccs is not always recognized. */
143#ifdef SCCS_DIRECTIVE
041c3194 144# define SCCS_ENTRY D(sccs, T_SCCS, EXTENSION, 0)
07aa0b04
ZW
145#else
146# define SCCS_ENTRY /* nothing */
147#endif
148
168d3732
ZW
149/* Use the table to generate a series of prototypes, an enum for the
150 directive names, and an array of directive handlers. */
151
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. */
155
7c32404c 156/* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
711b8824 157#define D(name, t, o, f) static void CONCAT2(do_,name) PARAMS ((cpp_reader *));
168d3732
ZW
158DIRECTIVE_TABLE
159#undef D
160
041c3194 161#define D(n, tag, o, f) tag,
168d3732
ZW
162enum
163{
93c80368 164 T_BAD_DIRECTIVE,
168d3732
ZW
165 DIRECTIVE_TABLE
166 N_DIRECTIVES
7f2935c7 167};
168d3732
ZW
168#undef D
169
7c32404c 170/* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
041c3194 171#define D(name, t, origin, flags) \
12cf91fe 172{ CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
041c3194 173 sizeof STRINGX(name) - 1, origin, flags },
93c80368 174static const directive dtable[] =
168d3732
ZW
175{
176DIRECTIVE_TABLE
177};
178#undef D
179#undef DIRECTIVE_TABLE
7f2935c7 180
93c80368
NB
181/* Skip any remaining tokens in a directive. */
182static void
183skip_rest_of_line (pfile)
041c3194 184 cpp_reader *pfile;
c5a04734 185{
93c80368
NB
186 cpp_token token;
187
7f2f1a66 188 /* Discard all input lookaheads. */
b528a07e
NB
189 while (pfile->la_read)
190 _cpp_release_lookahead (pfile);
191
93c80368
NB
192 /* Discard all stacked contexts. */
193 while (pfile->context != &pfile->base_context)
194 _cpp_pop_context (pfile);
195
b528a07e 196 /* Sweep up all tokens remaining on the line. */
93c80368 197 pfile->state.prevent_expansion++;
4c2b647d 198 while (!pfile->state.next_bol)
b528a07e 199 _cpp_lex_token (pfile, &token);
93c80368
NB
200 pfile->state.prevent_expansion--;
201}
c5a04734 202
93c80368
NB
203/* Ensure there are no stray tokens at the end of a directive. */
204static void
205check_eol (pfile)
206 cpp_reader *pfile;
207{
4c2b647d 208 if (!pfile->state.next_bol)
0d9f234d 209 {
93c80368 210 cpp_token token;
0d9f234d 211
93c80368
NB
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);
0d9f234d 216 }
93c80368
NB
217}
218
fe6c2db9
NB
219/* Called when entering a directive, _Pragma or command-line directive. */
220static void
221start_directive (pfile)
93c80368 222 cpp_reader *pfile;
93c80368 223{
b528a07e 224 cpp_buffer *buffer = pfile->buffer;
0d9f234d 225
7f2f1a66
NB
226 /* Setup in-directive state. */
227 pfile->state.in_directive = 1;
228 pfile->state.save_comments = 0;
229
93c80368
NB
230 /* Some handlers need the position of the # for diagnostics. */
231 pfile->directive_pos = pfile->lexer_pos;
c5a04734 232
7f2f1a66 233 /* Don't save directive tokens for external clients. */
fe6c2db9 234 pfile->la_saved = pfile->la_write;
7f2f1a66 235 pfile->la_write = 0;
0d9f234d 236
fe6c2db9
NB
237 /* Turn off skipping. */
238 buffer->was_skipping = pfile->skipping;
239 pfile->skipping = 0;
240}
241
242/* Called when leaving a directive, _Pragma or command-line directive. */
243static void
244end_directive (pfile, skip_line)
245 cpp_reader *pfile;
246 int skip_line;
247{
248 cpp_buffer *buffer = pfile->buffer;
249
250 /* Restore pfile->skipping before skip_rest_of_line. This avoids
251 warning about poisoned identifiers in skipped #error lines. */
252 pfile->skipping = buffer->was_skipping;
253
254 /* We don't skip for an assembler #. */
255 if (skip_line)
256 skip_rest_of_line (pfile);
257
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->directive = 0;
264}
265
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. */
268int
269_cpp_handle_directive (pfile, indented)
270 cpp_reader *pfile;
271 int indented;
272{
273 cpp_buffer *buffer = pfile->buffer;
274 const directive *dir = 0;
275 cpp_token dname;
276 int skip = 1;
277
278 start_directive (pfile);
279
93c80368
NB
280 /* Lex the directive name directly. */
281 _cpp_lex_token (pfile, &dname);
0d9f234d 282
93c80368 283 if (dname.type == CPP_NAME)
0d9f234d 284 {
93c80368
NB
285 unsigned int index = dname.val.node->directive_index;
286 if (index)
287 dir = &dtable[index - 1];
0d9f234d 288 }
93c80368 289 else if (dname.type == CPP_NUMBER)
0d9f234d 290 {
93c80368
NB
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). */
bdb05a7b 296 if (! buffer->was_skipping && CPP_OPTION (pfile, lang) != CLK_ASM)
0d9f234d 297 {
93c80368
NB
298 dir = &dtable[T_LINE];
299 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
b528a07e 300 if (CPP_PEDANTIC (pfile) && buffer->inc
93c80368
NB
301 && ! CPP_OPTION (pfile, preprocessed))
302 cpp_pedwarn (pfile, "# followed by integer");
0d9f234d 303 }
93c80368 304 }
0d9f234d 305
93c80368
NB
306 pfile->directive = dir;
307 if (dir)
308 {
309 /* Make sure we lex headers correctly, whether skipping or not. */
310 pfile->state.angled_headers = dir->flags & INCL;
0d9f234d 311
93c80368
NB
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)
315 {
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))
323 {
324 if (indented && dir->origin == KANDR)
325 cpp_warning (pfile,
326 "traditional C ignores #%s with the # indented",
327 dir->name);
328 else if (!indented && dir->origin != KANDR)
329 cpp_warning (pfile,
330 "suggest hiding #%s from traditional C with an indented #",
331 dir->name);
332 }
333
334 /* If we are skipping a failed conditional group, all
335 non-conditional directives are ignored. */
fe6c2db9 336 if (! buffer->was_skipping || (dir->flags & COND))
93c80368
NB
337 {
338 /* Issue -pedantic warnings for extensions. */
339 if (CPP_PEDANTIC (pfile) && dir->origin == EXTENSION)
340 cpp_pedwarn (pfile, "#%s is a GCC extension", dir->name);
341
342 /* If we have a directive that is not an opening
343 conditional, invalidate any control macro. */
344 if (! (dir->flags & IF_COND))
345 pfile->mi_state = MI_FAILED;
346
347 (*dir->handler) (pfile);
348 }
349 }
350 }
fe6c2db9 351 else if (dname.type != CPP_EOF && ! pfile->skipping)
93c80368
NB
352 {
353 /* An unknown directive. Don't complain about it in assembly
354 source: we don't know where the comments are, and # may
355 introduce assembler pseudo-ops. Don't complain about invalid
356 directives in skipped conditional groups (6.10 p4). */
bdb05a7b 357 if (CPP_OPTION (pfile, lang) == CLK_ASM)
93c80368
NB
358 {
359 /* Output the # and lookahead token for the assembler. */
93c80368 360 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
fe6c2db9 361 skip = 0;
93c80368 362 }
b528a07e 363 else
93c80368
NB
364 cpp_error (pfile, "invalid preprocessing directive #%s",
365 cpp_token_as_text (pfile, &dname));
0d9f234d
NB
366 }
367
fe6c2db9
NB
368 end_directive (pfile, skip);
369 return skip;
041c3194 370}
7f2935c7 371
93c80368
NB
372/* Directive handler wrapper used by the command line option
373 processor. */
374static void
375run_directive (pfile, dir_no, buf, count, name)
7f2935c7 376 cpp_reader *pfile;
93c80368
NB
377 int dir_no;
378 const char *buf;
379 size_t count;
380 const char *name;
3fdc651f 381{
a0a9606d 382 unsigned int output_line = pfile->lexer_pos.output_line;
fe6c2db9 383 cpp_buffer *buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count);
a0a9606d 384
fe6c2db9 385 if (buffer)
93c80368 386 {
fe6c2db9 387 const struct directive *dir = &dtable[dir_no];
93c80368
NB
388
389 if (name)
fe6c2db9 390 buffer->nominal_fname = name;
93c80368 391 else
fe6c2db9 392 buffer->nominal_fname = _("<command line>");
a5c3cccd
NB
393
394 /* For _Pragma, the text is passed through preprocessing stage 3
395 only, i.e. no trigraphs, no escaped newline removal, and no
396 macro expansion. Do the same for command-line directives. */
fe6c2db9
NB
397 buffer->from_stage3 = 1;
398
399 if (dir_no == T_PRAGMA)
400 {
401 /* A kludge to avoid line markers for _Pragma. */
402 pfile->lexer_pos.output_line = output_line;
403 /* Avoid interpretation of directives in a _Pragma string. */
404 pfile->state.next_bol = 0;
405 }
406
407 start_directive (pfile);
a5c3cccd 408 pfile->state.prevent_expansion++;
93c80368 409 (void) (*dir->handler) (pfile);
a5c3cccd 410 pfile->state.prevent_expansion--;
fe6c2db9
NB
411 check_eol (pfile);
412 end_directive (pfile, 1);
40c79d58 413
93c80368
NB
414 cpp_pop_buffer (pfile);
415 }
416}
417
418/* Checks for validity the macro name in #define, #undef, #ifdef and
419 #ifndef directives. */
041c3194 420static cpp_hashnode *
93c80368 421lex_macro_node (pfile)
041c3194
ZW
422 cpp_reader *pfile;
423{
93c80368 424 cpp_token token;
ff2b53ef 425
93c80368
NB
426 /* Lex the macro name directly. */
427 _cpp_lex_token (pfile, &token);
ea4a453b 428
92936ecf
ZW
429 /* The token immediately after #define must be an identifier. That
430 identifier is not allowed to be "defined". See predefined macro
431 names (6.10.8.4). In C++, it is not allowed to be any of the
432 <iso646.h> macro names (which are keywords in C++) either. */
433
93c80368 434 if (token.type != CPP_NAME)
7f2935c7 435 {
93c80368
NB
436 if (token.type == CPP_EOF)
437 cpp_error (pfile, "no macro name given in #%s directive",
438 pfile->directive->name);
439 else if (token.flags & NAMED_OP)
440 cpp_error (pfile,
441 "\"%s\" cannot be used as a macro name as it is an operator in C++",
442 token.val.node->name);
92936ecf 443 else
93c80368 444 cpp_error (pfile, "macro names must be identifiers");
ba89d661 445 }
93c80368 446 else
07aa0b04 447 {
93c80368
NB
448 cpp_hashnode *node = token.val.node;
449
450 /* In Objective C, some keywords begin with '@', but general
451 identifiers do not, and you're not allowed to #define them. */
452 if (node == pfile->spec_nodes.n_defined || node->name[0] == '@')
453 cpp_error (pfile, "\"%s\" cannot be used as a macro name", node->name);
454 else if (!(node->flags & NODE_POISONED))
455 return node;
07aa0b04
ZW
456 }
457
93c80368 458 return 0;
7f2935c7 459}
7f2935c7 460
93c80368 461/* Process a #define directive. Most work is done in cppmacro.c. */
711b8824 462static void
168d3732 463do_define (pfile)
7f2935c7 464 cpp_reader *pfile;
7f2935c7 465{
93c80368 466 cpp_hashnode *node = lex_macro_node (pfile);
ff2b53ef 467
93c80368
NB
468 if (node)
469 {
470 /* Use the permanent pool for storage. */
471 pfile->string_pool = &pfile->ident_pool;
472
473 if (_cpp_create_definition (pfile, node))
474 if (pfile->cb.define)
475 (*pfile->cb.define) (pfile, node);
476
477 /* Revert to the temporary pool. */
478 pfile->string_pool = &pfile->temp_string_pool;
479 }
041c3194
ZW
480}
481
93c80368 482/* Handle #undef. Marks the identifier NT_VOID in the hash table. */
711b8824 483static void
041c3194
ZW
484do_undef (pfile)
485 cpp_reader *pfile;
486{
93c80368 487 cpp_hashnode *node = lex_macro_node (pfile);
9e62c811 488
041c3194
ZW
489 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier
490 is not currently defined as a macro name. */
93c80368 491 if (node && node->type == NT_MACRO)
9e62c811 492 {
58fea6af
ZW
493 if (pfile->cb.undef)
494 (*pfile->cb.undef) (pfile, node);
9e62c811 495
93c80368 496 if (node->flags & NODE_BUILTIN)
041c3194 497 cpp_warning (pfile, "undefining \"%s\"", node->name);
9e62c811 498
041c3194 499 _cpp_free_definition (node);
9e62c811 500 }
93c80368 501 check_eol (pfile);
7f2935c7
PB
502}
503
93c80368
NB
504/* Helper routine used by parse_include. Reinterpret the current line
505 as an h-char-sequence (< ... >); we are looking at the first token
506 after the <. Returns zero on success. */
507static int
508glue_header_name (pfile, header)
509 cpp_reader *pfile;
510 cpp_token *header;
511{
512 cpp_token token;
513 unsigned char *buffer, *token_mem;
514 size_t len, total_len = 0, capacity = 1024;
515
516 /* To avoid lexed tokens overwriting our glued name, we can only
517 allocate from the string pool once we've lexed everything. */
518
519 buffer = (unsigned char *) xmalloc (capacity);
520 for (;;)
521 {
7f2f1a66 522 cpp_get_token (pfile, &token);
93c80368
NB
523
524 if (token.type == CPP_GREATER || token.type == CPP_EOF)
525 break;
526
527 len = cpp_token_len (&token);
528 if (total_len + len > capacity)
529 {
530 capacity = (capacity + len) * 2;
dd3b81b4 531 buffer = (unsigned char *) xrealloc (buffer, capacity);
93c80368
NB
532 }
533
534 if (token.flags & PREV_WHITE)
535 buffer[total_len++] = ' ';
536
537 total_len = cpp_spell_token (pfile, &token, &buffer[total_len]) - buffer;
538 }
539
540 if (token.type == CPP_EOF)
541 cpp_error (pfile, "missing terminating > character");
542 else
543 {
544 token_mem = _cpp_pool_alloc (pfile->string_pool, total_len);
545 memcpy (token_mem, buffer, total_len);
546
547 header->type = CPP_HEADER_NAME;
548 header->flags &= ~PREV_WHITE;
549 header->val.str.len = total_len;
550 header->val.str.text = token_mem;
551 }
041c3194 552
93c80368
NB
553 free ((PTR) buffer);
554 return token.type == CPP_EOF;
555}
7f2935c7 556
93c80368
NB
557/* Parse the header name of #include, #include_next, #import and
558 #pragma dependency. Returns zero on success. */
041c3194 559static int
93c80368 560parse_include (pfile, header)
7f2935c7 561 cpp_reader *pfile;
93c80368 562 cpp_token *header;
7f2935c7 563{
93c80368
NB
564 int is_pragma = pfile->directive == &dtable[T_PRAGMA];
565 const unsigned char *dir;
7f2935c7 566
93c80368
NB
567 if (is_pragma)
568 dir = U"pragma dependency";
569 else
570 dir = pfile->directive->name;
571
572 /* Allow macro expansion. */
573 cpp_get_token (pfile, header);
574 if (header->type != CPP_STRING && header->type != CPP_HEADER_NAME)
7f2935c7 575 {
93c80368 576 if (header->type != CPP_LESS)
041c3194
ZW
577 {
578 cpp_error (pfile, "#%s expects \"FILENAME\" or <FILENAME>", dir);
579 return 1;
580 }
93c80368
NB
581 if (glue_header_name (pfile, header))
582 return 1;
7f2935c7 583 }
93c80368
NB
584
585 if (header->val.str.len == 0)
7f2935c7 586 {
041c3194
ZW
587 cpp_error (pfile, "empty file name in #%s", dir);
588 return 1;
7f2935c7 589 }
7f2935c7 590
93c80368
NB
591 if (!is_pragma)
592 {
593 check_eol (pfile);
594 /* Get out of macro context, if we are. */
595 skip_rest_of_line (pfile);
596 if (pfile->cb.include)
597 (*pfile->cb.include) (pfile, dir, header);
598 }
58fea6af 599
041c3194 600 return 0;
168d3732 601}
3caee4a8 602
711b8824 603static void
168d3732
ZW
604do_include (pfile)
605 cpp_reader *pfile;
606{
93c80368 607 cpp_token header;
7f2935c7 608
93c80368
NB
609 if (!parse_include (pfile, &header))
610 _cpp_execute_include (pfile, &header, 0, 0);
168d3732 611}
e8037d57 612
711b8824 613static void
168d3732
ZW
614do_import (pfile)
615 cpp_reader *pfile;
616{
93c80368 617 cpp_token header;
168d3732 618
317639a8 619 if (!pfile->import_warning && CPP_OPTION (pfile, warn_import))
7f2935c7 620 {
168d3732
ZW
621 pfile->import_warning = 1;
622 cpp_warning (pfile,
623 "#import is obsolete, use an #ifndef wrapper in the header file");
7f2935c7 624 }
7f2935c7 625
93c80368
NB
626 if (!parse_include (pfile, &header))
627 _cpp_execute_include (pfile, &header, 1, 0);
168d3732 628}
7f2935c7 629
711b8824 630static void
168d3732
ZW
631do_include_next (pfile)
632 cpp_reader *pfile;
633{
93c80368 634 cpp_token header;
168d3732 635 struct file_name_list *search_start = 0;
7f2935c7 636
93c80368 637 if (parse_include (pfile, &header))
711b8824 638 return;
168d3732 639
041c3194
ZW
640 /* For #include_next, skip in the search path past the dir in which
641 the current file was found. If this is the last directory in the
642 search path, don't include anything. If the current file was
643 specified with an absolute path, use the normal search logic. If
644 this is the primary source file, use the normal search logic and
645 generate a warning. */
168d3732 646 if (CPP_PREV_BUFFER (CPP_BUFFER (pfile)))
7f2935c7 647 {
c31a6508 648 if (CPP_BUFFER (pfile)->inc->foundhere)
041c3194
ZW
649 {
650 search_start = CPP_BUFFER (pfile)->inc->foundhere->next;
651 if (!search_start)
711b8824 652 return;
041c3194 653 }
7f2935c7 654 }
168d3732
ZW
655 else
656 cpp_warning (pfile, "#include_next in primary source file");
657
93c80368 658 _cpp_execute_include (pfile, &header, 0, search_start);
7f2935c7 659}
7f2935c7 660
d3a34a0a
JM
661/* Subroutine of do_line. Read next token from PFILE without adding it to
662 the output buffer. If it is a number between 1 and 4, store it in *NUM
663 and return 1; otherwise, return 0 and complain if we aren't at the end
664 of the directive. */
665
666static int
667read_line_number (pfile, num)
668 cpp_reader *pfile;
669 int *num;
670{
93c80368
NB
671 cpp_token token;
672 unsigned int val;
d3a34a0a 673
93c80368
NB
674 _cpp_lex_token (pfile, &token);
675 if (token.type == CPP_NUMBER && token.val.str.len == 1)
d3a34a0a 676 {
93c80368
NB
677 val = token.val.str.text[0] - '1';
678 if (val <= 3)
679 {
680 *num = val + 1;
681 return 1;
682 }
d3a34a0a 683 }
93c80368
NB
684
685 if (token.type != CPP_EOF)
686 cpp_error (pfile, "invalid format #line");
687 return 0;
d3a34a0a
JM
688}
689
041c3194
ZW
690/* Another subroutine of do_line. Convert a number in STR, of length
691 LEN, to binary; store it in NUMP, and return 0 if the number was
5ef865d5 692 well-formed, 1 if not. Temporary, hopefully. */
041c3194
ZW
693static int
694strtoul_for_line (str, len, nump)
695 const U_CHAR *str;
696 unsigned int len;
697 unsigned long *nump;
698{
699 unsigned long reg = 0;
700 U_CHAR c;
701 while (len--)
702 {
703 c = *str++;
704 if (!ISDIGIT (c))
705 return 1;
706 reg *= 10;
707 reg += c - '0';
708 }
709 *nump = reg;
710 return 0;
711}
712
6de1e2a9
ZW
713/* Interpret #line command.
714 Note that the filename string (if any) is treated as if it were an
715 include filename. That means no escape handling. */
7f2935c7 716
711b8824 717static void
168d3732 718do_line (pfile)
7f2935c7 719 cpp_reader *pfile;
7f2935c7 720{
6de1e2a9 721 cpp_buffer *ip = CPP_BUFFER (pfile);
93c80368 722 unsigned long new_lineno;
041c3194
ZW
723 /* C99 raised the minimum limit on #line numbers. */
724 unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
9ec7291f 725 int enter = 0, leave = 0, rename = 0;
93c80368
NB
726 cpp_token token;
727
728 /* #line commands expand macros. */
7f2f1a66 729 cpp_get_token (pfile, &token);
93c80368
NB
730 if (token.type != CPP_NUMBER
731 || strtoul_for_line (token.val.str.text, token.val.str.len, &new_lineno))
7f2935c7 732 {
93c80368
NB
733 cpp_error (pfile, "\"%s\" after #line is not a positive integer",
734 cpp_token_as_text (pfile, &token));
9ec7291f 735 return;
6de1e2a9 736 }
7f2935c7 737
041c3194
ZW
738 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
739 cpp_pedwarn (pfile, "line number out of range");
7f2935c7 740
7f2f1a66 741 cpp_get_token (pfile, &token);
add7091b 742
93c80368 743 if (token.type != CPP_EOF)
5538ada6 744 {
93c80368
NB
745 char *fname;
746 unsigned int len;
747 int action_number = 0;
5538ada6 748
93c80368
NB
749 if (token.type != CPP_STRING)
750 {
751 cpp_error (pfile, "\"%s\" is not a valid filename",
752 cpp_token_as_text (pfile, &token));
753 return;
754 }
7f2935c7 755
93c80368
NB
756 len = token.val.str.len;
757 fname = alloca (len + 1);
758 memcpy (fname, token.val.str.text, len);
759 fname[len] = '\0';
760
761 if (strcmp (fname, ip->nominal_fname))
762 {
763 rename = 1;
764 if (!strcmp (fname, ip->inc->name))
765 ip->nominal_fname = ip->inc->name;
766 else
767 ip->nominal_fname = _cpp_fake_include (pfile, fname);
768 }
941e09b6 769
93c80368
NB
770 if (read_line_number (pfile, &action_number) != 0)
771 {
9232b7d9 772 if (! CPP_OPTION (pfile, preprocessed) && CPP_PEDANTIC (pfile))
93c80368 773 cpp_pedwarn (pfile, "extra tokens at end of #line directive");
ff2b53ef 774
93c80368
NB
775 if (action_number == 1)
776 {
777 enter = 1;
778 cpp_make_system_header (pfile, ip, 0);
779 read_line_number (pfile, &action_number);
780 }
781 else if (action_number == 2)
782 {
783 leave = 1;
784 cpp_make_system_header (pfile, ip, 0);
785 read_line_number (pfile, &action_number);
786 }
787 if (action_number == 3)
788 {
789 cpp_make_system_header (pfile, ip, 1);
790 read_line_number (pfile, &action_number);
791 }
792 if (action_number == 4)
793 {
794 cpp_make_system_header (pfile, ip, 2);
795 read_line_number (pfile, &action_number);
796 }
797 }
798 check_eol (pfile);
041c3194 799 }
7f2935c7 800
93c80368
NB
801 /* Our line number is incremented after the directive is processed. */
802 ip->lineno = new_lineno - 1;
803 pfile->lexer_pos.output_line = ip->lineno;
58fea6af
ZW
804 if (enter && pfile->cb.enter_file)
805 (*pfile->cb.enter_file) (pfile);
806 if (leave && pfile->cb.leave_file)
807 (*pfile->cb.leave_file) (pfile);
9ec7291f
ZW
808 if (rename && pfile->cb.rename_file)
809 (*pfile->cb.rename_file) (pfile);
7f2935c7 810}
941e09b6 811
7f2935c7 812/*
838f313b
NB
813 * Report a warning or error detected by the program we are
814 * processing. Use the directive's tokens in the error message.
7f2935c7
PB
815 */
816
711b8824 817static void
29b10746 818do_diagnostic (pfile, code, print_dir)
7f2935c7 819 cpp_reader *pfile;
838f313b 820 enum error_type code;
29b10746 821 int print_dir;
7f2935c7 822{
93c80368 823 if (_cpp_begin_message (pfile, code, NULL, 0))
58fea6af 824 {
29b10746
NB
825 if (print_dir)
826 fprintf (stderr, "#%s ", pfile->directive->name);
93c80368
NB
827 pfile->state.prevent_expansion++;
828 cpp_output_line (pfile, stderr);
829 pfile->state.prevent_expansion--;
58fea6af 830 }
7f2935c7
PB
831}
832
838f313b
NB
833static void
834do_error (pfile)
835 cpp_reader *pfile;
836{
29b10746 837 do_diagnostic (pfile, ERROR, 1);
838f313b 838}
7f2935c7 839
711b8824 840static void
168d3732 841do_warning (pfile)
7f2935c7 842 cpp_reader *pfile;
7f2935c7 843{
29b10746 844 do_diagnostic (pfile, WARNING, 1);
7f2935c7
PB
845}
846
a2a76ce7 847/* Report program identification. */
7f2935c7 848
711b8824 849static void
168d3732 850do_ident (pfile)
7f2935c7 851 cpp_reader *pfile;
7f2935c7 852{
93c80368 853 cpp_token str;
58fea6af 854
7f2f1a66 855 cpp_get_token (pfile, &str);
93c80368
NB
856 if (str.type != CPP_STRING)
857 cpp_error (pfile, "invalid #ident");
858 else if (pfile->cb.ident)
859 (*pfile->cb.ident) (pfile, &str.val.str);
a2a76ce7 860
93c80368 861 check_eol (pfile);
7f2935c7
PB
862}
863
a2a76ce7
ZW
864/* Pragmata handling. We handle some of these, and pass the rest on
865 to the front end. C99 defines three pragmas and says that no macro
866 expansion is to be performed on them; whether or not macro
867 expansion happens for other pragmas is implementation defined.
a949941c 868 This implementation never macro-expands the text after #pragma. */
a2a76ce7
ZW
869
870/* Sub-handlers for the pragmas needing treatment here.
871 They return 1 if the token buffer is to be popped, 0 if not. */
82443371
NS
872struct pragma_entry
873{
58fea6af 874 struct pragma_entry *next;
041c3194 875 const char *name;
58fea6af
ZW
876 size_t len;
877 int isnspace;
878 union {
879 void (*handler) PARAMS ((cpp_reader *));
880 struct pragma_entry *space;
881 } u;
82443371
NS
882};
883
58fea6af
ZW
884void
885cpp_register_pragma (pfile, space, name, handler)
886 cpp_reader *pfile;
887 const char *space;
888 const char *name;
889 void (*handler) PARAMS ((cpp_reader *));
82443371 890{
58fea6af
ZW
891 struct pragma_entry **x, *new;
892 size_t len;
82443371 893
58fea6af
ZW
894 x = &pfile->pragmas;
895 if (space)
896 {
897 struct pragma_entry *p = pfile->pragmas;
898 len = strlen (space);
899 while (p)
900 {
901 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
902 {
903 x = &p->u.space;
904 goto found;
905 }
906 p = p->next;
907 }
908 cpp_ice (pfile, "unknown #pragma namespace %s", space);
909 return;
910 }
911
912 found:
913 new = xnew (struct pragma_entry);
914 new->name = name;
915 new->len = strlen (name);
916 new->isnspace = 0;
917 new->u.handler = handler;
918
919 new->next = *x;
920 *x = new;
921}
82443371 922
58fea6af
ZW
923void
924cpp_register_pragma_space (pfile, space)
82443371 925 cpp_reader *pfile;
58fea6af 926 const char *space;
82443371 927{
58fea6af
ZW
928 struct pragma_entry *new;
929 const struct pragma_entry *p = pfile->pragmas;
930 size_t len = strlen (space);
931
932 while (p)
933 {
934 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
6e19bb38
ZW
935 /* Multiple different callers are allowed to register the same
936 namespace. */
937 return;
58fea6af
ZW
938 p = p->next;
939 }
940
941 new = xnew (struct pragma_entry);
942 new->name = space;
943 new->len = len;
944 new->isnspace = 1;
945 new->u.space = 0;
946
947 new->next = pfile->pragmas;
948 pfile->pragmas = new;
949}
bfb9dc7f 950
58fea6af
ZW
951void
952_cpp_init_internal_pragmas (pfile)
953 cpp_reader *pfile;
954{
955 /* top level */
956 cpp_register_pragma (pfile, 0, "poison", do_pragma_poison);
957 cpp_register_pragma (pfile, 0, "once", do_pragma_once);
958
959 /* GCC namespace */
960 cpp_register_pragma_space (pfile, "GCC");
961
962 cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
963 cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
964 cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
82443371 965}
7f2935c7 966
711b8824 967static void
168d3732 968do_pragma (pfile)
7f2935c7 969 cpp_reader *pfile;
7f2935c7 970{
58fea6af 971 const struct pragma_entry *p;
93c80368 972 cpp_token tok;
58fea6af
ZW
973 const cpp_hashnode *node;
974 const U_CHAR *name;
975 size_t len;
93c80368 976 int drop = 0;
add7091b 977
58fea6af 978 p = pfile->pragmas;
93c80368
NB
979 pfile->state.prevent_expansion++;
980 cpp_start_lookahead (pfile);
58fea6af
ZW
981
982 new_space:
93c80368
NB
983 cpp_get_token (pfile, &tok);
984 if (tok.type == CPP_NAME)
0172e2bc 985 {
93c80368
NB
986 node = tok.val.node;
987 name = node->name;
988 len = node->length;
989 while (p)
58fea6af 990 {
93c80368 991 if (strlen (p->name) == len && !memcmp (p->name, name, len))
58fea6af 992 {
93c80368
NB
993 if (p->isnspace)
994 {
995 p = p->u.space;
996 goto new_space;
997 }
998 else
999 {
1000 (*p->u.handler) (pfile);
1001 drop = 1;
1002 break;
1003 }
58fea6af 1004 }
93c80368 1005 p = p->next;
58fea6af 1006 }
58fea6af 1007 }
041c3194 1008
93c80368
NB
1009 cpp_stop_lookahead (pfile, drop);
1010 pfile->state.prevent_expansion--;
1011
1012 if (!drop && pfile->cb.def_pragma)
58fea6af 1013 (*pfile->cb.def_pragma) (pfile);
82443371
NS
1014}
1015
58fea6af 1016static void
a2a76ce7
ZW
1017do_pragma_once (pfile)
1018 cpp_reader *pfile;
1019{
1020 cpp_buffer *ip = CPP_BUFFER (pfile);
1021
317639a8
BC
1022 cpp_warning (pfile, "#pragma once is obsolete");
1023
38b24ee2 1024 if (CPP_PREV_BUFFER (ip) == NULL)
93c80368 1025 cpp_warning (pfile, "#pragma once in main file");
a2a76ce7 1026 else
c31a6508 1027 ip->inc->cmacro = NEVER_REREAD;
93c80368
NB
1028
1029 check_eol (pfile);
a2a76ce7 1030}
fc009f96 1031
58fea6af 1032static void
a2a76ce7
ZW
1033do_pragma_poison (pfile)
1034 cpp_reader *pfile;
1035{
1036 /* Poison these symbols so that all subsequent usage produces an
1037 error message. */
93c80368 1038 cpp_token tok;
f8f769ea 1039 cpp_hashnode *hp;
a2a76ce7 1040
93c80368 1041 pfile->state.poisoned_ok = 1;
a2a76ce7
ZW
1042 for (;;)
1043 {
93c80368
NB
1044 _cpp_lex_token (pfile, &tok);
1045 if (tok.type == CPP_EOF)
a2a76ce7 1046 break;
93c80368 1047 if (tok.type != CPP_NAME)
fc009f96 1048 {
93c80368
NB
1049 cpp_error (pfile, "invalid #pragma GCC poison directive");
1050 break;
fc009f96
GK
1051 }
1052
93c80368
NB
1053 hp = tok.val.node;
1054 if (hp->flags & NODE_POISONED)
1055 continue;
1056
1057 if (hp->type == NT_MACRO)
1058 cpp_warning (pfile, "poisoning existing macro \"%s\"", hp->name);
1059 _cpp_free_definition (hp);
1060 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
fc009f96 1061 }
93c80368 1062 pfile->state.poisoned_ok = 0;
58fea6af 1063
93c80368
NB
1064#if 0 /* Doesn't quite work yet. */
1065 if (tok.type == CPP_EOF && pfile->cb.poison)
58fea6af 1066 (*pfile->cb.poison) (pfile);
93c80368 1067#endif
7f2935c7 1068}
2c0b35cb
ZW
1069
1070/* Mark the current header as a system header. This will suppress
1071 some categories of warnings (notably those from -pedantic). It is
1072 intended for use in system libraries that cannot be implemented in
1073 conforming C, but cannot be certain that their headers appear in a
1074 system include directory. To prevent abuse, it is rejected in the
1075 primary source file. */
58fea6af 1076static void
2c0b35cb
ZW
1077do_pragma_system_header (pfile)
1078 cpp_reader *pfile;
1079{
041c3194 1080 cpp_buffer *ip = CPP_BUFFER (pfile);
2c0b35cb
ZW
1081 if (CPP_PREV_BUFFER (ip) == NULL)
1082 cpp_warning (pfile, "#pragma system_header outside include file");
1083 else
e605b040 1084 cpp_make_system_header (pfile, ip, 1);
93c80368
NB
1085
1086 check_eol (pfile);
2c0b35cb 1087}
f3f751ad
NS
1088
1089/* Check the modified date of the current include file against a specified
1090 file. Issue a diagnostic, if the specified file is newer. We use this to
1091 determine if a fixed header should be refixed. */
58fea6af 1092static void
f3f751ad
NS
1093do_pragma_dependency (pfile)
1094 cpp_reader *pfile;
1095{
93c80368
NB
1096 cpp_token header, msg;
1097 int ordering;
041c3194 1098
93c80368 1099 if (parse_include (pfile, &header))
58fea6af 1100 return;
041c3194 1101
93c80368 1102 ordering = _cpp_compare_file_date (pfile, &header);
f3f751ad 1103 if (ordering < 0)
93c80368
NB
1104 cpp_warning (pfile, "cannot find source %s",
1105 cpp_token_as_text (pfile, &header));
f3f751ad
NS
1106 else if (ordering > 0)
1107 {
93c80368
NB
1108 cpp_warning (pfile, "current file is older than %s",
1109 cpp_token_as_text (pfile, &header));
1110 cpp_start_lookahead (pfile);
1111 cpp_get_token (pfile, &msg);
1112 cpp_stop_lookahead (pfile, msg.type == CPP_EOF);
29b10746
NB
1113 if (msg.type != CPP_EOF)
1114 do_diagnostic (pfile, WARNING, 0);
f3f751ad 1115 }
f3f751ad
NS
1116}
1117
a5c3cccd
NB
1118/* Check syntax is "(string-literal)". Returns 0 on success. */
1119static int
1120get__Pragma_string (pfile, string)
1121 cpp_reader *pfile;
1122 cpp_token *string;
1123{
1124 cpp_token paren;
1125
1126 cpp_get_token (pfile, &paren);
1127 if (paren.type != CPP_OPEN_PAREN)
1128 return 1;
1129
1130 cpp_get_token (pfile, string);
1131 if (string->type != CPP_STRING && string->type != CPP_WSTRING)
1132 return 1;
1133
1134 cpp_get_token (pfile, &paren);
1135 return paren.type != CPP_CLOSE_PAREN;
1136}
1137
1138/* Returns a malloced buffer containing a destringized cpp_string by
1139 removing the first \ of \" and \\ sequences. */
1140static unsigned char *
1141destringize (in, len)
1142 const cpp_string *in;
1143 unsigned int *len;
1144{
1145 const unsigned char *src, *limit;
1146 unsigned char *dest, *result;
1147
1148 dest = result = (unsigned char *) xmalloc (in->len);
1149 for (src = in->text, limit = src + in->len; src < limit;)
1150 {
1151 /* We know there is a character following the backslash. */
1152 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1153 src++;
1154 *dest++ = *src++;
1155 }
1156
1157 *len = dest - result;
1158 return result;
1159}
1160
1161void
1162_cpp_do__Pragma (pfile)
1163 cpp_reader *pfile;
1164{
1165 cpp_token string;
1166 unsigned char *buffer;
1167 unsigned int len;
1168
1169 if (get__Pragma_string (pfile, &string))
1170 {
1171 cpp_error (pfile, "_Pragma takes a parenthesized string literal");
1172 return;
1173 }
1174
1175 buffer = destringize (&string.val.str, &len);
1176 run_directive (pfile, T_PRAGMA, (char *) buffer, len, _("<_Pragma>"));
1177 free ((PTR) buffer);
1178}
1179
7f2935c7 1180/* Just ignore #sccs, on systems where we define it at all. */
07aa0b04 1181#ifdef SCCS_DIRECTIVE
711b8824 1182static void
168d3732 1183do_sccs (pfile)
041c3194 1184 cpp_reader *pfile ATTRIBUTE_UNUSED;
7f2935c7 1185{
7f2935c7 1186}
07aa0b04 1187#endif
1d0e51ba 1188
711b8824 1189static void
168d3732
ZW
1190do_ifdef (pfile)
1191 cpp_reader *pfile;
1192{
93c80368 1193 int skip = 1;
041c3194 1194
b528a07e 1195 if (! pfile->buffer->was_skipping)
93c80368
NB
1196 {
1197 const cpp_hashnode *node = lex_macro_node (pfile);
041c3194 1198
93c80368
NB
1199 if (node)
1200 skip = node->type != NT_MACRO;
1201 }
168d3732 1202
93c80368
NB
1203 push_conditional (pfile, skip, T_IFDEF, 0);
1204}
168d3732 1205
711b8824 1206static void
168d3732
ZW
1207do_ifndef (pfile)
1208 cpp_reader *pfile;
1209{
93c80368 1210 int skip = 1;
bfb9dc7f 1211 const cpp_hashnode *node = 0;
168d3732 1212
b528a07e 1213 if (! pfile->buffer->was_skipping)
5af7e2c2 1214 {
93c80368
NB
1215 node = lex_macro_node (pfile);
1216 if (node)
1217 skip = node->type == NT_MACRO;
5af7e2c2 1218 }
041c3194 1219
93c80368 1220 push_conditional (pfile, skip, T_IFNDEF, node);
7f2935c7
PB
1221}
1222
93c80368
NB
1223/* #if cooperates with parse_defined to handle multiple-include
1224 optimisations. If macro expansions or identifiers appear in the
1225 expression, we cannot treat it as a controlling conditional, since
1226 their values could change in the future. */
7f2935c7 1227
711b8824 1228static void
ea4a453b 1229do_if (pfile)
7f2935c7 1230 cpp_reader *pfile;
7f2935c7 1231{
93c80368 1232 int skip = 1;
ea4a453b 1233 const cpp_hashnode *cmacro = 0;
7f2935c7 1234
b528a07e 1235 if (! pfile->buffer->was_skipping)
ea4a453b 1236 {
93c80368
NB
1237 /* Controlling macro of #if ! defined () */
1238 pfile->mi_ind_cmacro = 0;
1239 skip = _cpp_parse_expr (pfile) == 0;
1240 cmacro = pfile->mi_ind_cmacro;
ea4a453b 1241 }
93c80368
NB
1242
1243 push_conditional (pfile, skip, T_IF, cmacro);
7f2935c7
PB
1244}
1245
b528a07e 1246/* Flip skipping state if appropriate and continue without changing
ea4a453b
ZW
1247 if_stack; this is so that the error message for missing #endif's
1248 etc. will point to the original #if. */
ed705a82 1249
711b8824 1250static void
ea4a453b
ZW
1251do_else (pfile)
1252 cpp_reader *pfile;
ed705a82 1253{
b528a07e
NB
1254 cpp_buffer *buffer = pfile->buffer;
1255 struct if_stack *ifs = buffer->if_stack;
ff2b53ef 1256
ea4a453b 1257 if (ifs == NULL)
93c80368
NB
1258 cpp_error (pfile, "#else without #if");
1259 else
ff2b53ef 1260 {
93c80368
NB
1261 if (ifs->type == T_ELSE)
1262 {
1263 cpp_error (pfile, "#else after #else");
1264 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1265 "the conditional began here");
1266 }
b528a07e
NB
1267 ifs->type = T_ELSE;
1268
1269 /* Buffer->was_skipping is 1 if all conditionals in this chain
1270 have been false, 2 if a conditional has been true. */
1271 if (! ifs->was_skipping && buffer->was_skipping != 2)
1272 buffer->was_skipping = ! buffer->was_skipping;
7f2935c7 1273
93c80368
NB
1274 /* Invalidate any controlling macro. */
1275 ifs->mi_cmacro = 0;
ff2b53ef 1276 }
93c80368
NB
1277
1278 check_eol (pfile);
7f2935c7
PB
1279}
1280
93c80368
NB
1281/* handle a #elif directive by not changing if_stack either. see the
1282 comment above do_else. */
7f2935c7 1283
711b8824 1284static void
ea4a453b 1285do_elif (pfile)
7f2935c7 1286 cpp_reader *pfile;
7f2935c7 1287{
b528a07e
NB
1288 cpp_buffer *buffer = pfile->buffer;
1289 struct if_stack *ifs = buffer->if_stack;
7f2935c7 1290
ea4a453b 1291 if (ifs == NULL)
b528a07e
NB
1292 cpp_error (pfile, "#elif without #if");
1293 else
40ea76de 1294 {
b528a07e
NB
1295 if (ifs->type == T_ELSE)
1296 {
1297 cpp_error (pfile, "#elif after #else");
1298 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1299 "the conditional began here");
1300 }
1301 ifs->type = T_ELIF;
93c80368 1302
b528a07e
NB
1303 /* Don't evaluate #elif if our higher level is skipping. */
1304 if (! ifs->was_skipping)
1305 {
1306 /* Buffer->was_skipping is 1 if all conditionals in this
1307 chain have been false, 2 if a conditional has been true. */
1308 if (buffer->was_skipping == 1)
1309 buffer->was_skipping = ! _cpp_parse_expr (pfile);
1310 else
1311 buffer->was_skipping = 2;
041c3194 1312
b528a07e
NB
1313 /* Invalidate any controlling macro. */
1314 ifs->mi_cmacro = 0;
1315 }
40ea76de 1316 }
7f2935c7
PB
1317}
1318
ea4a453b 1319/* #endif pops the if stack and resets pfile->skipping. */
7f2935c7 1320
711b8824 1321static void
168d3732 1322do_endif (pfile)
7f2935c7 1323 cpp_reader *pfile;
7f2935c7 1324{
b528a07e
NB
1325 cpp_buffer *buffer = pfile->buffer;
1326 struct if_stack *ifs = buffer->if_stack;
ea4a453b 1327
ea4a453b
ZW
1328 if (ifs == NULL)
1329 cpp_error (pfile, "#endif without #if");
7f2935c7
PB
1330 else
1331 {
93c80368
NB
1332 /* If potential control macro, we go back outside again. */
1333 if (ifs->next == 0 && ifs->mi_cmacro)
1334 {
1335 pfile->mi_state = MI_OUTSIDE;
1336 pfile->mi_cmacro = ifs->mi_cmacro;
1337 }
1338
b528a07e
NB
1339 buffer->if_stack = ifs->next;
1340 buffer->was_skipping = ifs->was_skipping;
c71f835b 1341 obstack_free (pfile->buffer_ob, ifs);
7f2935c7 1342 }
7f2935c7 1343
93c80368
NB
1344 check_eol (pfile);
1345}
041c3194 1346
ea4a453b
ZW
1347/* Push an if_stack entry and set pfile->skipping accordingly.
1348 If this is a #ifndef starting at the beginning of a file,
1349 CMACRO is the macro name tested by the #ifndef. */
1350
1351static void
1352push_conditional (pfile, skip, type, cmacro)
1353 cpp_reader *pfile;
1354 int skip;
1355 int type;
1356 const cpp_hashnode *cmacro;
1357{
1358 struct if_stack *ifs;
b528a07e 1359 cpp_buffer *buffer = pfile->buffer;
ea4a453b 1360
c71f835b 1361 ifs = xobnew (pfile->buffer_ob, struct if_stack);
93c80368 1362 ifs->pos = pfile->directive_pos;
b528a07e
NB
1363 ifs->next = buffer->if_stack;
1364 ifs->was_skipping = buffer->was_skipping;
ea4a453b 1365 ifs->type = type;
93c80368
NB
1366 if (pfile->mi_state == MI_OUTSIDE && pfile->mi_cmacro == 0)
1367 ifs->mi_cmacro = cmacro;
1368 else
1369 ifs->mi_cmacro = 0;
ea4a453b 1370
b528a07e
NB
1371 buffer->was_skipping = skip;
1372 buffer->if_stack = ifs;
782331f4 1373}
7061aa5a 1374
93c80368
NB
1375/* Read the tokens of the answer into the macro pool. Only commit the
1376 memory if we intend it as permanent storage, i.e. the #assert case.
1377 Returns 0 on success. */
1378
1379static int
1380parse_answer (pfile, answerp, type)
7f2935c7 1381 cpp_reader *pfile;
041c3194 1382 struct answer **answerp;
93c80368 1383 int type;
7f2935c7 1384{
93c80368
NB
1385 cpp_token paren, *token;
1386 struct answer *answer;
1387
1388 if (POOL_FRONT (&pfile->macro_pool) + sizeof (struct answer) >
1389 POOL_LIMIT (&pfile->macro_pool))
1390 _cpp_next_chunk (&pfile->macro_pool, sizeof (struct answer), 0);
1391 answer = (struct answer *) POOL_FRONT (&pfile->macro_pool);
1392 answer->count = 0;
1393
1394 /* In a conditional, it is legal to not have an open paren. We
1395 should save the following token in this case. */
1396 if (type == T_IF)
1397 cpp_start_lookahead (pfile);
1398 cpp_get_token (pfile, &paren);
1399 if (type == T_IF)
1400 cpp_stop_lookahead (pfile, paren.type == CPP_OPEN_PAREN);
1401
1402 /* If not a paren, see if we're OK. */
1403 if (paren.type != CPP_OPEN_PAREN)
041c3194 1404 {
93c80368
NB
1405 /* In a conditional no answer is a test for any answer. It
1406 could be followed by any token. */
1407 if (type == T_IF)
1408 return 0;
1409
1410 /* #unassert with no answer is valid - it removes all answers. */
1411 if (type == T_UNASSERT && paren.type == CPP_EOF)
1412 return 0;
15dad1d9 1413
041c3194 1414 cpp_error (pfile, "missing '(' after predicate");
93c80368 1415 return 1;
041c3194 1416 }
7061aa5a 1417
041c3194
ZW
1418 for (;;)
1419 {
93c80368
NB
1420 token = &answer->first[answer->count];
1421 /* Check we have room for the token. */
1422 if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
041c3194 1423 {
93c80368
NB
1424 _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1425 (unsigned char **) &answer);
1426 token = &answer->first[answer->count];
041c3194 1427 }
93c80368 1428
7f2f1a66 1429 cpp_get_token (pfile, token);
041c3194
ZW
1430 if (token->type == CPP_CLOSE_PAREN)
1431 break;
a7abcbbf 1432
93c80368 1433 if (token->type == CPP_EOF)
041c3194 1434 {
93c80368
NB
1435 cpp_error (pfile, "missing ')' to complete answer");
1436 return 1;
041c3194 1437 }
93c80368 1438 answer->count++;
041c3194 1439 }
15dad1d9 1440
93c80368 1441 if (answer->count == 0)
7061aa5a 1442 {
041c3194 1443 cpp_error (pfile, "predicate's answer is empty");
93c80368 1444 return 1;
7f2935c7 1445 }
041c3194
ZW
1446
1447 /* Drop whitespace at start. */
93c80368
NB
1448 answer->first->flags &= ~PREV_WHITE;
1449 *answerp = answer;
041c3194 1450
93c80368
NB
1451 if (type == T_ASSERT || type == T_UNASSERT)
1452 check_eol (pfile);
1453 return 0;
1454}
041c3194 1455
93c80368
NB
1456/* Parses an assertion, returning a pointer to the hash node of the
1457 predicate, or 0 on error. If an answer was supplied, it is placed
7f2f1a66 1458 in ANSWERP, otherwise it is set to 0. */
93c80368
NB
1459static cpp_hashnode *
1460parse_assertion (pfile, answerp, type)
1461 cpp_reader *pfile;
1462 struct answer **answerp;
1463 int type;
1464{
1465 cpp_hashnode *result = 0;
1466 cpp_token predicate;
1467
1468 /* We don't expand predicates or answers. */
1469 pfile->state.prevent_expansion++;
1470
1471 /* Use the permanent pool for storage (for the answers). */
1472 pfile->string_pool = &pfile->ident_pool;
1473
1474 *answerp = 0;
7f2f1a66 1475 cpp_get_token (pfile, &predicate);
93c80368
NB
1476 if (predicate.type == CPP_EOF)
1477 cpp_error (pfile, "assertion without predicate");
1478 else if (predicate.type != CPP_NAME)
1479 cpp_error (pfile, "predicate must be an identifier");
1480 else if (parse_answer (pfile, answerp, type) == 0)
1481 {
1482 unsigned int len = predicate.val.node->length;
1483 unsigned char *sym = alloca (len + 1);
041c3194 1484
93c80368
NB
1485 /* Prefix '#' to get it out of macro namespace. */
1486 sym[0] = '#';
1487 memcpy (sym + 1, predicate.val.node->name, len);
1488 result = cpp_lookup (pfile, sym, len + 1);
1489 }
7061aa5a 1490
93c80368
NB
1491 pfile->string_pool = &pfile->temp_string_pool;
1492 pfile->state.prevent_expansion--;
1493 return result;
7f2935c7 1494}
7061aa5a 1495
041c3194
ZW
1496/* Returns a pointer to the pointer to the answer in the answer chain,
1497 or a pointer to NULL if the answer is not in the chain. */
93c80368
NB
1498static struct answer **
1499find_answer (node, candidate)
041c3194 1500 cpp_hashnode *node;
93c80368 1501 const struct answer *candidate;
7f2935c7 1502{
93c80368 1503 unsigned int i;
041c3194 1504 struct answer **result;
7f2935c7 1505
041c3194 1506 for (result = &node->value.answers; *result; result = &(*result)->next)
93c80368
NB
1507 {
1508 struct answer *answer = *result;
1509
1510 if (answer->count == candidate->count)
1511 {
1512 for (i = 0; i < answer->count; i++)
1513 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1514 break;
1515
1516 if (i == answer->count)
1517 break;
1518 }
1519 }
ff2b53ef 1520
041c3194
ZW
1521 return result;
1522}
15dad1d9 1523
93c80368
NB
1524/* Test an assertion within a preprocessor conditional. Returns
1525 non-zero on failure, zero on success. On success, the result of
1526 the test is written into VALUE. */
1527int
1528_cpp_test_assertion (pfile, value)
1529 cpp_reader *pfile;
1530 int *value;
1531{
1532 struct answer *answer;
1533 cpp_hashnode *node;
1534
1535 node = parse_assertion (pfile, &answer, T_IF);
1536 if (node)
1537 *value = (node->type == NT_ASSERTION &&
1538 (answer == 0 || *find_answer (node, answer) != 0));
1539
1540 /* We don't commit the memory for the answer - it's temporary only. */
1541 return node == 0;
1542}
1543
711b8824 1544static void
041c3194
ZW
1545do_assert (pfile)
1546 cpp_reader *pfile;
1547{
1548 struct answer *new_answer;
1549 cpp_hashnode *node;
1550
93c80368 1551 node = parse_assertion (pfile, &new_answer, T_ASSERT);
041c3194 1552 if (node)
ff2b53ef 1553 {
93c80368
NB
1554 /* Place the new answer in the answer list. First check there
1555 is not a duplicate. */
041c3194 1556 new_answer->next = 0;
93c80368 1557 if (node->type == NT_ASSERTION)
041c3194 1558 {
93c80368
NB
1559 if (*find_answer (node, new_answer))
1560 {
1561 cpp_warning (pfile, "\"%s\" re-asserted", node->name + 1);
1562 return;
1563 }
041c3194
ZW
1564 new_answer->next = node->value.answers;
1565 }
93c80368 1566 node->type = NT_ASSERTION;
041c3194 1567 node->value.answers = new_answer;
93c80368
NB
1568 POOL_COMMIT (&pfile->macro_pool, (sizeof (struct answer)
1569 + (new_answer->count - 1)
1570 * sizeof (cpp_token)));
ff2b53ef 1571 }
041c3194 1572}
15dad1d9 1573
711b8824 1574static void
041c3194
ZW
1575do_unassert (pfile)
1576 cpp_reader *pfile;
1577{
1578 cpp_hashnode *node;
93c80368 1579 struct answer *answer;
041c3194 1580
93c80368
NB
1581 node = parse_assertion (pfile, &answer, T_UNASSERT);
1582 /* It isn't an error to #unassert something that isn't asserted. */
1583 if (node && node->type == NT_ASSERTION)
7061aa5a 1584 {
93c80368 1585 if (answer)
15dad1d9 1586 {
93c80368 1587 struct answer **p = find_answer (node, answer), *temp;
041c3194 1588
93c80368
NB
1589 /* Remove the answer from the list. */
1590 temp = *p;
1591 if (temp)
1592 *p = temp->next;
a7abcbbf 1593
93c80368
NB
1594 /* Did we free the last answer? */
1595 if (node->value.answers == 0)
1596 node->type = NT_VOID;
1597 }
1598 else
1599 _cpp_free_definition (node);
041c3194 1600 }
93c80368
NB
1601
1602 /* We don't commit the memory for the answer - it's temporary only. */
7f2935c7 1603}
7f2935c7 1604
45b966db
ZW
1605/* These are for -D, -U, -A. */
1606
1607/* Process the string STR as if it appeared as the body of a #define.
1608 If STR is just an identifier, define it with value 1.
1609 If STR has anything after the identifier, then it should
1610 be identifier=definition. */
1611
0b22d65c 1612void
45b966db 1613cpp_define (pfile, str)
0b22d65c 1614 cpp_reader *pfile;
7ceb3598 1615 const char *str;
0b22d65c 1616{
45b966db
ZW
1617 char *buf, *p;
1618 size_t count;
1619
45b966db
ZW
1620 /* Copy the entire option so we can modify it.
1621 Change the first "=" in the string to a space. If there is none,
86368122
NB
1622 tack " 1" on the end. */
1623
1624 /* Length including the null. */
1625 count = strlen (str);
1626 buf = (char *) alloca (count + 2);
1627 memcpy (buf, str, count);
1628
1629 p = strchr (str, '=');
45b966db 1630 if (p)
86368122 1631 buf[p - str] = ' ';
45b966db
ZW
1632 else
1633 {
86368122
NB
1634 buf[count++] = ' ';
1635 buf[count++] = '1';
0b22d65c 1636 }
cf4ed945 1637
86368122 1638 run_directive (pfile, T_DEFINE, buf, count, 0);
2c8f0515
ZW
1639}
1640
1641/* Slight variant of the above for use by initialize_builtins, which (a)
1642 knows how to set up the buffer itself, (b) needs a different "filename"
1643 tag. */
1644void
1645_cpp_define_builtin (pfile, str)
1646 cpp_reader *pfile;
1647 const char *str;
1648{
93c80368 1649 run_directive (pfile, T_DEFINE, str, strlen (str), _("<builtin>"));
45b966db 1650}
0f41302f 1651
45b966db
ZW
1652/* Process MACRO as if it appeared as the body of an #undef. */
1653void
1654cpp_undef (pfile, macro)
7f2935c7 1655 cpp_reader *pfile;
45b966db 1656 const char *macro;
7f2935c7 1657{
93c80368 1658 run_directive (pfile, T_UNDEF, macro, strlen (macro), 0);
7f2935c7
PB
1659}
1660
45b966db
ZW
1661/* Process the string STR as if it appeared as the body of a #assert. */
1662void
1663cpp_assert (pfile, str)
1664 cpp_reader *pfile;
1665 const char *str;
1666{
86368122 1667 handle_assertion (pfile, str, T_ASSERT);
45b966db 1668}
7f2935c7 1669
45b966db
ZW
1670/* Process STR as if it appeared as the body of an #unassert. */
1671void
1672cpp_unassert (pfile, str)
7f2935c7 1673 cpp_reader *pfile;
45b966db 1674 const char *str;
7f2935c7 1675{
86368122 1676 handle_assertion (pfile, str, T_UNASSERT);
45b966db 1677}
3fdc651f 1678
86368122
NB
1679/* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
1680static void
1681handle_assertion (pfile, str, type)
1682 cpp_reader *pfile;
1683 const char *str;
1684 int type;
1685{
1686 size_t count = strlen (str);
1687 const char *p = strchr (str, '=');
1688
1689 if (p)
1690 {
1691 /* Copy the entire option so we can modify it. Change the first
1692 "=" in the string to a '(', and tack a ')' on the end. */
1693 char *buf = (char *) alloca (count + 1);
1694
1695 memcpy (buf, str, count);
1696 buf[p - str] = '(';
1697 buf[count++] = ')';
1698 str = buf;
1699 }
1700
1701 run_directive (pfile, type, str, count, 0);
1702}
1703
93c80368
NB
1704/* Allocate a new cpp_buffer for PFILE, and push it on the input
1705 buffer stack. If BUFFER != NULL, then use the LENGTH characters in
1706 BUFFER as the new input buffer. Return the new buffer, or NULL on
1707 failure. */
c71f835b
ZW
1708
1709cpp_buffer *
1710cpp_push_buffer (pfile, buffer, length)
1711 cpp_reader *pfile;
1712 const U_CHAR *buffer;
1713 long length;
1714{
1715 cpp_buffer *buf = CPP_BUFFER (pfile);
1716 cpp_buffer *new;
1717 if (++pfile->buffer_stack_depth == CPP_STACK_MAX)
1718 {
d8090680 1719 cpp_fatal (pfile, "#include nested too deeply");
c71f835b
ZW
1720 return NULL;
1721 }
93c80368 1722
c71f835b 1723 new = xobnew (pfile->buffer_ob, cpp_buffer);
93c80368 1724 /* Clears, amongst other things, if_stack and mi_cmacro. */
c71f835b
ZW
1725 memset (new, 0, sizeof (cpp_buffer));
1726
93c80368 1727 pfile->lexer_pos.output_line = 1;
f9a0e96c 1728 new->line_base = new->buf = new->cur = buffer;
c71f835b
ZW
1729 new->rlimit = buffer + length;
1730 new->prev = buf;
0d9f234d 1731 new->pfile = pfile;
a5c3cccd
NB
1732 /* Preprocessed files don't do trigraph and escaped newline processing. */
1733 new->from_stage3 = CPP_OPTION (pfile, preprocessed);
cbcff6df 1734 /* No read ahead or extra char initially. */
0d9f234d 1735 new->read_ahead = EOF;
cbcff6df 1736 new->extra_char = EOF;
4c2b647d 1737 pfile->state.next_bol = 1;
c71f835b
ZW
1738
1739 CPP_BUFFER (pfile) = new;
1740 return new;
1741}
1742
1743cpp_buffer *
1744cpp_pop_buffer (pfile)
1745 cpp_reader *pfile;
1746{
b528a07e
NB
1747 cpp_buffer *buffer = pfile->buffer;
1748 struct if_stack *ifs = buffer->if_stack;
58fea6af 1749 int wfb;
c71f835b 1750
b528a07e
NB
1751 /* Walk back up the conditional stack till we reach its level at
1752 entry to this file, issuing error messages. */
1753 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
1754 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1755 "unterminated #%s", dtable[ifs->type].name);
1756
1757 wfb = (buffer->inc != 0);
58fea6af 1758 if (wfb)
b528a07e 1759 _cpp_pop_file_buffer (pfile, buffer);
c71f835b 1760
b528a07e
NB
1761 pfile->buffer = buffer->prev;
1762 obstack_free (pfile->buffer_ob, buffer);
c71f835b 1763 pfile->buffer_stack_depth--;
58fea6af 1764
b528a07e 1765 if (pfile->buffer && wfb && pfile->cb.leave_file)
58fea6af
ZW
1766 (*pfile->cb.leave_file) (pfile);
1767
b528a07e 1768 return pfile->buffer;
c71f835b
ZW
1769}
1770
1771#define obstack_chunk_alloc xmalloc
1772#define obstack_chunk_free free
1773void
1774_cpp_init_stacks (pfile)
1775 cpp_reader *pfile;
1776{
bfb9dc7f 1777 int i;
93c80368 1778 cpp_hashnode *node;
bfb9dc7f 1779
c71f835b
ZW
1780 pfile->buffer_ob = xnew (struct obstack);
1781 obstack_init (pfile->buffer_ob);
bfb9dc7f 1782
93c80368
NB
1783 /* Register the directives. */
1784 for (i = 1; i < N_DIRECTIVES; i++)
1785 {
1786 node = cpp_lookup (pfile, dtable[i - 1].name, dtable[i - 1].length);
1787 node->directive_index = i;
1788 }
c71f835b
ZW
1789}
1790
1791void
1792_cpp_cleanup_stacks (pfile)
1793 cpp_reader *pfile;
1794{
1795 obstack_free (pfile->buffer_ob, 0);
1796 free (pfile->buffer_ob);
1797}
This page took 1.063042 seconds and 5 git commands to generate.