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