* dbxout.c (dbxout_source_line): Remove extra tab.
[gcc.git] / gcc / cpplib.c
1 /* CPP Library.
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000 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 #include "symcat.h"
30
31 /* Stack of conditionals currently in progress
32 (including both successful and failing conditionals). */
33
34 struct if_stack
35 {
36 struct if_stack *next;
37 unsigned int lineno; /* line number where condition started */
38 unsigned int colno; /* and column */
39 int was_skipping; /* value of pfile->skipping before this if */
40 const cpp_hashnode *cmacro; /* macro name for #ifndef around entire file */
41 int type; /* type of last directive seen in this group */
42 };
43
44 /* Forward declarations. */
45
46 static void validate_else PARAMS ((cpp_reader *, const U_CHAR *));
47 static int parse_include PARAMS ((cpp_reader *, const U_CHAR *, int,
48 const U_CHAR **, unsigned int *,
49 int *));
50 static void push_conditional PARAMS ((cpp_reader *, int, int,
51 const cpp_hashnode *));
52 static int read_line_number PARAMS ((cpp_reader *, int *));
53 static int strtoul_for_line PARAMS ((const U_CHAR *, unsigned int,
54 unsigned long *));
55 static void do_diagnostic PARAMS ((cpp_reader *, enum error_type));
56 static const cpp_hashnode *
57 parse_ifdef PARAMS ((cpp_reader *, const U_CHAR *));
58 static const cpp_hashnode *
59 detect_if_not_defined PARAMS ((cpp_reader *));
60 static cpp_hashnode *
61 get_define_node PARAMS ((cpp_reader *));
62 static void unwind_if_stack PARAMS ((cpp_reader *, cpp_buffer *));
63
64 /* This is the table of directive handlers. It is ordered by
65 frequency of occurrence; the numbers at the end are directive
66 counts from all the source code I have lying around (egcs and libc
67 CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
68 pcmcia-cs-3.0.9).
69
70 The entries with a dash and a name after the count are extensions,
71 of which all but #warning and #include_next are deprecated. The name
72 is where the extension appears to have come from. */
73
74 /* #sccs is not always recognized. */
75 #ifdef SCCS_DIRECTIVE
76 # define SCCS_ENTRY D(sccs, T_SCCS, EXTENSION, 0)
77 #else
78 # define SCCS_ENTRY /* nothing */
79 #endif
80
81 #define DIRECTIVE_TABLE \
82 D(define, T_DEFINE = 0, KANDR, COMMENTS | IN_I)/* 270554 */ \
83 D(include, T_INCLUDE, KANDR, EXPAND | INCL) /* 52262 */ \
84 D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \
85 D(ifdef, T_IFDEF, KANDR, COND) /* 22000 */ \
86 D(if, T_IF, KANDR, COND | EXPAND) /* 18162 */ \
87 D(else, T_ELSE, KANDR, COND) /* 9863 */ \
88 D(ifndef, T_IFNDEF, KANDR, COND) /* 9675 */ \
89 D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \
90 D(line, T_LINE, KANDR, EXPAND) /* 2465 */ \
91 D(elif, T_ELIF, KANDR, COND | EXPAND) /* 610 */ \
92 D(error, T_ERROR, STDC89, 0) /* 475 */ \
93 D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \
94 D(warning, T_WARNING, EXTENSION, 0) /* 22 GNU */ \
95 D(include_next, T_INCLUDE_NEXT, EXTENSION, EXPAND | INCL) /* 19 GNU */ \
96 D(ident, T_IDENT, EXTENSION, IN_I) /* 11 SVR4 */ \
97 D(import, T_IMPORT, EXTENSION, EXPAND | INCL) /* 0 ObjC */ \
98 D(assert, T_ASSERT, EXTENSION, 0) /* 0 SVR4 */ \
99 D(unassert, T_UNASSERT, EXTENSION, 0) /* 0 SVR4 */ \
100 SCCS_ENTRY /* 0 SVR2? */
101
102 /* Use the table to generate a series of prototypes, an enum for the
103 directive names, and an array of directive handlers. */
104
105 /* The directive-processing functions are declared to return int
106 instead of void, because some old compilers have trouble with
107 pointers to functions returning void. */
108
109 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
110 #define D(name, t, o, f) static void CONCAT2(do_,name) PARAMS ((cpp_reader *));
111 DIRECTIVE_TABLE
112 #undef D
113
114 #define D(n, tag, o, f) tag,
115 enum
116 {
117 DIRECTIVE_TABLE
118 N_DIRECTIVES
119 };
120 #undef D
121
122 /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
123 #define D(name, t, origin, flags) \
124 { CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
125 sizeof STRINGX(name) - 1, origin, flags },
126 static const struct directive dtable[] =
127 {
128 DIRECTIVE_TABLE
129 };
130 #undef D
131 #undef DIRECTIVE_TABLE
132
133 /* Check if a token's name matches that of a known directive. Put in
134 this file to save exporting dtable and other unneeded information. */
135 const struct directive *
136 _cpp_check_directive (pfile, token)
137 cpp_reader *pfile;
138 const cpp_token *token;
139 {
140 unsigned int i;
141
142 if (token->type != CPP_NAME)
143 {
144 if (token->type == CPP_EOF && CPP_WTRADITIONAL (pfile)
145 && pfile->state.indented)
146 cpp_warning (pfile, "traditional C ignores #\\n with the # indented");
147
148 return 0;
149 }
150
151 for (i = 0; i < N_DIRECTIVES; i++)
152 if (pfile->spec_nodes->dirs[i] == token->val.node)
153 break;
154
155 if (i == N_DIRECTIVES)
156 return 0;
157
158 /* We should lex headers correctly, regardless of whether we're
159 skipping or not. */
160 pfile->state.angled_headers = dtable[i].flags & INCL;
161
162 /* If we are rescanning preprocessed input, only directives tagged
163 with IN_I are honored, and the warnings below are suppressed. */
164 if (CPP_OPTION (pfile, preprocessed))
165 {
166 if (!dtable[i].flags & IN_I)
167 return 0;
168 }
169 else
170 {
171 /* Traditionally, a directive is ignored unless its # is in
172 column 1. Therefore in code intended to work with K+R
173 compilers, directives added by C89 must have their #
174 indented, and directives present in traditional C must not.
175 This is true even of directives in skipped conditional
176 blocks. */
177 if (CPP_WTRADITIONAL (pfile))
178 {
179 if (pfile->state.indented && dtable[i].origin == KANDR)
180 cpp_warning (pfile,
181 "traditional C ignores #%s with the # indented",
182 dtable[i].name);
183
184 else if (!pfile->state.indented && dtable[i].origin != KANDR)
185 cpp_warning (pfile,
186 "suggest hiding #%s from traditional C with an indented #",
187 dtable[i].name);
188 }
189
190 /* If we are skipping a failed conditional group, all non-conditional
191 directives are ignored. */
192 if (pfile->skipping && !(dtable[i].flags & COND))
193 return 0;
194
195 /* Issue -pedantic warnings for extended directives. */
196 if (CPP_PEDANTIC (pfile) && dtable[i].origin == EXTENSION)
197 cpp_pedwarn (pfile, "ISO C does not allow #%s", dtable[i].name);
198 }
199
200 /* Only flag to save comments if we process the directive. */
201 pfile->state.save_comments = (! CPP_OPTION (pfile, discard_comments)
202 && (dtable[i].flags & COMMENTS));
203
204 return &dtable[i];
205 }
206
207 const struct directive *
208 _cpp_check_linemarker (pfile, token)
209 cpp_reader *pfile;
210 const cpp_token *token ATTRIBUTE_UNUSED;
211 {
212 /* # followed by a number is equivalent to #line. Do not recognize
213 this form in assembly language source files or skipped
214 conditional groups. Complain about this form if we're being
215 pedantic, but not if this is regurgitated input (preprocessed or
216 fed back in by the C++ frontend). */
217 if (pfile->skipping || CPP_OPTION (pfile, lang_asm))
218 return 0;
219
220 if (CPP_PEDANTIC (pfile) && CPP_BUFFER (pfile)->inc
221 && ! CPP_OPTION (pfile, preprocessed))
222 cpp_pedwarn (pfile, "# followed by integer");
223
224 /* In -traditional mode, a directive is ignored unless its #
225 is in column 1. */
226 if (pfile->state.indented && CPP_WTRADITIONAL (pfile))
227 cpp_warning (pfile, "traditional C ignores #%s with the # indented",
228 dtable[T_LINE].name);
229
230 return &dtable[T_LINE];
231 }
232
233 static cpp_hashnode *
234 get_define_node (pfile)
235 cpp_reader *pfile;
236 {
237 const cpp_token *token;
238
239 /* Skip any -C comments. */
240 while ((token = _cpp_get_token (pfile))->type == CPP_COMMENT)
241 ;
242
243 /* The token immediately after #define must be an identifier. That
244 identifier is not allowed to be "defined". See predefined macro
245 names (6.10.8.4). In C++, it is not allowed to be any of the
246 <iso646.h> macro names (which are keywords in C++) either. */
247
248 if (token->type != CPP_NAME)
249 {
250 if (token->type == CPP_DEFINED)
251 cpp_error_with_line (pfile, token->line, token->col,
252 "\"defined\" cannot be used as a macro name");
253 else if (token->flags & NAMED_OP)
254 cpp_error_with_line (pfile, token->line, token->col,
255 "\"%s\" cannot be used as a macro name in C++",
256 token->val.node->name);
257 else
258 cpp_error_with_line (pfile, token->line, token->col,
259 "macro names must be identifiers");
260 return 0;
261 }
262
263 /* In Objective C, some keywords begin with '@', but general identifiers
264 do not, and you're not allowed to #define them. */
265 if (token->val.node->name[0] == '@')
266 {
267 cpp_error_with_line (pfile, token->line, token->col,
268 "\"%s\" cannot be used as a macro name",
269 token->val.node->name);
270 return 0;
271 }
272
273 /* Check for poisoned identifiers now. */
274 if (token->val.node->type == T_POISON)
275 {
276 cpp_error_with_line (pfile, token->line, token->col,
277 "attempt to use poisoned \"%s\"",
278 token->val.node->name);
279 return 0;
280 }
281
282 return token->val.node;
283 }
284
285 /* Process a #define command. */
286 static void
287 do_define (pfile)
288 cpp_reader *pfile;
289 {
290 cpp_hashnode *node;
291
292 if ((node = get_define_node (pfile)))
293 if (_cpp_create_definition (pfile, node))
294 if (pfile->cb.define)
295 (*pfile->cb.define) (pfile, node);
296 }
297
298 /* Remove the definition of a symbol from the symbol table. */
299 static void
300 do_undef (pfile)
301 cpp_reader *pfile;
302 {
303 cpp_hashnode *node = get_define_node (pfile);
304
305 if (_cpp_get_token (pfile)->type != CPP_EOF)
306 cpp_pedwarn (pfile, "junk on line after #undef");
307
308 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier
309 is not currently defined as a macro name. */
310 if (node && node->type != T_VOID)
311 {
312 if (pfile->cb.undef)
313 (*pfile->cb.undef) (pfile, node);
314
315 if (node->type != T_MACRO)
316 cpp_warning (pfile, "undefining \"%s\"", node->name);
317
318 _cpp_free_definition (node);
319 }
320 }
321
322
323 /* Handle #include and #import. */
324
325 static int
326 parse_include (pfile, dir, trail, strp, lenp, abp)
327 cpp_reader *pfile;
328 const U_CHAR *dir;
329 int trail;
330 const U_CHAR **strp;
331 unsigned int *lenp;
332 int *abp;
333 {
334 const cpp_token *name = _cpp_get_token (pfile);
335
336 if (name->type != CPP_STRING && name->type != CPP_HEADER_NAME)
337 {
338 if (name->type == CPP_LESS)
339 name = _cpp_glue_header_name (pfile);
340 else
341 {
342 cpp_error (pfile, "#%s expects \"FILENAME\" or <FILENAME>", dir);
343 return 1;
344 }
345 }
346 if (name->val.str.len == 0)
347 {
348 cpp_error (pfile, "empty file name in #%s", dir);
349 return 1;
350 }
351
352 if (!trail && _cpp_get_token (pfile)->type != CPP_EOF)
353 cpp_error (pfile, "junk at end of #%s", dir);
354
355 *lenp = name->val.str.len;
356 *strp = name->val.str.text;
357 *abp = (name->type == CPP_HEADER_NAME);
358
359 if (pfile->cb.include)
360 (*pfile->cb.include) (pfile, dir, *strp, *lenp, *abp);
361 return 0;
362 }
363
364 static void
365 do_include (pfile)
366 cpp_reader *pfile;
367 {
368 unsigned int len;
369 const U_CHAR *str;
370 int ab;
371
372 if (parse_include (pfile, dtable[T_INCLUDE].name, 0, &str, &len, &ab))
373 return;
374
375 _cpp_execute_include (pfile, str, len, 0, 0, ab);
376 }
377
378 static void
379 do_import (pfile)
380 cpp_reader *pfile;
381 {
382 unsigned int len;
383 const U_CHAR *str;
384 int ab;
385
386 if (!pfile->import_warning && CPP_OPTION (pfile, warn_import))
387 {
388 pfile->import_warning = 1;
389 cpp_warning (pfile,
390 "#import is obsolete, use an #ifndef wrapper in the header file");
391 }
392
393 if (parse_include (pfile, dtable[T_IMPORT].name, 0, &str, &len, &ab))
394 return;
395
396 _cpp_execute_include (pfile, str, len, 1, 0, ab);
397 }
398
399 static void
400 do_include_next (pfile)
401 cpp_reader *pfile;
402 {
403 unsigned int len;
404 const U_CHAR *str;
405 struct file_name_list *search_start = 0;
406 int ab;
407
408 if (parse_include (pfile, dtable[T_INCLUDE_NEXT].name, 0, &str, &len, &ab))
409 return;
410
411 /* For #include_next, skip in the search path past the dir in which
412 the current file was found. If this is the last directory in the
413 search path, don't include anything. If the current file was
414 specified with an absolute path, use the normal search logic. If
415 this is the primary source file, use the normal search logic and
416 generate a warning. */
417 if (CPP_PREV_BUFFER (CPP_BUFFER (pfile)))
418 {
419 if (CPP_BUFFER (pfile)->inc->foundhere)
420 {
421 search_start = CPP_BUFFER (pfile)->inc->foundhere->next;
422 if (!search_start)
423 return;
424 }
425 }
426 else
427 cpp_warning (pfile, "#include_next in primary source file");
428
429 _cpp_execute_include (pfile, str, len, 0, search_start, ab);
430 }
431
432 /* Subroutine of do_line. Read next token from PFILE without adding it to
433 the output buffer. If it is a number between 1 and 4, store it in *NUM
434 and return 1; otherwise, return 0 and complain if we aren't at the end
435 of the directive. */
436
437 static int
438 read_line_number (pfile, num)
439 cpp_reader *pfile;
440 int *num;
441 {
442 const cpp_token *tok = _cpp_get_token (pfile);
443 enum cpp_ttype type = tok->type;
444 const U_CHAR *p = tok->val.str.text;
445 unsigned int len = tok->val.str.len;
446
447 if (type == CPP_NUMBER && len == 1 && p[0] >= '1' && p[0] <= '4')
448 {
449 *num = p[0] - '0';
450 return 1;
451 }
452 else
453 {
454 if (type != CPP_EOF)
455 cpp_error (pfile, "invalid format #line");
456 return 0;
457 }
458 }
459
460 /* Another subroutine of do_line. Convert a number in STR, of length
461 LEN, to binary; store it in NUMP, and return 0 if the number was
462 well-formed, 1 if not. Temporary, hopefully. */
463 static int
464 strtoul_for_line (str, len, nump)
465 const U_CHAR *str;
466 unsigned int len;
467 unsigned long *nump;
468 {
469 unsigned long reg = 0;
470 U_CHAR c;
471 while (len--)
472 {
473 c = *str++;
474 if (!ISDIGIT (c))
475 return 1;
476 reg *= 10;
477 reg += c - '0';
478 }
479 *nump = reg;
480 return 0;
481 }
482
483 /* Interpret #line command.
484 Note that the filename string (if any) is treated as if it were an
485 include filename. That means no escape handling. */
486
487 static void
488 do_line (pfile)
489 cpp_reader *pfile;
490 {
491 cpp_buffer *ip = CPP_BUFFER (pfile);
492 unsigned long new_lineno, old_lineno;
493 /* C99 raised the minimum limit on #line numbers. */
494 unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
495 int action_number = 0;
496 int enter = 0, leave = 0, rename = 0;
497 enum cpp_ttype type;
498 const U_CHAR *str;
499 char *fname;
500 unsigned int len;
501 const cpp_token *tok;
502
503 tok = _cpp_get_token (pfile);
504 type = tok->type;
505 str = tok->val.str.text;
506 len = tok->val.str.len;
507
508 if (type != CPP_NUMBER || strtoul_for_line (str, len, &new_lineno))
509 {
510 cpp_error (pfile, "token after #line is not a positive integer");
511 return;
512 }
513
514 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
515 cpp_pedwarn (pfile, "line number out of range");
516
517 old_lineno = ip->lineno;
518 ip->lineno = new_lineno;
519 tok = _cpp_get_token (pfile);
520 type = tok->type;
521 str = tok->val.str.text;
522 len = tok->val.str.len;
523
524 if (type == CPP_EOF)
525 goto done;
526 else if (type != CPP_STRING)
527 {
528 cpp_error (pfile, "second token after #line is not a string");
529 ip->lineno = old_lineno; /* malformed #line should have no effect */
530 return;
531 }
532
533 fname = alloca (len + 1);
534 memcpy (fname, str, len);
535 fname[len] = '\0';
536
537 if (strcmp (fname, ip->nominal_fname))
538 {
539 rename = 1;
540 if (!strcmp (fname, ip->inc->name))
541 ip->nominal_fname = ip->inc->name;
542 else
543 ip->nominal_fname = _cpp_fake_include (pfile, fname);
544 }
545
546 if (read_line_number (pfile, &action_number) == 0)
547 goto done;
548
549 if (CPP_PEDANTIC (pfile))
550 cpp_pedwarn (pfile, "garbage at end of #line");
551
552 if (action_number == 1)
553 {
554 enter = 1;
555 cpp_make_system_header (pfile, ip, 0);
556 read_line_number (pfile, &action_number);
557 }
558 else if (action_number == 2)
559 {
560 leave = 1;
561 cpp_make_system_header (pfile, ip, 0);
562 read_line_number (pfile, &action_number);
563 }
564 if (action_number == 3)
565 {
566 cpp_make_system_header (pfile, ip, 1);
567 read_line_number (pfile, &action_number);
568 }
569 if (action_number == 4)
570 {
571 cpp_make_system_header (pfile, ip, 2);
572 read_line_number (pfile, &action_number);
573 }
574
575 done:
576 if (enter && pfile->cb.enter_file)
577 (*pfile->cb.enter_file) (pfile);
578 if (leave && pfile->cb.leave_file)
579 (*pfile->cb.leave_file) (pfile);
580 if (rename && pfile->cb.rename_file)
581 (*pfile->cb.rename_file) (pfile);
582 }
583
584 /*
585 * Report a warning or error detected by the program we are
586 * processing. Use the directive's tokens in the error message.
587 */
588
589 static void
590 do_diagnostic (pfile, code)
591 cpp_reader *pfile;
592 enum error_type code;
593 {
594 if (_cpp_begin_message (pfile, code, NULL, 0, 0))
595 {
596 cpp_output_list (pfile, stderr, &pfile->token_list,
597 pfile->first_directive_token);
598 putc ('\n', stderr);
599 }
600 }
601
602 static void
603 do_error (pfile)
604 cpp_reader *pfile;
605 {
606 do_diagnostic (pfile, ERROR);
607 }
608
609 static void
610 do_warning (pfile)
611 cpp_reader *pfile;
612 {
613 do_diagnostic (pfile, WARNING);
614 }
615
616 /* Report program identification. */
617
618 static void
619 do_ident (pfile)
620 cpp_reader *pfile;
621 {
622 const cpp_token *str = _cpp_get_token (pfile);
623
624 if (str->type == CPP_STRING && _cpp_get_token (pfile)->type == CPP_EOF)
625 {
626 if (pfile->cb.ident)
627 (*pfile->cb.ident) (pfile, str->val.str.text, str->val.str.len);
628 return;
629 }
630
631 cpp_error (pfile, "invalid #ident");
632 }
633
634 /* Pragmata handling. We handle some of these, and pass the rest on
635 to the front end. C99 defines three pragmas and says that no macro
636 expansion is to be performed on them; whether or not macro
637 expansion happens for other pragmas is implementation defined.
638 This implementation never macro-expands the text after #pragma.
639
640 We currently do not support the _Pragma operator. Support for that
641 has to be coordinated with the front end. Proposed implementation:
642 both #pragma blah blah and _Pragma("blah blah") become
643 __builtin_pragma(blah blah) and we teach the parser about that. */
644
645 /* Sub-handlers for the pragmas needing treatment here.
646 They return 1 if the token buffer is to be popped, 0 if not. */
647 struct pragma_entry
648 {
649 struct pragma_entry *next;
650 const char *name;
651 size_t len;
652 int isnspace;
653 union {
654 void (*handler) PARAMS ((cpp_reader *));
655 struct pragma_entry *space;
656 } u;
657 };
658
659 void
660 cpp_register_pragma (pfile, space, name, handler)
661 cpp_reader *pfile;
662 const char *space;
663 const char *name;
664 void (*handler) PARAMS ((cpp_reader *));
665 {
666 struct pragma_entry **x, *new;
667 size_t len;
668
669 x = &pfile->pragmas;
670 if (space)
671 {
672 struct pragma_entry *p = pfile->pragmas;
673 len = strlen (space);
674 while (p)
675 {
676 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
677 {
678 x = &p->u.space;
679 goto found;
680 }
681 p = p->next;
682 }
683 cpp_ice (pfile, "unknown #pragma namespace %s", space);
684 return;
685 }
686
687 found:
688 new = xnew (struct pragma_entry);
689 new->name = name;
690 new->len = strlen (name);
691 new->isnspace = 0;
692 new->u.handler = handler;
693
694 new->next = *x;
695 *x = new;
696 }
697
698 void
699 cpp_register_pragma_space (pfile, space)
700 cpp_reader *pfile;
701 const char *space;
702 {
703 struct pragma_entry *new;
704 const struct pragma_entry *p = pfile->pragmas;
705 size_t len = strlen (space);
706
707 while (p)
708 {
709 if (p->isnspace && p->len == len && !memcmp (p->name, space, len))
710 /* Multiple different callers are allowed to register the same
711 namespace. */
712 return;
713 p = p->next;
714 }
715
716 new = xnew (struct pragma_entry);
717 new->name = space;
718 new->len = len;
719 new->isnspace = 1;
720 new->u.space = 0;
721
722 new->next = pfile->pragmas;
723 pfile->pragmas = new;
724 }
725
726 static void do_pragma_once PARAMS ((cpp_reader *));
727 static void do_pragma_poison PARAMS ((cpp_reader *));
728 static void do_pragma_system_header PARAMS ((cpp_reader *));
729 static void do_pragma_dependency PARAMS ((cpp_reader *));
730
731 void
732 _cpp_init_internal_pragmas (pfile)
733 cpp_reader *pfile;
734 {
735 /* top level */
736 cpp_register_pragma (pfile, 0, "poison", do_pragma_poison);
737 cpp_register_pragma (pfile, 0, "once", do_pragma_once);
738
739 /* GCC namespace */
740 cpp_register_pragma_space (pfile, "GCC");
741
742 cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
743 cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
744 cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
745 }
746
747 static void
748 do_pragma (pfile)
749 cpp_reader *pfile;
750 {
751 const struct pragma_entry *p;
752 const cpp_token *tok;
753 const cpp_hashnode *node;
754 const U_CHAR *name;
755 size_t len;
756
757 p = pfile->pragmas;
758
759 new_space:
760 tok = _cpp_get_token (pfile);
761 if (tok->type == CPP_EOF)
762 return;
763
764 if (tok->type != CPP_NAME)
765 {
766 cpp_error (pfile, "malformed #pragma directive");
767 return;
768 }
769
770 node = tok->val.node;
771 name = node->name;
772 len = node->length;
773 while (p)
774 {
775 if (strlen (p->name) == len && !memcmp (p->name, name, len))
776 {
777 if (p->isnspace)
778 {
779 p = p->u.space;
780 goto new_space;
781 }
782 else
783 {
784 (*p->u.handler) (pfile);
785 return;
786 }
787 }
788 p = p->next;
789 }
790
791 if (pfile->cb.def_pragma)
792 (*pfile->cb.def_pragma) (pfile);
793 }
794
795 static void
796 do_pragma_once (pfile)
797 cpp_reader *pfile;
798 {
799 cpp_buffer *ip = CPP_BUFFER (pfile);
800
801 /* Allow #pragma once in system headers, since that's not the user's
802 fault. */
803 cpp_warning (pfile, "#pragma once is obsolete");
804
805 if (CPP_PREV_BUFFER (ip) == NULL)
806 cpp_warning (pfile, "#pragma once outside include file");
807 else
808 ip->inc->cmacro = NEVER_REREAD;
809 }
810
811 static void
812 do_pragma_poison (pfile)
813 cpp_reader *pfile;
814 {
815 /* Poison these symbols so that all subsequent usage produces an
816 error message. */
817 const cpp_token *tok;
818 cpp_hashnode *hp;
819
820 for (;;)
821 {
822 tok = _cpp_get_token (pfile);
823 if (tok->type == CPP_EOF)
824 break;
825 if (tok->type != CPP_NAME)
826 {
827 cpp_error (pfile, "invalid #pragma poison directive");
828 return;
829 }
830
831 hp = tok->val.node;
832 if (hp->type == T_POISON)
833 ; /* It is allowed to poison the same identifier twice. */
834 else
835 {
836 if (hp->type != T_VOID)
837 cpp_warning (pfile, "poisoning existing macro \"%s\"", hp->name);
838 _cpp_free_definition (hp);
839 hp->type = T_POISON;
840 }
841 }
842
843 if (pfile->cb.poison)
844 (*pfile->cb.poison) (pfile);
845 }
846
847 /* Mark the current header as a system header. This will suppress
848 some categories of warnings (notably those from -pedantic). It is
849 intended for use in system libraries that cannot be implemented in
850 conforming C, but cannot be certain that their headers appear in a
851 system include directory. To prevent abuse, it is rejected in the
852 primary source file. */
853 static void
854 do_pragma_system_header (pfile)
855 cpp_reader *pfile;
856 {
857 cpp_buffer *ip = CPP_BUFFER (pfile);
858 if (CPP_PREV_BUFFER (ip) == NULL)
859 cpp_warning (pfile, "#pragma system_header outside include file");
860 else
861 cpp_make_system_header (pfile, ip, 1);
862 }
863
864 /* Check the modified date of the current include file against a specified
865 file. Issue a diagnostic, if the specified file is newer. We use this to
866 determine if a fixed header should be refixed. */
867 static void
868 do_pragma_dependency (pfile)
869 cpp_reader *pfile;
870 {
871 const U_CHAR *name;
872 unsigned int len;
873 int ordering, ab;
874 char left, right;
875
876 if (parse_include (pfile, U"pragma dependency", 1, &name, &len, &ab))
877 return;
878
879 left = ab ? '<' : '"';
880 right = ab ? '>' : '"';
881
882 ordering = _cpp_compare_file_date (pfile, name, len, ab);
883 if (ordering < 0)
884 cpp_warning (pfile, "cannot find source %c%s%c", left, name, right);
885 else if (ordering > 0)
886 {
887 const cpp_token *msg = _cpp_get_token (pfile);
888
889 cpp_warning (pfile, "current file is older than %c%.*s%c",
890 left, (int)len, name, right);
891 if (msg->type != CPP_EOF
892 && _cpp_begin_message (pfile, WARNING, NULL, msg->line, msg->col))
893 {
894 cpp_output_list (pfile, stderr, &pfile->token_list, msg);
895 putc ('\n', stderr);
896 }
897 }
898 }
899
900 /* Just ignore #sccs, on systems where we define it at all. */
901 #ifdef SCCS_DIRECTIVE
902 static void
903 do_sccs (pfile)
904 cpp_reader *pfile ATTRIBUTE_UNUSED;
905 {
906 }
907 #endif
908
909 /* We've found an `#if' directive. If the only thing before it in
910 this file is white space, and if it is of the form
911 `#if ! defined SYMBOL', then SYMBOL is a possible controlling macro
912 for inclusion of this file. (See redundant_include_p in cppfiles.c
913 for an explanation of controlling macros.) If so, return the
914 hash node for SYMBOL. Otherwise, return NULL. */
915
916 static const cpp_hashnode *
917 detect_if_not_defined (pfile)
918 cpp_reader *pfile;
919 {
920 const cpp_token *token;
921 cpp_hashnode *cmacro = 0;
922
923 /* We are guaranteed that tokens are consecutive and end in CPP_EOF. */
924 token = pfile->first_directive_token + 2;
925
926 if (token->type != CPP_NOT)
927 return 0;
928
929 token++;
930 if (token->type != CPP_DEFINED)
931 return 0;
932
933 token++;
934 if (token->type == CPP_OPEN_PAREN)
935 token++;
936
937 if (token->type != CPP_NAME)
938 return 0;
939
940 cmacro = token->val.node;
941
942 if (token[-1].type == CPP_OPEN_PAREN)
943 {
944 token++;
945 if (token->type != CPP_CLOSE_PAREN)
946 return 0;
947 }
948
949 token++;
950 if (token->type != CPP_EOF)
951 return 0;
952
953 return cmacro;
954 }
955
956 /* Parse an #ifdef or #ifndef directive. Returns the hash node of the
957 macro being tested, and issues various error messages. */
958
959 static const cpp_hashnode *
960 parse_ifdef (pfile, name)
961 cpp_reader *pfile;
962 const U_CHAR *name;
963 {
964 enum cpp_ttype type;
965 const cpp_hashnode *node = 0;
966
967 const cpp_token *token = _cpp_get_token (pfile);
968 type = token->type;
969
970 if (type == CPP_EOF)
971 cpp_pedwarn (pfile, "#%s with no argument", name);
972 else if (type != CPP_NAME)
973 cpp_pedwarn (pfile, "#%s with invalid argument", name);
974 else if (_cpp_get_token (pfile)->type != CPP_EOF)
975 cpp_pedwarn (pfile, "garbage at end of #%s", name);
976
977 if (type == CPP_NAME)
978 node = token->val.node;
979 if (node && node->type == T_POISON)
980 {
981 cpp_error (pfile, "attempt to use poisoned identifier \"%s\"",
982 node->name);
983 node = 0;
984 }
985
986 return node;
987 }
988
989 /* #ifdef is dead simple. */
990
991 static void
992 do_ifdef (pfile)
993 cpp_reader *pfile;
994 {
995 const cpp_hashnode *node = 0;
996
997 if (! pfile->skipping)
998 node = parse_ifdef (pfile, dtable[T_IFDEF].name);
999
1000 push_conditional (pfile, !(node && node->type != T_VOID), T_IFDEF, 0);
1001 }
1002
1003 /* #ifndef is a tad more complex, because we need to check for a
1004 no-reinclusion wrapper. */
1005
1006 static void
1007 do_ifndef (pfile)
1008 cpp_reader *pfile;
1009 {
1010 int start_of_file = 0;
1011 const cpp_hashnode *node = 0;
1012
1013 if (! pfile->skipping)
1014 {
1015 start_of_file = (pfile->token_list.flags & BEG_OF_FILE);
1016 node = parse_ifdef (pfile, dtable[T_IFNDEF].name);
1017 }
1018
1019 push_conditional (pfile, node && node->type != T_VOID,
1020 T_IFNDEF, start_of_file ? node : 0);
1021 }
1022
1023 /* #if is straightforward; just call _cpp_parse_expr, then conditional_skip.
1024 Also, check for a reinclude preventer of the form #if !defined (MACRO). */
1025
1026 static void
1027 do_if (pfile)
1028 cpp_reader *pfile;
1029 {
1030 const cpp_hashnode *cmacro = 0;
1031 int value = 0;
1032
1033 if (! pfile->skipping)
1034 {
1035 if (pfile->token_list.flags & BEG_OF_FILE)
1036 cmacro = detect_if_not_defined (pfile);
1037 value = _cpp_parse_expr (pfile);
1038 }
1039 push_conditional (pfile, value == 0, T_IF, cmacro);
1040 }
1041
1042 /* #else flips pfile->skipping and continues without changing
1043 if_stack; this is so that the error message for missing #endif's
1044 etc. will point to the original #if. */
1045
1046 static void
1047 do_else (pfile)
1048 cpp_reader *pfile;
1049 {
1050 struct if_stack *ifs = CPP_BUFFER (pfile)->if_stack;
1051 validate_else (pfile, dtable[T_ELSE].name);
1052
1053 if (ifs == NULL)
1054 {
1055 cpp_error (pfile, "#else without #if");
1056 return;
1057 }
1058 if (ifs->type == T_ELSE)
1059 {
1060 cpp_error (pfile, "#else after #else");
1061 cpp_error_with_line (pfile, ifs->lineno, ifs->colno,
1062 "the conditional began here");
1063 }
1064
1065 /* #ifndef can't have its special treatment for containing the whole file
1066 if it has a #else clause. */
1067 ifs->cmacro = 0;
1068 ifs->type = T_ELSE;
1069 if (! ifs->was_skipping)
1070 {
1071 /* If pfile->skipping is 2, one of the blocks in an #if/#elif/... chain
1072 succeeded, so we mustn't do the else block. */
1073 if (pfile->skipping < 2)
1074 pfile->skipping = ! pfile->skipping;
1075 }
1076 }
1077
1078 /*
1079 * handle a #elif directive by not changing if_stack either.
1080 * see the comment above do_else.
1081 */
1082
1083 static void
1084 do_elif (pfile)
1085 cpp_reader *pfile;
1086 {
1087 struct if_stack *ifs = CPP_BUFFER (pfile)->if_stack;
1088
1089 if (ifs == NULL)
1090 {
1091 cpp_error (pfile, "#elif without #if");
1092 return;
1093 }
1094 if (ifs->type == T_ELSE)
1095 {
1096 cpp_error (pfile, "#elif after #else");
1097 cpp_error_with_line (pfile, ifs->lineno, ifs->colno,
1098 "the conditional began here");
1099 }
1100
1101 ifs->type = T_ELIF;
1102 if (ifs->was_skipping)
1103 return; /* Don't evaluate a nested #if */
1104
1105 if (pfile->skipping != 1)
1106 {
1107 pfile->skipping = 2; /* one block succeeded, so don't do any others */
1108 return;
1109 }
1110
1111 pfile->skipping = ! _cpp_parse_expr (pfile);
1112 }
1113
1114 /* #endif pops the if stack and resets pfile->skipping. */
1115
1116 static void
1117 do_endif (pfile)
1118 cpp_reader *pfile;
1119 {
1120 struct if_stack *ifs = CPP_BUFFER (pfile)->if_stack;
1121
1122 validate_else (pfile, dtable[T_ENDIF].name);
1123
1124 if (ifs == NULL)
1125 cpp_error (pfile, "#endif without #if");
1126 else
1127 {
1128 CPP_BUFFER (pfile)->if_stack = ifs->next;
1129 pfile->skipping = ifs->was_skipping;
1130 pfile->potential_control_macro = ifs->cmacro;
1131 obstack_free (pfile->buffer_ob, ifs);
1132 }
1133 }
1134
1135
1136 /* Push an if_stack entry and set pfile->skipping accordingly.
1137 If this is a #ifndef starting at the beginning of a file,
1138 CMACRO is the macro name tested by the #ifndef. */
1139
1140 static void
1141 push_conditional (pfile, skip, type, cmacro)
1142 cpp_reader *pfile;
1143 int skip;
1144 int type;
1145 const cpp_hashnode *cmacro;
1146 {
1147 struct if_stack *ifs;
1148
1149 ifs = xobnew (pfile->buffer_ob, struct if_stack);
1150 ifs->lineno = _cpp_get_line (pfile, &ifs->colno);
1151 ifs->next = CPP_BUFFER (pfile)->if_stack;
1152 ifs->cmacro = cmacro;
1153 ifs->was_skipping = pfile->skipping;
1154 ifs->type = type;
1155
1156 if (!pfile->skipping)
1157 pfile->skipping = skip;
1158
1159 CPP_BUFFER (pfile)->if_stack = ifs;
1160 }
1161
1162 /* Issue -pedantic warning for text which is not a comment following
1163 an #else or #endif. */
1164
1165 static void
1166 validate_else (pfile, directive)
1167 cpp_reader *pfile;
1168 const U_CHAR *directive;
1169 {
1170 if (CPP_PEDANTIC (pfile) && _cpp_get_token (pfile)->type != CPP_EOF)
1171 cpp_pedwarn (pfile, "ISO C forbids text after #%s", directive);
1172 }
1173
1174 /* Called when we reach the end of a file. Walk back up the
1175 conditional stack till we reach its level at entry to this file,
1176 issuing error messages. Then force skipping off. */
1177 static void
1178 unwind_if_stack (pfile, pbuf)
1179 cpp_reader *pfile;
1180 cpp_buffer *pbuf;
1181 {
1182 struct if_stack *ifs, *nifs;
1183
1184 for (ifs = pbuf->if_stack; ifs; ifs = nifs)
1185 {
1186 cpp_error_with_line (pfile, ifs->lineno, ifs->colno, "unterminated #%s",
1187 dtable[ifs->type].name);
1188 nifs = ifs->next;
1189 /* No need to free - they'll all go away with the buffer. */
1190 }
1191 pfile->skipping = 0;
1192 }
1193
1194 /* Parses an assertion, returning a pointer to the hash node of the
1195 predicate, or 0 on error. If an answer was supplied, it is
1196 allocated and placed in ANSWERP, otherwise it is set to 0. We use
1197 _cpp_get_raw_token, since we cannot assume tokens are consecutive
1198 in a #if statement (we may be in a macro), and we don't want to
1199 macro expand. */
1200 cpp_hashnode *
1201 _cpp_parse_assertion (pfile, answerp)
1202 cpp_reader *pfile;
1203 struct answer **answerp;
1204 {
1205 struct answer *answer = 0;
1206 cpp_toklist *list;
1207 U_CHAR *sym;
1208 const cpp_token *token, *predicate;
1209 const struct directive *d = pfile->token_list.directive;
1210 unsigned int len = 0;
1211
1212 predicate = _cpp_get_raw_token (pfile);
1213 if (predicate->type == CPP_EOF)
1214 {
1215 cpp_error (pfile, "assertion without predicate");
1216 return 0;
1217 }
1218 else if (predicate->type != CPP_NAME)
1219 {
1220 cpp_error (pfile, "predicate must be an identifier");
1221 return 0;
1222 }
1223
1224 token = _cpp_get_raw_token (pfile);
1225 if (token->type != CPP_OPEN_PAREN)
1226 {
1227 /* #unassert and #if are OK without predicate. */
1228 if (d == &dtable[T_UNASSERT])
1229 {
1230 if (token->type == CPP_EOF)
1231 goto lookup_node;
1232 }
1233 else if (d != &dtable[T_ASSERT])
1234 {
1235 _cpp_push_token (pfile, token);
1236 goto lookup_node;
1237 }
1238 cpp_error (pfile, "missing '(' after predicate");
1239 return 0;
1240 }
1241
1242 /* Allocate a struct answer, and copy the answer to it. */
1243 answer = (struct answer *) xmalloc (sizeof (struct answer));
1244 list = &answer->list;
1245 _cpp_init_toklist (list, 1); /* Empty. */
1246
1247 for (;;)
1248 {
1249 cpp_token *dest;
1250
1251 token = _cpp_get_raw_token (pfile);
1252
1253 if (token->type == CPP_EOF)
1254 {
1255 cpp_error (pfile, "missing ')' to complete answer");
1256 goto error;
1257 }
1258 if (token->type == CPP_CLOSE_PAREN)
1259 break;
1260
1261 /* Copy the token. */
1262 _cpp_expand_token_space (list, 1);
1263 dest = &list->tokens[list->tokens_used++];
1264 *dest = *token;
1265
1266 if (TOKEN_SPELL (token) == SPELL_STRING)
1267 {
1268 _cpp_expand_name_space (list, token->val.str.len);
1269 dest->val.str.text = list->namebuf + list->name_used;
1270 memcpy (list->namebuf + list->name_used,
1271 token->val.str.text, token->val.str.len);
1272 list->name_used += token->val.str.len;
1273 }
1274 }
1275
1276 if (list->tokens_used == 0)
1277 {
1278 cpp_error (pfile, "predicate's answer is empty");
1279 goto error;
1280 }
1281
1282 /* Drop whitespace at start. */
1283 list->tokens[0].flags &= ~PREV_WHITE;
1284
1285 if ((d == &dtable[T_ASSERT] || d == &dtable[T_UNASSERT])
1286 && token[1].type != CPP_EOF)
1287 {
1288 cpp_error (pfile, "junk at end of assertion");
1289 goto error;
1290 }
1291
1292 lookup_node:
1293 *answerp = answer;
1294 len = predicate->val.node->length;
1295 sym = alloca (len + 1);
1296
1297 /* Prefix '#' to get it out of macro namespace. */
1298 sym[0] = '#';
1299 memcpy (sym + 1, predicate->val.node->name, len);
1300 return cpp_lookup (pfile, sym, len + 1);
1301
1302 error:
1303 FREE_ANSWER (answer);
1304 return 0;
1305 }
1306
1307 /* Returns a pointer to the pointer to the answer in the answer chain,
1308 or a pointer to NULL if the answer is not in the chain. */
1309 struct answer **
1310 _cpp_find_answer (node, candidate)
1311 cpp_hashnode *node;
1312 const cpp_toklist *candidate;
1313 {
1314 struct answer **result;
1315
1316 for (result = &node->value.answers; *result; result = &(*result)->next)
1317 if (_cpp_equiv_toklists (&(*result)->list, candidate))
1318 break;
1319
1320 return result;
1321 }
1322
1323 static void
1324 do_assert (pfile)
1325 cpp_reader *pfile;
1326 {
1327 struct answer *new_answer;
1328 cpp_hashnode *node;
1329
1330 node = _cpp_parse_assertion (pfile, &new_answer);
1331 if (node)
1332 {
1333 new_answer->next = 0;
1334 new_answer->list.file = pfile->token_list.file;
1335
1336 if (node->type == T_ASSERTION)
1337 {
1338 if (*_cpp_find_answer (node, &new_answer->list))
1339 goto err;
1340 new_answer->next = node->value.answers;
1341 }
1342 node->type = T_ASSERTION;
1343 node->value.answers = new_answer;
1344 }
1345 return;
1346
1347 err:
1348 cpp_warning (pfile, "\"%s\" re-asserted", node->name + 1);
1349 FREE_ANSWER (new_answer);
1350 }
1351
1352 static void
1353 do_unassert (pfile)
1354 cpp_reader *pfile;
1355 {
1356 cpp_hashnode *node;
1357 struct answer *answer, *temp;
1358
1359 node = _cpp_parse_assertion (pfile, &answer);
1360 if (node)
1361 {
1362 /* It isn't an error to #unassert something that isn't asserted. */
1363 if (node->type == T_ASSERTION)
1364 {
1365 if (answer)
1366 {
1367 struct answer **p = _cpp_find_answer (node, &answer->list);
1368
1369 temp = *p;
1370 if (temp)
1371 {
1372 *p = temp->next;
1373 FREE_ANSWER (temp);
1374 }
1375 if (node->value.answers == 0)
1376 node->type = T_VOID;
1377 }
1378 else
1379 _cpp_free_definition (node);
1380 }
1381
1382 if (answer)
1383 FREE_ANSWER (answer);
1384 }
1385 }
1386
1387 /* These are for -D, -U, -A. */
1388
1389 /* Process the string STR as if it appeared as the body of a #define.
1390 If STR is just an identifier, define it with value 1.
1391 If STR has anything after the identifier, then it should
1392 be identifier=definition. */
1393
1394 void
1395 cpp_define (pfile, str)
1396 cpp_reader *pfile;
1397 const char *str;
1398 {
1399 char *buf, *p;
1400 size_t count;
1401
1402 p = strchr (str, '=');
1403 /* Copy the entire option so we can modify it.
1404 Change the first "=" in the string to a space. If there is none,
1405 tack " 1" on the end. Then add a newline and a NUL. */
1406
1407 if (p)
1408 {
1409 count = strlen (str) + 2;
1410 buf = (char *) alloca (count);
1411 memcpy (buf, str, count - 2);
1412 buf[p - str] = ' ';
1413 buf[count - 2] = '\n';
1414 buf[count - 1] = '\0';
1415 }
1416 else
1417 {
1418 count = strlen (str) + 4;
1419 buf = (char *) alloca (count);
1420 memcpy (buf, str, count - 4);
1421 strcpy (&buf[count-4], " 1\n");
1422 }
1423
1424 _cpp_run_directive (pfile, &dtable[T_DEFINE], buf, count - 1, 0);
1425 }
1426
1427 /* Slight variant of the above for use by initialize_builtins, which (a)
1428 knows how to set up the buffer itself, (b) needs a different "filename"
1429 tag. */
1430 void
1431 _cpp_define_builtin (pfile, str)
1432 cpp_reader *pfile;
1433 const char *str;
1434 {
1435 _cpp_run_directive (pfile, &dtable[T_DEFINE],
1436 str, strlen (str),
1437 _("<builtin>"));
1438 }
1439
1440 /* Process MACRO as if it appeared as the body of an #undef. */
1441 void
1442 cpp_undef (pfile, macro)
1443 cpp_reader *pfile;
1444 const char *macro;
1445 {
1446 _cpp_run_directive (pfile, &dtable[T_UNDEF], macro, strlen (macro), 0);
1447 }
1448
1449 /* Process the string STR as if it appeared as the body of a #assert. */
1450 void
1451 cpp_assert (pfile, str)
1452 cpp_reader *pfile;
1453 const char *str;
1454 {
1455 _cpp_run_directive (pfile, &dtable[T_ASSERT], str, strlen (str), 0);
1456 }
1457
1458 /* Process STR as if it appeared as the body of an #unassert. */
1459 void
1460 cpp_unassert (pfile, str)
1461 cpp_reader *pfile;
1462 const char *str;
1463 {
1464 _cpp_run_directive (pfile, &dtable[T_UNASSERT], str, strlen (str), 0);
1465 }
1466
1467 /* Determine whether the identifier ID, of length LEN, is a defined macro. */
1468 int
1469 cpp_defined (pfile, id, len)
1470 cpp_reader *pfile;
1471 const U_CHAR *id;
1472 int len;
1473 {
1474 cpp_hashnode *hp = cpp_lookup (pfile, id, len);
1475 if (hp->type == T_POISON)
1476 {
1477 cpp_error (pfile, "attempt to use poisoned \"%s\"", hp->name);
1478 return 0;
1479 }
1480 return (hp->type != T_VOID);
1481 }
1482
1483 /* Allocate a new cpp_buffer for PFILE, and push it on the input buffer stack.
1484 If BUFFER != NULL, then use the LENGTH characters in BUFFER
1485 as the new input buffer.
1486 Return the new buffer, or NULL on failure. */
1487
1488 cpp_buffer *
1489 cpp_push_buffer (pfile, buffer, length)
1490 cpp_reader *pfile;
1491 const U_CHAR *buffer;
1492 long length;
1493 {
1494 cpp_buffer *buf = CPP_BUFFER (pfile);
1495 cpp_buffer *new;
1496 if (++pfile->buffer_stack_depth == CPP_STACK_MAX)
1497 {
1498 cpp_fatal (pfile, "#include nested too deeply");
1499 return NULL;
1500 }
1501 if (pfile->cur_context > 0)
1502 {
1503 cpp_ice (pfile, "buffer pushed with contexts stacked");
1504 _cpp_skip_rest_of_line (pfile);
1505 }
1506
1507 new = xobnew (pfile->buffer_ob, cpp_buffer);
1508 memset (new, 0, sizeof (cpp_buffer));
1509
1510 new->line_base = new->buf = new->cur = buffer;
1511 new->rlimit = buffer + length;
1512 new->prev = buf;
1513 new->pfile = pfile;
1514 /* No read ahead or extra char initially. */
1515 new->read_ahead = EOF;
1516 new->extra_char = EOF;
1517
1518 CPP_BUFFER (pfile) = new;
1519 return new;
1520 }
1521
1522 cpp_buffer *
1523 cpp_pop_buffer (pfile)
1524 cpp_reader *pfile;
1525 {
1526 int wfb;
1527 cpp_buffer *buf = CPP_BUFFER (pfile);
1528
1529 unwind_if_stack (pfile, buf);
1530 wfb = (buf->inc != 0);
1531 if (wfb)
1532 _cpp_pop_file_buffer (pfile, buf);
1533
1534 CPP_BUFFER (pfile) = CPP_PREV_BUFFER (buf);
1535 obstack_free (pfile->buffer_ob, buf);
1536 pfile->buffer_stack_depth--;
1537
1538 if (wfb && pfile->cb.leave_file && CPP_BUFFER (pfile))
1539 (*pfile->cb.leave_file) (pfile);
1540
1541 return CPP_BUFFER (pfile);
1542 }
1543
1544 #define obstack_chunk_alloc xmalloc
1545 #define obstack_chunk_free free
1546 #define DSC(x) U x, sizeof x - 1
1547 void
1548 _cpp_init_stacks (pfile)
1549 cpp_reader *pfile;
1550 {
1551 int i;
1552 struct spec_nodes *s;
1553
1554 pfile->buffer_ob = xnew (struct obstack);
1555 obstack_init (pfile->buffer_ob);
1556
1557 /* Perhaps not the ideal place to put this. */
1558 pfile->spec_nodes = s = xnew (struct spec_nodes);
1559 s->n_L = cpp_lookup (pfile, DSC("L"));
1560 s->n__STRICT_ANSI__ = cpp_lookup (pfile, DSC("__STRICT_ANSI__"));
1561 s->n__CHAR_UNSIGNED__ = cpp_lookup (pfile, DSC("__CHAR_UNSIGNED__"));
1562 s->n__VA_ARGS__ = cpp_lookup (pfile, DSC("__VA_ARGS__"));
1563 for (i = 0; i < N_DIRECTIVES; i++)
1564 s->dirs[i] = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
1565 }
1566
1567 void
1568 _cpp_cleanup_stacks (pfile)
1569 cpp_reader *pfile;
1570 {
1571 obstack_free (pfile->buffer_ob, 0);
1572 free (pfile->buffer_ob);
1573 }