]> gcc.gnu.org Git - gcc.git/blame - gcc/cpplib.c
cppfiles.c (stack_include_file): Push zero-length buffers in case of failure.
[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
fe6c2db9
NB
250 /* We don't skip for an assembler #. */
251 if (skip_line)
252 skip_rest_of_line (pfile);
253
8d9e9a08
NB
254 /* Restore pfile->skipping after skip_rest_of_line. Otherwise the
255 lexer might not return! */
256 pfile->skipping = buffer->was_skipping;
257
fe6c2db9
NB
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{
27e2564a
NB
721 cpp_buffer *buffer = pfile->buffer;
722 const char *filename = buffer->nominal_fname;
723 unsigned int lineno = buffer->lineno;
724 enum cpp_fc_reason reason = (enum cpp_fc_reason) -1;
93c80368 725 unsigned long new_lineno;
27e2564a 726 unsigned int cap;
93c80368
NB
727 cpp_token token;
728
27e2564a
NB
729 /* C99 raised the minimum limit on #line numbers. */
730 cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
731
93c80368 732 /* #line commands expand macros. */
7f2f1a66 733 cpp_get_token (pfile, &token);
93c80368
NB
734 if (token.type != CPP_NUMBER
735 || strtoul_for_line (token.val.str.text, token.val.str.len, &new_lineno))
7f2935c7 736 {
93c80368
NB
737 cpp_error (pfile, "\"%s\" after #line is not a positive integer",
738 cpp_token_as_text (pfile, &token));
9ec7291f 739 return;
6de1e2a9 740 }
7f2935c7 741
041c3194
ZW
742 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
743 cpp_pedwarn (pfile, "line number out of range");
7f2935c7 744
7f2f1a66 745 cpp_get_token (pfile, &token);
27e2564a 746 if (token.type == CPP_STRING)
5538ada6 747 {
93c80368
NB
748 char *fname;
749 unsigned int len;
750 int action_number = 0;
5538ada6 751
93c80368
NB
752 len = token.val.str.len;
753 fname = alloca (len + 1);
754 memcpy (fname, token.val.str.text, len);
755 fname[len] = '\0';
756
27e2564a 757 if (strcmp (fname, buffer->nominal_fname))
93c80368 758 {
27e2564a
NB
759 reason = FC_RENAME;
760 if (!strcmp (fname, buffer->inc->name))
761 buffer->nominal_fname = buffer->inc->name;
93c80368 762 else
27e2564a 763 buffer->nominal_fname = _cpp_fake_include (pfile, fname);
93c80368 764 }
941e09b6 765
93c80368
NB
766 if (read_line_number (pfile, &action_number) != 0)
767 {
9232b7d9 768 if (! CPP_OPTION (pfile, preprocessed) && CPP_PEDANTIC (pfile))
93c80368 769 cpp_pedwarn (pfile, "extra tokens at end of #line directive");
ff2b53ef 770
93c80368
NB
771 if (action_number == 1)
772 {
27e2564a 773 reason = FC_ENTER;
614c7d37 774 cpp_make_system_header (pfile, 0, 0);
93c80368
NB
775 read_line_number (pfile, &action_number);
776 }
777 else if (action_number == 2)
778 {
27e2564a 779 reason = FC_LEAVE;
614c7d37 780 cpp_make_system_header (pfile, 0, 0);
93c80368
NB
781 read_line_number (pfile, &action_number);
782 }
783 if (action_number == 3)
784 {
614c7d37 785 cpp_make_system_header (pfile, 1, 0);
93c80368
NB
786 read_line_number (pfile, &action_number);
787 }
788 if (action_number == 4)
789 {
614c7d37 790 cpp_make_system_header (pfile, 1, 1);
93c80368
NB
791 read_line_number (pfile, &action_number);
792 }
793 }
27e2564a 794
93c80368 795 check_eol (pfile);
041c3194 796 }
27e2564a
NB
797 else if (token.type != CPP_EOF)
798 {
799 cpp_error (pfile, "\"%s\" is not a valid filename",
800 cpp_token_as_text (pfile, &token));
801 return;
802 }
7f2935c7 803
93c80368 804 /* Our line number is incremented after the directive is processed. */
27e2564a
NB
805 buffer->lineno = new_lineno - 1;
806 if (reason != (enum cpp_fc_reason) -1)
807 _cpp_do_file_change (pfile, reason, filename, lineno);
808}
809
810/* Arrange the file_change callback. The assumption is that the
811 current buffer's lineno is one less than the next line. */
812void
813_cpp_do_file_change (pfile, reason, from_file, from_lineno)
814 cpp_reader *pfile;
815 enum cpp_fc_reason reason;
816 const char *from_file;
817 unsigned int from_lineno;
818{
819 if (pfile->cb.change_file)
820 {
821 cpp_file_change fc;
822 cpp_buffer *buffer = pfile->buffer;
823
824 fc.reason = reason;
825 fc.from.filename = from_file;
826 fc.from.lineno = from_lineno;
827 fc.to.filename = buffer->nominal_fname;
828 fc.to.lineno = buffer->lineno + 1;
829 fc.sysp = buffer->inc->sysp;
830 fc.externc = CPP_OPTION (pfile, cplusplus) && buffer->inc->sysp == 2;
831 pfile->cb.change_file (pfile, &fc);
832 }
7f2935c7 833}
941e09b6 834
7f2935c7 835/*
838f313b
NB
836 * Report a warning or error detected by the program we are
837 * processing. Use the directive's tokens in the error message.
7f2935c7
PB
838 */
839
711b8824 840static void
29b10746 841do_diagnostic (pfile, code, print_dir)
7f2935c7 842 cpp_reader *pfile;
838f313b 843 enum error_type code;
29b10746 844 int print_dir;
7f2935c7 845{
93c80368 846 if (_cpp_begin_message (pfile, code, NULL, 0))
58fea6af 847 {
29b10746
NB
848 if (print_dir)
849 fprintf (stderr, "#%s ", pfile->directive->name);
93c80368
NB
850 pfile->state.prevent_expansion++;
851 cpp_output_line (pfile, stderr);
852 pfile->state.prevent_expansion--;
58fea6af 853 }
7f2935c7
PB
854}
855
838f313b
NB
856static void
857do_error (pfile)
858 cpp_reader *pfile;
859{
29b10746 860 do_diagnostic (pfile, ERROR, 1);
838f313b 861}
7f2935c7 862
711b8824 863static void
168d3732 864do_warning (pfile)
7f2935c7 865 cpp_reader *pfile;
7f2935c7 866{
29b10746 867 do_diagnostic (pfile, WARNING, 1);
7f2935c7
PB
868}
869
a2a76ce7 870/* Report program identification. */
7f2935c7 871
711b8824 872static void
168d3732 873do_ident (pfile)
7f2935c7 874 cpp_reader *pfile;
7f2935c7 875{
93c80368 876 cpp_token str;
58fea6af 877
7f2f1a66 878 cpp_get_token (pfile, &str);
93c80368
NB
879 if (str.type != CPP_STRING)
880 cpp_error (pfile, "invalid #ident");
881 else if (pfile->cb.ident)
882 (*pfile->cb.ident) (pfile, &str.val.str);
a2a76ce7 883
93c80368 884 check_eol (pfile);
7f2935c7
PB
885}
886
a2a76ce7
ZW
887/* Pragmata handling. We handle some of these, and pass the rest on
888 to the front end. C99 defines three pragmas and says that no macro
889 expansion is to be performed on them; whether or not macro
890 expansion happens for other pragmas is implementation defined.
a949941c 891 This implementation never macro-expands the text after #pragma. */
a2a76ce7
ZW
892
893/* Sub-handlers for the pragmas needing treatment here.
894 They return 1 if the token buffer is to be popped, 0 if not. */
82443371
NS
895struct pragma_entry
896{
58fea6af 897 struct pragma_entry *next;
041c3194 898 const char *name;
58fea6af
ZW
899 size_t len;
900 int isnspace;
901 union {
902 void (*handler) PARAMS ((cpp_reader *));
903 struct pragma_entry *space;
904 } u;
82443371
NS
905};
906
58fea6af
ZW
907void
908cpp_register_pragma (pfile, space, name, handler)
909 cpp_reader *pfile;
910 const char *space;
911 const char *name;
912 void (*handler) PARAMS ((cpp_reader *));
82443371 913{
58fea6af
ZW
914 struct pragma_entry **x, *new;
915 size_t len;
82443371 916
58fea6af
ZW
917 x = &pfile->pragmas;
918 if (space)
919 {
920 struct pragma_entry *p = pfile->pragmas;
921 len = strlen (space);
922 while (p)
923 {
924 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
925 {
926 x = &p->u.space;
927 goto found;
928 }
929 p = p->next;
930 }
931 cpp_ice (pfile, "unknown #pragma namespace %s", space);
932 return;
933 }
934
935 found:
936 new = xnew (struct pragma_entry);
937 new->name = name;
938 new->len = strlen (name);
939 new->isnspace = 0;
940 new->u.handler = handler;
941
942 new->next = *x;
943 *x = new;
944}
82443371 945
58fea6af
ZW
946void
947cpp_register_pragma_space (pfile, space)
82443371 948 cpp_reader *pfile;
58fea6af 949 const char *space;
82443371 950{
58fea6af
ZW
951 struct pragma_entry *new;
952 const struct pragma_entry *p = pfile->pragmas;
953 size_t len = strlen (space);
954
955 while (p)
956 {
957 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
6e19bb38
ZW
958 /* Multiple different callers are allowed to register the same
959 namespace. */
960 return;
58fea6af
ZW
961 p = p->next;
962 }
963
964 new = xnew (struct pragma_entry);
965 new->name = space;
966 new->len = len;
967 new->isnspace = 1;
968 new->u.space = 0;
969
970 new->next = pfile->pragmas;
971 pfile->pragmas = new;
972}
bfb9dc7f 973
58fea6af
ZW
974void
975_cpp_init_internal_pragmas (pfile)
976 cpp_reader *pfile;
977{
978 /* top level */
979 cpp_register_pragma (pfile, 0, "poison", do_pragma_poison);
980 cpp_register_pragma (pfile, 0, "once", do_pragma_once);
981
982 /* GCC namespace */
983 cpp_register_pragma_space (pfile, "GCC");
984
985 cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
986 cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
987 cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
82443371 988}
7f2935c7 989
711b8824 990static void
168d3732 991do_pragma (pfile)
7f2935c7 992 cpp_reader *pfile;
7f2935c7 993{
58fea6af 994 const struct pragma_entry *p;
93c80368 995 cpp_token tok;
58fea6af
ZW
996 const cpp_hashnode *node;
997 const U_CHAR *name;
998 size_t len;
93c80368 999 int drop = 0;
add7091b 1000
58fea6af 1001 p = pfile->pragmas;
93c80368
NB
1002 pfile->state.prevent_expansion++;
1003 cpp_start_lookahead (pfile);
58fea6af
ZW
1004
1005 new_space:
93c80368
NB
1006 cpp_get_token (pfile, &tok);
1007 if (tok.type == CPP_NAME)
0172e2bc 1008 {
93c80368
NB
1009 node = tok.val.node;
1010 name = node->name;
1011 len = node->length;
1012 while (p)
58fea6af 1013 {
93c80368 1014 if (strlen (p->name) == len && !memcmp (p->name, name, len))
58fea6af 1015 {
93c80368
NB
1016 if (p->isnspace)
1017 {
1018 p = p->u.space;
1019 goto new_space;
1020 }
1021 else
1022 {
1023 (*p->u.handler) (pfile);
1024 drop = 1;
1025 break;
1026 }
58fea6af 1027 }
93c80368 1028 p = p->next;
58fea6af 1029 }
58fea6af 1030 }
041c3194 1031
93c80368
NB
1032 cpp_stop_lookahead (pfile, drop);
1033 pfile->state.prevent_expansion--;
1034
1035 if (!drop && pfile->cb.def_pragma)
58fea6af 1036 (*pfile->cb.def_pragma) (pfile);
82443371
NS
1037}
1038
58fea6af 1039static void
a2a76ce7
ZW
1040do_pragma_once (pfile)
1041 cpp_reader *pfile;
1042{
1043 cpp_buffer *ip = CPP_BUFFER (pfile);
1044
317639a8
BC
1045 cpp_warning (pfile, "#pragma once is obsolete");
1046
38b24ee2 1047 if (CPP_PREV_BUFFER (ip) == NULL)
93c80368 1048 cpp_warning (pfile, "#pragma once in main file");
a2a76ce7 1049 else
c31a6508 1050 ip->inc->cmacro = NEVER_REREAD;
93c80368
NB
1051
1052 check_eol (pfile);
a2a76ce7 1053}
fc009f96 1054
58fea6af 1055static void
a2a76ce7
ZW
1056do_pragma_poison (pfile)
1057 cpp_reader *pfile;
1058{
1059 /* Poison these symbols so that all subsequent usage produces an
1060 error message. */
93c80368 1061 cpp_token tok;
f8f769ea 1062 cpp_hashnode *hp;
a2a76ce7 1063
93c80368 1064 pfile->state.poisoned_ok = 1;
a2a76ce7
ZW
1065 for (;;)
1066 {
93c80368
NB
1067 _cpp_lex_token (pfile, &tok);
1068 if (tok.type == CPP_EOF)
a2a76ce7 1069 break;
93c80368 1070 if (tok.type != CPP_NAME)
fc009f96 1071 {
93c80368
NB
1072 cpp_error (pfile, "invalid #pragma GCC poison directive");
1073 break;
fc009f96
GK
1074 }
1075
93c80368
NB
1076 hp = tok.val.node;
1077 if (hp->flags & NODE_POISONED)
1078 continue;
1079
1080 if (hp->type == NT_MACRO)
1081 cpp_warning (pfile, "poisoning existing macro \"%s\"", hp->name);
1082 _cpp_free_definition (hp);
1083 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
fc009f96 1084 }
93c80368 1085 pfile->state.poisoned_ok = 0;
58fea6af 1086
93c80368
NB
1087#if 0 /* Doesn't quite work yet. */
1088 if (tok.type == CPP_EOF && pfile->cb.poison)
58fea6af 1089 (*pfile->cb.poison) (pfile);
93c80368 1090#endif
7f2935c7 1091}
2c0b35cb
ZW
1092
1093/* Mark the current header as a system header. This will suppress
1094 some categories of warnings (notably those from -pedantic). It is
1095 intended for use in system libraries that cannot be implemented in
1096 conforming C, but cannot be certain that their headers appear in a
1097 system include directory. To prevent abuse, it is rejected in the
1098 primary source file. */
58fea6af 1099static void
2c0b35cb
ZW
1100do_pragma_system_header (pfile)
1101 cpp_reader *pfile;
1102{
614c7d37
NB
1103 cpp_buffer *buffer = pfile->buffer;
1104
1105 if (buffer->prev == 0)
1106 cpp_warning (pfile, "#pragma system_header ignored outside include file");
2c0b35cb 1107 else
614c7d37 1108 cpp_make_system_header (pfile, 1, 0);
93c80368
NB
1109
1110 check_eol (pfile);
2c0b35cb 1111}
f3f751ad
NS
1112
1113/* Check the modified date of the current include file against a specified
1114 file. Issue a diagnostic, if the specified file is newer. We use this to
1115 determine if a fixed header should be refixed. */
58fea6af 1116static void
f3f751ad
NS
1117do_pragma_dependency (pfile)
1118 cpp_reader *pfile;
1119{
93c80368
NB
1120 cpp_token header, msg;
1121 int ordering;
041c3194 1122
93c80368 1123 if (parse_include (pfile, &header))
58fea6af 1124 return;
041c3194 1125
93c80368 1126 ordering = _cpp_compare_file_date (pfile, &header);
f3f751ad 1127 if (ordering < 0)
93c80368
NB
1128 cpp_warning (pfile, "cannot find source %s",
1129 cpp_token_as_text (pfile, &header));
f3f751ad
NS
1130 else if (ordering > 0)
1131 {
93c80368
NB
1132 cpp_warning (pfile, "current file is older than %s",
1133 cpp_token_as_text (pfile, &header));
1134 cpp_start_lookahead (pfile);
1135 cpp_get_token (pfile, &msg);
1136 cpp_stop_lookahead (pfile, msg.type == CPP_EOF);
29b10746
NB
1137 if (msg.type != CPP_EOF)
1138 do_diagnostic (pfile, WARNING, 0);
f3f751ad 1139 }
f3f751ad
NS
1140}
1141
a5c3cccd
NB
1142/* Check syntax is "(string-literal)". Returns 0 on success. */
1143static int
1144get__Pragma_string (pfile, string)
1145 cpp_reader *pfile;
1146 cpp_token *string;
1147{
1148 cpp_token paren;
1149
1150 cpp_get_token (pfile, &paren);
1151 if (paren.type != CPP_OPEN_PAREN)
1152 return 1;
1153
1154 cpp_get_token (pfile, string);
1155 if (string->type != CPP_STRING && string->type != CPP_WSTRING)
1156 return 1;
1157
1158 cpp_get_token (pfile, &paren);
1159 return paren.type != CPP_CLOSE_PAREN;
1160}
1161
1162/* Returns a malloced buffer containing a destringized cpp_string by
1163 removing the first \ of \" and \\ sequences. */
1164static unsigned char *
1165destringize (in, len)
1166 const cpp_string *in;
1167 unsigned int *len;
1168{
1169 const unsigned char *src, *limit;
1170 unsigned char *dest, *result;
1171
1172 dest = result = (unsigned char *) xmalloc (in->len);
1173 for (src = in->text, limit = src + in->len; src < limit;)
1174 {
1175 /* We know there is a character following the backslash. */
1176 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1177 src++;
1178 *dest++ = *src++;
1179 }
1180
1181 *len = dest - result;
1182 return result;
1183}
1184
1185void
1186_cpp_do__Pragma (pfile)
1187 cpp_reader *pfile;
1188{
1189 cpp_token string;
1190 unsigned char *buffer;
1191 unsigned int len;
1192
1193 if (get__Pragma_string (pfile, &string))
1194 {
1195 cpp_error (pfile, "_Pragma takes a parenthesized string literal");
1196 return;
1197 }
1198
1199 buffer = destringize (&string.val.str, &len);
1200 run_directive (pfile, T_PRAGMA, (char *) buffer, len, _("<_Pragma>"));
1201 free ((PTR) buffer);
1202}
1203
7f2935c7 1204/* Just ignore #sccs, on systems where we define it at all. */
07aa0b04 1205#ifdef SCCS_DIRECTIVE
711b8824 1206static void
168d3732 1207do_sccs (pfile)
041c3194 1208 cpp_reader *pfile ATTRIBUTE_UNUSED;
7f2935c7 1209{
7f2935c7 1210}
07aa0b04 1211#endif
1d0e51ba 1212
711b8824 1213static void
168d3732
ZW
1214do_ifdef (pfile)
1215 cpp_reader *pfile;
1216{
93c80368 1217 int skip = 1;
041c3194 1218
b528a07e 1219 if (! pfile->buffer->was_skipping)
93c80368
NB
1220 {
1221 const cpp_hashnode *node = lex_macro_node (pfile);
041c3194 1222
93c80368
NB
1223 if (node)
1224 skip = node->type != NT_MACRO;
b43db0b3
GK
1225
1226 if (node)
1227 check_eol (pfile);
93c80368 1228 }
168d3732 1229
93c80368
NB
1230 push_conditional (pfile, skip, T_IFDEF, 0);
1231}
168d3732 1232
711b8824 1233static void
168d3732
ZW
1234do_ifndef (pfile)
1235 cpp_reader *pfile;
1236{
93c80368 1237 int skip = 1;
bfb9dc7f 1238 const cpp_hashnode *node = 0;
168d3732 1239
b528a07e 1240 if (! pfile->buffer->was_skipping)
5af7e2c2 1241 {
93c80368
NB
1242 node = lex_macro_node (pfile);
1243 if (node)
1244 skip = node->type == NT_MACRO;
b43db0b3
GK
1245
1246 if (node)
1247 check_eol (pfile);
5af7e2c2 1248 }
041c3194 1249
93c80368 1250 push_conditional (pfile, skip, T_IFNDEF, node);
7f2935c7
PB
1251}
1252
93c80368
NB
1253/* #if cooperates with parse_defined to handle multiple-include
1254 optimisations. If macro expansions or identifiers appear in the
1255 expression, we cannot treat it as a controlling conditional, since
1256 their values could change in the future. */
7f2935c7 1257
711b8824 1258static void
ea4a453b 1259do_if (pfile)
7f2935c7 1260 cpp_reader *pfile;
7f2935c7 1261{
93c80368 1262 int skip = 1;
ea4a453b 1263 const cpp_hashnode *cmacro = 0;
7f2935c7 1264
b528a07e 1265 if (! pfile->buffer->was_skipping)
ea4a453b 1266 {
93c80368
NB
1267 /* Controlling macro of #if ! defined () */
1268 pfile->mi_ind_cmacro = 0;
1269 skip = _cpp_parse_expr (pfile) == 0;
1270 cmacro = pfile->mi_ind_cmacro;
ea4a453b 1271 }
93c80368
NB
1272
1273 push_conditional (pfile, skip, T_IF, cmacro);
7f2935c7
PB
1274}
1275
b528a07e 1276/* Flip skipping state if appropriate and continue without changing
ea4a453b
ZW
1277 if_stack; this is so that the error message for missing #endif's
1278 etc. will point to the original #if. */
ed705a82 1279
711b8824 1280static void
ea4a453b
ZW
1281do_else (pfile)
1282 cpp_reader *pfile;
ed705a82 1283{
b528a07e
NB
1284 cpp_buffer *buffer = pfile->buffer;
1285 struct if_stack *ifs = buffer->if_stack;
ff2b53ef 1286
ea4a453b 1287 if (ifs == NULL)
93c80368
NB
1288 cpp_error (pfile, "#else without #if");
1289 else
ff2b53ef 1290 {
93c80368
NB
1291 if (ifs->type == T_ELSE)
1292 {
1293 cpp_error (pfile, "#else after #else");
1294 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1295 "the conditional began here");
1296 }
b528a07e
NB
1297 ifs->type = T_ELSE;
1298
1299 /* Buffer->was_skipping is 1 if all conditionals in this chain
1300 have been false, 2 if a conditional has been true. */
1301 if (! ifs->was_skipping && buffer->was_skipping != 2)
1302 buffer->was_skipping = ! buffer->was_skipping;
7f2935c7 1303
93c80368
NB
1304 /* Invalidate any controlling macro. */
1305 ifs->mi_cmacro = 0;
ff2b53ef 1306 }
93c80368
NB
1307
1308 check_eol (pfile);
7f2935c7
PB
1309}
1310
93c80368
NB
1311/* handle a #elif directive by not changing if_stack either. see the
1312 comment above do_else. */
7f2935c7 1313
711b8824 1314static void
ea4a453b 1315do_elif (pfile)
7f2935c7 1316 cpp_reader *pfile;
7f2935c7 1317{
b528a07e
NB
1318 cpp_buffer *buffer = pfile->buffer;
1319 struct if_stack *ifs = buffer->if_stack;
7f2935c7 1320
ea4a453b 1321 if (ifs == NULL)
b528a07e
NB
1322 cpp_error (pfile, "#elif without #if");
1323 else
40ea76de 1324 {
b528a07e
NB
1325 if (ifs->type == T_ELSE)
1326 {
1327 cpp_error (pfile, "#elif after #else");
1328 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1329 "the conditional began here");
1330 }
1331 ifs->type = T_ELIF;
93c80368 1332
b528a07e
NB
1333 /* Don't evaluate #elif if our higher level is skipping. */
1334 if (! ifs->was_skipping)
1335 {
1336 /* Buffer->was_skipping is 1 if all conditionals in this
1337 chain have been false, 2 if a conditional has been true. */
1338 if (buffer->was_skipping == 1)
1339 buffer->was_skipping = ! _cpp_parse_expr (pfile);
1340 else
1341 buffer->was_skipping = 2;
041c3194 1342
b528a07e
NB
1343 /* Invalidate any controlling macro. */
1344 ifs->mi_cmacro = 0;
1345 }
40ea76de 1346 }
7f2935c7
PB
1347}
1348
ea4a453b 1349/* #endif pops the if stack and resets pfile->skipping. */
7f2935c7 1350
711b8824 1351static void
168d3732 1352do_endif (pfile)
7f2935c7 1353 cpp_reader *pfile;
7f2935c7 1354{
b528a07e
NB
1355 cpp_buffer *buffer = pfile->buffer;
1356 struct if_stack *ifs = buffer->if_stack;
ea4a453b 1357
ea4a453b
ZW
1358 if (ifs == NULL)
1359 cpp_error (pfile, "#endif without #if");
7f2935c7
PB
1360 else
1361 {
93c80368
NB
1362 /* If potential control macro, we go back outside again. */
1363 if (ifs->next == 0 && ifs->mi_cmacro)
1364 {
1365 pfile->mi_state = MI_OUTSIDE;
1366 pfile->mi_cmacro = ifs->mi_cmacro;
1367 }
1368
b528a07e
NB
1369 buffer->if_stack = ifs->next;
1370 buffer->was_skipping = ifs->was_skipping;
c71f835b 1371 obstack_free (pfile->buffer_ob, ifs);
7f2935c7 1372 }
7f2935c7 1373
93c80368
NB
1374 check_eol (pfile);
1375}
041c3194 1376
ea4a453b
ZW
1377/* Push an if_stack entry and set pfile->skipping accordingly.
1378 If this is a #ifndef starting at the beginning of a file,
1379 CMACRO is the macro name tested by the #ifndef. */
1380
1381static void
1382push_conditional (pfile, skip, type, cmacro)
1383 cpp_reader *pfile;
1384 int skip;
1385 int type;
1386 const cpp_hashnode *cmacro;
1387{
1388 struct if_stack *ifs;
b528a07e 1389 cpp_buffer *buffer = pfile->buffer;
ea4a453b 1390
c71f835b 1391 ifs = xobnew (pfile->buffer_ob, struct if_stack);
93c80368 1392 ifs->pos = pfile->directive_pos;
b528a07e
NB
1393 ifs->next = buffer->if_stack;
1394 ifs->was_skipping = buffer->was_skipping;
ea4a453b 1395 ifs->type = type;
93c80368
NB
1396 if (pfile->mi_state == MI_OUTSIDE && pfile->mi_cmacro == 0)
1397 ifs->mi_cmacro = cmacro;
1398 else
1399 ifs->mi_cmacro = 0;
ea4a453b 1400
b528a07e
NB
1401 buffer->was_skipping = skip;
1402 buffer->if_stack = ifs;
782331f4 1403}
7061aa5a 1404
93c80368
NB
1405/* Read the tokens of the answer into the macro pool. Only commit the
1406 memory if we intend it as permanent storage, i.e. the #assert case.
1407 Returns 0 on success. */
1408
1409static int
1410parse_answer (pfile, answerp, type)
7f2935c7 1411 cpp_reader *pfile;
041c3194 1412 struct answer **answerp;
93c80368 1413 int type;
7f2935c7 1414{
93c80368
NB
1415 cpp_token paren, *token;
1416 struct answer *answer;
1417
1418 if (POOL_FRONT (&pfile->macro_pool) + sizeof (struct answer) >
1419 POOL_LIMIT (&pfile->macro_pool))
1420 _cpp_next_chunk (&pfile->macro_pool, sizeof (struct answer), 0);
1421 answer = (struct answer *) POOL_FRONT (&pfile->macro_pool);
1422 answer->count = 0;
1423
1424 /* In a conditional, it is legal to not have an open paren. We
1425 should save the following token in this case. */
1426 if (type == T_IF)
1427 cpp_start_lookahead (pfile);
1428 cpp_get_token (pfile, &paren);
1429 if (type == T_IF)
1430 cpp_stop_lookahead (pfile, paren.type == CPP_OPEN_PAREN);
1431
1432 /* If not a paren, see if we're OK. */
1433 if (paren.type != CPP_OPEN_PAREN)
041c3194 1434 {
93c80368
NB
1435 /* In a conditional no answer is a test for any answer. It
1436 could be followed by any token. */
1437 if (type == T_IF)
1438 return 0;
1439
1440 /* #unassert with no answer is valid - it removes all answers. */
1441 if (type == T_UNASSERT && paren.type == CPP_EOF)
1442 return 0;
15dad1d9 1443
041c3194 1444 cpp_error (pfile, "missing '(' after predicate");
93c80368 1445 return 1;
041c3194 1446 }
7061aa5a 1447
041c3194
ZW
1448 for (;;)
1449 {
93c80368
NB
1450 token = &answer->first[answer->count];
1451 /* Check we have room for the token. */
1452 if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
041c3194 1453 {
93c80368
NB
1454 _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1455 (unsigned char **) &answer);
1456 token = &answer->first[answer->count];
041c3194 1457 }
93c80368 1458
7f2f1a66 1459 cpp_get_token (pfile, token);
041c3194
ZW
1460 if (token->type == CPP_CLOSE_PAREN)
1461 break;
a7abcbbf 1462
93c80368 1463 if (token->type == CPP_EOF)
041c3194 1464 {
93c80368
NB
1465 cpp_error (pfile, "missing ')' to complete answer");
1466 return 1;
041c3194 1467 }
93c80368 1468 answer->count++;
041c3194 1469 }
15dad1d9 1470
93c80368 1471 if (answer->count == 0)
7061aa5a 1472 {
041c3194 1473 cpp_error (pfile, "predicate's answer is empty");
93c80368 1474 return 1;
7f2935c7 1475 }
041c3194
ZW
1476
1477 /* Drop whitespace at start. */
93c80368
NB
1478 answer->first->flags &= ~PREV_WHITE;
1479 *answerp = answer;
041c3194 1480
93c80368
NB
1481 if (type == T_ASSERT || type == T_UNASSERT)
1482 check_eol (pfile);
1483 return 0;
1484}
041c3194 1485
93c80368
NB
1486/* Parses an assertion, returning a pointer to the hash node of the
1487 predicate, or 0 on error. If an answer was supplied, it is placed
7f2f1a66 1488 in ANSWERP, otherwise it is set to 0. */
93c80368
NB
1489static cpp_hashnode *
1490parse_assertion (pfile, answerp, type)
1491 cpp_reader *pfile;
1492 struct answer **answerp;
1493 int type;
1494{
1495 cpp_hashnode *result = 0;
1496 cpp_token predicate;
1497
1498 /* We don't expand predicates or answers. */
1499 pfile->state.prevent_expansion++;
1500
1501 /* Use the permanent pool for storage (for the answers). */
1502 pfile->string_pool = &pfile->ident_pool;
1503
1504 *answerp = 0;
7f2f1a66 1505 cpp_get_token (pfile, &predicate);
93c80368
NB
1506 if (predicate.type == CPP_EOF)
1507 cpp_error (pfile, "assertion without predicate");
1508 else if (predicate.type != CPP_NAME)
1509 cpp_error (pfile, "predicate must be an identifier");
1510 else if (parse_answer (pfile, answerp, type) == 0)
1511 {
1512 unsigned int len = predicate.val.node->length;
1513 unsigned char *sym = alloca (len + 1);
041c3194 1514
93c80368
NB
1515 /* Prefix '#' to get it out of macro namespace. */
1516 sym[0] = '#';
1517 memcpy (sym + 1, predicate.val.node->name, len);
1518 result = cpp_lookup (pfile, sym, len + 1);
1519 }
7061aa5a 1520
93c80368
NB
1521 pfile->string_pool = &pfile->temp_string_pool;
1522 pfile->state.prevent_expansion--;
1523 return result;
7f2935c7 1524}
7061aa5a 1525
041c3194
ZW
1526/* Returns a pointer to the pointer to the answer in the answer chain,
1527 or a pointer to NULL if the answer is not in the chain. */
93c80368
NB
1528static struct answer **
1529find_answer (node, candidate)
041c3194 1530 cpp_hashnode *node;
93c80368 1531 const struct answer *candidate;
7f2935c7 1532{
93c80368 1533 unsigned int i;
041c3194 1534 struct answer **result;
7f2935c7 1535
041c3194 1536 for (result = &node->value.answers; *result; result = &(*result)->next)
93c80368
NB
1537 {
1538 struct answer *answer = *result;
1539
1540 if (answer->count == candidate->count)
1541 {
1542 for (i = 0; i < answer->count; i++)
1543 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1544 break;
1545
1546 if (i == answer->count)
1547 break;
1548 }
1549 }
ff2b53ef 1550
041c3194
ZW
1551 return result;
1552}
15dad1d9 1553
93c80368
NB
1554/* Test an assertion within a preprocessor conditional. Returns
1555 non-zero on failure, zero on success. On success, the result of
1556 the test is written into VALUE. */
1557int
1558_cpp_test_assertion (pfile, value)
1559 cpp_reader *pfile;
1560 int *value;
1561{
1562 struct answer *answer;
1563 cpp_hashnode *node;
1564
1565 node = parse_assertion (pfile, &answer, T_IF);
1566 if (node)
1567 *value = (node->type == NT_ASSERTION &&
1568 (answer == 0 || *find_answer (node, answer) != 0));
1569
1570 /* We don't commit the memory for the answer - it's temporary only. */
1571 return node == 0;
1572}
1573
711b8824 1574static void
041c3194
ZW
1575do_assert (pfile)
1576 cpp_reader *pfile;
1577{
1578 struct answer *new_answer;
1579 cpp_hashnode *node;
1580
93c80368 1581 node = parse_assertion (pfile, &new_answer, T_ASSERT);
041c3194 1582 if (node)
ff2b53ef 1583 {
93c80368
NB
1584 /* Place the new answer in the answer list. First check there
1585 is not a duplicate. */
041c3194 1586 new_answer->next = 0;
93c80368 1587 if (node->type == NT_ASSERTION)
041c3194 1588 {
93c80368
NB
1589 if (*find_answer (node, new_answer))
1590 {
1591 cpp_warning (pfile, "\"%s\" re-asserted", node->name + 1);
1592 return;
1593 }
041c3194
ZW
1594 new_answer->next = node->value.answers;
1595 }
93c80368 1596 node->type = NT_ASSERTION;
041c3194 1597 node->value.answers = new_answer;
93c80368
NB
1598 POOL_COMMIT (&pfile->macro_pool, (sizeof (struct answer)
1599 + (new_answer->count - 1)
1600 * sizeof (cpp_token)));
ff2b53ef 1601 }
041c3194 1602}
15dad1d9 1603
711b8824 1604static void
041c3194
ZW
1605do_unassert (pfile)
1606 cpp_reader *pfile;
1607{
1608 cpp_hashnode *node;
93c80368 1609 struct answer *answer;
041c3194 1610
93c80368
NB
1611 node = parse_assertion (pfile, &answer, T_UNASSERT);
1612 /* It isn't an error to #unassert something that isn't asserted. */
1613 if (node && node->type == NT_ASSERTION)
7061aa5a 1614 {
93c80368 1615 if (answer)
15dad1d9 1616 {
93c80368 1617 struct answer **p = find_answer (node, answer), *temp;
041c3194 1618
93c80368
NB
1619 /* Remove the answer from the list. */
1620 temp = *p;
1621 if (temp)
1622 *p = temp->next;
a7abcbbf 1623
93c80368
NB
1624 /* Did we free the last answer? */
1625 if (node->value.answers == 0)
1626 node->type = NT_VOID;
1627 }
1628 else
1629 _cpp_free_definition (node);
041c3194 1630 }
93c80368
NB
1631
1632 /* We don't commit the memory for the answer - it's temporary only. */
7f2935c7 1633}
7f2935c7 1634
45b966db
ZW
1635/* These are for -D, -U, -A. */
1636
1637/* Process the string STR as if it appeared as the body of a #define.
1638 If STR is just an identifier, define it with value 1.
1639 If STR has anything after the identifier, then it should
1640 be identifier=definition. */
1641
0b22d65c 1642void
45b966db 1643cpp_define (pfile, str)
0b22d65c 1644 cpp_reader *pfile;
7ceb3598 1645 const char *str;
0b22d65c 1646{
45b966db
ZW
1647 char *buf, *p;
1648 size_t count;
1649
45b966db
ZW
1650 /* Copy the entire option so we can modify it.
1651 Change the first "=" in the string to a space. If there is none,
86368122
NB
1652 tack " 1" on the end. */
1653
1654 /* Length including the null. */
1655 count = strlen (str);
1656 buf = (char *) alloca (count + 2);
1657 memcpy (buf, str, count);
1658
1659 p = strchr (str, '=');
45b966db 1660 if (p)
86368122 1661 buf[p - str] = ' ';
45b966db
ZW
1662 else
1663 {
86368122
NB
1664 buf[count++] = ' ';
1665 buf[count++] = '1';
0b22d65c 1666 }
cf4ed945 1667
86368122 1668 run_directive (pfile, T_DEFINE, buf, count, 0);
2c8f0515
ZW
1669}
1670
1671/* Slight variant of the above for use by initialize_builtins, which (a)
1672 knows how to set up the buffer itself, (b) needs a different "filename"
1673 tag. */
1674void
1675_cpp_define_builtin (pfile, str)
1676 cpp_reader *pfile;
1677 const char *str;
1678{
93c80368 1679 run_directive (pfile, T_DEFINE, str, strlen (str), _("<builtin>"));
45b966db 1680}
0f41302f 1681
45b966db
ZW
1682/* Process MACRO as if it appeared as the body of an #undef. */
1683void
1684cpp_undef (pfile, macro)
7f2935c7 1685 cpp_reader *pfile;
45b966db 1686 const char *macro;
7f2935c7 1687{
93c80368 1688 run_directive (pfile, T_UNDEF, macro, strlen (macro), 0);
7f2935c7
PB
1689}
1690
45b966db
ZW
1691/* Process the string STR as if it appeared as the body of a #assert. */
1692void
1693cpp_assert (pfile, str)
1694 cpp_reader *pfile;
1695 const char *str;
1696{
86368122 1697 handle_assertion (pfile, str, T_ASSERT);
45b966db 1698}
7f2935c7 1699
45b966db
ZW
1700/* Process STR as if it appeared as the body of an #unassert. */
1701void
1702cpp_unassert (pfile, str)
7f2935c7 1703 cpp_reader *pfile;
45b966db 1704 const char *str;
7f2935c7 1705{
86368122 1706 handle_assertion (pfile, str, T_UNASSERT);
45b966db 1707}
3fdc651f 1708
86368122
NB
1709/* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
1710static void
1711handle_assertion (pfile, str, type)
1712 cpp_reader *pfile;
1713 const char *str;
1714 int type;
1715{
1716 size_t count = strlen (str);
1717 const char *p = strchr (str, '=');
1718
1719 if (p)
1720 {
1721 /* Copy the entire option so we can modify it. Change the first
1722 "=" in the string to a '(', and tack a ')' on the end. */
1723 char *buf = (char *) alloca (count + 1);
1724
1725 memcpy (buf, str, count);
1726 buf[p - str] = '(';
1727 buf[count++] = ')';
1728 str = buf;
1729 }
1730
1731 run_directive (pfile, type, str, count, 0);
1732}
1733
3cf3593f
NB
1734/* Push a new buffer on the buffer stack. Buffer can be NULL, but
1735 then LEN should be 0. Returns the new buffer; it doesn't fail. */
c71f835b
ZW
1736
1737cpp_buffer *
3cf3593f 1738cpp_push_buffer (pfile, buffer, len)
c71f835b
ZW
1739 cpp_reader *pfile;
1740 const U_CHAR *buffer;
3cf3593f 1741 size_t len;
c71f835b 1742{
3cf3593f 1743 cpp_buffer *new = xobnew (pfile->buffer_ob, cpp_buffer);
93c80368 1744
93c80368 1745 /* Clears, amongst other things, if_stack and mi_cmacro. */
c71f835b 1746 memset (new, 0, sizeof (cpp_buffer));
f9a0e96c 1747 new->line_base = new->buf = new->cur = buffer;
3cf3593f
NB
1748 new->rlimit = buffer + len;
1749 new->prev = pfile->buffer;
0d9f234d 1750 new->pfile = pfile;
a5c3cccd
NB
1751 /* Preprocessed files don't do trigraph and escaped newline processing. */
1752 new->from_stage3 = CPP_OPTION (pfile, preprocessed);
cbcff6df 1753 /* No read ahead or extra char initially. */
0d9f234d 1754 new->read_ahead = EOF;
cbcff6df 1755 new->extra_char = EOF;
3cf3593f 1756
4c2b647d 1757 pfile->state.next_bol = 1;
3cf3593f
NB
1758 pfile->buffer_stack_depth++;
1759 pfile->lexer_pos.output_line = 1;
c71f835b 1760
3cf3593f 1761 pfile->buffer = new;
c71f835b
ZW
1762 return new;
1763}
1764
1765cpp_buffer *
1766cpp_pop_buffer (pfile)
1767 cpp_reader *pfile;
1768{
b528a07e 1769 cpp_buffer *buffer = pfile->buffer;
27e2564a
NB
1770 const char *filename = buffer->nominal_fname;
1771 unsigned int lineno = buffer->lineno;
b528a07e 1772 struct if_stack *ifs = buffer->if_stack;
27e2564a 1773 int wfb = (buffer->inc != 0);
c71f835b 1774
b528a07e
NB
1775 /* Walk back up the conditional stack till we reach its level at
1776 entry to this file, issuing error messages. */
1777 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
1778 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1779 "unterminated #%s", dtable[ifs->type].name);
1780
58fea6af 1781 if (wfb)
b528a07e 1782 _cpp_pop_file_buffer (pfile, buffer);
c71f835b 1783
b528a07e
NB
1784 pfile->buffer = buffer->prev;
1785 obstack_free (pfile->buffer_ob, buffer);
c71f835b 1786 pfile->buffer_stack_depth--;
58fea6af 1787
27e2564a
NB
1788 if (pfile->buffer && wfb)
1789 _cpp_do_file_change (pfile, FC_LEAVE, filename, lineno);
58fea6af 1790
b528a07e 1791 return pfile->buffer;
c71f835b
ZW
1792}
1793
1794#define obstack_chunk_alloc xmalloc
1795#define obstack_chunk_free free
1796void
1797_cpp_init_stacks (pfile)
1798 cpp_reader *pfile;
1799{
bfb9dc7f 1800 int i;
93c80368 1801 cpp_hashnode *node;
bfb9dc7f 1802
c71f835b
ZW
1803 pfile->buffer_ob = xnew (struct obstack);
1804 obstack_init (pfile->buffer_ob);
bfb9dc7f 1805
93c80368
NB
1806 /* Register the directives. */
1807 for (i = 1; i < N_DIRECTIVES; i++)
1808 {
1809 node = cpp_lookup (pfile, dtable[i - 1].name, dtable[i - 1].length);
1810 node->directive_index = i;
1811 }
c71f835b
ZW
1812}
1813
1814void
1815_cpp_cleanup_stacks (pfile)
1816 cpp_reader *pfile;
1817{
1818 obstack_free (pfile->buffer_ob, 0);
1819 free (pfile->buffer_ob);
1820}
This page took 1.020048 seconds and 5 git commands to generate.