1 /* Part of CPP library. (Macro and #define handling.)
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
3 1999, 2000 Free Software Foundation, Inc.
4 Written by Per Bothner, 1994.
5 Based on CCCP program by Paul Rubin, June 1986
6 Adapted to ANSI C, Richard Stallman, Jan 1987
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
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.
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.
22 In other words, you are welcome to use, share and improve this program.
23 You are forbidden to forbid anyone else to use, share and improve
24 what you give them. Help stamp out software-hoarding! */
28 #include "intl.h" /* for _("<command line>") below. */
32 #ifndef STDC_0_IN_SYSTEM_HEADERS
33 #define STDC_0_IN_SYSTEM_HEADERS 0 /* Boolean macro. */
38 cpp_hashnode **params; /* Parameters, if any. */
39 cpp_token *expansion; /* First token of replacement list. */
40 const char *file; /* Defined in file name. */
41 unsigned int line; /* Starting line number. */
42 unsigned int count; /* Number of tokens in expansion. */
43 unsigned short paramc; /* Number of parameters. */
44 unsigned int fun_like : 1; /* If a function-like macro. */
45 unsigned int var_args : 1; /* If a variable-args macro. */
46 unsigned int disabled : 1; /* If macro is disabled. */
49 typedef struct macro_arg macro_arg;
52 cpp_token *first; /* First token in unexpanded argument. */
53 cpp_token *expanded; /* Macro-expanded argument. */
54 cpp_token *stringified; /* Stringified argument. */
55 unsigned int count; /* # of tokens in argument. */
56 unsigned int expanded_count; /* # of tokens in expanded argument. */
59 /* Macro expansion. */
61 static void lock_pools PARAMS ((cpp_reader *));
62 static void unlock_pools PARAMS ((cpp_reader *));
63 static int enter_macro_context PARAMS ((cpp_reader *, cpp_token *));
64 static void builtin_macro PARAMS ((cpp_reader *, cpp_token *));
65 static cpp_context *push_arg_context PARAMS ((cpp_reader *, macro_arg *));
66 static enum cpp_ttype parse_arg PARAMS ((cpp_reader *, macro_arg *, int));
67 static macro_arg *parse_args PARAMS ((cpp_reader *, const cpp_hashnode *));
68 static cpp_context *next_context PARAMS ((cpp_reader *));
69 static void expand_arg PARAMS ((cpp_reader *, macro_arg *));
70 static unsigned char *quote_string PARAMS ((unsigned char *,
71 const unsigned char *,
73 static void make_string_token PARAMS ((cpp_pool *, cpp_token *,
74 const U_CHAR *, unsigned int));
75 static void make_number_token PARAMS ((cpp_reader *, cpp_token *, int));
76 static void stringify_arg PARAMS ((cpp_reader *, macro_arg *));
77 static void paste_all_tokens PARAMS ((cpp_reader *, cpp_token *));
78 static void paste_payloads PARAMS ((cpp_reader *, cpp_token *,
80 static int funlike_invocation_p PARAMS ((cpp_reader *, const cpp_hashnode *,
82 static void replace_args PARAMS ((cpp_reader *, cpp_macro *, macro_arg *,
87 static void save_lookahead_token PARAMS ((cpp_reader *, const cpp_token *));
88 static void take_lookahead_token PARAMS ((cpp_reader *, cpp_token *));
89 static void release_lookahead PARAMS ((cpp_reader *));
90 static cpp_lookahead *alloc_lookahead PARAMS ((cpp_reader *));
91 static void free_lookahead PARAMS ((cpp_lookahead *));
93 /* #define directive parsing and handling. */
95 static cpp_token *lex_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
96 static int check_macro_redefinition PARAMS ((cpp_reader *,
99 static int save_parameter PARAMS ((cpp_reader *, cpp_macro *, cpp_hashnode *));
100 static int parse_params PARAMS ((cpp_reader *, cpp_macro *));
101 static void check_trad_stringification PARAMS ((cpp_reader *,
103 const cpp_string *));
105 /* Allocates a buffer to hold a token's TEXT, and converts TOKEN to a
106 CPP_STRING token containing TEXT in quoted form. */
108 make_string_token (pool, token, text, len)
114 U_CHAR *buf = _cpp_pool_alloc (pool, len * 4);
116 token->type = CPP_STRING;
117 token->val.str.text = buf;
118 token->val.str.len = quote_string (buf, text, len) - buf;
122 /* Allocates and converts a temporary token to a CPP_NUMBER token,
123 evaluating to NUMBER. */
125 make_number_token (pfile, token, number)
130 unsigned char *buf = _cpp_pool_alloc (pfile->string_pool, 20);
132 sprintf ((char *) buf, "%d", number);
133 token->type = CPP_NUMBER;
134 token->val.str.text = buf;
135 token->val.str.len = ustrlen (buf);
139 static const char * const monthnames[] =
141 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
142 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
145 /* Handle builtin macros like __FILE__. */
147 builtin_macro (pfile, token)
151 unsigned char flags = token->flags & PREV_WHITE;
152 cpp_hashnode *node = token->val.node;
155 switch (node->value.builtin)
162 ip = CPP_BUFFER (pfile);
167 if (node->value.builtin == BT_BASE_FILE)
168 while (CPP_PREV_BUFFER (ip) != NULL)
169 ip = CPP_PREV_BUFFER (ip);
171 file = ip->nominal_fname;
173 make_string_token (pfile->string_pool, token,
174 (U_CHAR *) file, strlen (file));
178 case BT_INCLUDE_LEVEL:
179 /* pfile->include_depth counts the primary source as level 1,
180 but historically __INCLUDE_DEPTH__ has called the primary
182 make_number_token (pfile, token, pfile->include_depth - 1);
186 /* If __LINE__ is embedded in a macro, it must expand to the
187 line of the macro's invocation, not its definition.
188 Otherwise things like assert() will not work properly. */
189 make_number_token (pfile, token, cpp_get_line (pfile)->line);
196 if (STDC_0_IN_SYSTEM_HEADERS && CPP_IN_SYSTEM_HEADER (pfile)
197 && pfile->spec_nodes.n__STRICT_ANSI__->type == NT_VOID)
199 make_number_token (pfile, token, stdc);
205 if (pfile->date.type == CPP_EOF)
207 /* Allocate __DATE__ and __TIME__ from permanent storage,
208 and save them in pfile so we don't have to do this again.
209 We don't generate these strings at init time because
210 time() and localtime() are very slow on some systems. */
211 time_t tt = time (NULL);
212 struct tm *tb = localtime (&tt);
214 make_string_token (&pfile->ident_pool, &pfile->date,
216 make_string_token (&pfile->ident_pool, &pfile->time,
219 sprintf ((char *) pfile->date.val.str.text, "%s %2d %4d",
220 monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900);
221 sprintf ((char *) pfile->time.val.str.text, "%02d:%02d:%02d",
222 tb->tm_hour, tb->tm_min, tb->tm_sec);
224 *token = node->value.builtin == BT_DATE ? pfile->date: pfile->time;
228 cpp_ice (pfile, "invalid builtin macro \"%s\"", node->name);
232 token->flags = flags;
235 /* Used by cpperror.c to obtain the correct line and column to report
237 const cpp_lexer_pos *
241 /* Within a macro expansion, return the position of the outermost
243 if (pfile->context->prev)
244 return &pfile->macro_pos;
245 return &pfile->lexer_pos;
252 _cpp_lock_pool (&pfile->temp_string_pool);
253 _cpp_lock_pool (&pfile->argument_pool);
260 _cpp_unlock_pool (&pfile->temp_string_pool);
261 _cpp_unlock_pool (&pfile->argument_pool);
265 paste_payloads (pfile, lhs, rhs)
268 const cpp_token *rhs;
270 unsigned int total_len = cpp_token_len (lhs) + cpp_token_len (rhs);
271 unsigned char *result, *end;
274 pool = lhs->type == CPP_NAME ? &pfile->ident_pool: pfile->string_pool;
275 result = _cpp_pool_alloc (pool, total_len + 1);
277 /* Paste the spellings and null terminate. */
278 end = cpp_spell_token (pfile, rhs, cpp_spell_token (pfile, lhs, result));
280 total_len = end - result;
282 if (lhs->type == CPP_NAME)
284 lhs->val.node = cpp_lookup (pfile, result, total_len);
285 if (lhs->val.node->flags & NODE_OPERATOR)
287 lhs->flags |= NAMED_OP;
288 lhs->type = lhs->val.node->value.operator;
293 lhs->val.str.text = result;
294 lhs->val.str.len = total_len;
298 /* Adds backslashes before all backslashes and double quotes appearing
299 in strings. Non-printable characters are converted to octal. */
301 quote_string (dest, src, len)
310 if (c == '\\' || c == '"')
321 sprintf ((char *) dest, "\\%03o", c);
330 /* Convert a token sequence to a single string token according to the
331 rules of the ISO C #-operator. */
333 stringify_arg (pfile, arg)
337 cpp_pool *pool = pfile->string_pool;
338 unsigned char *start = POOL_FRONT (pool);
339 unsigned int i, escape_it, total_len = 0, backslash_count = 0;
340 unsigned int prev_white = 0;
342 /* Loop, reading in the argument's tokens. */
343 for (i = 0; i < arg->count; i++)
346 const cpp_token *token = &arg->first[i];
347 unsigned int len = cpp_token_len (token);
349 escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING
350 || token->type == CPP_CHAR || token->type == CPP_WCHAR
351 || token->type == CPP_OSTRING);
354 /* Worst case is each char is octal. */
356 len++; /* Room for initial space. */
358 dest = &start[total_len];
359 if (dest + len > POOL_LIMIT (pool))
361 _cpp_next_chunk (pool, len, (unsigned char **) &start);
362 dest = &start[total_len];
365 prev_white |= token->flags & PREV_WHITE;
366 if (token->type == CPP_PLACEMARKER)
369 /* No leading white space. */
379 unsigned char *buf = (unsigned char *) xmalloc (len);
381 len = cpp_spell_token (pfile, token, buf) - buf;
382 dest = quote_string (dest, buf, len);
386 dest = cpp_spell_token (pfile, token, dest);
387 total_len = dest - start;
389 if (token->type == CPP_OTHER && token->val.c == '\\')
395 /* Ignore the final \ of invalid string literals. */
396 if (backslash_count & 1)
398 cpp_warning (pfile, "invalid string literal, ignoring final '\\'");
402 POOL_COMMIT (pool, total_len);
404 arg->stringified = xnew (cpp_token);
405 arg->stringified->flags = 0;
406 arg->stringified->type = CPP_STRING;
407 arg->stringified->val.str.text = start;
408 arg->stringified->val.str.len = total_len;
411 /* Handles an arbitrarily long sequence of ## operators. This
412 implementation is left-associative, non-recursive, and finishes a
413 paste before handling succeeding ones. If the paste fails, the
414 right hand side of the ## operator is placed in the then-current
415 context's lookahead buffer, with the effect that it appears in the
416 output stream normally. */
418 paste_all_tokens (pfile, lhs)
422 unsigned char orig_flags = lhs->flags;
427 /* Take the token directly from the current context. We can do
428 this, because we are in the replacement list of either an
429 object-like macro, or a function-like macro with arguments
430 inserted. In either case, the constraints to #define
431 guarantee we have at least one more token (empty arguments
432 become placemarkers). */
433 rhs = pfile->context->list.first++;
435 if (rhs->type == CPP_PLACEMARKER)
437 /* GCC has special extended semantics for , ## b where b is
438 a varargs parameter: the comma disappears if b was given
439 no actual arguments (not merely if b is an empty
441 if (lhs->type == CPP_COMMA && (rhs->flags & VARARGS_FIRST))
442 lhs->type = CPP_PLACEMARKER;
444 else if (lhs->type == CPP_PLACEMARKER)
449 enum cpp_ttype type = cpp_can_paste (pfile, lhs, rhs, &digraph);
453 /* Do nothing special about , ## <whatever> if
454 <whatever> came from a variable argument, because the
455 author probably intended the ## to trigger the
456 special extended semantics (see above). */
457 if (lhs->type == CPP_COMMA && (rhs->flags & VARARGS_FIRST))
461 if (CPP_OPTION (pfile, warn_paste))
463 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
464 cpp_token_as_text (pfile, lhs),
465 cpp_token_as_text (pfile, rhs));
467 /* The standard states that behaviour is undefined.
468 By the principle of least surpise, we step back
469 before the RHS, and mark it to prevent macro
470 expansion. Tests in the testsuite rely on
471 clearing PREV_WHITE here, though you could argue
472 we should actually set it. */
473 rhs->flags &= ~PREV_WHITE;
474 rhs->flags |= NO_EXPAND;
477 /* Step back so we read the RHS in next. */
478 pfile->context->list.first--;
483 lhs->flags &= ~DIGRAPH;
485 lhs->flags |= DIGRAPH;
487 if (type == CPP_NAME || type == CPP_NUMBER)
488 paste_payloads (pfile, lhs, rhs);
489 else if (type == CPP_WCHAR || type == CPP_WSTRING)
490 lhs->val.str = rhs->val.str;
493 while (rhs->flags & PASTE_LEFT);
495 /* The pasted token has the PREV_WHITE flag of the LHS, is no longer
496 PASTE_LEFT, and is subject to macro expansion. */
497 lhs->flags &= ~(PREV_WHITE | PASTE_LEFT | NO_EXPAND);
498 lhs->flags |= orig_flags & PREV_WHITE;
501 /* Reads the unexpanded tokens of a macro argument into ARG. Empty
502 arguments are saved as a single CPP_PLACEMARKER token. VAR_ARGS is
503 non-zero if this is a variable argument. Returns the type of the
504 token that caused reading to finish. */
505 static enum cpp_ttype
506 parse_arg (pfile, arg, var_args)
508 struct macro_arg *arg;
511 enum cpp_ttype result;
512 unsigned int paren = 0;
514 arg->first = (cpp_token *) POOL_FRONT (&pfile->argument_pool);
515 for (;; arg->count++)
517 cpp_token *token = &arg->first[arg->count];
518 if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->argument_pool))
520 _cpp_next_chunk (&pfile->argument_pool, sizeof (cpp_token),
521 (unsigned char **) &arg->first);
522 token = &arg->first[arg->count];
525 _cpp_get_token (pfile, token);
526 result = token->type;
528 if (result == CPP_OPEN_PAREN)
530 else if (result == CPP_CLOSE_PAREN && paren-- == 0)
532 /* Commas are not terminators within parantheses or var_args. */
533 else if (result == CPP_COMMA && paren == 0 && !var_args)
535 else if (result == CPP_EOF)
536 break; /* Error reported by caller. */
539 /* Empty arguments become a single placemarker token. */
542 arg->first->type = CPP_PLACEMARKER;
546 /* Commit the memory used to store the arguments. */
547 POOL_COMMIT (&pfile->argument_pool, arg->count * sizeof (cpp_token));
552 /* Parse the arguments making up a macro invocation. */
554 parse_args (pfile, node)
556 const cpp_hashnode *node;
558 cpp_macro *macro = node->value.macro;
559 macro_arg *args, *cur;
563 /* Allocate room for at least one argument, and zero it out. */
564 argc = macro->paramc ? macro->paramc: 1;
565 args = xcnewvec (macro_arg, argc);
567 for (cur = args, argc = 0; ;)
571 type = parse_arg (pfile, cur, argc == macro->paramc && macro->var_args);
572 if (type == CPP_CLOSE_PAREN || type == CPP_EOF)
575 /* Re-use the last argument for excess arguments. */
576 if (argc < macro->paramc)
582 cpp_error (pfile, "unterminated argument list invoking macro \"%s\"",
586 else if (argc < macro->paramc)
588 /* As an extension, a rest argument is allowed to not appear in
589 the invocation at all.
590 e.g. #define debug(format, args...) something
593 This is exactly the same as if there had been an empty rest
594 argument - debug("string", ). */
596 if (argc + 1 == macro->paramc && macro->var_args)
598 /* parse_arg ensured there was space for the closing
599 parenthesis. Use this space to store a placemarker. */
600 args[argc].first = (cpp_token *) POOL_FRONT (&pfile->argument_pool);
601 args[argc].first->type = CPP_PLACEMARKER;
602 args[argc].count = 1;
603 POOL_COMMIT (&pfile->argument_pool, sizeof (cpp_token));
605 if (CPP_OPTION (pfile, c99) && CPP_PEDANTIC (pfile))
606 cpp_pedwarn (pfile, "ISO C99 requires rest arguments to be used");
611 "macro \"%s\" requires %u arguments, but only %u given",
612 node->name, macro->paramc, argc);
616 else if (argc > macro->paramc)
618 /* An empty argument to an empty function-like macro is fine. */
619 if (argc != 1 || args[0].first->type != CPP_PLACEMARKER)
622 "macro \"%s\" passed %u arguments, but takes just %u",
623 node->name, argc, macro->paramc);
638 funlike_invocation_p (pfile, node, list)
640 const cpp_hashnode *node;
641 struct toklist *list;
643 cpp_context *orig_context;
644 cpp_token maybe_paren;
647 pfile->state.parsing_args = 1;
648 pfile->state.prevent_expansion++;
649 orig_context = pfile->context;
651 cpp_start_lookahead (pfile);
652 cpp_get_token (pfile, &maybe_paren);
653 cpp_stop_lookahead (pfile, maybe_paren.type == CPP_OPEN_PAREN);
655 if (maybe_paren.type == CPP_OPEN_PAREN)
656 args = parse_args (pfile, node);
657 else if (CPP_WTRADITIONAL (pfile))
659 "function-like macro \"%s\" must be used with arguments in traditional C",
662 /* Restore original context. */
663 pfile->context = orig_context;
664 pfile->state.prevent_expansion--;
665 pfile->state.parsing_args = 0;
669 if (node->value.macro->paramc > 0)
670 replace_args (pfile, node->value.macro, args, list);
677 /* Push the context of a macro onto the context stack. TOKEN is the
678 macro name. If we can successfully start expanding the macro,
679 TOKEN is replaced with the first token of the expansion, and we
682 enter_macro_context (pfile, token)
686 cpp_context *context;
691 macro = token->val.node->value.macro;
694 token->flags |= NO_EXPAND;
698 /* Save the position of the outermost macro invocation. */
699 if (!pfile->context->prev)
701 pfile->macro_pos = pfile->lexer_pos;
705 if (macro->fun_like && !funlike_invocation_p (pfile, token->val.node, &list))
707 if (!pfile->context->prev)
708 unlock_pools (pfile);
712 /* Now push its context. */
713 context = next_context (pfile);
714 if (macro->paramc == 0)
716 context->list.first = macro->expansion;
717 context->list.limit = macro->expansion + macro->count;
720 context->list = list;
721 context->macro = macro;
723 /* The first expansion token inherits the PREV_WHITE of TOKEN. */
724 flags = token->flags & PREV_WHITE;
725 *token = *context->list.first++;
726 token->flags |= flags;
728 /* Disable the macro within its expansion. */
734 /* Move to the next context. Create one if there is none. */
739 cpp_context *prev = pfile->context;
740 cpp_context *result = prev->next;
744 result = xnew (cpp_context);
750 pfile->context = result;
755 replace_args (pfile, macro, args, list)
759 struct toklist *list;
761 unsigned int i, total;
762 const cpp_token *src, *limit;
766 src = macro->expansion;
767 limit = src + macro->count;
769 /* First, fully macro-expand arguments, calculating the number of
770 tokens in the final expansion as we go. This ensures that the
771 possible recursive use of argument_pool is fine. */
773 for (; src < limit; src++)
774 if (src->type == CPP_MACRO_ARG)
776 /* We have an argument. If it is not being stringified or
777 pasted it is macro-replaced before insertion. */
778 arg = &args[src->val.arg_no - 1];
779 if (src->flags & STRINGIFY_ARG)
781 if (!arg->stringified)
782 stringify_arg (pfile, arg);
784 else if ((src->flags & PASTE_LEFT)
785 || (src > macro->expansion && (src[-1].flags & PASTE_LEFT)))
786 total += arg->count - 1;
790 expand_arg (pfile, arg);
791 total += arg->expanded_count - 1;
795 dest = (cpp_token *) _cpp_pool_alloc (&pfile->argument_pool,
796 total * sizeof (cpp_token));
798 list->limit = list->first + total;
800 for (src = macro->expansion; src < limit; src++)
801 if (src->type == CPP_MACRO_ARG)
804 const cpp_token *from;
806 arg = &args[src->val.arg_no - 1];
807 if (src->flags & STRINGIFY_ARG)
808 from = arg->stringified, count = 1;
809 else if ((src->flags & PASTE_LEFT)
810 || (src > macro->expansion && (src[-1].flags & PASTE_LEFT)))
811 count = arg->count, from = arg->first;
813 count = arg->expanded_count, from = arg->expanded;
814 memcpy (dest, from, count * sizeof (cpp_token));
816 /* The first token gets PREV_WHITE of the CPP_MACRO_ARG. If
817 it is a variable argument, it is also flagged. */
818 dest->flags &= ~PREV_WHITE;
819 dest->flags |= src->flags & PREV_WHITE;
820 if (macro->var_args && src->val.arg_no == macro->paramc)
821 dest->flags |= VARARGS_FIRST;
823 /* The last token gets the PASTE_LEFT of the CPP_MACRO_ARG. */
824 dest[count - 1].flags |= src->flags & PASTE_LEFT;
831 /* Free the expanded arguments. */
832 for (i = 0; i < macro->paramc; i++)
834 if (args[i].expanded)
835 free (args[i].expanded);
836 if (args[i].stringified)
837 free (args[i].stringified);
841 /* Subroutine of expand_arg to put the unexpanded tokens on the
844 push_arg_context (pfile, arg)
848 cpp_context *context = next_context (pfile);
850 context->list.first = arg->first;
851 context->list.limit = arg->first + arg->count;
857 expand_arg (pfile, arg)
862 unsigned int capacity = 256;
864 /* Loop, reading in the arguments. */
865 arg->expanded = (cpp_token *) xmalloc (capacity * sizeof (cpp_token));
866 arg->expanded_count = 0;
868 push_arg_context (pfile, arg);
871 if (arg->expanded_count >= capacity)
874 arg->expanded = (cpp_token *)
875 xrealloc (arg->expanded, capacity * sizeof (cpp_token));
877 token = &arg->expanded[arg->expanded_count++];
878 _cpp_get_token (pfile, token);
880 while (token->type != CPP_EOF);
882 arg->expanded_count--;
884 /* Pop the context we pushed. */
885 pfile->context = pfile->context->prev;
889 _cpp_pop_context (pfile)
892 cpp_context *context = pfile->context;
894 pfile->context = context->prev;
895 /* Re-enable a macro and free resources when leaving its expansion. */
896 if (!pfile->state.parsing_args)
898 if (!pfile->context->prev)
899 unlock_pools (pfile);
900 context->macro->disabled = 0;
904 /* Internal routine to return a token, either from an in-progress
905 macro expansion, or from the source file as appropriate.
906 Transparently enters included files. Handles macros, so tokens
907 returned are post-expansion. Does not filter CPP_PLACEMARKER
908 tokens. Returns CPP_EOF at EOL and EOF. */
910 _cpp_get_token (pfile, token)
917 cpp_context *context = pfile->context;
920 take_lookahead_token (pfile, token);
921 /* Context->prev == 0 <=> base context. */
922 else if (!context->prev)
923 _cpp_lex_token (pfile, token);
924 else if (context->list.first != context->list.limit)
925 *token = *context->list.first++;
930 _cpp_pop_context (pfile);
933 /* End of argument pre-expansion. */
934 token->type = CPP_EOF;
940 /* Only perform macro expansion (and therefore pasting) when not
941 skipping, or when skipping but in a directive. The only
942 directive where this could be true is #elif. A possible later
943 optimisation: get do_elif to clear skipping so we don't need the
944 directive test here. */
945 if (pfile->skipping && !pfile->state.in_directive)
950 if (token->flags & PASTE_LEFT)
951 paste_all_tokens (pfile, token);
953 if (token->type != CPP_NAME)
956 /* Handle macros and the _Pragma operator. */
957 if (token->val.node->type == NT_MACRO
958 && !pfile->state.prevent_expansion
959 && !(token->flags & NO_EXPAND))
961 /* Macros invalidate controlling macros. */
962 pfile->mi_state = MI_FAILED;
964 if (token->val.node->flags & NODE_BUILTIN)
966 builtin_macro (pfile, token);
970 if (enter_macro_context (pfile, token))
974 if (token->val.node != pfile->spec_nodes.n__Pragma)
977 /* Invalidate controlling macros. */
978 pfile->mi_state = MI_FAILED;
979 _cpp_do__Pragma (pfile);
984 /* External interface to get a token. Tokens are returned after macro
985 expansion and directives have been handled, as a continuous stream.
986 Compared to the function above, CPP_EOF means EOF, and placemarker
987 tokens are filtered out. Also, it skips tokens if we're skipping,
988 and saves tokens to lookahead.
990 CPP_EOF indicates end of original source file. For the benefit of
991 #pragma callbacks which may want to get the pragma's tokens,
992 returns CPP_EOF to indicate end-of-directive in this case. */
994 cpp_get_token (pfile, token)
1000 _cpp_get_token (pfile, token);
1002 if (token->type == CPP_EOF)
1004 /* We are not merging the PREV_WHITE of CPP_PLACEMARKERS. I
1005 don't think it really matters. */
1006 else if (pfile->skipping || token->type == CPP_PLACEMARKER)
1009 /* Non-comment tokens invalidate any controlling macros. */
1010 if (token->type != CPP_COMMENT)
1011 pfile->mi_state = MI_FAILED;
1016 if (pfile->la_write)
1017 save_lookahead_token (pfile, token);
1020 /* Read each token in, until EOF. Directives are transparently
1023 cpp_scan_buffer_nooutput (pfile)
1030 cpp_get_token (pfile, &token);
1031 while (token.type != CPP_EOF);
1032 while (cpp_pop_buffer (pfile) != 0);
1035 /* Lookahead handling. */
1038 save_lookahead_token (pfile, token)
1040 const cpp_token *token;
1042 if (token->type != CPP_EOF)
1044 cpp_lookahead *la = pfile->la_write;
1045 cpp_token_with_pos *twp;
1047 if (la->count == la->cap)
1049 la->cap += la->cap + 8;
1050 la->tokens = (cpp_token_with_pos *)
1051 xrealloc (la->tokens, la->cap * sizeof (cpp_token_with_pos));
1054 twp = &la->tokens[la->count++];
1055 twp->token = *token;
1056 twp->pos = *cpp_get_line (pfile);
1061 take_lookahead_token (pfile, token)
1065 cpp_lookahead *la = pfile->la_read;
1066 cpp_token_with_pos *twp = &la->tokens[la->cur];
1068 *token = twp->token;
1069 pfile->lexer_pos = twp->pos;
1071 if (++la->cur == la->count)
1072 release_lookahead (pfile);
1075 /* Moves the lookahead at the front of the read list to the free store. */
1077 release_lookahead (pfile)
1080 cpp_lookahead *la = pfile->la_read;
1082 pfile->la_read = la->next;
1083 la->next = pfile->la_unused;
1084 pfile->la_unused = la;
1085 unlock_pools (pfile);
1088 /* Take a new lookahead from the free store, or allocate one if none. */
1089 static cpp_lookahead *
1090 alloc_lookahead (pfile)
1093 cpp_lookahead *la = pfile->la_unused;
1096 pfile->la_unused = la->next;
1099 la = xnew (cpp_lookahead);
1104 la->cur = la->count = 0;
1108 /* Free memory associated with a lookahead list. */
1114 free ((PTR) la->tokens);
1118 /* Free all the lookaheads of a cpp_reader. */
1120 _cpp_free_lookaheads (pfile)
1123 cpp_lookahead *la, *lan;
1126 free_lookahead (pfile->la_read);
1127 if (pfile->la_write)
1128 free_lookahead (pfile->la_write);
1130 for (la = pfile->la_unused; la; la = lan)
1133 free_lookahead (la);
1137 /* Allocate a lookahead and move it to the front of the write list. */
1139 cpp_start_lookahead (pfile)
1142 cpp_lookahead *la = alloc_lookahead (pfile);
1144 la->next = pfile->la_write;
1145 pfile->la_write = la;
1147 la->pos = *cpp_get_line (pfile);
1149 /* Don't allow memory pools to be re-used whilst we're reading ahead. */
1153 /* Stop reading ahead - either step back, or drop the read ahead. */
1155 cpp_stop_lookahead (pfile, drop)
1159 cpp_lookahead *la = pfile->la_write;
1161 pfile->la_write = la->next;
1162 la->next = pfile->la_read;
1163 pfile->la_read = la;
1165 if (drop || la->count == 0)
1166 release_lookahead (pfile);
1168 pfile->lexer_pos = la->pos;
1171 /* Push a single token back to the front of the queue. Only to be
1172 used by cpplib, and only then when necessary. POS is the position
1173 to report for the preceding token. */
1175 _cpp_push_token (pfile, token, pos)
1177 const cpp_token *token;
1178 const cpp_lexer_pos *pos;
1180 cpp_start_lookahead (pfile);
1181 save_lookahead_token (pfile, token);
1182 cpp_stop_lookahead (pfile, 0);
1183 pfile->lexer_pos = *pos;
1186 /* #define directive parsing and handling. */
1188 /* Returns non-zero if a macro redefinition is trivial. */
1190 check_macro_redefinition (pfile, node, macro2)
1192 const cpp_hashnode *node;
1193 const cpp_macro *macro2;
1195 const cpp_macro *macro1;
1198 if (node->type != NT_MACRO || node->flags & NODE_BUILTIN)
1199 return ! pfile->done_initializing;
1201 macro1 = node->value.macro;
1203 /* The quick failures. */
1204 if (macro1->count != macro2->count
1205 || macro1->paramc != macro2->paramc
1206 || macro1->fun_like != macro2->fun_like
1207 || macro1->var_args != macro2->var_args)
1210 /* Check each token. */
1211 for (i = 0; i < macro1->count; i++)
1212 if (! _cpp_equiv_tokens (¯o1->expansion[i], ¯o2->expansion[i]))
1215 /* Check parameter spellings. */
1216 for (i = 0; i < macro1->paramc; i++)
1217 if (macro1->params[i] != macro2->params[i])
1223 /* Free the definition of hashnode H. */
1226 _cpp_free_definition (h)
1229 /* Macros and assertions no longer have anything to free. */
1231 /* Clear builtin flag in case of redefinition. */
1232 h->flags &= ~NODE_BUILTIN;
1236 save_parameter (pfile, macro, node)
1241 cpp_hashnode **dest;
1243 /* Constraint 6.10.3.6 - duplicate parameter names. */
1244 if (node->arg_index)
1246 cpp_error (pfile, "duplicate macro parameter \"%s\"", node->name);
1250 dest = ¯o->params[macro->paramc];
1252 /* Check we have room for the parameters. */
1253 if ((unsigned char *) (dest + 1) >= POOL_LIMIT (&pfile->macro_pool))
1255 _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_hashnode *),
1256 (unsigned char **) ¯o->params);
1257 dest = ¯o->params[macro->paramc];
1261 node->arg_index = ++macro->paramc;
1266 parse_params (pfile, macro)
1271 unsigned int prev_ident = 0;
1273 macro->params = (cpp_hashnode **) POOL_FRONT (&pfile->macro_pool);
1276 _cpp_lex_token (pfile, &token);
1281 cpp_error (pfile, "\"%s\" may not appear in macro parameter list",
1282 cpp_token_as_text (pfile, &token));
1288 cpp_error (pfile, "macro parameters must be comma-separated");
1293 if (save_parameter (pfile, macro, token.val.node))
1297 case CPP_CLOSE_PAREN:
1298 if (prev_ident || macro->paramc == 0)
1301 /* Fall through to pick up the error. */
1305 cpp_error (pfile, "parameter name missing");
1312 macro->var_args = 1;
1315 save_parameter (pfile, macro, pfile->spec_nodes.n__VA_ARGS__);
1316 pfile->state.va_args_ok = 1;
1317 if (! CPP_OPTION (pfile, c99) && CPP_OPTION (pfile, pedantic))
1319 "C89 does not permit anonymous variable arguments");
1321 else if (CPP_OPTION (pfile, pedantic))
1323 "ISO C does not permit named variable arguments");
1325 /* We're at the end, and just expect a closing parenthesis. */
1326 _cpp_lex_token (pfile, &token);
1327 if (token.type == CPP_CLOSE_PAREN)
1332 cpp_error (pfile, "missing ')' in macro parameter list");
1336 /* Success. Commit the parameter array. */
1337 POOL_COMMIT (&pfile->macro_pool,
1338 macro->paramc * sizeof (cpp_hashnode *));
1343 /* Lex a token from a macro's replacement list. Translate it to a
1344 CPP_MACRO_ARG if appropriate. */
1346 lex_expansion_token (pfile, macro)
1350 cpp_token *token = ¯o->expansion[macro->count];
1352 /* Check we have room for the token. */
1353 if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
1355 _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1356 (unsigned char **) ¯o->expansion);
1357 token = ¯o->expansion[macro->count];
1361 _cpp_lex_token (pfile, token);
1363 /* Is this an argument? */
1364 if (token->type == CPP_NAME && token->val.node->arg_index)
1366 token->type = CPP_MACRO_ARG;
1367 token->val.arg_no = token->val.node->arg_index;
1369 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1370 && (token->type == CPP_STRING || token->type == CPP_CHAR))
1371 check_trad_stringification (pfile, macro, &token->val.str);
1376 /* Parse a macro and save its expansion. Returns non-zero on success. */
1378 _cpp_create_definition (pfile, node)
1384 unsigned int i, ok = 1;
1386 macro = (cpp_macro *) _cpp_pool_alloc (&pfile->macro_pool,
1387 sizeof (cpp_macro));
1388 macro->file = pfile->buffer->nominal_fname;
1389 macro->line = pfile->directive_pos.line;
1392 macro->fun_like = 0;
1393 macro->var_args = 0;
1395 macro->expansion = (cpp_token *) POOL_FRONT (&pfile->macro_pool);
1397 /* Get the first token of the expansion (or the '(' of a
1398 function-like macro). */
1399 token = lex_expansion_token (pfile, macro);
1400 if (token->type == CPP_OPEN_PAREN && !(token->flags & PREV_WHITE))
1402 if (!(ok = parse_params (pfile, macro)))
1405 macro->fun_like = 1;
1406 /* Some of the pool may have been used for the parameter store. */
1407 macro->expansion = (cpp_token *) POOL_FRONT (&pfile->macro_pool);
1408 token = lex_expansion_token (pfile, macro);
1410 else if (token->type != CPP_EOF && !(token->flags & PREV_WHITE))
1411 cpp_pedwarn (pfile, "ISO C requires whitespace after the macro name");
1413 /* Setting it here means we don't catch leading comments. */
1414 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
1418 /* Check the stringifying # constraint 6.10.3.2.1 of
1419 function-like macros when lexing the subsequent token. */
1420 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1422 if (token->type == CPP_MACRO_ARG)
1424 token->flags &= ~PREV_WHITE;
1425 token->flags |= STRINGIFY_ARG;
1426 token->flags |= token[-1].flags & PREV_WHITE;
1427 token[-1] = token[0];
1430 /* Let assembler get away with murder. */
1431 else if (!CPP_OPTION (pfile, lang_asm))
1434 cpp_error (pfile, "'#' is not followed by a macro parameter");
1439 if (token->type == CPP_EOF)
1442 /* Paste operator constraint 6.10.3.3.1. */
1443 if (token->type == CPP_PASTE)
1445 /* Token-paste ##, can appear in both object-like and
1446 function-like macros, but not at the ends. */
1447 if (--macro->count > 0)
1448 token = lex_expansion_token (pfile, macro);
1450 if (macro->count == 0 || token->type == CPP_EOF)
1454 "'##' cannot appear at either end of a macro expansion");
1458 token[-1].flags |= PASTE_LEFT;
1459 /* Give it a PREV_WHITE for -dM etc. */
1460 token->flags |= PREV_WHITE;
1463 token = lex_expansion_token (pfile, macro);
1466 /* Don't count the CPP_EOF. Empty macros become a place marker. */
1467 if (macro->count > 1)
1470 macro->expansion[0].type = CPP_PLACEMARKER;
1472 /* Clear the whitespace flag from the leading token. */
1473 macro->expansion[0].flags &= ~PREV_WHITE;
1475 /* Implement the macro-defined-to-itself optimisation. */
1476 macro->disabled = (macro->count == 1 && !macro->fun_like
1477 && macro->expansion[0].type == CPP_NAME
1478 && macro->expansion[0].val.node == node);
1480 /* Commit the memory. */
1481 POOL_COMMIT (&pfile->macro_pool, macro->count * sizeof (cpp_token));
1483 /* Redefinition of a macro is allowed if and only if the old and new
1484 definitions are the same. (6.10.3 paragraph 2). */
1485 if (node->type != NT_VOID)
1487 if (CPP_PEDANTIC (pfile)
1488 && !check_macro_redefinition (pfile, node, macro))
1490 cpp_pedwarn_with_line (pfile, pfile->directive_pos.line,
1491 pfile->directive_pos.col,
1492 "\"%s\" redefined", node->name);
1494 if (pfile->done_initializing && node->type == NT_MACRO
1495 && !(node->flags & NODE_BUILTIN))
1496 cpp_pedwarn_with_file_and_line (pfile,
1497 node->value.macro->file,
1498 node->value.macro->line, 1,
1499 "this is the location of the previous definition");
1501 _cpp_free_definition (node);
1504 /* Enter definition in hash table. */
1505 node->type = NT_MACRO;
1506 node->value.macro = macro;
1510 /* Stop the lexer accepting __VA_ARGS__. */
1511 pfile->state.va_args_ok = 0;
1513 /* Clear the fast argument lookup indices. */
1514 for (i = macro->paramc; i-- > 0; )
1515 macro->params[i]->arg_index = 0;
1520 /* Warn if a token in `string' matches one of the function macro
1521 arguments in `info'. This function assumes that the macro is a
1522 function macro and not an object macro. */
1524 check_trad_stringification (pfile, macro, string)
1526 const cpp_macro *macro;
1527 const cpp_string *string;
1529 unsigned int i, len;
1530 const U_CHAR *p, *q, *limit = string->text + string->len;
1532 /* Loop over the string. */
1533 for (p = string->text; p < limit; p = q)
1535 /* Find the start of an identifier. */
1536 while (p < limit && !is_idstart (*p))
1539 /* Find the end of the identifier. */
1541 while (q < limit && is_idchar (*q))
1546 /* Loop over the function macro arguments to see if the
1547 identifier inside the string matches one of them. */
1548 for (i = 0; i < macro->paramc; i++)
1550 const cpp_hashnode *node = macro->params[i];
1552 if (node->length == len && !memcmp (p, node->name, len))
1555 "macro argument \"%s\" would be stringified with -traditional.",
1563 /* Returns the expansion of a macro, in a format suitable to be read
1564 back in again, and therefore also for DWARF 2 debugging info.
1565 Caller is expected to generate the "#define NAME" bit. The
1566 returned text is temporary, and automatically freed later. */
1568 const unsigned char *
1569 cpp_macro_definition (pfile, node)
1571 const cpp_hashnode *node;
1573 unsigned int i, len;
1574 const cpp_macro *macro = node->value.macro;
1575 unsigned char *buffer;
1577 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1579 cpp_ice (pfile, "invalid hash type %d in dump_definition", node->type);
1583 /* Calculate length. */
1585 if (macro->fun_like)
1587 len += 3; /* "()" plus possible final "." of ellipsis. */
1588 for (i = 0; i < macro->paramc; i++)
1589 len += macro->params[i]->length + 2; /* ", " */
1592 if (macro->count > 1 || macro->expansion[0].type != CPP_PLACEMARKER)
1594 for (i = 0; i < macro->count; i++)
1596 cpp_token *token = ¯o->expansion[i];
1598 if (token->type == CPP_MACRO_ARG)
1599 len += macro->params[token->val.arg_no - 1]->length;
1601 len += cpp_token_len (token); /* Includes room for ' '. */
1602 if (token->flags & STRINGIFY_ARG)
1604 if (token->flags & PASTE_LEFT)
1605 len += 3; /* " ##" */
1609 if (len > pfile->macro_buffer_len)
1610 pfile->macro_buffer = (U_CHAR *) xrealloc (pfile->macro_buffer, len);
1611 buffer = pfile->macro_buffer;
1613 /* Parameter names. */
1614 if (macro->fun_like)
1617 for (i = 0; i < macro->paramc; i++)
1619 cpp_hashnode *param = macro->params[i];
1621 if (param != pfile->spec_nodes.n__VA_ARGS__)
1623 memcpy (buffer, param->name, param->length);
1624 buffer += param->length;
1627 if (i + 1 < macro->paramc)
1628 *buffer++ = ',', *buffer++ = ' ';
1629 else if (macro->var_args)
1630 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
1635 /* Expansion tokens. */
1636 if (macro->count > 1 || macro->expansion[0].type != CPP_PLACEMARKER)
1639 for (i = 0; i < macro->count; i++)
1641 cpp_token *token = ¯o->expansion[i];
1643 if (token->flags & PREV_WHITE)
1645 if (token->flags & STRINGIFY_ARG)
1648 if (token->type == CPP_MACRO_ARG)
1650 len = macro->params[token->val.arg_no - 1]->length;
1651 memcpy (buffer, macro->params[token->val.arg_no - 1]->name, len);
1655 buffer = cpp_spell_token (pfile, token, buffer);
1657 if (token->flags & PASTE_LEFT)
1662 /* Next has PREV_WHITE; see _cpp_create_definition. */
1668 return pfile->macro_buffer;