1 /* Part of CPP library. (Macro and #define handling.)
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
3 1999, 2000, 2001, 2002 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! */
33 cpp_hashnode **params; /* Parameters, if any. */
34 cpp_token *expansion; /* First token of replacement list. */
35 unsigned int line; /* Starting line number. */
36 unsigned int count; /* Number of tokens in expansion. */
37 unsigned short paramc; /* Number of parameters. */
38 unsigned int fun_like : 1; /* If a function-like macro. */
39 unsigned int variadic : 1; /* If a variadic macro. */
40 unsigned int syshdr : 1; /* If macro defined in system header. */
43 typedef struct macro_arg macro_arg;
46 const cpp_token **first; /* First token in unexpanded argument. */
47 const cpp_token **expanded; /* Macro-expanded argument. */
48 const cpp_token *stringified; /* Stringified argument. */
49 unsigned int count; /* # of tokens in argument. */
50 unsigned int expanded_count; /* # of tokens in expanded argument. */
53 /* Macro expansion. */
55 static int enter_macro_context PARAMS ((cpp_reader *, cpp_hashnode *));
56 static int builtin_macro PARAMS ((cpp_reader *, cpp_hashnode *));
57 static void push_token_context
58 PARAMS ((cpp_reader *, cpp_hashnode *, const cpp_token *, unsigned int));
59 static void push_ptoken_context
60 PARAMS ((cpp_reader *, cpp_hashnode *, _cpp_buff *,
61 const cpp_token **, unsigned int));
62 static _cpp_buff *collect_args PARAMS ((cpp_reader *, const cpp_hashnode *));
63 static cpp_context *next_context PARAMS ((cpp_reader *));
64 static const cpp_token *padding_token
65 PARAMS ((cpp_reader *, const cpp_token *));
66 static void expand_arg PARAMS ((cpp_reader *, macro_arg *));
67 static const cpp_token *new_string_token PARAMS ((cpp_reader *, U_CHAR *,
69 static const cpp_token *new_number_token PARAMS ((cpp_reader *, unsigned int));
70 static const cpp_token *stringify_arg PARAMS ((cpp_reader *, macro_arg *));
71 static void paste_all_tokens PARAMS ((cpp_reader *, const cpp_token *));
72 static bool paste_tokens PARAMS ((cpp_reader *, const cpp_token **,
74 static void replace_args PARAMS ((cpp_reader *, cpp_hashnode *, macro_arg *));
75 static _cpp_buff *funlike_invocation_p PARAMS ((cpp_reader *, cpp_hashnode *));
77 /* #define directive parsing and handling. */
79 static cpp_token *alloc_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
80 static cpp_token *lex_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
81 static int warn_of_redefinition PARAMS ((const cpp_hashnode *,
83 static int save_parameter PARAMS ((cpp_reader *, cpp_macro *, cpp_hashnode *));
84 static int parse_params PARAMS ((cpp_reader *, cpp_macro *));
85 static void check_trad_stringification PARAMS ((cpp_reader *,
89 /* Allocates and returns a CPP_STRING token, containing TEXT of length
90 LEN, after null-terminating it. TEXT must be in permanent storage. */
91 static const cpp_token *
92 new_string_token (pfile, text, len)
97 cpp_token *token = _cpp_temp_token (pfile);
100 token->type = CPP_STRING;
101 token->val.str.len = len;
102 token->val.str.text = text;
107 /* Allocates and returns a CPP_NUMBER token evaluating to NUMBER. */
108 static const cpp_token *
109 new_number_token (pfile, number)
113 cpp_token *token = _cpp_temp_token (pfile);
114 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
115 unsigned char *buf = _cpp_unaligned_alloc (pfile, 21);
117 sprintf ((char *) buf, "%u", number);
118 token->type = CPP_NUMBER;
119 token->val.str.text = buf;
120 token->val.str.len = ustrlen (buf);
125 static const char * const monthnames[] =
127 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
128 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
131 /* Handle builtin macros like __FILE__, and push the resulting token
132 on the context stack. Also handles _Pragma, for which no new token
133 is created. Returns 1 if it generates a new token context, 0 to
134 return the token to the caller. */
136 builtin_macro (pfile, node)
140 const cpp_token *result;
142 switch (node->value.builtin)
145 cpp_ice (pfile, "invalid built-in macro \"%s\"", NODE_NAME (node));
154 const struct line_map *map = pfile->map;
156 if (node->value.builtin == BT_BASE_FILE)
157 while (! MAIN_FILE_P (map))
158 map = INCLUDED_FROM (&pfile->line_maps, map);
162 buf = _cpp_unaligned_alloc (pfile, len * 4 + 1);
163 len = cpp_quote_string (buf, (const unsigned char *) name, len) - buf;
165 result = new_string_token (pfile, buf, len);
169 case BT_INCLUDE_LEVEL:
170 /* The line map depth counts the primary source as level 1, but
171 historically __INCLUDE_DEPTH__ has called the primary source
173 result = new_number_token (pfile, pfile->line_maps.depth - 1);
177 /* If __LINE__ is embedded in a macro, it must expand to the
178 line of the macro's invocation, not its definition.
179 Otherwise things like assert() will not work properly. */
180 result = new_number_token (pfile,
181 SOURCE_LINE (pfile->map,
182 pfile->cur_token[-1].line));
187 int stdc = (!CPP_IN_SYSTEM_HEADER (pfile)
188 || pfile->spec_nodes.n__STRICT_ANSI__->type != NT_VOID);
189 result = new_number_token (pfile, stdc);
195 if (pfile->date.type == CPP_EOF)
197 /* Allocate __DATE__ and __TIME__ strings from permanent
198 storage. We only do this once, and don't generate them
199 at init time, because time() and localtime() are very
200 slow on some systems. */
201 time_t tt = time (NULL);
202 struct tm *tb = localtime (&tt);
204 pfile->date.val.str.text =
205 _cpp_unaligned_alloc (pfile, sizeof ("Oct 11 1347"));
206 pfile->date.val.str.len = sizeof ("Oct 11 1347") - 1;
207 pfile->date.type = CPP_STRING;
208 pfile->date.flags = 0;
209 sprintf ((char *) pfile->date.val.str.text, "%s %2d %4d",
210 monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900);
212 pfile->time.val.str.text =
213 _cpp_unaligned_alloc (pfile, sizeof ("12:34:56"));
214 pfile->time.val.str.len = sizeof ("12:34:56") - 1;
215 pfile->time.type = CPP_STRING;
216 pfile->time.flags = 0;
217 sprintf ((char *) pfile->time.val.str.text, "%02d:%02d:%02d",
218 tb->tm_hour, tb->tm_min, tb->tm_sec);
221 if (node->value.builtin == BT_DATE)
222 result = &pfile->date;
224 result = &pfile->time;
228 /* Don't interpret _Pragma within directives. The standard is
229 not clear on this, but to me this makes most sense. */
230 if (pfile->state.in_directive)
233 _cpp_do__Pragma (pfile);
237 push_token_context (pfile, NULL, result, 1);
241 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
242 backslashes and double quotes. Non-printable characters are
243 converted to octal. DEST must be of sufficient size. Returns
244 a pointer to the end of the string. */
246 cpp_quote_string (dest, src, len)
255 if (c == '\\' || c == '"')
266 sprintf ((char *) dest, "\\%03o", c);
275 /* Convert a token sequence ARG to a single string token according to
276 the rules of the ISO C #-operator. */
277 static const cpp_token *
278 stringify_arg (pfile, arg)
282 unsigned char *dest = BUFF_FRONT (pfile->u_buff);
283 unsigned int i, escape_it, backslash_count = 0;
284 const cpp_token *source = NULL;
287 /* Loop, reading in the argument's tokens. */
288 for (i = 0; i < arg->count; i++)
290 const cpp_token *token = arg->first[i];
292 if (token->type == CPP_PADDING)
295 source = token->val.source;
299 escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING
300 || token->type == CPP_CHAR || token->type == CPP_WCHAR);
302 /* Room for each char being written in octal, initial space and
304 len = cpp_token_len (token);
309 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
311 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
312 _cpp_extend_buff (pfile, &pfile->u_buff, len);
313 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
316 /* Leading white space? */
317 if (dest != BUFF_FRONT (pfile->u_buff))
321 if (source->flags & PREV_WHITE)
328 _cpp_buff *buff = _cpp_get_buff (pfile, len);
329 unsigned char *buf = BUFF_FRONT (buff);
330 len = cpp_spell_token (pfile, token, buf) - buf;
331 dest = cpp_quote_string (dest, buf, len);
332 _cpp_release_buff (pfile, buff);
335 dest = cpp_spell_token (pfile, token, dest);
337 if (token->type == CPP_OTHER && token->val.c == '\\')
343 /* Ignore the final \ of invalid string literals. */
344 if (backslash_count & 1)
346 cpp_warning (pfile, "invalid string literal, ignoring final '\\'");
350 /* Commit the memory, including NUL, and return the token. */
351 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < 1)
353 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
354 _cpp_extend_buff (pfile, &pfile->u_buff, 1);
355 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
357 len = dest - BUFF_FRONT (pfile->u_buff);
358 BUFF_FRONT (pfile->u_buff) = dest + 1;
359 return new_string_token (pfile, dest - len, len);
362 /* Try to paste two tokens. On success, return non-zero. In any
363 case, PLHS is updated to point to the pasted token, which is
364 guaranteed to not have the PASTE_LEFT flag set. */
366 paste_tokens (pfile, plhs, rhs)
368 const cpp_token **plhs, *rhs;
370 unsigned char *buf, *end;
371 const cpp_token *lhs;
376 len = cpp_token_len (lhs) + cpp_token_len (rhs) + 1;
377 buf = (unsigned char *) alloca (len);
378 end = cpp_spell_token (pfile, lhs, buf);
380 /* Avoid comment headers, since they are still processed in stage 3.
381 It is simpler to insert a space here, rather than modifying the
382 lexer to ignore comments in some circumstances. Simply returning
383 false doesn't work, since we want to clear the PASTE_LEFT flag. */
384 if (lhs->type == CPP_DIV
385 && (rhs->type == CPP_MULT || rhs->type == CPP_DIV))
387 end = cpp_spell_token (pfile, rhs, end);
390 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true, 1);
392 /* Tweak the column number the lexer will report. */
393 pfile->buffer->col_adjust = pfile->cur_token[-1].col - 1;
395 /* We don't want a leading # to be interpreted as a directive. */
396 pfile->buffer->saved_flags = 0;
398 /* Set pfile->cur_token as required by _cpp_lex_direct. */
399 pfile->cur_token = _cpp_temp_token (pfile);
400 *plhs = _cpp_lex_direct (pfile);
401 valid = pfile->buffer->cur == pfile->buffer->rlimit;
402 _cpp_pop_buffer (pfile);
407 /* Handles an arbitrarily long sequence of ## operators, with initial
408 operand LHS. This implementation is left-associative,
409 non-recursive, and finishes a paste before handling succeeding
410 ones. If a paste fails, we back up to the RHS of the failing ##
411 operator before pushing the context containing the result of prior
412 successful pastes, with the effect that the RHS appears in the
413 output stream after the pasted LHS normally. */
415 paste_all_tokens (pfile, lhs)
417 const cpp_token *lhs;
419 const cpp_token *rhs;
420 cpp_context *context = pfile->context;
424 /* Take the token directly from the current context. We can do
425 this, because we are in the replacement list of either an
426 object-like macro, or a function-like macro with arguments
427 inserted. In either case, the constraints to #define
428 guarantee we have at least one more token. */
429 if (context->direct_p)
430 rhs = context->first.token++;
432 rhs = *context->first.ptoken++;
434 if (rhs->type == CPP_PADDING)
437 if (!paste_tokens (pfile, &lhs, rhs))
439 _cpp_backup_tokens (pfile, 1);
441 /* Mandatory warning for all apart from assembler. */
442 if (CPP_OPTION (pfile, lang) != CLK_ASM)
444 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
445 cpp_token_as_text (pfile, lhs),
446 cpp_token_as_text (pfile, rhs));
450 while (rhs->flags & PASTE_LEFT);
452 /* Put the resulting token in its own context. */
453 push_token_context (pfile, NULL, lhs, 1);
456 /* Reads and returns the arguments to a function-like macro
457 invocation. Assumes the opening parenthesis has been processed.
458 If there is an error, emits an appropriate diagnostic and returns
459 NULL. Each argument is terminated by a CPP_EOF token, for the
460 future benefit of expand_arg(). */
462 collect_args (pfile, node)
464 const cpp_hashnode *node;
466 _cpp_buff *buff, *base_buff;
468 macro_arg *args, *arg;
469 const cpp_token *token;
473 macro = node->value.macro;
475 argc = macro->paramc;
478 buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
479 + sizeof (macro_arg)));
481 args = (macro_arg *) buff->base;
482 memset (args, 0, argc * sizeof (macro_arg));
483 buff->cur = (unsigned char *) &args[argc];
484 arg = args, argc = 0;
486 /* Collect the tokens making up each argument. We don't yet know
487 how many arguments have been supplied, whether too many or too
488 few. Hence the slightly bizarre usage of "argc" and "arg". */
491 unsigned int paren_depth = 0;
492 unsigned int ntokens = 0;
495 arg->first = (const cpp_token **) buff->cur;
499 /* Require space for 2 new tokens (including a CPP_EOF). */
500 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
502 buff = _cpp_append_extend_buff (pfile, buff,
503 1000 * sizeof (cpp_token *));
504 arg->first = (const cpp_token **) buff->cur;
507 token = cpp_get_token (pfile);
509 if (token->type == CPP_PADDING)
511 /* Drop leading padding. */
515 else if (token->type == CPP_OPEN_PAREN)
517 else if (token->type == CPP_CLOSE_PAREN)
519 if (paren_depth-- == 0)
522 else if (token->type == CPP_COMMA)
524 /* A comma does not terminate an argument within
525 parentheses or as part of a variable argument. */
527 && ! (macro->variadic && argc == macro->paramc))
530 else if (token->type == CPP_EOF
531 || (token->type == CPP_HASH && token->flags & BOL))
534 arg->first[ntokens++] = token;
537 /* Drop trailing padding. */
538 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
541 arg->count = ntokens;
542 arg->first[ntokens] = &pfile->eof;
544 /* Terminate the argument. Excess arguments loop back and
545 overwrite the final legitimate argument, before failing. */
546 if (argc <= macro->paramc)
548 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
549 if (argc != macro->paramc)
553 while (token->type != CPP_CLOSE_PAREN
554 && token->type != CPP_EOF
555 && token->type != CPP_HASH);
557 if (token->type == CPP_EOF || token->type == CPP_HASH)
559 bool step_back = false;
561 /* 6.10.3 paragraph 11: If there are sequences of preprocessing
562 tokens within the list of arguments that would otherwise act
563 as preprocessing directives, the behavior is undefined.
565 This implementation will report a hard error, terminate the
566 macro invocation, and proceed to process the directive. */
567 if (token->type == CPP_HASH)
570 "directives may not be used inside a macro argument");
574 step_back = (pfile->context->prev || pfile->state.in_directive);
576 /* We still need the CPP_EOF to end directives, and to end
577 pre-expansion of a macro argument. Step back is not
578 unconditional, since we don't want to return a CPP_EOF to our
579 callers at the end of an -include-d file. */
581 _cpp_backup_tokens (pfile, 1);
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->variadic)
598 if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
599 cpp_pedwarn (pfile, "ISO C99 requires rest arguments to be used");
604 "macro \"%s\" requires %u arguments, but only %u given",
605 NODE_NAME (node), macro->paramc, argc);
609 else if (argc > macro->paramc)
611 /* Empty argument to a macro taking no arguments is OK. */
612 if (argc != 1 || arg->count)
615 "macro \"%s\" passed %u arguments, but takes just %u",
616 NODE_NAME (node), argc, macro->paramc);
623 /* GCC has special semantics for , ## b where b is a varargs
624 parameter: we remove the comma if b was omitted entirely.
625 If b was merely an empty argument, the comma is retained.
626 If the macro takes just one (varargs) parameter, then we
627 retain the comma only if we are standards conforming.
629 If FIRST is NULL replace_args () swallows the comma. */
630 if (macro->variadic && (argc < macro->paramc
631 || (argc == 1 && args[0].count == 0
632 && !CPP_OPTION (pfile, std))))
633 args[macro->paramc - 1].first = NULL;
637 _cpp_release_buff (pfile, base_buff);
641 /* Search for an opening parenthesis to the macro of NODE, in such a
642 way that, if none is found, we don't lose the information in any
643 intervening padding tokens. If we find the parenthesis, collect
644 the arguments and return the buffer containing them. */
646 funlike_invocation_p (pfile, node)
650 const cpp_token *token, *padding = NULL;
654 token = cpp_get_token (pfile);
655 if (token->type != CPP_PADDING)
658 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
662 if (token->type == CPP_OPEN_PAREN)
664 pfile->state.parsing_args = 2;
665 return collect_args (pfile, node);
668 /* CPP_EOF can be the end of macro arguments, or the end of the
669 file. We mustn't back up over the latter. Ugh. */
670 if (token->type != CPP_EOF || token == &pfile->eof)
672 /* Back up. We may have skipped padding, in which case backing
673 up more than one token when expanding macros is in general
674 too difficult. We re-insert it in its own context. */
675 _cpp_backup_tokens (pfile, 1);
677 push_token_context (pfile, NULL, padding, 1);
683 /* Push the context of a macro with hash entry NODE onto the context
684 stack. If we can successfully expand the macro, we push a context
685 containing its yet-to-be-rescanned replacement list and return one.
686 Otherwise, we don't push a context and return zero. */
688 enter_macro_context (pfile, node)
692 /* The presence of a macro invalidates a file's controlling macro. */
693 pfile->mi_valid = false;
695 pfile->state.angled_headers = false;
697 /* Handle standard macros. */
698 if (! (node->flags & NODE_BUILTIN))
700 cpp_macro *macro = node->value.macro;
706 pfile->state.prevent_expansion++;
707 pfile->keep_tokens++;
708 pfile->state.parsing_args = 1;
709 buff = funlike_invocation_p (pfile, node);
710 pfile->state.parsing_args = 0;
711 pfile->keep_tokens--;
712 pfile->state.prevent_expansion--;
716 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
718 "function-like macro \"%s\" must be used with arguments in traditional C",
724 if (node->value.macro->paramc > 0)
725 replace_args (pfile, node, (macro_arg *) buff->base);
726 _cpp_release_buff (pfile, buff);
729 /* Disable the macro within its expansion. */
730 node->flags |= NODE_DISABLED;
732 if (macro->paramc == 0)
733 push_token_context (pfile, node, macro->expansion, macro->count);
738 /* Handle built-in macros and the _Pragma operator. */
739 return builtin_macro (pfile, node);
742 /* Replace the parameters in a function-like macro of NODE with the
743 actual ARGS, and place the result in a newly pushed token context.
744 Expand each argument before replacing, unless it is operated upon
745 by the # or ## operators. */
747 replace_args (pfile, node, args)
752 unsigned int i, total;
753 const cpp_token *src, *limit;
754 const cpp_token **dest, **first;
759 /* First, fully macro-expand arguments, calculating the number of
760 tokens in the final expansion as we go. The ordering of the if
761 statements below is subtle; we must handle stringification before
763 macro = node->value.macro;
764 total = macro->count;
765 limit = macro->expansion + macro->count;
767 for (src = macro->expansion; src < limit; src++)
768 if (src->type == CPP_MACRO_ARG)
770 /* Leading and trailing padding tokens. */
773 /* We have an argument. If it is not being stringified or
774 pasted it is macro-replaced before insertion. */
775 arg = &args[src->val.arg_no - 1];
777 if (src->flags & STRINGIFY_ARG)
779 if (!arg->stringified)
780 arg->stringified = stringify_arg (pfile, arg);
782 else if ((src->flags & PASTE_LEFT)
783 || (src > macro->expansion && (src[-1].flags & PASTE_LEFT)))
784 total += arg->count - 1;
788 expand_arg (pfile, arg);
789 total += arg->expanded_count - 1;
793 /* Now allocate space for the expansion, copy the tokens and replace
795 buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
796 first = (const cpp_token **) buff->base;
799 for (src = macro->expansion; src < limit; src++)
802 const cpp_token **from, **paste_flag;
804 if (src->type != CPP_MACRO_ARG)
811 arg = &args[src->val.arg_no - 1];
812 if (src->flags & STRINGIFY_ARG)
813 count = 1, from = &arg->stringified;
814 else if (src->flags & PASTE_LEFT)
815 count = arg->count, from = arg->first;
816 else if (src != macro->expansion && (src[-1].flags & PASTE_LEFT))
818 count = arg->count, from = arg->first;
821 if (dest[-1]->type == CPP_COMMA
823 && src->val.arg_no == macro->paramc)
825 /* Swallow a pasted comma if from == NULL, otherwise
826 drop the paste flag. */
830 paste_flag = dest - 1;
832 /* Remove the paste flag if the RHS is a placemarker. */
834 paste_flag = dest - 1;
838 count = arg->expanded_count, from = arg->expanded;
840 /* Padding on the left of an argument (unless RHS of ##). */
841 if (!pfile->state.in_directive
842 && src != macro->expansion && !(src[-1].flags & PASTE_LEFT))
843 *dest++ = padding_token (pfile, src);
847 memcpy (dest, from, count * sizeof (cpp_token *));
850 /* With a non-empty argument on the LHS of ##, the last
851 token should be flagged PASTE_LEFT. */
852 if (src->flags & PASTE_LEFT)
853 paste_flag = dest - 1;
856 /* Avoid paste on RHS (even case count == 0). */
857 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
858 *dest++ = &pfile->avoid_paste;
860 /* Add a new paste flag, or remove an unwanted one. */
863 cpp_token *token = _cpp_temp_token (pfile);
864 token->type = (*paste_flag)->type;
865 token->val.str = (*paste_flag)->val.str;
866 if (src->flags & PASTE_LEFT)
867 token->flags = (*paste_flag)->flags | PASTE_LEFT;
869 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
874 /* Free the expanded arguments. */
875 for (i = 0; i < macro->paramc; i++)
876 if (args[i].expanded)
877 free (args[i].expanded);
879 push_ptoken_context (pfile, node, buff, first, dest - first);
882 /* Return a special padding token, with padding inherited from SOURCE. */
883 static const cpp_token *
884 padding_token (pfile, source)
886 const cpp_token *source;
888 cpp_token *result = _cpp_temp_token (pfile);
890 result->type = CPP_PADDING;
891 result->val.source = source;
896 /* Get a new uninitialized context. Create a new one if we cannot
897 re-use an old one. */
902 cpp_context *result = pfile->context->next;
906 result = xnew (cpp_context);
907 result->prev = pfile->context;
909 pfile->context->next = result;
912 pfile->context = result;
916 /* Push a list of pointers to tokens. */
918 push_ptoken_context (pfile, macro, buff, first, count)
922 const cpp_token **first;
925 cpp_context *context = next_context (pfile);
927 context->direct_p = false;
928 context->macro = macro;
929 context->buff = buff;
930 context->first.ptoken = first;
931 context->last.ptoken = first + count;
934 /* Push a list of tokens. */
936 push_token_context (pfile, macro, first, count)
939 const cpp_token *first;
942 cpp_context *context = next_context (pfile);
944 context->direct_p = true;
945 context->macro = macro;
946 context->buff = NULL;
947 context->first.token = first;
948 context->last.token = first + count;
951 /* Expand an argument ARG before replacing parameters in a
952 function-like macro. This works by pushing a context with the
953 argument's tokens, and then expanding that into a temporary buffer
954 as if it were a normal part of the token stream. collect_args()
955 has terminated the argument's tokens with a CPP_EOF so that we know
956 when we have fully expanded the argument. */
958 expand_arg (pfile, arg)
962 unsigned int capacity;
967 /* Loop, reading in the arguments. */
969 arg->expanded = (const cpp_token **)
970 xmalloc (capacity * sizeof (cpp_token *));
972 push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1);
975 const cpp_token *token;
977 if (arg->expanded_count + 1 >= capacity)
980 arg->expanded = (const cpp_token **)
981 xrealloc (arg->expanded, capacity * sizeof (cpp_token *));
984 token = cpp_get_token (pfile);
986 if (token->type == CPP_EOF)
989 arg->expanded[arg->expanded_count++] = token;
992 _cpp_pop_context (pfile);
995 /* Pop the current context off the stack, re-enabling the macro if the
996 context represented a macro's replacement list. The context
997 structure is not freed so that we can re-use it later. */
999 _cpp_pop_context (pfile)
1002 cpp_context *context = pfile->context;
1005 context->macro->flags &= ~NODE_DISABLED;
1008 _cpp_release_buff (pfile, context->buff);
1010 pfile->context = context->prev;
1013 /* Eternal routine to get a token. Also used nearly everywhere
1014 internally, except for places where we know we can safely call
1015 the lexer directly, such as lexing a directive name.
1017 Macro expansions and directives are transparently handled,
1018 including entering included files. Thus tokens are post-macro
1019 expansion, and after any intervening directives. External callers
1020 see CPP_EOF only at EOF. Internal callers also see it when meeting
1021 a directive inside a macro call, when at the end of a directive and
1022 state.in_directive is still 1, and at the end of argument
1025 cpp_get_token (pfile)
1028 const cpp_token *result;
1033 cpp_context *context = pfile->context;
1035 /* Context->prev == 0 <=> base context. */
1037 result = _cpp_lex_token (pfile);
1038 else if (context->first.token != context->last.token)
1040 if (context->direct_p)
1041 result = context->first.token++;
1043 result = *context->first.ptoken++;
1045 if (result->flags & PASTE_LEFT)
1047 paste_all_tokens (pfile, result);
1048 if (pfile->state.in_directive)
1050 return padding_token (pfile, result);
1055 _cpp_pop_context (pfile);
1056 if (pfile->state.in_directive)
1058 return &pfile->avoid_paste;
1061 if (result->type != CPP_NAME)
1064 node = result->val.node;
1066 if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
1069 if (!(node->flags & NODE_DISABLED))
1071 if (!pfile->state.prevent_expansion
1072 && enter_macro_context (pfile, node))
1074 if (pfile->state.in_directive)
1076 return padding_token (pfile, result);
1081 /* Flag this token as always unexpandable. FIXME: move this
1082 to collect_args()?. */
1083 cpp_token *t = _cpp_temp_token (pfile);
1084 t->type = result->type;
1085 t->flags = result->flags | NO_EXPAND;
1086 t->val.str = result->val.str;
1096 /* Returns true if we're expanding an object-like macro that was
1097 defined in a system header. Just checks the macro at the top of
1098 the stack. Used for diagnostic suppression. */
1100 cpp_sys_macro_p (pfile)
1103 cpp_hashnode *node = pfile->context->macro;
1105 return node && node->value.macro && node->value.macro->syshdr;
1108 /* Read each token in, until EOF. Directives are transparently
1111 cpp_scan_nooutput (pfile)
1114 while (cpp_get_token (pfile)->type != CPP_EOF)
1118 /* Step back one (or more) tokens. Can only step mack more than 1 if
1119 they are from the lexer, and not from macro expansion. */
1121 _cpp_backup_tokens (pfile, count)
1125 if (pfile->context->prev == NULL)
1127 pfile->lookaheads += count;
1131 if (pfile->cur_token == pfile->cur_run->base
1132 /* Possible with -fpreprocessed and no leading #line. */
1133 && pfile->cur_run->prev != NULL)
1135 pfile->cur_run = pfile->cur_run->prev;
1136 pfile->cur_token = pfile->cur_run->limit;
1144 if (pfile->context->direct_p)
1145 pfile->context->first.token--;
1147 pfile->context->first.ptoken--;
1151 /* #define directive parsing and handling. */
1153 /* Returns non-zero if a macro redefinition warning is required. */
1155 warn_of_redefinition (node, macro2)
1156 const cpp_hashnode *node;
1157 const cpp_macro *macro2;
1159 const cpp_macro *macro1;
1162 /* Some redefinitions need to be warned about regardless. */
1163 if (node->flags & NODE_WARN)
1166 /* Redefinition of a macro is allowed if and only if the old and new
1167 definitions are the same. (6.10.3 paragraph 2). */
1168 macro1 = node->value.macro;
1170 /* The quick failures. */
1171 if (macro1->count != macro2->count
1172 || macro1->paramc != macro2->paramc
1173 || macro1->fun_like != macro2->fun_like
1174 || macro1->variadic != macro2->variadic)
1177 /* Check each token. */
1178 for (i = 0; i < macro1->count; i++)
1179 if (! _cpp_equiv_tokens (¯o1->expansion[i], ¯o2->expansion[i]))
1182 /* Check parameter spellings. */
1183 for (i = 0; i < macro1->paramc; i++)
1184 if (macro1->params[i] != macro2->params[i])
1190 /* Free the definition of hashnode H. */
1192 _cpp_free_definition (h)
1195 /* Macros and assertions no longer have anything to free. */
1197 /* Clear builtin flag in case of redefinition. */
1198 h->flags &= ~(NODE_BUILTIN | NODE_DISABLED);
1201 /* Save parameter NODE to the parameter list of macro MACRO. Returns
1202 zero on success, non-zero if the parameter is a duplicate. */
1204 save_parameter (pfile, macro, node)
1209 /* Constraint 6.10.3.6 - duplicate parameter names. */
1210 if (node->arg_index)
1212 cpp_error (pfile, "duplicate macro parameter \"%s\"", NODE_NAME (node));
1216 if (BUFF_ROOM (pfile->a_buff)
1217 < (macro->paramc + 1) * sizeof (cpp_hashnode *))
1218 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
1220 ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
1221 node->arg_index = macro->paramc;
1225 /* Check the syntax of the parameters in a MACRO definition. */
1227 parse_params (pfile, macro)
1231 unsigned int prev_ident = 0;
1235 const cpp_token *token = _cpp_lex_token (pfile);
1237 switch (token->type)
1240 cpp_error (pfile, "\"%s\" may not appear in macro parameter list",
1241 cpp_token_as_text (pfile, token));
1247 cpp_error (pfile, "macro parameters must be comma-separated");
1252 if (save_parameter (pfile, macro, token->val.node))
1256 case CPP_CLOSE_PAREN:
1257 if (prev_ident || macro->paramc == 0)
1260 /* Fall through to pick up the error. */
1264 cpp_error (pfile, "parameter name missing");
1271 macro->variadic = 1;
1274 save_parameter (pfile, macro, pfile->spec_nodes.n__VA_ARGS__);
1275 pfile->state.va_args_ok = 1;
1276 if (! CPP_OPTION (pfile, c99) && CPP_OPTION (pfile, pedantic))
1278 "anonymous variadic macros were introduced in C99");
1280 else if (CPP_OPTION (pfile, pedantic))
1281 cpp_pedwarn (pfile, "ISO C does not permit named variadic macros");
1283 /* We're at the end, and just expect a closing parenthesis. */
1284 token = _cpp_lex_token (pfile);
1285 if (token->type == CPP_CLOSE_PAREN)
1290 cpp_error (pfile, "missing ')' in macro parameter list");
1296 /* Allocate room for a token from a macro's replacement list. */
1298 alloc_expansion_token (pfile, macro)
1302 if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
1303 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
1305 return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
1308 /* Lex a token from the expansion of MACRO, but mark parameters as we
1309 find them and warn of traditional stringification. */
1311 lex_expansion_token (pfile, macro)
1317 pfile->cur_token = alloc_expansion_token (pfile, macro);
1318 token = _cpp_lex_direct (pfile);
1320 /* Is this a parameter? */
1321 if (token->type == CPP_NAME && token->val.node->arg_index)
1323 token->type = CPP_MACRO_ARG;
1324 token->val.arg_no = token->val.node->arg_index;
1326 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1327 && (token->type == CPP_STRING || token->type == CPP_CHAR))
1328 check_trad_stringification (pfile, macro, &token->val.str);
1333 /* Parse a macro and save its expansion. Returns non-zero on success. */
1335 _cpp_create_definition (pfile, node)
1340 cpp_token *token, *saved_cur_token;
1341 const cpp_token *ctoken;
1342 unsigned int i, ok = 1;
1344 macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
1345 macro->line = pfile->directive_line;
1348 macro->variadic = 0;
1350 macro->fun_like = 0;
1352 /* Get the first token of the expansion (or the '(' of a
1353 function-like macro). */
1354 ctoken = _cpp_lex_token (pfile);
1356 if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
1358 ok = parse_params (pfile, macro);
1359 macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
1363 /* Success. Commit the parameter array. */
1364 BUFF_FRONT (pfile->a_buff) = (U_CHAR *) ¯o->params[macro->paramc];
1365 macro->fun_like = 1;
1367 else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
1368 cpp_pedwarn (pfile, "ISO C requires whitespace after the macro name");
1370 saved_cur_token = pfile->cur_token;
1372 if (macro->fun_like)
1373 token = lex_expansion_token (pfile, macro);
1376 token = alloc_expansion_token (pfile, macro);
1382 /* Check the stringifying # constraint 6.10.3.2.1 of
1383 function-like macros when lexing the subsequent token. */
1384 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1386 if (token->type == CPP_MACRO_ARG)
1388 token->flags &= ~PREV_WHITE;
1389 token->flags |= STRINGIFY_ARG;
1390 token->flags |= token[-1].flags & PREV_WHITE;
1391 token[-1] = token[0];
1394 /* Let assembler get away with murder. */
1395 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
1398 cpp_error (pfile, "'#' is not followed by a macro parameter");
1403 if (token->type == CPP_EOF)
1406 /* Paste operator constraint 6.10.3.3.1. */
1407 if (token->type == CPP_PASTE)
1409 /* Token-paste ##, can appear in both object-like and
1410 function-like macros, but not at the ends. */
1411 if (--macro->count > 0)
1412 token = lex_expansion_token (pfile, macro);
1414 if (macro->count == 0 || token->type == CPP_EOF)
1418 "'##' cannot appear at either end of a macro expansion");
1422 token[-1].flags |= PASTE_LEFT;
1425 token = lex_expansion_token (pfile, macro);
1428 macro->expansion = (cpp_token *) BUFF_FRONT (pfile->a_buff);
1430 /* Don't count the CPP_EOF. */
1433 /* Clear whitespace on first token for warn_of_redefinition(). */
1435 macro->expansion[0].flags &= ~PREV_WHITE;
1437 /* Commit the memory. */
1438 BUFF_FRONT (pfile->a_buff) = (U_CHAR *) ¯o->expansion[macro->count];
1440 /* Implement the macro-defined-to-itself optimisation. */
1441 if (macro->count == 1 && !macro->fun_like
1442 && macro->expansion[0].type == CPP_NAME
1443 && macro->expansion[0].val.node == node)
1444 node->flags |= NODE_DISABLED;
1446 /* To suppress some diagnostics. */
1447 macro->syshdr = pfile->map->sysp != 0;
1449 if (node->type != NT_VOID)
1451 if (warn_of_redefinition (node, macro))
1453 cpp_pedwarn_with_line (pfile, pfile->directive_line, 0,
1454 "\"%s\" redefined", NODE_NAME (node));
1456 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
1457 cpp_pedwarn_with_line (pfile, node->value.macro->line, 0,
1458 "this is the location of the previous definition");
1460 _cpp_free_definition (node);
1463 /* Enter definition in hash table. */
1464 node->type = NT_MACRO;
1465 node->value.macro = macro;
1466 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_")))
1467 node->flags |= NODE_WARN;
1471 /* Set type for SEEN_EOL() in cpplib.c, restore the lexer position. */
1472 saved_cur_token[-1].type = pfile->cur_token[-1].type;
1473 pfile->cur_token = saved_cur_token;
1477 /* Stop the lexer accepting __VA_ARGS__. */
1478 pfile->state.va_args_ok = 0;
1480 /* Clear the fast argument lookup indices. */
1481 for (i = macro->paramc; i-- > 0; )
1482 macro->params[i]->arg_index = 0;
1487 /* Warn if a token in STRING matches one of a function-like MACRO's
1490 check_trad_stringification (pfile, macro, string)
1492 const cpp_macro *macro;
1493 const cpp_string *string;
1495 unsigned int i, len;
1496 const U_CHAR *p, *q, *limit = string->text + string->len;
1498 /* Loop over the string. */
1499 for (p = string->text; p < limit; p = q)
1501 /* Find the start of an identifier. */
1502 while (p < limit && !is_idstart (*p))
1505 /* Find the end of the identifier. */
1507 while (q < limit && is_idchar (*q))
1512 /* Loop over the function macro arguments to see if the
1513 identifier inside the string matches one of them. */
1514 for (i = 0; i < macro->paramc; i++)
1516 const cpp_hashnode *node = macro->params[i];
1518 if (NODE_LEN (node) == len
1519 && !memcmp (p, NODE_NAME (node), len))
1522 "macro argument \"%s\" would be stringified with -traditional",
1530 /* Returns the name, arguments and expansion of a macro, in a format
1531 suitable to be read back in again, and therefore also for DWARF 2
1532 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1533 Caller is expected to generate the "#define" bit if needed. The
1534 returned text is temporary, and automatically freed later. */
1535 const unsigned char *
1536 cpp_macro_definition (pfile, node)
1538 const cpp_hashnode *node;
1540 unsigned int i, len;
1541 const cpp_macro *macro = node->value.macro;
1542 unsigned char *buffer;
1544 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1546 cpp_ice (pfile, "invalid hash type %d in cpp_macro_definition", node->type);
1550 /* Calculate length. */
1551 len = NODE_LEN (node) + 2; /* ' ' and NUL. */
1552 if (macro->fun_like)
1554 len += 4; /* "()" plus possible final ".." of named
1555 varargs (we have + 1 below). */
1556 for (i = 0; i < macro->paramc; i++)
1557 len += NODE_LEN (macro->params[i]) + 1; /* "," */
1560 for (i = 0; i < macro->count; i++)
1562 cpp_token *token = ¯o->expansion[i];
1564 if (token->type == CPP_MACRO_ARG)
1565 len += NODE_LEN (macro->params[token->val.arg_no - 1]);
1567 len += cpp_token_len (token); /* Includes room for ' '. */
1568 if (token->flags & STRINGIFY_ARG)
1570 if (token->flags & PASTE_LEFT)
1571 len += 3; /* " ##" */
1574 if (len > pfile->macro_buffer_len)
1576 pfile->macro_buffer = (U_CHAR *) xrealloc (pfile->macro_buffer, len);
1577 pfile->macro_buffer_len = len;
1580 /* Fill in the buffer. Start with the macro name. */
1581 buffer = pfile->macro_buffer;
1582 memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
1583 buffer += NODE_LEN (node);
1585 /* Parameter names. */
1586 if (macro->fun_like)
1589 for (i = 0; i < macro->paramc; i++)
1591 cpp_hashnode *param = macro->params[i];
1593 if (param != pfile->spec_nodes.n__VA_ARGS__)
1595 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
1596 buffer += NODE_LEN (param);
1599 if (i + 1 < macro->paramc)
1600 /* Don't emit a space after the comma here; we're trying
1601 to emit a Dwarf-friendly definition, and the Dwarf spec
1602 forbids spaces in the argument list. */
1604 else if (macro->variadic)
1605 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
1610 /* The Dwarf spec requires a space after the macro name, even if the
1611 definition is the empty string. */
1614 /* Expansion tokens. */
1617 for (i = 0; i < macro->count; i++)
1619 cpp_token *token = ¯o->expansion[i];
1621 if (token->flags & PREV_WHITE)
1623 if (token->flags & STRINGIFY_ARG)
1626 if (token->type == CPP_MACRO_ARG)
1628 len = NODE_LEN (macro->params[token->val.arg_no - 1]);
1630 NODE_NAME (macro->params[token->val.arg_no - 1]), len);
1634 buffer = cpp_spell_token (pfile, token, buffer);
1636 if (token->flags & PASTE_LEFT)
1641 /* Next has PREV_WHITE; see _cpp_create_definition. */
1647 return pfile->macro_buffer;