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! */
31 typedef struct macro_arg macro_arg;
34 const cpp_token **first; /* First token in unexpanded argument. */
35 const cpp_token **expanded; /* Macro-expanded argument. */
36 const cpp_token *stringified; /* Stringified argument. */
37 unsigned int count; /* # of tokens in argument. */
38 unsigned int expanded_count; /* # of tokens in expanded argument. */
41 /* Macro expansion. */
43 static int enter_macro_context PARAMS ((cpp_reader *, cpp_hashnode *));
44 static int builtin_macro PARAMS ((cpp_reader *, cpp_hashnode *));
45 static void push_token_context
46 PARAMS ((cpp_reader *, cpp_hashnode *, const cpp_token *, unsigned int));
47 static void push_ptoken_context
48 PARAMS ((cpp_reader *, cpp_hashnode *, _cpp_buff *,
49 const cpp_token **, unsigned int));
50 static _cpp_buff *collect_args PARAMS ((cpp_reader *, const cpp_hashnode *));
51 static cpp_context *next_context PARAMS ((cpp_reader *));
52 static const cpp_token *padding_token
53 PARAMS ((cpp_reader *, const cpp_token *));
54 static void expand_arg PARAMS ((cpp_reader *, macro_arg *));
55 static const cpp_token *new_string_token PARAMS ((cpp_reader *, uchar *,
57 static const cpp_token *new_number_token PARAMS ((cpp_reader *, unsigned int));
58 static const cpp_token *stringify_arg PARAMS ((cpp_reader *, macro_arg *));
59 static void paste_all_tokens PARAMS ((cpp_reader *, const cpp_token *));
60 static bool paste_tokens PARAMS ((cpp_reader *, const cpp_token **,
62 static void replace_args PARAMS ((cpp_reader *, cpp_hashnode *, cpp_macro *,
64 static _cpp_buff *funlike_invocation_p PARAMS ((cpp_reader *, cpp_hashnode *));
65 static bool create_iso_definition PARAMS ((cpp_reader *, cpp_macro *));
67 /* #define directive parsing and handling. */
69 static cpp_token *alloc_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
70 static cpp_token *lex_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
71 static bool warn_of_redefinition PARAMS ((cpp_reader *, const cpp_hashnode *,
73 static int parse_params PARAMS ((cpp_reader *, cpp_macro *));
74 static void check_trad_stringification PARAMS ((cpp_reader *,
78 /* Allocates and returns a CPP_STRING token, containing TEXT of length
79 LEN, after null-terminating it. TEXT must be in permanent storage. */
80 static const cpp_token *
81 new_string_token (pfile, text, len)
86 cpp_token *token = _cpp_temp_token (pfile);
89 token->type = CPP_STRING;
90 token->val.str.len = len;
91 token->val.str.text = text;
96 /* Allocates and returns a CPP_NUMBER token evaluating to NUMBER. */
97 static const cpp_token *
98 new_number_token (pfile, number)
102 cpp_token *token = _cpp_temp_token (pfile);
103 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
104 unsigned char *buf = _cpp_unaligned_alloc (pfile, 21);
106 sprintf ((char *) buf, "%u", number);
107 token->type = CPP_NUMBER;
108 token->val.str.text = buf;
109 token->val.str.len = ustrlen (buf);
114 static const char * const monthnames[] =
116 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
117 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
120 /* Handle builtin macros like __FILE__, and push the resulting token
121 on the context stack. Also handles _Pragma, for which no new token
122 is created. Returns 1 if it generates a new token context, 0 to
123 return the token to the caller. */
125 builtin_macro (pfile, node)
129 const cpp_token *result;
131 switch (node->value.builtin)
134 cpp_error (pfile, DL_ICE, "invalid built-in macro \"%s\"",
144 const struct line_map *map = pfile->map;
146 if (node->value.builtin == BT_BASE_FILE)
147 while (! MAIN_FILE_P (map))
148 map = INCLUDED_FROM (&pfile->line_maps, map);
152 buf = _cpp_unaligned_alloc (pfile, len * 4 + 1);
153 len = cpp_quote_string (buf, (const unsigned char *) name, len) - buf;
155 result = new_string_token (pfile, buf, len);
159 case BT_INCLUDE_LEVEL:
160 /* The line map depth counts the primary source as level 1, but
161 historically __INCLUDE_DEPTH__ has called the primary source
163 result = new_number_token (pfile, pfile->line_maps.depth - 1);
167 /* If __LINE__ is embedded in a macro, it must expand to the
168 line of the macro's invocation, not its definition.
169 Otherwise things like assert() will not work properly. */
170 result = new_number_token (pfile,
171 SOURCE_LINE (pfile->map,
172 pfile->cur_token[-1].line));
175 /* __STDC__ has the value 1 under normal circumstances.
176 However, if (a) we are in a system header, (b) the option
177 stdc_0_in_system_headers is true (set by target config), and
178 (c) we are not in strictly conforming mode, then it has the
183 enum c_lang lang = CPP_OPTION (pfile, lang);
184 if (CPP_IN_SYSTEM_HEADER (pfile)
185 && CPP_OPTION (pfile, stdc_0_in_system_headers)
186 && !(lang == CLK_STDC89 || lang == CLK_STDC94
187 || lang == CLK_STDC99)) /* || lang == CLK_CXX98 ? */
192 result = new_number_token (pfile, stdc);
198 if (pfile->date.type == CPP_EOF)
200 /* Allocate __DATE__ and __TIME__ strings from permanent
201 storage. We only do this once, and don't generate them
202 at init time, because time() and localtime() are very
203 slow on some systems. */
204 time_t tt = time (NULL);
205 struct tm *tb = localtime (&tt);
207 pfile->date.val.str.text =
208 _cpp_unaligned_alloc (pfile, sizeof ("Oct 11 1347"));
209 pfile->date.val.str.len = sizeof ("Oct 11 1347") - 1;
210 pfile->date.type = CPP_STRING;
211 pfile->date.flags = 0;
212 sprintf ((char *) pfile->date.val.str.text, "%s %2d %4d",
213 monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900);
215 pfile->time.val.str.text =
216 _cpp_unaligned_alloc (pfile, sizeof ("12:34:56"));
217 pfile->time.val.str.len = sizeof ("12:34:56") - 1;
218 pfile->time.type = CPP_STRING;
219 pfile->time.flags = 0;
220 sprintf ((char *) pfile->time.val.str.text, "%02d:%02d:%02d",
221 tb->tm_hour, tb->tm_min, tb->tm_sec);
224 if (node->value.builtin == BT_DATE)
225 result = &pfile->date;
227 result = &pfile->time;
231 /* Don't interpret _Pragma within directives. The standard is
232 not clear on this, but to me this makes most sense. */
233 if (pfile->state.in_directive)
236 _cpp_do__Pragma (pfile);
240 push_token_context (pfile, NULL, result, 1);
244 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
245 backslashes and double quotes. Non-printable characters are
246 converted to octal. DEST must be of sufficient size. Returns
247 a pointer to the end of the string. */
249 cpp_quote_string (dest, src, len)
258 if (c == '\\' || c == '"')
269 sprintf ((char *) dest, "\\%03o", c);
278 /* Convert a token sequence ARG to a single string token according to
279 the rules of the ISO C #-operator. */
280 static const cpp_token *
281 stringify_arg (pfile, arg)
285 unsigned char *dest = BUFF_FRONT (pfile->u_buff);
286 unsigned int i, escape_it, backslash_count = 0;
287 const cpp_token *source = NULL;
290 /* Loop, reading in the argument's tokens. */
291 for (i = 0; i < arg->count; i++)
293 const cpp_token *token = arg->first[i];
295 if (token->type == CPP_PADDING)
298 source = token->val.source;
302 escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING
303 || token->type == CPP_CHAR || token->type == CPP_WCHAR);
305 /* Room for each char being written in octal, initial space and
307 len = cpp_token_len (token);
312 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
314 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
315 _cpp_extend_buff (pfile, &pfile->u_buff, len);
316 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
319 /* Leading white space? */
320 if (dest != BUFF_FRONT (pfile->u_buff))
324 if (source->flags & PREV_WHITE)
331 _cpp_buff *buff = _cpp_get_buff (pfile, len);
332 unsigned char *buf = BUFF_FRONT (buff);
333 len = cpp_spell_token (pfile, token, buf) - buf;
334 dest = cpp_quote_string (dest, buf, len);
335 _cpp_release_buff (pfile, buff);
338 dest = cpp_spell_token (pfile, token, dest);
340 if (token->type == CPP_OTHER && token->val.c == '\\')
346 /* Ignore the final \ of invalid string literals. */
347 if (backslash_count & 1)
349 cpp_error (pfile, DL_WARNING,
350 "invalid string literal, ignoring final '\\'");
354 /* Commit the memory, including NUL, and return the token. */
355 len = dest - BUFF_FRONT (pfile->u_buff);
356 BUFF_FRONT (pfile->u_buff) = dest + 1;
357 return new_string_token (pfile, dest - len, len);
360 /* Try to paste two tokens. On success, return non-zero. In any
361 case, PLHS is updated to point to the pasted token, which is
362 guaranteed to not have the PASTE_LEFT flag set. */
364 paste_tokens (pfile, plhs, rhs)
366 const cpp_token **plhs, *rhs;
368 unsigned char *buf, *end;
369 const cpp_token *lhs;
374 len = cpp_token_len (lhs) + cpp_token_len (rhs) + 1;
375 buf = (unsigned char *) alloca (len);
376 end = cpp_spell_token (pfile, lhs, buf);
378 /* Avoid comment headers, since they are still processed in stage 3.
379 It is simpler to insert a space here, rather than modifying the
380 lexer to ignore comments in some circumstances. Simply returning
381 false doesn't work, since we want to clear the PASTE_LEFT flag. */
382 if (lhs->type == CPP_DIV
383 && (rhs->type == CPP_MULT || rhs->type == CPP_DIV))
385 end = cpp_spell_token (pfile, rhs, end);
388 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true, 1);
390 /* Tweak the column number the lexer will report. */
391 pfile->buffer->col_adjust = pfile->cur_token[-1].col - 1;
393 /* We don't want a leading # to be interpreted as a directive. */
394 pfile->buffer->saved_flags = 0;
396 /* Set pfile->cur_token as required by _cpp_lex_direct. */
397 pfile->cur_token = _cpp_temp_token (pfile);
398 *plhs = _cpp_lex_direct (pfile);
399 valid = pfile->buffer->cur == pfile->buffer->rlimit;
400 _cpp_pop_buffer (pfile);
405 /* Handles an arbitrarily long sequence of ## operators, with initial
406 operand LHS. This implementation is left-associative,
407 non-recursive, and finishes a paste before handling succeeding
408 ones. If a paste fails, we back up to the RHS of the failing ##
409 operator before pushing the context containing the result of prior
410 successful pastes, with the effect that the RHS appears in the
411 output stream after the pasted LHS normally. */
413 paste_all_tokens (pfile, lhs)
415 const cpp_token *lhs;
417 const cpp_token *rhs;
418 cpp_context *context = pfile->context;
422 /* Take the token directly from the current context. We can do
423 this, because we are in the replacement list of either an
424 object-like macro, or a function-like macro with arguments
425 inserted. In either case, the constraints to #define
426 guarantee we have at least one more token. */
427 if (context->direct_p)
428 rhs = FIRST (context).token++;
430 rhs = *FIRST (context).ptoken++;
432 if (rhs->type == CPP_PADDING)
435 if (!paste_tokens (pfile, &lhs, rhs))
437 _cpp_backup_tokens (pfile, 1);
439 /* Mandatory error for all apart from assembler. */
440 if (CPP_OPTION (pfile, lang) != CLK_ASM)
441 cpp_error (pfile, DL_ERROR,
442 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
443 cpp_token_as_text (pfile, lhs),
444 cpp_token_as_text (pfile, rhs));
448 while (rhs->flags & PASTE_LEFT);
450 /* Put the resulting token in its own context. */
451 push_token_context (pfile, NULL, lhs, 1);
454 /* Returns TRUE if the number of arguments ARGC supplied in an
455 invocation of the MACRO referenced by NODE is valid. An empty
456 invocation to a macro with no parameters should pass ARGC as zero.
458 Note that MACRO cannot necessarily be deduced from NODE, in case
459 NODE was redefined whilst collecting arguments. */
461 _cpp_arguments_ok (pfile, macro, node, argc)
464 const cpp_hashnode *node;
467 if (argc == macro->paramc)
470 if (argc < macro->paramc)
472 /* As an extension, a rest argument is allowed to not appear in
473 the invocation at all.
474 e.g. #define debug(format, args...) something
477 This is exactly the same as if there had been an empty rest
478 argument - debug("string", ). */
480 if (argc + 1 == macro->paramc && macro->variadic)
482 if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
483 cpp_error (pfile, DL_PEDWARN,
484 "ISO C99 requires rest arguments to be used");
488 cpp_error (pfile, DL_ERROR,
489 "macro \"%s\" requires %u arguments, but only %u given",
490 NODE_NAME (node), macro->paramc, argc);
493 cpp_error (pfile, DL_ERROR,
494 "macro \"%s\" passed %u arguments, but takes just %u",
495 NODE_NAME (node), argc, macro->paramc);
500 /* Reads and returns the arguments to a function-like macro
501 invocation. Assumes the opening parenthesis has been processed.
502 If there is an error, emits an appropriate diagnostic and returns
503 NULL. Each argument is terminated by a CPP_EOF token, for the
504 future benefit of expand_arg(). */
506 collect_args (pfile, node)
508 const cpp_hashnode *node;
510 _cpp_buff *buff, *base_buff;
512 macro_arg *args, *arg;
513 const cpp_token *token;
516 macro = node->value.macro;
518 argc = macro->paramc;
521 buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
522 + sizeof (macro_arg)));
524 args = (macro_arg *) buff->base;
525 memset (args, 0, argc * sizeof (macro_arg));
526 buff->cur = (unsigned char *) &args[argc];
527 arg = args, argc = 0;
529 /* Collect the tokens making up each argument. We don't yet know
530 how many arguments have been supplied, whether too many or too
531 few. Hence the slightly bizarre usage of "argc" and "arg". */
534 unsigned int paren_depth = 0;
535 unsigned int ntokens = 0;
538 arg->first = (const cpp_token **) buff->cur;
542 /* Require space for 2 new tokens (including a CPP_EOF). */
543 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
545 buff = _cpp_append_extend_buff (pfile, buff,
546 1000 * sizeof (cpp_token *));
547 arg->first = (const cpp_token **) buff->cur;
550 token = cpp_get_token (pfile);
552 if (token->type == CPP_PADDING)
554 /* Drop leading padding. */
558 else if (token->type == CPP_OPEN_PAREN)
560 else if (token->type == CPP_CLOSE_PAREN)
562 if (paren_depth-- == 0)
565 else if (token->type == CPP_COMMA)
567 /* A comma does not terminate an argument within
568 parentheses or as part of a variable argument. */
570 && ! (macro->variadic && argc == macro->paramc))
573 else if (token->type == CPP_EOF
574 || (token->type == CPP_HASH && token->flags & BOL))
577 arg->first[ntokens++] = token;
580 /* Drop trailing padding. */
581 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
584 arg->count = ntokens;
585 arg->first[ntokens] = &pfile->eof;
587 /* Terminate the argument. Excess arguments loop back and
588 overwrite the final legitimate argument, before failing. */
589 if (argc <= macro->paramc)
591 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
592 if (argc != macro->paramc)
596 while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
598 if (token->type == CPP_EOF)
600 /* We still need the CPP_EOF to end directives, and to end
601 pre-expansion of a macro argument. Step back is not
602 unconditional, since we don't want to return a CPP_EOF to our
603 callers at the end of an -include-d file. */
604 if (pfile->context->prev || pfile->state.in_directive)
605 _cpp_backup_tokens (pfile, 1);
606 cpp_error (pfile, DL_ERROR,
607 "unterminated argument list invoking macro \"%s\"",
612 /* A single empty argument is counted as no argument. */
613 if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
615 if (_cpp_arguments_ok (pfile, macro, node, argc))
619 /* An error occurred. */
620 _cpp_release_buff (pfile, base_buff);
624 /* Search for an opening parenthesis to the macro of NODE, in such a
625 way that, if none is found, we don't lose the information in any
626 intervening padding tokens. If we find the parenthesis, collect
627 the arguments and return the buffer containing them. */
629 funlike_invocation_p (pfile, node)
633 const cpp_token *token, *padding = NULL;
637 token = cpp_get_token (pfile);
638 if (token->type != CPP_PADDING)
641 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
645 if (token->type == CPP_OPEN_PAREN)
647 pfile->state.parsing_args = 2;
648 return collect_args (pfile, node);
651 /* CPP_EOF can be the end of macro arguments, or the end of the
652 file. We mustn't back up over the latter. Ugh. */
653 if (token->type != CPP_EOF || token == &pfile->eof)
655 /* Back up. We may have skipped padding, in which case backing
656 up more than one token when expanding macros is in general
657 too difficult. We re-insert it in its own context. */
658 _cpp_backup_tokens (pfile, 1);
660 push_token_context (pfile, NULL, padding, 1);
666 /* Push the context of a macro with hash entry NODE onto the context
667 stack. If we can successfully expand the macro, we push a context
668 containing its yet-to-be-rescanned replacement list and return one.
669 Otherwise, we don't push a context and return zero. */
671 enter_macro_context (pfile, node)
675 /* The presence of a macro invalidates a file's controlling macro. */
676 pfile->mi_valid = false;
678 pfile->state.angled_headers = false;
680 /* Handle standard macros. */
681 if (! (node->flags & NODE_BUILTIN))
683 cpp_macro *macro = node->value.macro;
689 pfile->state.prevent_expansion++;
690 pfile->keep_tokens++;
691 pfile->state.parsing_args = 1;
692 buff = funlike_invocation_p (pfile, node);
693 pfile->state.parsing_args = 0;
694 pfile->keep_tokens--;
695 pfile->state.prevent_expansion--;
699 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
700 cpp_error (pfile, DL_WARNING,
701 "function-like macro \"%s\" must be used with arguments in traditional C",
707 if (macro->paramc > 0)
708 replace_args (pfile, node, macro, (macro_arg *) buff->base);
709 _cpp_release_buff (pfile, buff);
712 /* Disable the macro within its expansion. */
713 node->flags |= NODE_DISABLED;
715 if (macro->paramc == 0)
716 push_token_context (pfile, node, macro->exp.tokens, macro->count);
721 /* Handle built-in macros and the _Pragma operator. */
722 return builtin_macro (pfile, node);
725 /* Replace the parameters in a function-like macro of NODE with the
726 actual ARGS, and place the result in a newly pushed token context.
727 Expand each argument before replacing, unless it is operated upon
728 by the # or ## operators. */
730 replace_args (pfile, node, macro, args)
736 unsigned int i, total;
737 const cpp_token *src, *limit;
738 const cpp_token **dest, **first;
742 /* First, fully macro-expand arguments, calculating the number of
743 tokens in the final expansion as we go. The ordering of the if
744 statements below is subtle; we must handle stringification before
746 total = macro->count;
747 limit = macro->exp.tokens + macro->count;
749 for (src = macro->exp.tokens; src < limit; src++)
750 if (src->type == CPP_MACRO_ARG)
752 /* Leading and trailing padding tokens. */
755 /* We have an argument. If it is not being stringified or
756 pasted it is macro-replaced before insertion. */
757 arg = &args[src->val.arg_no - 1];
759 if (src->flags & STRINGIFY_ARG)
761 if (!arg->stringified)
762 arg->stringified = stringify_arg (pfile, arg);
764 else if ((src->flags & PASTE_LEFT)
765 || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
766 total += arg->count - 1;
770 expand_arg (pfile, arg);
771 total += arg->expanded_count - 1;
775 /* Now allocate space for the expansion, copy the tokens and replace
777 buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
778 first = (const cpp_token **) buff->base;
781 for (src = macro->exp.tokens; src < limit; src++)
784 const cpp_token **from, **paste_flag;
786 if (src->type != CPP_MACRO_ARG)
793 arg = &args[src->val.arg_no - 1];
794 if (src->flags & STRINGIFY_ARG)
795 count = 1, from = &arg->stringified;
796 else if (src->flags & PASTE_LEFT)
797 count = arg->count, from = arg->first;
798 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
800 count = arg->count, from = arg->first;
803 /* GCC has special semantics for , ## b where b is a
804 varargs parameter: the comma disappears if b was
805 given no actual arguments (not merely if b is an
806 empty argument); otherwise the paste flag is removed. */
807 if (dest[-1]->type == CPP_COMMA
809 && src->val.arg_no == macro->paramc)
814 paste_flag = dest - 1;
816 /* Remove the paste flag if the RHS is a placemarker. */
818 paste_flag = dest - 1;
822 count = arg->expanded_count, from = arg->expanded;
824 /* Padding on the left of an argument (unless RHS of ##). */
825 if (!pfile->state.in_directive
826 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
827 *dest++ = padding_token (pfile, src);
831 memcpy (dest, from, count * sizeof (cpp_token *));
834 /* With a non-empty argument on the LHS of ##, the last
835 token should be flagged PASTE_LEFT. */
836 if (src->flags & PASTE_LEFT)
837 paste_flag = dest - 1;
840 /* Avoid paste on RHS (even case count == 0). */
841 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
842 *dest++ = &pfile->avoid_paste;
844 /* Add a new paste flag, or remove an unwanted one. */
847 cpp_token *token = _cpp_temp_token (pfile);
848 token->type = (*paste_flag)->type;
849 token->val.str = (*paste_flag)->val.str;
850 if (src->flags & PASTE_LEFT)
851 token->flags = (*paste_flag)->flags | PASTE_LEFT;
853 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
858 /* Free the expanded arguments. */
859 for (i = 0; i < macro->paramc; i++)
860 if (args[i].expanded)
861 free (args[i].expanded);
863 push_ptoken_context (pfile, node, buff, first, dest - first);
866 /* Return a special padding token, with padding inherited from SOURCE. */
867 static const cpp_token *
868 padding_token (pfile, source)
870 const cpp_token *source;
872 cpp_token *result = _cpp_temp_token (pfile);
874 result->type = CPP_PADDING;
875 result->val.source = source;
880 /* Get a new uninitialized context. Create a new one if we cannot
881 re-use an old one. */
886 cpp_context *result = pfile->context->next;
890 result = xnew (cpp_context);
891 result->prev = pfile->context;
893 pfile->context->next = result;
896 pfile->context = result;
900 /* Push a list of pointers to tokens. */
902 push_ptoken_context (pfile, macro, buff, first, count)
906 const cpp_token **first;
909 cpp_context *context = next_context (pfile);
911 context->direct_p = false;
912 context->macro = macro;
913 context->buff = buff;
914 FIRST (context).ptoken = first;
915 LAST (context).ptoken = first + count;
918 /* Push a list of tokens. */
920 push_token_context (pfile, macro, first, count)
923 const cpp_token *first;
926 cpp_context *context = next_context (pfile);
928 context->direct_p = true;
929 context->macro = macro;
930 context->buff = NULL;
931 FIRST (context).token = first;
932 LAST (context).token = first + count;
935 /* Push a traditional macro's replacement text. */
937 _cpp_push_text_context (pfile, macro, start, len)
943 cpp_context *context = next_context (pfile);
945 context->direct_p = true;
946 context->macro = macro;
947 context->buff = NULL;
948 CUR (context) = start;
949 RLIMIT (context) = start + len;
950 macro->flags |= NODE_DISABLED;
953 /* Expand an argument ARG before replacing parameters in a
954 function-like macro. This works by pushing a context with the
955 argument's tokens, and then expanding that into a temporary buffer
956 as if it were a normal part of the token stream. collect_args()
957 has terminated the argument's tokens with a CPP_EOF so that we know
958 when we have fully expanded the argument. */
960 expand_arg (pfile, arg)
964 unsigned int capacity;
969 /* Loop, reading in the arguments. */
971 arg->expanded = (const cpp_token **)
972 xmalloc (capacity * sizeof (cpp_token *));
974 push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1);
977 const cpp_token *token;
979 if (arg->expanded_count + 1 >= capacity)
982 arg->expanded = (const cpp_token **)
983 xrealloc (arg->expanded, capacity * sizeof (cpp_token *));
986 token = cpp_get_token (pfile);
988 if (token->type == CPP_EOF)
991 arg->expanded[arg->expanded_count++] = token;
994 _cpp_pop_context (pfile);
997 /* Pop the current context off the stack, re-enabling the macro if the
998 context represented a macro's replacement list. The context
999 structure is not freed so that we can re-use it later. */
1001 _cpp_pop_context (pfile)
1004 cpp_context *context = pfile->context;
1007 context->macro->flags &= ~NODE_DISABLED;
1010 _cpp_release_buff (pfile, context->buff);
1012 pfile->context = context->prev;
1015 /* Eternal routine to get a token. Also used nearly everywhere
1016 internally, except for places where we know we can safely call
1017 the lexer directly, such as lexing a directive name.
1019 Macro expansions and directives are transparently handled,
1020 including entering included files. Thus tokens are post-macro
1021 expansion, and after any intervening directives. External callers
1022 see CPP_EOF only at EOF. Internal callers also see it when meeting
1023 a directive inside a macro call, when at the end of a directive and
1024 state.in_directive is still 1, and at the end of argument
1027 cpp_get_token (pfile)
1030 const cpp_token *result;
1035 cpp_context *context = pfile->context;
1037 /* Context->prev == 0 <=> base context. */
1039 result = _cpp_lex_token (pfile);
1040 else if (FIRST (context).token != LAST (context).token)
1042 if (context->direct_p)
1043 result = FIRST (context).token++;
1045 result = *FIRST (context).ptoken++;
1047 if (result->flags & PASTE_LEFT)
1049 paste_all_tokens (pfile, result);
1050 if (pfile->state.in_directive)
1052 return padding_token (pfile, result);
1057 _cpp_pop_context (pfile);
1058 if (pfile->state.in_directive)
1060 return &pfile->avoid_paste;
1063 if (pfile->state.in_directive && result->type == CPP_COMMENT)
1066 if (result->type != CPP_NAME)
1069 node = result->val.node;
1071 if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
1074 if (!(node->flags & NODE_DISABLED))
1076 if (!pfile->state.prevent_expansion
1077 && enter_macro_context (pfile, node))
1079 if (pfile->state.in_directive)
1081 return padding_token (pfile, result);
1086 /* Flag this token as always unexpandable. FIXME: move this
1087 to collect_args()?. */
1088 cpp_token *t = _cpp_temp_token (pfile);
1089 t->type = result->type;
1090 t->flags = result->flags | NO_EXPAND;
1091 t->val.str = result->val.str;
1101 /* Returns true if we're expanding an object-like macro that was
1102 defined in a system header. Just checks the macro at the top of
1103 the stack. Used for diagnostic suppression. */
1105 cpp_sys_macro_p (pfile)
1108 cpp_hashnode *node = pfile->context->macro;
1110 return node && node->value.macro && node->value.macro->syshdr;
1113 /* Read each token in, until end of the current file. Directives are
1114 transparently processed. */
1116 cpp_scan_nooutput (pfile)
1119 /* Request a CPP_EOF token at the end of this file, rather than
1120 transparently continuing with the including file. */
1121 pfile->buffer->return_at_eof = true;
1123 while (cpp_get_token (pfile)->type != CPP_EOF)
1127 /* Step back one (or more) tokens. Can only step mack more than 1 if
1128 they are from the lexer, and not from macro expansion. */
1130 _cpp_backup_tokens (pfile, count)
1134 if (pfile->context->prev == NULL)
1136 pfile->lookaheads += count;
1140 if (pfile->cur_token == pfile->cur_run->base
1141 /* Possible with -fpreprocessed and no leading #line. */
1142 && pfile->cur_run->prev != NULL)
1144 pfile->cur_run = pfile->cur_run->prev;
1145 pfile->cur_token = pfile->cur_run->limit;
1153 if (pfile->context->direct_p)
1154 FIRST (pfile->context).token--;
1156 FIRST (pfile->context).ptoken--;
1160 /* #define directive parsing and handling. */
1162 /* Returns non-zero if a macro redefinition warning is required. */
1164 warn_of_redefinition (pfile, node, macro2)
1166 const cpp_hashnode *node;
1167 const cpp_macro *macro2;
1169 const cpp_macro *macro1;
1172 /* Some redefinitions need to be warned about regardless. */
1173 if (node->flags & NODE_WARN)
1176 /* Redefinition of a macro is allowed if and only if the old and new
1177 definitions are the same. (6.10.3 paragraph 2). */
1178 macro1 = node->value.macro;
1180 /* Don't check count here as it can be different in valid
1181 traditional redefinitions with just whitespace differences. */
1182 if (macro1->paramc != macro2->paramc
1183 || macro1->fun_like != macro2->fun_like
1184 || macro1->variadic != macro2->variadic)
1187 /* Check parameter spellings. */
1188 for (i = 0; i < macro1->paramc; i++)
1189 if (macro1->params[i] != macro2->params[i])
1192 /* Check the replacement text or tokens. */
1193 if (CPP_OPTION (pfile, traditional))
1194 return _cpp_expansions_different_trad (macro1, macro2);
1196 if (macro1->count == macro2->count)
1197 for (i = 0; i < macro1->count; i++)
1198 if (!_cpp_equiv_tokens (¯o1->exp.tokens[i], ¯o2->exp.tokens[i]))
1204 /* Free the definition of hashnode H. */
1206 _cpp_free_definition (h)
1209 /* Macros and assertions no longer have anything to free. */
1211 /* Clear builtin flag in case of redefinition. */
1212 h->flags &= ~(NODE_BUILTIN | NODE_DISABLED);
1215 /* Save parameter NODE to the parameter list of macro MACRO. Returns
1216 zero on success, non-zero if the parameter is a duplicate. */
1218 _cpp_save_parameter (pfile, macro, node)
1223 /* Constraint 6.10.3.6 - duplicate parameter names. */
1224 if (node->arg_index)
1226 cpp_error (pfile, DL_ERROR, "duplicate macro parameter \"%s\"",
1231 if (BUFF_ROOM (pfile->a_buff)
1232 < (macro->paramc + 1) * sizeof (cpp_hashnode *))
1233 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
1235 ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
1236 node->arg_index = macro->paramc;
1240 /* Check the syntax of the parameters in a MACRO definition. */
1242 parse_params (pfile, macro)
1246 unsigned int prev_ident = 0;
1250 const cpp_token *token = _cpp_lex_token (pfile);
1252 switch (token->type)
1255 /* Allow/ignore comments in parameter lists if we are
1256 preserving comments in macro expansions. */
1257 if (token->type == CPP_COMMENT
1258 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
1261 cpp_error (pfile, DL_ERROR,
1262 "\"%s\" may not appear in macro parameter list",
1263 cpp_token_as_text (pfile, token));
1269 cpp_error (pfile, DL_ERROR,
1270 "macro parameters must be comma-separated");
1275 if (_cpp_save_parameter (pfile, macro, token->val.node))
1279 case CPP_CLOSE_PAREN:
1280 if (prev_ident || macro->paramc == 0)
1283 /* Fall through to pick up the error. */
1287 cpp_error (pfile, DL_ERROR, "parameter name missing");
1294 macro->variadic = 1;
1297 _cpp_save_parameter (pfile, macro,
1298 pfile->spec_nodes.n__VA_ARGS__);
1299 pfile->state.va_args_ok = 1;
1300 if (! CPP_OPTION (pfile, c99) && CPP_OPTION (pfile, pedantic))
1301 cpp_error (pfile, DL_PEDWARN,
1302 "anonymous variadic macros were introduced in C99");
1304 else if (CPP_OPTION (pfile, pedantic))
1305 cpp_error (pfile, DL_PEDWARN,
1306 "ISO C does not permit named variadic macros");
1308 /* We're at the end, and just expect a closing parenthesis. */
1309 token = _cpp_lex_token (pfile);
1310 if (token->type == CPP_CLOSE_PAREN)
1315 cpp_error (pfile, DL_ERROR, "missing ')' in macro parameter list");
1321 /* Allocate room for a token from a macro's replacement list. */
1323 alloc_expansion_token (pfile, macro)
1327 if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
1328 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
1330 return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
1333 /* Lex a token from the expansion of MACRO, but mark parameters as we
1334 find them and warn of traditional stringification. */
1336 lex_expansion_token (pfile, macro)
1342 pfile->cur_token = alloc_expansion_token (pfile, macro);
1343 token = _cpp_lex_direct (pfile);
1345 /* Is this a parameter? */
1346 if (token->type == CPP_NAME && token->val.node->arg_index)
1348 token->type = CPP_MACRO_ARG;
1349 token->val.arg_no = token->val.node->arg_index;
1351 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1352 && (token->type == CPP_STRING || token->type == CPP_CHAR))
1353 check_trad_stringification (pfile, macro, &token->val.str);
1359 create_iso_definition (pfile, macro)
1364 const cpp_token *ctoken;
1366 /* Get the first token of the expansion (or the '(' of a
1367 function-like macro). */
1368 ctoken = _cpp_lex_token (pfile);
1370 if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
1372 bool ok = parse_params (pfile, macro);
1373 macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
1377 /* Success. Commit the parameter array. */
1378 BUFF_FRONT (pfile->a_buff) = (uchar *) ¯o->params[macro->paramc];
1379 macro->fun_like = 1;
1381 else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
1382 cpp_error (pfile, DL_PEDWARN,
1383 "ISO C requires whitespace after the macro name");
1385 if (macro->fun_like)
1386 token = lex_expansion_token (pfile, macro);
1389 token = alloc_expansion_token (pfile, macro);
1395 /* Check the stringifying # constraint 6.10.3.2.1 of
1396 function-like macros when lexing the subsequent token. */
1397 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1399 if (token->type == CPP_MACRO_ARG)
1401 token->flags &= ~PREV_WHITE;
1402 token->flags |= STRINGIFY_ARG;
1403 token->flags |= token[-1].flags & PREV_WHITE;
1404 token[-1] = token[0];
1407 /* Let assembler get away with murder. */
1408 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
1410 cpp_error (pfile, DL_ERROR,
1411 "'#' is not followed by a macro parameter");
1416 if (token->type == CPP_EOF)
1419 /* Paste operator constraint 6.10.3.3.1. */
1420 if (token->type == CPP_PASTE)
1422 /* Token-paste ##, can appear in both object-like and
1423 function-like macros, but not at the ends. */
1424 if (--macro->count > 0)
1425 token = lex_expansion_token (pfile, macro);
1427 if (macro->count == 0 || token->type == CPP_EOF)
1429 cpp_error (pfile, DL_ERROR,
1430 "'##' cannot appear at either end of a macro expansion");
1434 token[-1].flags |= PASTE_LEFT;
1437 token = lex_expansion_token (pfile, macro);
1440 macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
1442 /* Don't count the CPP_EOF. */
1445 /* Clear whitespace on first token for warn_of_redefinition(). */
1447 macro->exp.tokens[0].flags &= ~PREV_WHITE;
1449 /* Commit the memory. */
1450 BUFF_FRONT (pfile->a_buff) = (uchar *) ¯o->exp.tokens[macro->count];
1455 /* Parse a macro and save its expansion. Returns non-zero on success. */
1457 _cpp_create_definition (pfile, node)
1465 macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
1466 macro->line = pfile->directive_line;
1469 macro->variadic = 0;
1471 macro->fun_like = 0;
1472 /* To suppress some diagnostics. */
1473 macro->syshdr = pfile->map->sysp != 0;
1475 if (CPP_OPTION (pfile, traditional))
1476 ok = _cpp_create_trad_definition (pfile, macro);
1479 cpp_token *saved_cur_token = pfile->cur_token;
1481 ok = create_iso_definition (pfile, macro);
1483 /* Restore lexer position because of games lex_expansion_token()
1484 plays lexing the macro. We set the type for SEEN_EOL() in
1487 Longer term we should lex the whole line before coming here,
1488 and just copy the expansion. */
1489 saved_cur_token[-1].type = pfile->cur_token[-1].type;
1490 pfile->cur_token = saved_cur_token;
1492 /* Stop the lexer accepting __VA_ARGS__. */
1493 pfile->state.va_args_ok = 0;
1496 /* Clear the fast argument lookup indices. */
1497 for (i = macro->paramc; i-- > 0; )
1498 macro->params[i]->arg_index = 0;
1503 if (node->type != NT_VOID)
1505 if (warn_of_redefinition (pfile, node, macro))
1507 cpp_error_with_line (pfile, DL_PEDWARN, pfile->directive_line, 0,
1508 "\"%s\" redefined", NODE_NAME (node));
1510 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
1511 cpp_error_with_line (pfile, DL_PEDWARN,
1512 node->value.macro->line, 0,
1513 "this is the location of the previous definition");
1515 _cpp_free_definition (node);
1518 /* Enter definition in hash table. */
1519 node->type = NT_MACRO;
1520 node->value.macro = macro;
1521 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_")))
1522 node->flags |= NODE_WARN;
1527 /* Warn if a token in STRING matches one of a function-like MACRO's
1530 check_trad_stringification (pfile, macro, string)
1532 const cpp_macro *macro;
1533 const cpp_string *string;
1535 unsigned int i, len;
1536 const uchar *p, *q, *limit = string->text + string->len;
1538 /* Loop over the string. */
1539 for (p = string->text; p < limit; p = q)
1541 /* Find the start of an identifier. */
1542 while (p < limit && !is_idstart (*p))
1545 /* Find the end of the identifier. */
1547 while (q < limit && is_idchar (*q))
1552 /* Loop over the function macro arguments to see if the
1553 identifier inside the string matches one of them. */
1554 for (i = 0; i < macro->paramc; i++)
1556 const cpp_hashnode *node = macro->params[i];
1558 if (NODE_LEN (node) == len
1559 && !memcmp (p, NODE_NAME (node), len))
1561 cpp_error (pfile, DL_WARNING,
1562 "macro argument \"%s\" would be stringified in traditional C",
1570 /* Returns the name, arguments and expansion of a macro, in a format
1571 suitable to be read back in again, and therefore also for DWARF 2
1572 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1573 Caller is expected to generate the "#define" bit if needed. The
1574 returned text is temporary, and automatically freed later. */
1575 const unsigned char *
1576 cpp_macro_definition (pfile, node)
1578 const cpp_hashnode *node;
1580 unsigned int i, len;
1581 const cpp_macro *macro = node->value.macro;
1582 unsigned char *buffer;
1584 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1586 cpp_error (pfile, DL_ICE,
1587 "invalid hash type %d in cpp_macro_definition", node->type);
1591 /* Calculate length. */
1592 len = NODE_LEN (node) + 2; /* ' ' and NUL. */
1593 if (macro->fun_like)
1595 len += 4; /* "()" plus possible final ".." of named
1596 varargs (we have + 1 below). */
1597 for (i = 0; i < macro->paramc; i++)
1598 len += NODE_LEN (macro->params[i]) + 1; /* "," */
1601 for (i = 0; i < macro->count; i++)
1603 cpp_token *token = ¯o->exp.tokens[i];
1605 if (token->type == CPP_MACRO_ARG)
1606 len += NODE_LEN (macro->params[token->val.arg_no - 1]);
1608 len += cpp_token_len (token); /* Includes room for ' '. */
1609 if (token->flags & STRINGIFY_ARG)
1611 if (token->flags & PASTE_LEFT)
1612 len += 3; /* " ##" */
1615 if (len > pfile->macro_buffer_len)
1617 pfile->macro_buffer = (uchar *) xrealloc (pfile->macro_buffer, len);
1618 pfile->macro_buffer_len = len;
1621 /* Fill in the buffer. Start with the macro name. */
1622 buffer = pfile->macro_buffer;
1623 memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
1624 buffer += NODE_LEN (node);
1626 /* Parameter names. */
1627 if (macro->fun_like)
1630 for (i = 0; i < macro->paramc; i++)
1632 cpp_hashnode *param = macro->params[i];
1634 if (param != pfile->spec_nodes.n__VA_ARGS__)
1636 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
1637 buffer += NODE_LEN (param);
1640 if (i + 1 < macro->paramc)
1641 /* Don't emit a space after the comma here; we're trying
1642 to emit a Dwarf-friendly definition, and the Dwarf spec
1643 forbids spaces in the argument list. */
1645 else if (macro->variadic)
1646 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
1651 /* The Dwarf spec requires a space after the macro name, even if the
1652 definition is the empty string. */
1655 /* Expansion tokens. */
1658 for (i = 0; i < macro->count; i++)
1660 cpp_token *token = ¯o->exp.tokens[i];
1662 if (token->flags & PREV_WHITE)
1664 if (token->flags & STRINGIFY_ARG)
1667 if (token->type == CPP_MACRO_ARG)
1669 len = NODE_LEN (macro->params[token->val.arg_no - 1]);
1671 NODE_NAME (macro->params[token->val.arg_no - 1]), len);
1675 buffer = cpp_spell_token (pfile, token, buffer);
1677 if (token->flags & PASTE_LEFT)
1682 /* Next has PREV_WHITE; see _cpp_create_definition. */
1688 return pfile->macro_buffer;