]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cpplib.c
* g++.old-deja/g++.other/overload12.C
[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,
63588b30 87 const char *, size_t,
79bd622b 88 const char *));
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 *));
f51c2148 93static int read_line_number PARAMS ((cpp_reader *, int *));
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
250 /* Restore pfile->skipping before skip_rest_of_line. This avoids
251 warning about poisoned identifiers in skipped #error lines. */
252 pfile->skipping = buffer->was_skipping;
253
254 /* We don't skip for an assembler #. */
255 if (skip_line)
256 skip_rest_of_line (pfile);
257
258 /* Restore state. */
259 pfile->la_write = pfile->la_saved;
260 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
261 pfile->state.in_directive = 0;
262 pfile->state.angled_headers = 0;
263 pfile->directive = 0;
264}
265
266/* Check if a token's name matches that of a known directive. Put in
267 this file to save exporting dtable and other unneeded information. */
268int
269_cpp_handle_directive (pfile, indented)
270 cpp_reader *pfile;
271 int indented;
272{
273 cpp_buffer *buffer = pfile->buffer;
274 const directive *dir = 0;
275 cpp_token dname;
276 int skip = 1;
277
278 start_directive (pfile);
279
79bd622b 280 /* Lex the directive name directly. */
281 _cpp_lex_token (pfile, &dname);
338fa5f7 282
79bd622b 283 if (dname.type == CPP_NAME)
338fa5f7 284 {
79bd622b 285 unsigned int index = dname.val.node->directive_index;
286 if (index)
287 dir = &dtable[index - 1];
338fa5f7 288 }
79bd622b 289 else if (dname.type == CPP_NUMBER)
338fa5f7 290 {
79bd622b 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). */
9677c711 296 if (! buffer->was_skipping && !CPP_OPTION (pfile, lang_asm))
338fa5f7 297 {
79bd622b 298 dir = &dtable[T_LINE];
299 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
920b5d41 300 if (CPP_PEDANTIC (pfile) && buffer->inc
79bd622b 301 && ! CPP_OPTION (pfile, preprocessed))
302 cpp_pedwarn (pfile, "# followed by integer");
338fa5f7 303 }
79bd622b 304 }
338fa5f7 305
79bd622b 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;
338fa5f7 311
79bd622b 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. */
9677c711 336 if (! buffer->was_skipping || (dir->flags & COND))
79bd622b 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 }
9677c711 351 else if (dname.type != CPP_EOF && ! pfile->skipping)
79bd622b 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). */
357 if (CPP_OPTION (pfile, lang_asm))
358 {
359 /* Output the # and lookahead token for the assembler. */
79bd622b 360 _cpp_push_token (pfile, &dname, &pfile->directive_pos);
9677c711 361 skip = 0;
79bd622b 362 }
920b5d41 363 else
79bd622b 364 cpp_error (pfile, "invalid preprocessing directive #%s",
365 cpp_token_as_text (pfile, &dname));
338fa5f7 366 }
367
9677c711 368 end_directive (pfile, skip);
369 return skip;
f80e83a9 370}
1d6fa33f 371
79bd622b 372/* Directive handler wrapper used by the command line option
373 processor. */
374static void
375run_directive (pfile, dir_no, buf, count, name)
1d6fa33f 376 cpp_reader *pfile;
79bd622b 377 int dir_no;
378 const char *buf;
379 size_t count;
380 const char *name;
e3630c4b 381{
4d0e15b5 382 unsigned int output_line = pfile->lexer_pos.output_line;
9677c711 383 cpp_buffer *buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count);
4d0e15b5 384
9677c711 385 if (buffer)
79bd622b 386 {
9677c711 387 const struct directive *dir = &dtable[dir_no];
79bd622b 388
389 if (name)
9677c711 390 buffer->nominal_fname = name;
79bd622b 391 else
9677c711 392 buffer->nominal_fname = _("<command line>");
396ffa86 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. */
9677c711 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);
396ffa86 408 pfile->state.prevent_expansion++;
79bd622b 409 (void) (*dir->handler) (pfile);
396ffa86 410 pfile->state.prevent_expansion--;
9677c711 411 check_eol (pfile);
412 end_directive (pfile, 1);
52eeb475 413
79bd622b 414 cpp_pop_buffer (pfile);
415 }
416}
417
418/* Checks for validity the macro name in #define, #undef, #ifdef and
419 #ifndef directives. */
f80e83a9 420static cpp_hashnode *
79bd622b 421lex_macro_node (pfile)
f80e83a9 422 cpp_reader *pfile;
423{
79bd622b 424 cpp_token token;
c030ed73 425
79bd622b 426 /* Lex the macro name directly. */
427 _cpp_lex_token (pfile, &token);
c4357c92 428
31674461 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
79bd622b 434 if (token.type != CPP_NAME)
1d6fa33f 435 {
79bd622b 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);
31674461 443 else
79bd622b 444 cpp_error (pfile, "macro names must be identifiers");
71aa9da4 445 }
79bd622b 446 else
ef33b55c 447 {
79bd622b 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;
ef33b55c 456 }
457
79bd622b 458 return 0;
1d6fa33f 459}
1d6fa33f 460
79bd622b 461/* Process a #define directive. Most work is done in cppmacro.c. */
69461e0d 462static void
4bf559f2 463do_define (pfile)
1d6fa33f 464 cpp_reader *pfile;
1d6fa33f 465{
79bd622b 466 cpp_hashnode *node = lex_macro_node (pfile);
c030ed73 467
79bd622b 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 }
f80e83a9 480}
481
79bd622b 482/* Handle #undef. Marks the identifier NT_VOID in the hash table. */
69461e0d 483static void
f80e83a9 484do_undef (pfile)
485 cpp_reader *pfile;
486{
79bd622b 487 cpp_hashnode *node = lex_macro_node (pfile);
2c63d6c8 488
f80e83a9 489 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier
490 is not currently defined as a macro name. */
79bd622b 491 if (node && node->type == NT_MACRO)
2c63d6c8 492 {
6cae2504 493 if (pfile->cb.undef)
494 (*pfile->cb.undef) (pfile, node);
2c63d6c8 495
79bd622b 496 if (node->flags & NODE_BUILTIN)
f80e83a9 497 cpp_warning (pfile, "undefining \"%s\"", node->name);
2c63d6c8 498
f80e83a9 499 _cpp_free_definition (node);
2c63d6c8 500 }
79bd622b 501 check_eol (pfile);
1d6fa33f 502}
503
79bd622b 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 {
343fd982 522 cpp_get_token (pfile, &token);
79bd622b 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;
719884dd 531 buffer = (unsigned char *) xrealloc (buffer, capacity);
79bd622b 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 }
f80e83a9 552
79bd622b 553 free ((PTR) buffer);
554 return token.type == CPP_EOF;
555}
1d6fa33f 556
79bd622b 557/* Parse the header name of #include, #include_next, #import and
558 #pragma dependency. Returns zero on success. */
f80e83a9 559static int
79bd622b 560parse_include (pfile, header)
1d6fa33f 561 cpp_reader *pfile;
79bd622b 562 cpp_token *header;
1d6fa33f 563{
79bd622b 564 int is_pragma = pfile->directive == &dtable[T_PRAGMA];
565 const unsigned char *dir;
1d6fa33f 566
79bd622b 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)
1d6fa33f 575 {
79bd622b 576 if (header->type != CPP_LESS)
f80e83a9 577 {
578 cpp_error (pfile, "#%s expects \"FILENAME\" or <FILENAME>", dir);
579 return 1;
580 }
79bd622b 581 if (glue_header_name (pfile, header))
582 return 1;
1d6fa33f 583 }
79bd622b 584
585 if (header->val.str.len == 0)
1d6fa33f 586 {
f80e83a9 587 cpp_error (pfile, "empty file name in #%s", dir);
588 return 1;
1d6fa33f 589 }
1d6fa33f 590
79bd622b 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 }
6cae2504 599
f80e83a9 600 return 0;
4bf559f2 601}
d453a374 602
69461e0d 603static void
4bf559f2 604do_include (pfile)
605 cpp_reader *pfile;
606{
79bd622b 607 cpp_token header;
1d6fa33f 608
79bd622b 609 if (!parse_include (pfile, &header))
610 _cpp_execute_include (pfile, &header, 0, 0);
4bf559f2 611}
c4e0ec82 612
69461e0d 613static void
4bf559f2 614do_import (pfile)
615 cpp_reader *pfile;
616{
79bd622b 617 cpp_token header;
4bf559f2 618
02c09dab 619 if (!pfile->import_warning && CPP_OPTION (pfile, warn_import))
1d6fa33f 620 {
4bf559f2 621 pfile->import_warning = 1;
622 cpp_warning (pfile,
623 "#import is obsolete, use an #ifndef wrapper in the header file");
1d6fa33f 624 }
1d6fa33f 625
79bd622b 626 if (!parse_include (pfile, &header))
627 _cpp_execute_include (pfile, &header, 1, 0);
4bf559f2 628}
1d6fa33f 629
69461e0d 630static void
4bf559f2 631do_include_next (pfile)
632 cpp_reader *pfile;
633{
79bd622b 634 cpp_token header;
4bf559f2 635 struct file_name_list *search_start = 0;
1d6fa33f 636
79bd622b 637 if (parse_include (pfile, &header))
69461e0d 638 return;
4bf559f2 639
f80e83a9 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. */
4bf559f2 646 if (CPP_PREV_BUFFER (CPP_BUFFER (pfile)))
1d6fa33f 647 {
c95d8aaa 648 if (CPP_BUFFER (pfile)->inc->foundhere)
f80e83a9 649 {
650 search_start = CPP_BUFFER (pfile)->inc->foundhere->next;
651 if (!search_start)
69461e0d 652 return;
f80e83a9 653 }
1d6fa33f 654 }
4bf559f2 655 else
656 cpp_warning (pfile, "#include_next in primary source file");
657
79bd622b 658 _cpp_execute_include (pfile, &header, 0, search_start);
1d6fa33f 659}
1d6fa33f 660
314ab6d5 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{
79bd622b 671 cpp_token token;
672 unsigned int val;
314ab6d5 673
79bd622b 674 _cpp_lex_token (pfile, &token);
675 if (token.type == CPP_NUMBER && token.val.str.len == 1)
314ab6d5 676 {
79bd622b 677 val = token.val.str.text[0] - '1';
678 if (val <= 3)
679 {
680 *num = val + 1;
681 return 1;
682 }
314ab6d5 683 }
79bd622b 684
685 if (token.type != CPP_EOF)
686 cpp_error (pfile, "invalid format #line");
687 return 0;
314ab6d5 688}
689
f80e83a9 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
e0a859f1 692 well-formed, 1 if not. Temporary, hopefully. */
f80e83a9 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
6d71dc85 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. */
1d6fa33f 716
69461e0d 717static void
4bf559f2 718do_line (pfile)
1d6fa33f 719 cpp_reader *pfile;
1d6fa33f 720{
6d71dc85 721 cpp_buffer *ip = CPP_BUFFER (pfile);
79bd622b 722 unsigned long new_lineno;
f80e83a9 723 /* C99 raised the minimum limit on #line numbers. */
724 unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
0653b94e 725 int enter = 0, leave = 0, rename = 0;
79bd622b 726 cpp_token token;
727
728 /* #line commands expand macros. */
343fd982 729 cpp_get_token (pfile, &token);
79bd622b 730 if (token.type != CPP_NUMBER
731 || strtoul_for_line (token.val.str.text, token.val.str.len, &new_lineno))
1d6fa33f 732 {
79bd622b 733 cpp_error (pfile, "\"%s\" after #line is not a positive integer",
734 cpp_token_as_text (pfile, &token));
0653b94e 735 return;
6d71dc85 736 }
1d6fa33f 737
f80e83a9 738 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
739 cpp_pedwarn (pfile, "line number out of range");
1d6fa33f 740
343fd982 741 cpp_get_token (pfile, &token);
2e398cc7 742
79bd622b 743 if (token.type != CPP_EOF)
a852e3b1 744 {
79bd622b 745 char *fname;
746 unsigned int len;
747 int action_number = 0;
a852e3b1 748
79bd622b 749 if (token.type != CPP_STRING)
750 {
751 cpp_error (pfile, "\"%s\" is not a valid filename",
752 cpp_token_as_text (pfile, &token));
753 return;
754 }
1d6fa33f 755
79bd622b 756 len = token.val.str.len;
757 fname = alloca (len + 1);
758 memcpy (fname, token.val.str.text, len);
759 fname[len] = '\0';
760
761 if (strcmp (fname, ip->nominal_fname))
762 {
763 rename = 1;
764 if (!strcmp (fname, ip->inc->name))
765 ip->nominal_fname = ip->inc->name;
766 else
767 ip->nominal_fname = _cpp_fake_include (pfile, fname);
768 }
616814f8 769
79bd622b 770 if (read_line_number (pfile, &action_number) != 0)
771 {
04ca81e8 772 if (! CPP_OPTION (pfile, preprocessed) && CPP_PEDANTIC (pfile))
79bd622b 773 cpp_pedwarn (pfile, "extra tokens at end of #line directive");
c030ed73 774
79bd622b 775 if (action_number == 1)
776 {
777 enter = 1;
778 cpp_make_system_header (pfile, ip, 0);
779 read_line_number (pfile, &action_number);
780 }
781 else if (action_number == 2)
782 {
783 leave = 1;
784 cpp_make_system_header (pfile, ip, 0);
785 read_line_number (pfile, &action_number);
786 }
787 if (action_number == 3)
788 {
789 cpp_make_system_header (pfile, ip, 1);
790 read_line_number (pfile, &action_number);
791 }
792 if (action_number == 4)
793 {
794 cpp_make_system_header (pfile, ip, 2);
795 read_line_number (pfile, &action_number);
796 }
797 }
798 check_eol (pfile);
f80e83a9 799 }
1d6fa33f 800
79bd622b 801 /* Our line number is incremented after the directive is processed. */
802 ip->lineno = new_lineno - 1;
803 pfile->lexer_pos.output_line = ip->lineno;
6cae2504 804 if (enter && pfile->cb.enter_file)
805 (*pfile->cb.enter_file) (pfile);
806 if (leave && pfile->cb.leave_file)
807 (*pfile->cb.leave_file) (pfile);
0653b94e 808 if (rename && pfile->cb.rename_file)
809 (*pfile->cb.rename_file) (pfile);
1d6fa33f 810}
616814f8 811
1d6fa33f 812/*
f3b83e9b 813 * Report a warning or error detected by the program we are
814 * processing. Use the directive's tokens in the error message.
1d6fa33f 815 */
816
69461e0d 817static void
def71b06 818do_diagnostic (pfile, code, print_dir)
1d6fa33f 819 cpp_reader *pfile;
f3b83e9b 820 enum error_type code;
def71b06 821 int print_dir;
1d6fa33f 822{
79bd622b 823 if (_cpp_begin_message (pfile, code, NULL, 0))
6cae2504 824 {
def71b06 825 if (print_dir)
826 fprintf (stderr, "#%s ", pfile->directive->name);
79bd622b 827 pfile->state.prevent_expansion++;
828 cpp_output_line (pfile, stderr);
829 pfile->state.prevent_expansion--;
6cae2504 830 }
1d6fa33f 831}
832
f3b83e9b 833static void
834do_error (pfile)
835 cpp_reader *pfile;
836{
def71b06 837 do_diagnostic (pfile, ERROR, 1);
f3b83e9b 838}
1d6fa33f 839
69461e0d 840static void
4bf559f2 841do_warning (pfile)
1d6fa33f 842 cpp_reader *pfile;
1d6fa33f 843{
def71b06 844 do_diagnostic (pfile, WARNING, 1);
1d6fa33f 845}
846
4e29fcb2 847/* Report program identification. */
1d6fa33f 848
69461e0d 849static void
4bf559f2 850do_ident (pfile)
1d6fa33f 851 cpp_reader *pfile;
1d6fa33f 852{
79bd622b 853 cpp_token str;
6cae2504 854
343fd982 855 cpp_get_token (pfile, &str);
79bd622b 856 if (str.type != CPP_STRING)
857 cpp_error (pfile, "invalid #ident");
858 else if (pfile->cb.ident)
859 (*pfile->cb.ident) (pfile, &str.val.str);
4e29fcb2 860
79bd622b 861 check_eol (pfile);
1d6fa33f 862}
863
4e29fcb2 864/* Pragmata handling. We handle some of these, and pass the rest on
865 to the front end. C99 defines three pragmas and says that no macro
866 expansion is to be performed on them; whether or not macro
867 expansion happens for other pragmas is implementation defined.
e14c5993 868 This implementation never macro-expands the text after #pragma. */
4e29fcb2 869
870/* Sub-handlers for the pragmas needing treatment here.
871 They return 1 if the token buffer is to be popped, 0 if not. */
3f075661 872struct pragma_entry
873{
6cae2504 874 struct pragma_entry *next;
f80e83a9 875 const char *name;
6cae2504 876 size_t len;
877 int isnspace;
878 union {
879 void (*handler) PARAMS ((cpp_reader *));
880 struct pragma_entry *space;
881 } u;
3f075661 882};
883
6cae2504 884void
885cpp_register_pragma (pfile, space, name, handler)
886 cpp_reader *pfile;
887 const char *space;
888 const char *name;
889 void (*handler) PARAMS ((cpp_reader *));
3f075661 890{
6cae2504 891 struct pragma_entry **x, *new;
892 size_t len;
3f075661 893
6cae2504 894 x = &pfile->pragmas;
895 if (space)
896 {
897 struct pragma_entry *p = pfile->pragmas;
898 len = strlen (space);
899 while (p)
900 {
901 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
902 {
903 x = &p->u.space;
904 goto found;
905 }
906 p = p->next;
907 }
908 cpp_ice (pfile, "unknown #pragma namespace %s", space);
909 return;
910 }
911
912 found:
913 new = xnew (struct pragma_entry);
914 new->name = name;
915 new->len = strlen (name);
916 new->isnspace = 0;
917 new->u.handler = handler;
918
919 new->next = *x;
920 *x = new;
921}
3f075661 922
6cae2504 923void
924cpp_register_pragma_space (pfile, space)
3f075661 925 cpp_reader *pfile;
6cae2504 926 const char *space;
3f075661 927{
6cae2504 928 struct pragma_entry *new;
929 const struct pragma_entry *p = pfile->pragmas;
930 size_t len = strlen (space);
931
932 while (p)
933 {
934 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
c7125d9d 935 /* Multiple different callers are allowed to register the same
936 namespace. */
937 return;
6cae2504 938 p = p->next;
939 }
940
941 new = xnew (struct pragma_entry);
942 new->name = space;
943 new->len = len;
944 new->isnspace = 1;
945 new->u.space = 0;
946
947 new->next = pfile->pragmas;
948 pfile->pragmas = new;
949}
76faa4c0 950
6cae2504 951void
952_cpp_init_internal_pragmas (pfile)
953 cpp_reader *pfile;
954{
955 /* top level */
956 cpp_register_pragma (pfile, 0, "poison", do_pragma_poison);
957 cpp_register_pragma (pfile, 0, "once", do_pragma_once);
958
959 /* GCC namespace */
960 cpp_register_pragma_space (pfile, "GCC");
961
962 cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
963 cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
964 cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
3f075661 965}
1d6fa33f 966
69461e0d 967static void
4bf559f2 968do_pragma (pfile)
1d6fa33f 969 cpp_reader *pfile;
1d6fa33f 970{
6cae2504 971 const struct pragma_entry *p;
79bd622b 972 cpp_token tok;
6cae2504 973 const cpp_hashnode *node;
974 const U_CHAR *name;
975 size_t len;
79bd622b 976 int drop = 0;
2e398cc7 977
6cae2504 978 p = pfile->pragmas;
79bd622b 979 pfile->state.prevent_expansion++;
980 cpp_start_lookahead (pfile);
6cae2504 981
982 new_space:
79bd622b 983 cpp_get_token (pfile, &tok);
984 if (tok.type == CPP_NAME)
c0b823af 985 {
79bd622b 986 node = tok.val.node;
987 name = node->name;
988 len = node->length;
989 while (p)
6cae2504 990 {
79bd622b 991 if (strlen (p->name) == len && !memcmp (p->name, name, len))
6cae2504 992 {
79bd622b 993 if (p->isnspace)
994 {
995 p = p->u.space;
996 goto new_space;
997 }
998 else
999 {
1000 (*p->u.handler) (pfile);
1001 drop = 1;
1002 break;
1003 }
6cae2504 1004 }
79bd622b 1005 p = p->next;
6cae2504 1006 }
6cae2504 1007 }
f80e83a9 1008
79bd622b 1009 cpp_stop_lookahead (pfile, drop);
1010 pfile->state.prevent_expansion--;
1011
1012 if (!drop && pfile->cb.def_pragma)
6cae2504 1013 (*pfile->cb.def_pragma) (pfile);
3f075661 1014}
1015
6cae2504 1016static void
4e29fcb2 1017do_pragma_once (pfile)
1018 cpp_reader *pfile;
1019{
1020 cpp_buffer *ip = CPP_BUFFER (pfile);
1021
02c09dab 1022 cpp_warning (pfile, "#pragma once is obsolete");
1023
5b201908 1024 if (CPP_PREV_BUFFER (ip) == NULL)
79bd622b 1025 cpp_warning (pfile, "#pragma once in main file");
4e29fcb2 1026 else
c95d8aaa 1027 ip->inc->cmacro = NEVER_REREAD;
79bd622b 1028
1029 check_eol (pfile);
4e29fcb2 1030}
c9d838e1 1031
6cae2504 1032static void
4e29fcb2 1033do_pragma_poison (pfile)
1034 cpp_reader *pfile;
1035{
1036 /* Poison these symbols so that all subsequent usage produces an
1037 error message. */
79bd622b 1038 cpp_token tok;
c4abf88d 1039 cpp_hashnode *hp;
4e29fcb2 1040
79bd622b 1041 pfile->state.poisoned_ok = 1;
4e29fcb2 1042 for (;;)
1043 {
79bd622b 1044 _cpp_lex_token (pfile, &tok);
1045 if (tok.type == CPP_EOF)
4e29fcb2 1046 break;
79bd622b 1047 if (tok.type != CPP_NAME)
c9d838e1 1048 {
79bd622b 1049 cpp_error (pfile, "invalid #pragma GCC poison directive");
1050 break;
c9d838e1 1051 }
1052
79bd622b 1053 hp = tok.val.node;
1054 if (hp->flags & NODE_POISONED)
1055 continue;
1056
1057 if (hp->type == NT_MACRO)
1058 cpp_warning (pfile, "poisoning existing macro \"%s\"", hp->name);
1059 _cpp_free_definition (hp);
1060 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
c9d838e1 1061 }
79bd622b 1062 pfile->state.poisoned_ok = 0;
6cae2504 1063
79bd622b 1064#if 0 /* Doesn't quite work yet. */
1065 if (tok.type == CPP_EOF && pfile->cb.poison)
6cae2504 1066 (*pfile->cb.poison) (pfile);
79bd622b 1067#endif
1d6fa33f 1068}
e35f919d 1069
1070/* Mark the current header as a system header. This will suppress
1071 some categories of warnings (notably those from -pedantic). It is
1072 intended for use in system libraries that cannot be implemented in
1073 conforming C, but cannot be certain that their headers appear in a
1074 system include directory. To prevent abuse, it is rejected in the
1075 primary source file. */
6cae2504 1076static void
e35f919d 1077do_pragma_system_header (pfile)
1078 cpp_reader *pfile;
1079{
f80e83a9 1080 cpp_buffer *ip = CPP_BUFFER (pfile);
e35f919d 1081 if (CPP_PREV_BUFFER (ip) == NULL)
1082 cpp_warning (pfile, "#pragma system_header outside include file");
1083 else
6af24d0a 1084 cpp_make_system_header (pfile, ip, 1);
79bd622b 1085
1086 check_eol (pfile);
e35f919d 1087}
e485814b 1088
1089/* Check the modified date of the current include file against a specified
1090 file. Issue a diagnostic, if the specified file is newer. We use this to
1091 determine if a fixed header should be refixed. */
6cae2504 1092static void
e485814b 1093do_pragma_dependency (pfile)
1094 cpp_reader *pfile;
1095{
79bd622b 1096 cpp_token header, msg;
1097 int ordering;
f80e83a9 1098
79bd622b 1099 if (parse_include (pfile, &header))
6cae2504 1100 return;
f80e83a9 1101
79bd622b 1102 ordering = _cpp_compare_file_date (pfile, &header);
e485814b 1103 if (ordering < 0)
79bd622b 1104 cpp_warning (pfile, "cannot find source %s",
1105 cpp_token_as_text (pfile, &header));
e485814b 1106 else if (ordering > 0)
1107 {
79bd622b 1108 cpp_warning (pfile, "current file is older than %s",
1109 cpp_token_as_text (pfile, &header));
1110 cpp_start_lookahead (pfile);
1111 cpp_get_token (pfile, &msg);
1112 cpp_stop_lookahead (pfile, msg.type == CPP_EOF);
def71b06 1113 if (msg.type != CPP_EOF)
1114 do_diagnostic (pfile, WARNING, 0);
e485814b 1115 }
e485814b 1116}
1117
396ffa86 1118/* Check syntax is "(string-literal)". Returns 0 on success. */
1119static int
1120get__Pragma_string (pfile, string)
1121 cpp_reader *pfile;
1122 cpp_token *string;
1123{
1124 cpp_token paren;
1125
1126 cpp_get_token (pfile, &paren);
1127 if (paren.type != CPP_OPEN_PAREN)
1128 return 1;
1129
1130 cpp_get_token (pfile, string);
1131 if (string->type != CPP_STRING && string->type != CPP_WSTRING)
1132 return 1;
1133
1134 cpp_get_token (pfile, &paren);
1135 return paren.type != CPP_CLOSE_PAREN;
1136}
1137
1138/* Returns a malloced buffer containing a destringized cpp_string by
1139 removing the first \ of \" and \\ sequences. */
1140static unsigned char *
1141destringize (in, len)
1142 const cpp_string *in;
1143 unsigned int *len;
1144{
1145 const unsigned char *src, *limit;
1146 unsigned char *dest, *result;
1147
1148 dest = result = (unsigned char *) xmalloc (in->len);
1149 for (src = in->text, limit = src + in->len; src < limit;)
1150 {
1151 /* We know there is a character following the backslash. */
1152 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1153 src++;
1154 *dest++ = *src++;
1155 }
1156
1157 *len = dest - result;
1158 return result;
1159}
1160
1161void
1162_cpp_do__Pragma (pfile)
1163 cpp_reader *pfile;
1164{
1165 cpp_token string;
1166 unsigned char *buffer;
1167 unsigned int len;
1168
1169 if (get__Pragma_string (pfile, &string))
1170 {
1171 cpp_error (pfile, "_Pragma takes a parenthesized string literal");
1172 return;
1173 }
1174
1175 buffer = destringize (&string.val.str, &len);
1176 run_directive (pfile, T_PRAGMA, (char *) buffer, len, _("<_Pragma>"));
1177 free ((PTR) buffer);
1178}
1179
1d6fa33f 1180/* Just ignore #sccs, on systems where we define it at all. */
ef33b55c 1181#ifdef SCCS_DIRECTIVE
69461e0d 1182static void
4bf559f2 1183do_sccs (pfile)
f80e83a9 1184 cpp_reader *pfile ATTRIBUTE_UNUSED;
1d6fa33f 1185{
1d6fa33f 1186}
ef33b55c 1187#endif
20534e99 1188
69461e0d 1189static void
4bf559f2 1190do_ifdef (pfile)
1191 cpp_reader *pfile;
1192{
79bd622b 1193 int skip = 1;
f80e83a9 1194
920b5d41 1195 if (! pfile->buffer->was_skipping)
79bd622b 1196 {
1197 const cpp_hashnode *node = lex_macro_node (pfile);
f80e83a9 1198
79bd622b 1199 if (node)
1200 skip = node->type != NT_MACRO;
1201 }
4bf559f2 1202
79bd622b 1203 push_conditional (pfile, skip, T_IFDEF, 0);
1204}
4bf559f2 1205
69461e0d 1206static void
4bf559f2 1207do_ifndef (pfile)
1208 cpp_reader *pfile;
1209{
79bd622b 1210 int skip = 1;
76faa4c0 1211 const cpp_hashnode *node = 0;
4bf559f2 1212
920b5d41 1213 if (! pfile->buffer->was_skipping)
b970ec42 1214 {
79bd622b 1215 node = lex_macro_node (pfile);
1216 if (node)
1217 skip = node->type == NT_MACRO;
b970ec42 1218 }
f80e83a9 1219
79bd622b 1220 push_conditional (pfile, skip, T_IFNDEF, node);
1d6fa33f 1221}
1222
79bd622b 1223/* #if cooperates with parse_defined to handle multiple-include
1224 optimisations. If macro expansions or identifiers appear in the
1225 expression, we cannot treat it as a controlling conditional, since
1226 their values could change in the future. */
1d6fa33f 1227
69461e0d 1228static void
c4357c92 1229do_if (pfile)
1d6fa33f 1230 cpp_reader *pfile;
1d6fa33f 1231{
79bd622b 1232 int skip = 1;
c4357c92 1233 const cpp_hashnode *cmacro = 0;
1d6fa33f 1234
920b5d41 1235 if (! pfile->buffer->was_skipping)
c4357c92 1236 {
79bd622b 1237 /* Controlling macro of #if ! defined () */
1238 pfile->mi_ind_cmacro = 0;
1239 skip = _cpp_parse_expr (pfile) == 0;
1240 cmacro = pfile->mi_ind_cmacro;
c4357c92 1241 }
79bd622b 1242
1243 push_conditional (pfile, skip, T_IF, cmacro);
1d6fa33f 1244}
1245
920b5d41 1246/* Flip skipping state if appropriate and continue without changing
c4357c92 1247 if_stack; this is so that the error message for missing #endif's
1248 etc. will point to the original #if. */
8e33b875 1249
69461e0d 1250static void
c4357c92 1251do_else (pfile)
1252 cpp_reader *pfile;
8e33b875 1253{
920b5d41 1254 cpp_buffer *buffer = pfile->buffer;
1255 struct if_stack *ifs = buffer->if_stack;
c030ed73 1256
c4357c92 1257 if (ifs == NULL)
79bd622b 1258 cpp_error (pfile, "#else without #if");
1259 else
c030ed73 1260 {
79bd622b 1261 if (ifs->type == T_ELSE)
1262 {
1263 cpp_error (pfile, "#else after #else");
1264 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1265 "the conditional began here");
1266 }
920b5d41 1267 ifs->type = T_ELSE;
1268
1269 /* Buffer->was_skipping is 1 if all conditionals in this chain
1270 have been false, 2 if a conditional has been true. */
1271 if (! ifs->was_skipping && buffer->was_skipping != 2)
1272 buffer->was_skipping = ! buffer->was_skipping;
1d6fa33f 1273
79bd622b 1274 /* Invalidate any controlling macro. */
1275 ifs->mi_cmacro = 0;
c030ed73 1276 }
79bd622b 1277
1278 check_eol (pfile);
1d6fa33f 1279}
1280
79bd622b 1281/* handle a #elif directive by not changing if_stack either. see the
1282 comment above do_else. */
1d6fa33f 1283
69461e0d 1284static void
c4357c92 1285do_elif (pfile)
1d6fa33f 1286 cpp_reader *pfile;
1d6fa33f 1287{
920b5d41 1288 cpp_buffer *buffer = pfile->buffer;
1289 struct if_stack *ifs = buffer->if_stack;
1d6fa33f 1290
c4357c92 1291 if (ifs == NULL)
920b5d41 1292 cpp_error (pfile, "#elif without #if");
1293 else
0b60628c 1294 {
920b5d41 1295 if (ifs->type == T_ELSE)
1296 {
1297 cpp_error (pfile, "#elif after #else");
1298 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1299 "the conditional began here");
1300 }
1301 ifs->type = T_ELIF;
79bd622b 1302
920b5d41 1303 /* Don't evaluate #elif if our higher level is skipping. */
1304 if (! ifs->was_skipping)
1305 {
1306 /* Buffer->was_skipping is 1 if all conditionals in this
1307 chain have been false, 2 if a conditional has been true. */
1308 if (buffer->was_skipping == 1)
1309 buffer->was_skipping = ! _cpp_parse_expr (pfile);
1310 else
1311 buffer->was_skipping = 2;
f80e83a9 1312
920b5d41 1313 /* Invalidate any controlling macro. */
1314 ifs->mi_cmacro = 0;
1315 }
0b60628c 1316 }
1d6fa33f 1317}
1318
c4357c92 1319/* #endif pops the if stack and resets pfile->skipping. */
1d6fa33f 1320
69461e0d 1321static void
4bf559f2 1322do_endif (pfile)
1d6fa33f 1323 cpp_reader *pfile;
1d6fa33f 1324{
920b5d41 1325 cpp_buffer *buffer = pfile->buffer;
1326 struct if_stack *ifs = buffer->if_stack;
c4357c92 1327
c4357c92 1328 if (ifs == NULL)
1329 cpp_error (pfile, "#endif without #if");
1d6fa33f 1330 else
1331 {
79bd622b 1332 /* If potential control macro, we go back outside again. */
1333 if (ifs->next == 0 && ifs->mi_cmacro)
1334 {
1335 pfile->mi_state = MI_OUTSIDE;
1336 pfile->mi_cmacro = ifs->mi_cmacro;
1337 }
1338
920b5d41 1339 buffer->if_stack = ifs->next;
1340 buffer->was_skipping = ifs->was_skipping;
f51c2148 1341 obstack_free (pfile->buffer_ob, ifs);
1d6fa33f 1342 }
1d6fa33f 1343
79bd622b 1344 check_eol (pfile);
1345}
f80e83a9 1346
c4357c92 1347/* Push an if_stack entry and set pfile->skipping accordingly.
1348 If this is a #ifndef starting at the beginning of a file,
1349 CMACRO is the macro name tested by the #ifndef. */
1350
1351static void
1352push_conditional (pfile, skip, type, cmacro)
1353 cpp_reader *pfile;
1354 int skip;
1355 int type;
1356 const cpp_hashnode *cmacro;
1357{
1358 struct if_stack *ifs;
920b5d41 1359 cpp_buffer *buffer = pfile->buffer;
c4357c92 1360
f51c2148 1361 ifs = xobnew (pfile->buffer_ob, struct if_stack);
79bd622b 1362 ifs->pos = pfile->directive_pos;
920b5d41 1363 ifs->next = buffer->if_stack;
1364 ifs->was_skipping = buffer->was_skipping;
c4357c92 1365 ifs->type = type;
79bd622b 1366 if (pfile->mi_state == MI_OUTSIDE && pfile->mi_cmacro == 0)
1367 ifs->mi_cmacro = cmacro;
1368 else
1369 ifs->mi_cmacro = 0;
c4357c92 1370
920b5d41 1371 buffer->was_skipping = skip;
1372 buffer->if_stack = ifs;
4896abfd 1373}
69bcbfc6 1374
79bd622b 1375/* Read the tokens of the answer into the macro pool. Only commit the
1376 memory if we intend it as permanent storage, i.e. the #assert case.
1377 Returns 0 on success. */
1378
1379static int
1380parse_answer (pfile, answerp, type)
1d6fa33f 1381 cpp_reader *pfile;
f80e83a9 1382 struct answer **answerp;
79bd622b 1383 int type;
1d6fa33f 1384{
79bd622b 1385 cpp_token paren, *token;
1386 struct answer *answer;
1387
1388 if (POOL_FRONT (&pfile->macro_pool) + sizeof (struct answer) >
1389 POOL_LIMIT (&pfile->macro_pool))
1390 _cpp_next_chunk (&pfile->macro_pool, sizeof (struct answer), 0);
1391 answer = (struct answer *) POOL_FRONT (&pfile->macro_pool);
1392 answer->count = 0;
1393
1394 /* In a conditional, it is legal to not have an open paren. We
1395 should save the following token in this case. */
1396 if (type == T_IF)
1397 cpp_start_lookahead (pfile);
1398 cpp_get_token (pfile, &paren);
1399 if (type == T_IF)
1400 cpp_stop_lookahead (pfile, paren.type == CPP_OPEN_PAREN);
1401
1402 /* If not a paren, see if we're OK. */
1403 if (paren.type != CPP_OPEN_PAREN)
f80e83a9 1404 {
79bd622b 1405 /* In a conditional no answer is a test for any answer. It
1406 could be followed by any token. */
1407 if (type == T_IF)
1408 return 0;
1409
1410 /* #unassert with no answer is valid - it removes all answers. */
1411 if (type == T_UNASSERT && paren.type == CPP_EOF)
1412 return 0;
bce8e0c0 1413
f80e83a9 1414 cpp_error (pfile, "missing '(' after predicate");
79bd622b 1415 return 1;
f80e83a9 1416 }
69bcbfc6 1417
f80e83a9 1418 for (;;)
1419 {
79bd622b 1420 token = &answer->first[answer->count];
1421 /* Check we have room for the token. */
1422 if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
f80e83a9 1423 {
79bd622b 1424 _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1425 (unsigned char **) &answer);
1426 token = &answer->first[answer->count];
f80e83a9 1427 }
79bd622b 1428
343fd982 1429 cpp_get_token (pfile, token);
f80e83a9 1430 if (token->type == CPP_CLOSE_PAREN)
1431 break;
3ba8b497 1432
79bd622b 1433 if (token->type == CPP_EOF)
f80e83a9 1434 {
79bd622b 1435 cpp_error (pfile, "missing ')' to complete answer");
1436 return 1;
f80e83a9 1437 }
79bd622b 1438 answer->count++;
f80e83a9 1439 }
bce8e0c0 1440
79bd622b 1441 if (answer->count == 0)
69bcbfc6 1442 {
f80e83a9 1443 cpp_error (pfile, "predicate's answer is empty");
79bd622b 1444 return 1;
1d6fa33f 1445 }
f80e83a9 1446
1447 /* Drop whitespace at start. */
79bd622b 1448 answer->first->flags &= ~PREV_WHITE;
1449 *answerp = answer;
f80e83a9 1450
79bd622b 1451 if (type == T_ASSERT || type == T_UNASSERT)
1452 check_eol (pfile);
1453 return 0;
1454}
f80e83a9 1455
79bd622b 1456/* Parses an assertion, returning a pointer to the hash node of the
1457 predicate, or 0 on error. If an answer was supplied, it is placed
343fd982 1458 in ANSWERP, otherwise it is set to 0. */
79bd622b 1459static cpp_hashnode *
1460parse_assertion (pfile, answerp, type)
1461 cpp_reader *pfile;
1462 struct answer **answerp;
1463 int type;
1464{
1465 cpp_hashnode *result = 0;
1466 cpp_token predicate;
1467
1468 /* We don't expand predicates or answers. */
1469 pfile->state.prevent_expansion++;
1470
1471 /* Use the permanent pool for storage (for the answers). */
1472 pfile->string_pool = &pfile->ident_pool;
1473
1474 *answerp = 0;
343fd982 1475 cpp_get_token (pfile, &predicate);
79bd622b 1476 if (predicate.type == CPP_EOF)
1477 cpp_error (pfile, "assertion without predicate");
1478 else if (predicate.type != CPP_NAME)
1479 cpp_error (pfile, "predicate must be an identifier");
1480 else if (parse_answer (pfile, answerp, type) == 0)
1481 {
1482 unsigned int len = predicate.val.node->length;
1483 unsigned char *sym = alloca (len + 1);
f80e83a9 1484
79bd622b 1485 /* Prefix '#' to get it out of macro namespace. */
1486 sym[0] = '#';
1487 memcpy (sym + 1, predicate.val.node->name, len);
1488 result = cpp_lookup (pfile, sym, len + 1);
1489 }
69bcbfc6 1490
79bd622b 1491 pfile->string_pool = &pfile->temp_string_pool;
1492 pfile->state.prevent_expansion--;
1493 return result;
1d6fa33f 1494}
69bcbfc6 1495
f80e83a9 1496/* Returns a pointer to the pointer to the answer in the answer chain,
1497 or a pointer to NULL if the answer is not in the chain. */
79bd622b 1498static struct answer **
1499find_answer (node, candidate)
f80e83a9 1500 cpp_hashnode *node;
79bd622b 1501 const struct answer *candidate;
1d6fa33f 1502{
79bd622b 1503 unsigned int i;
f80e83a9 1504 struct answer **result;
1d6fa33f 1505
f80e83a9 1506 for (result = &node->value.answers; *result; result = &(*result)->next)
79bd622b 1507 {
1508 struct answer *answer = *result;
1509
1510 if (answer->count == candidate->count)
1511 {
1512 for (i = 0; i < answer->count; i++)
1513 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1514 break;
1515
1516 if (i == answer->count)
1517 break;
1518 }
1519 }
c030ed73 1520
f80e83a9 1521 return result;
1522}
bce8e0c0 1523
79bd622b 1524/* Test an assertion within a preprocessor conditional. Returns
1525 non-zero on failure, zero on success. On success, the result of
1526 the test is written into VALUE. */
1527int
1528_cpp_test_assertion (pfile, value)
1529 cpp_reader *pfile;
1530 int *value;
1531{
1532 struct answer *answer;
1533 cpp_hashnode *node;
1534
1535 node = parse_assertion (pfile, &answer, T_IF);
1536 if (node)
1537 *value = (node->type == NT_ASSERTION &&
1538 (answer == 0 || *find_answer (node, answer) != 0));
1539
1540 /* We don't commit the memory for the answer - it's temporary only. */
1541 return node == 0;
1542}
1543
69461e0d 1544static void
f80e83a9 1545do_assert (pfile)
1546 cpp_reader *pfile;
1547{
1548 struct answer *new_answer;
1549 cpp_hashnode *node;
1550
79bd622b 1551 node = parse_assertion (pfile, &new_answer, T_ASSERT);
f80e83a9 1552 if (node)
c030ed73 1553 {
79bd622b 1554 /* Place the new answer in the answer list. First check there
1555 is not a duplicate. */
f80e83a9 1556 new_answer->next = 0;
79bd622b 1557 if (node->type == NT_ASSERTION)
f80e83a9 1558 {
79bd622b 1559 if (*find_answer (node, new_answer))
1560 {
1561 cpp_warning (pfile, "\"%s\" re-asserted", node->name + 1);
1562 return;
1563 }
f80e83a9 1564 new_answer->next = node->value.answers;
1565 }
79bd622b 1566 node->type = NT_ASSERTION;
f80e83a9 1567 node->value.answers = new_answer;
79bd622b 1568 POOL_COMMIT (&pfile->macro_pool, (sizeof (struct answer)
1569 + (new_answer->count - 1)
1570 * sizeof (cpp_token)));
c030ed73 1571 }
f80e83a9 1572}
bce8e0c0 1573
69461e0d 1574static void
f80e83a9 1575do_unassert (pfile)
1576 cpp_reader *pfile;
1577{
1578 cpp_hashnode *node;
79bd622b 1579 struct answer *answer;
f80e83a9 1580
79bd622b 1581 node = parse_assertion (pfile, &answer, T_UNASSERT);
1582 /* It isn't an error to #unassert something that isn't asserted. */
1583 if (node && node->type == NT_ASSERTION)
69bcbfc6 1584 {
79bd622b 1585 if (answer)
bce8e0c0 1586 {
79bd622b 1587 struct answer **p = find_answer (node, answer), *temp;
f80e83a9 1588
79bd622b 1589 /* Remove the answer from the list. */
1590 temp = *p;
1591 if (temp)
1592 *p = temp->next;
3ba8b497 1593
79bd622b 1594 /* Did we free the last answer? */
1595 if (node->value.answers == 0)
1596 node->type = NT_VOID;
1597 }
1598 else
1599 _cpp_free_definition (node);
f80e83a9 1600 }
79bd622b 1601
1602 /* We don't commit the memory for the answer - it's temporary only. */
1d6fa33f 1603}
1d6fa33f 1604
0578f103 1605/* These are for -D, -U, -A. */
1606
1607/* Process the string STR as if it appeared as the body of a #define.
1608 If STR is just an identifier, define it with value 1.
1609 If STR has anything after the identifier, then it should
1610 be identifier=definition. */
1611
9fa36617 1612void
0578f103 1613cpp_define (pfile, str)
9fa36617 1614 cpp_reader *pfile;
8d7a2585 1615 const char *str;
9fa36617 1616{
0578f103 1617 char *buf, *p;
1618 size_t count;
1619
0578f103 1620 /* Copy the entire option so we can modify it.
1621 Change the first "=" in the string to a space. If there is none,
90dc47e0 1622 tack " 1" on the end. */
1623
1624 /* Length including the null. */
1625 count = strlen (str);
1626 buf = (char *) alloca (count + 2);
1627 memcpy (buf, str, count);
1628
1629 p = strchr (str, '=');
0578f103 1630 if (p)
90dc47e0 1631 buf[p - str] = ' ';
0578f103 1632 else
1633 {
90dc47e0 1634 buf[count++] = ' ';
1635 buf[count++] = '1';
9fa36617 1636 }
eb3948d1 1637
90dc47e0 1638 run_directive (pfile, T_DEFINE, buf, count, 0);
a336277c 1639}
1640
1641/* Slight variant of the above for use by initialize_builtins, which (a)
1642 knows how to set up the buffer itself, (b) needs a different "filename"
1643 tag. */
1644void
1645_cpp_define_builtin (pfile, str)
1646 cpp_reader *pfile;
1647 const char *str;
1648{
79bd622b 1649 run_directive (pfile, T_DEFINE, str, strlen (str), _("<builtin>"));
0578f103 1650}
a92771b8 1651
0578f103 1652/* Process MACRO as if it appeared as the body of an #undef. */
1653void
1654cpp_undef (pfile, macro)
1d6fa33f 1655 cpp_reader *pfile;
0578f103 1656 const char *macro;
1d6fa33f 1657{
79bd622b 1658 run_directive (pfile, T_UNDEF, macro, strlen (macro), 0);
1d6fa33f 1659}
1660
0578f103 1661/* Process the string STR as if it appeared as the body of a #assert. */
1662void
1663cpp_assert (pfile, str)
1664 cpp_reader *pfile;
1665 const char *str;
1666{
90dc47e0 1667 handle_assertion (pfile, str, T_ASSERT);
0578f103 1668}
1d6fa33f 1669
0578f103 1670/* Process STR as if it appeared as the body of an #unassert. */
1671void
1672cpp_unassert (pfile, str)
1d6fa33f 1673 cpp_reader *pfile;
0578f103 1674 const char *str;
1d6fa33f 1675{
90dc47e0 1676 handle_assertion (pfile, str, T_UNASSERT);
0578f103 1677}
e3630c4b 1678
90dc47e0 1679/* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
1680static void
1681handle_assertion (pfile, str, type)
1682 cpp_reader *pfile;
1683 const char *str;
1684 int type;
1685{
1686 size_t count = strlen (str);
1687 const char *p = strchr (str, '=');
1688
1689 if (p)
1690 {
1691 /* Copy the entire option so we can modify it. Change the first
1692 "=" in the string to a '(', and tack a ')' on the end. */
1693 char *buf = (char *) alloca (count + 1);
1694
1695 memcpy (buf, str, count);
1696 buf[p - str] = '(';
1697 buf[count++] = ')';
1698 str = buf;
1699 }
1700
1701 run_directive (pfile, type, str, count, 0);
1702}
1703
79bd622b 1704/* Allocate a new cpp_buffer for PFILE, and push it on the input
1705 buffer stack. If BUFFER != NULL, then use the LENGTH characters in
1706 BUFFER as the new input buffer. Return the new buffer, or NULL on
1707 failure. */
f51c2148 1708
1709cpp_buffer *
1710cpp_push_buffer (pfile, buffer, length)
1711 cpp_reader *pfile;
1712 const U_CHAR *buffer;
1713 long length;
1714{
1715 cpp_buffer *buf = CPP_BUFFER (pfile);
1716 cpp_buffer *new;
1717 if (++pfile->buffer_stack_depth == CPP_STACK_MAX)
1718 {
63e1abce 1719 cpp_fatal (pfile, "#include nested too deeply");
f51c2148 1720 return NULL;
1721 }
79bd622b 1722
f51c2148 1723 new = xobnew (pfile->buffer_ob, cpp_buffer);
79bd622b 1724 /* Clears, amongst other things, if_stack and mi_cmacro. */
f51c2148 1725 memset (new, 0, sizeof (cpp_buffer));
1726
79bd622b 1727 pfile->lexer_pos.output_line = 1;
241e762e 1728 new->line_base = new->buf = new->cur = buffer;
f51c2148 1729 new->rlimit = buffer + length;
1730 new->prev = buf;
338fa5f7 1731 new->pfile = pfile;
396ffa86 1732 /* Preprocessed files don't do trigraph and escaped newline processing. */
1733 new->from_stage3 = CPP_OPTION (pfile, preprocessed);
f669338a 1734 /* No read ahead or extra char initially. */
338fa5f7 1735 new->read_ahead = EOF;
f669338a 1736 new->extra_char = EOF;
3c7df4d3 1737 pfile->state.next_bol = 1;
f51c2148 1738
1739 CPP_BUFFER (pfile) = new;
1740 return new;
1741}
1742
1743cpp_buffer *
1744cpp_pop_buffer (pfile)
1745 cpp_reader *pfile;
1746{
920b5d41 1747 cpp_buffer *buffer = pfile->buffer;
1748 struct if_stack *ifs = buffer->if_stack;
6cae2504 1749 int wfb;
f51c2148 1750
920b5d41 1751 /* Walk back up the conditional stack till we reach its level at
1752 entry to this file, issuing error messages. */
1753 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
1754 cpp_error_with_line (pfile, ifs->pos.line, ifs->pos.col,
1755 "unterminated #%s", dtable[ifs->type].name);
1756
1757 wfb = (buffer->inc != 0);
6cae2504 1758 if (wfb)
920b5d41 1759 _cpp_pop_file_buffer (pfile, buffer);
f51c2148 1760
920b5d41 1761 pfile->buffer = buffer->prev;
1762 obstack_free (pfile->buffer_ob, buffer);
f51c2148 1763 pfile->buffer_stack_depth--;
6cae2504 1764
920b5d41 1765 if (pfile->buffer && wfb && pfile->cb.leave_file)
6cae2504 1766 (*pfile->cb.leave_file) (pfile);
1767
920b5d41 1768 return pfile->buffer;
f51c2148 1769}
1770
1771#define obstack_chunk_alloc xmalloc
1772#define obstack_chunk_free free
1773void
1774_cpp_init_stacks (pfile)
1775 cpp_reader *pfile;
1776{
76faa4c0 1777 int i;
79bd622b 1778 cpp_hashnode *node;
76faa4c0 1779
f51c2148 1780 pfile->buffer_ob = xnew (struct obstack);
1781 obstack_init (pfile->buffer_ob);
76faa4c0 1782
79bd622b 1783 /* Register the directives. */
1784 for (i = 1; i < N_DIRECTIVES; i++)
1785 {
1786 node = cpp_lookup (pfile, dtable[i - 1].name, dtable[i - 1].length);
1787 node->directive_index = i;
1788 }
f51c2148 1789}
1790
1791void
1792_cpp_cleanup_stacks (pfile)
1793 cpp_reader *pfile;
1794{
1795 obstack_free (pfile->buffer_ob, 0);
1796 free (pfile->buffer_ob);
1797}