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