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