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