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, 2003, 2004, 2005,
4 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
5 Written by Per Bothner, 1994.
6 Based on CCCP program by Paul Rubin, June 1986
7 Adapted to ANSI C, Richard Stallman, Jan 1987
9 This program is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by the
11 Free Software Foundation; either version 3, or (at your option) any
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>.
23 In other words, you are welcome to use, share and improve this program.
24 You are forbidden to forbid anyone else to use, share and improve
25 what you give them. Help stamp out software-hoarding! */
32 typedef struct macro_arg macro_arg;
35 const cpp_token **first; /* First token in unexpanded argument. */
36 const cpp_token **expanded; /* Macro-expanded argument. */
37 const cpp_token *stringified; /* Stringified argument. */
38 unsigned int count; /* # of tokens in argument. */
39 unsigned int expanded_count; /* # of tokens in expanded argument. */
42 /* Macro expansion. */
44 static int enter_macro_context (cpp_reader *, cpp_hashnode *,
46 static int builtin_macro (cpp_reader *, cpp_hashnode *);
47 static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
48 const cpp_token **, unsigned int);
49 static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *,
51 static cpp_context *next_context (cpp_reader *);
52 static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
53 static void expand_arg (cpp_reader *, macro_arg *);
54 static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
55 static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
56 static void paste_all_tokens (cpp_reader *, const cpp_token *);
57 static bool paste_tokens (cpp_reader *, const cpp_token **, const cpp_token *);
58 static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
60 static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *,
62 static bool create_iso_definition (cpp_reader *, cpp_macro *);
64 /* #define directive parsing and handling. */
66 static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
67 static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
68 static bool warn_of_redefinition (cpp_reader *, const cpp_hashnode *,
70 static bool parse_params (cpp_reader *, cpp_macro *);
71 static void check_trad_stringification (cpp_reader *, const cpp_macro *,
74 /* Emits a warning if NODE is a macro defined in the main file that
77 _cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
78 void *v ATTRIBUTE_UNUSED)
80 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
82 cpp_macro *macro = node->value.macro;
85 && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
86 cpp_error_with_line (pfile, CPP_DL_WARNING, macro->line, 0,
87 "macro \"%s\" is not used", NODE_NAME (node));
93 /* Allocates and returns a CPP_STRING token, containing TEXT of length
94 LEN, after null-terminating it. TEXT must be in permanent storage. */
95 static const cpp_token *
96 new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
98 cpp_token *token = _cpp_temp_token (pfile);
101 token->type = CPP_STRING;
102 token->val.str.len = len;
103 token->val.str.text = text;
108 static const char * const monthnames[] =
110 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
111 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
114 /* Helper function for builtin_macro. Returns the text generated by
117 _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
119 const struct line_map *map;
120 const uchar *result = NULL;
121 linenum_type number = 1;
123 switch (node->value.builtin)
126 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
132 cpp_buffer *pbuffer = cpp_get_buffer (pfile);
133 if (pbuffer->timestamp == NULL)
135 /* Initialize timestamp value of the assotiated file. */
136 struct _cpp_file *file = cpp_get_file (pbuffer);
139 /* Generate __TIMESTAMP__ string, that represents
140 the date and time of the last modification
141 of the current source file. The string constant
142 looks like "Sun Sep 16 01:03:52 1973". */
143 struct tm *tb = NULL;
144 struct stat *st = _cpp_get_file_stat (file);
146 tb = localtime (&st->st_mtime);
149 char *str = asctime (tb);
150 size_t len = strlen (str);
151 unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
153 strcpy ((char *) buf + 1, str);
155 pbuffer->timestamp = buf;
159 cpp_errno (pfile, CPP_DL_WARNING,
160 "could not determine file timestamp");
161 pbuffer->timestamp = UC"\"??? ??? ?? ??:??:?? ????\"";
165 result = pbuffer->timestamp;
174 map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line);
176 if (node->value.builtin == BT_BASE_FILE)
177 while (! MAIN_FILE_P (map))
178 map = INCLUDED_FROM (pfile->line_table, map);
182 buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
185 buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
191 case BT_INCLUDE_LEVEL:
192 /* The line map depth counts the primary source as level 1, but
193 historically __INCLUDE_DEPTH__ has called the primary source
195 number = pfile->line_table->depth - 1;
199 map = &pfile->line_table->maps[pfile->line_table->used-1];
200 /* If __LINE__ is embedded in a macro, it must expand to the
201 line of the macro's invocation, not its definition.
202 Otherwise things like assert() will not work properly. */
203 number = SOURCE_LINE (map,
204 CPP_OPTION (pfile, traditional)
205 ? pfile->line_table->highest_line
206 : pfile->cur_token[-1].src_loc);
209 /* __STDC__ has the value 1 under normal circumstances.
210 However, if (a) we are in a system header, (b) the option
211 stdc_0_in_system_headers is true (set by target config), and
212 (c) we are not in strictly conforming mode, then it has the
213 value 0. (b) and (c) are already checked in cpp_init_builtins. */
215 if (cpp_in_system_header (pfile))
223 if (pfile->date == NULL)
225 /* Allocate __DATE__ and __TIME__ strings from permanent
226 storage. We only do this once, and don't generate them
227 at init time, because time() and localtime() are very
228 slow on some systems. */
230 struct tm *tb = NULL;
232 /* (time_t) -1 is a legitimate value for "number of seconds
233 since the Epoch", so we have to do a little dance to
234 distinguish that from a genuine error. */
237 if (tt != (time_t)-1 || errno == 0)
238 tb = localtime (&tt);
242 pfile->date = _cpp_unaligned_alloc (pfile,
243 sizeof ("\"Oct 11 1347\""));
244 sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
245 monthnames[tb->tm_mon], tb->tm_mday,
248 pfile->time = _cpp_unaligned_alloc (pfile,
249 sizeof ("\"12:34:56\""));
250 sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
251 tb->tm_hour, tb->tm_min, tb->tm_sec);
255 cpp_errno (pfile, CPP_DL_WARNING,
256 "could not determine date and time");
258 pfile->date = UC"\"??? ?? ????\"";
259 pfile->time = UC"\"??:??:??\"";
263 if (node->value.builtin == BT_DATE)
264 result = pfile->date;
266 result = pfile->time;
270 if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
271 cpp_error (pfile, CPP_DL_ERROR,
272 "__COUNTER__ expanded inside directive with -fdirectives-only");
273 number = pfile->counter++;
279 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
280 result = _cpp_unaligned_alloc (pfile, 21);
281 sprintf ((char *) result, "%u", number);
287 /* Convert builtin macros like __FILE__ to a token and push it on the
288 context stack. Also handles _Pragma, for which a new token may not
289 be created. Returns 1 if it generates a new token context, 0 to
290 return the token to the caller. */
292 builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
298 if (node->value.builtin == BT_PRAGMA)
300 /* Don't interpret _Pragma within directives. The standard is
301 not clear on this, but to me this makes most sense. */
302 if (pfile->state.in_directive)
305 return _cpp_do__Pragma (pfile);
308 buf = _cpp_builtin_macro_text (pfile, node);
310 nbuf = (char *) alloca (len + 1);
311 memcpy (nbuf, buf, len);
314 cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
315 _cpp_clean_line (pfile);
317 /* Set pfile->cur_token as required by _cpp_lex_direct. */
318 pfile->cur_token = _cpp_temp_token (pfile);
319 _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
320 if (pfile->buffer->cur != pfile->buffer->rlimit)
321 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
323 _cpp_pop_buffer (pfile);
328 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
329 backslashes and double quotes. DEST must be of sufficient size.
330 Returns a pointer to the end of the string. */
332 cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
338 if (c == '\\' || c == '"')
350 /* Convert a token sequence ARG to a single string token according to
351 the rules of the ISO C #-operator. */
352 static const cpp_token *
353 stringify_arg (cpp_reader *pfile, macro_arg *arg)
356 unsigned int i, escape_it, backslash_count = 0;
357 const cpp_token *source = NULL;
360 if (BUFF_ROOM (pfile->u_buff) < 3)
361 _cpp_extend_buff (pfile, &pfile->u_buff, 3);
362 dest = BUFF_FRONT (pfile->u_buff);
365 /* Loop, reading in the argument's tokens. */
366 for (i = 0; i < arg->count; i++)
368 const cpp_token *token = arg->first[i];
370 if (token->type == CPP_PADDING)
373 || (!(source->flags & PREV_WHITE)
374 && token->val.source == NULL))
375 source = token->val.source;
379 escape_it = (token->type == CPP_STRING || token->type == CPP_CHAR
380 || token->type == CPP_WSTRING || token->type == CPP_WCHAR
381 || token->type == CPP_STRING32 || token->type == CPP_CHAR32
382 || token->type == CPP_STRING16 || token->type == CPP_CHAR16
383 || token->type == CPP_UTF8STRING);
385 /* Room for each char being written in octal, initial space and
386 final quote and NUL. */
387 len = cpp_token_len (token);
392 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
394 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
395 _cpp_extend_buff (pfile, &pfile->u_buff, len);
396 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
399 /* Leading white space? */
400 if (dest - 1 != BUFF_FRONT (pfile->u_buff))
404 if (source->flags & PREV_WHITE)
411 _cpp_buff *buff = _cpp_get_buff (pfile, len);
412 unsigned char *buf = BUFF_FRONT (buff);
413 len = cpp_spell_token (pfile, token, buf, true) - buf;
414 dest = cpp_quote_string (dest, buf, len);
415 _cpp_release_buff (pfile, buff);
418 dest = cpp_spell_token (pfile, token, dest, true);
420 if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
426 /* Ignore the final \ of invalid string literals. */
427 if (backslash_count & 1)
429 cpp_error (pfile, CPP_DL_WARNING,
430 "invalid string literal, ignoring final '\\'");
434 /* Commit the memory, including NUL, and return the token. */
436 len = dest - BUFF_FRONT (pfile->u_buff);
437 BUFF_FRONT (pfile->u_buff) = dest + 1;
438 return new_string_token (pfile, dest - len, len);
441 /* Try to paste two tokens. On success, return nonzero. In any
442 case, PLHS is updated to point to the pasted token, which is
443 guaranteed to not have the PASTE_LEFT flag set. */
445 paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
447 unsigned char *buf, *end, *lhsend;
451 len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
452 buf = (unsigned char *) alloca (len);
453 end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
455 /* Avoid comment headers, since they are still processed in stage 3.
456 It is simpler to insert a space here, rather than modifying the
457 lexer to ignore comments in some circumstances. Simply returning
458 false doesn't work, since we want to clear the PASTE_LEFT flag. */
459 if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
461 /* In one obscure case we might see padding here. */
462 if (rhs->type != CPP_PADDING)
463 end = cpp_spell_token (pfile, rhs, end, false);
466 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
467 _cpp_clean_line (pfile);
469 /* Set pfile->cur_token as required by _cpp_lex_direct. */
470 pfile->cur_token = _cpp_temp_token (pfile);
471 lhs = _cpp_lex_direct (pfile);
472 if (pfile->buffer->cur != pfile->buffer->rlimit)
474 source_location saved_loc = lhs->src_loc;
476 _cpp_pop_buffer (pfile);
477 _cpp_backup_tokens (pfile, 1);
480 /* We have to remove the PASTE_LEFT flag from the old lhs, but
481 we want to keep the new location. */
484 lhs->src_loc = saved_loc;
485 lhs->flags &= ~PASTE_LEFT;
487 /* Mandatory error for all apart from assembler. */
488 if (CPP_OPTION (pfile, lang) != CLK_ASM)
489 cpp_error (pfile, CPP_DL_ERROR,
490 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
491 buf, cpp_token_as_text (pfile, rhs));
496 _cpp_pop_buffer (pfile);
500 /* Handles an arbitrarily long sequence of ## operators, with initial
501 operand LHS. This implementation is left-associative,
502 non-recursive, and finishes a paste before handling succeeding
503 ones. If a paste fails, we back up to the RHS of the failing ##
504 operator before pushing the context containing the result of prior
505 successful pastes, with the effect that the RHS appears in the
506 output stream after the pasted LHS normally. */
508 paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
510 const cpp_token *rhs;
511 cpp_context *context = pfile->context;
515 /* Take the token directly from the current context. We can do
516 this, because we are in the replacement list of either an
517 object-like macro, or a function-like macro with arguments
518 inserted. In either case, the constraints to #define
519 guarantee we have at least one more token. */
520 if (context->direct_p)
521 rhs = FIRST (context).token++;
523 rhs = *FIRST (context).ptoken++;
525 if (rhs->type == CPP_PADDING)
527 if (rhs->flags & PASTE_LEFT)
530 if (!paste_tokens (pfile, &lhs, rhs))
533 while (rhs->flags & PASTE_LEFT);
535 /* Put the resulting token in its own context. */
536 _cpp_push_token_context (pfile, NULL, lhs, 1);
539 /* Returns TRUE if the number of arguments ARGC supplied in an
540 invocation of the MACRO referenced by NODE is valid. An empty
541 invocation to a macro with no parameters should pass ARGC as zero.
543 Note that MACRO cannot necessarily be deduced from NODE, in case
544 NODE was redefined whilst collecting arguments. */
546 _cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
548 if (argc == macro->paramc)
551 if (argc < macro->paramc)
553 /* As an extension, a rest argument is allowed to not appear in
554 the invocation at all.
555 e.g. #define debug(format, args...) something
558 This is exactly the same as if there had been an empty rest
559 argument - debug("string", ). */
561 if (argc + 1 == macro->paramc && macro->variadic)
563 if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
564 cpp_error (pfile, CPP_DL_PEDWARN,
565 "ISO C99 requires rest arguments to be used");
569 cpp_error (pfile, CPP_DL_ERROR,
570 "macro \"%s\" requires %u arguments, but only %u given",
571 NODE_NAME (node), macro->paramc, argc);
574 cpp_error (pfile, CPP_DL_ERROR,
575 "macro \"%s\" passed %u arguments, but takes just %u",
576 NODE_NAME (node), argc, macro->paramc);
581 /* Reads and returns the arguments to a function-like macro
582 invocation. Assumes the opening parenthesis has been processed.
583 If there is an error, emits an appropriate diagnostic and returns
584 NULL. Each argument is terminated by a CPP_EOF token, for the
585 future benefit of expand_arg(). If there are any deferred
586 #pragma directives among macro arguments, store pointers to the
587 CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer. */
589 collect_args (cpp_reader *pfile, const cpp_hashnode *node,
590 _cpp_buff **pragma_buff)
592 _cpp_buff *buff, *base_buff;
594 macro_arg *args, *arg;
595 const cpp_token *token;
598 macro = node->value.macro;
600 argc = macro->paramc;
603 buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
604 + sizeof (macro_arg)));
606 args = (macro_arg *) buff->base;
607 memset (args, 0, argc * sizeof (macro_arg));
608 buff->cur = (unsigned char *) &args[argc];
609 arg = args, argc = 0;
611 /* Collect the tokens making up each argument. We don't yet know
612 how many arguments have been supplied, whether too many or too
613 few. Hence the slightly bizarre usage of "argc" and "arg". */
616 unsigned int paren_depth = 0;
617 unsigned int ntokens = 0;
620 arg->first = (const cpp_token **) buff->cur;
624 /* Require space for 2 new tokens (including a CPP_EOF). */
625 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
627 buff = _cpp_append_extend_buff (pfile, buff,
628 1000 * sizeof (cpp_token *));
629 arg->first = (const cpp_token **) buff->cur;
632 token = cpp_get_token (pfile);
634 if (token->type == CPP_PADDING)
636 /* Drop leading padding. */
640 else if (token->type == CPP_OPEN_PAREN)
642 else if (token->type == CPP_CLOSE_PAREN)
644 if (paren_depth-- == 0)
647 else if (token->type == CPP_COMMA)
649 /* A comma does not terminate an argument within
650 parentheses or as part of a variable argument. */
652 && ! (macro->variadic && argc == macro->paramc))
655 else if (token->type == CPP_EOF
656 || (token->type == CPP_HASH && token->flags & BOL))
658 else if (token->type == CPP_PRAGMA)
660 cpp_token *newtok = _cpp_temp_token (pfile);
662 /* CPP_PRAGMA token lives in directive_result, which will
663 be overwritten on the next directive. */
668 if (*pragma_buff == NULL
669 || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
672 if (*pragma_buff == NULL)
674 = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
679 = _cpp_get_buff (pfile,
680 (BUFF_FRONT (*pragma_buff)
681 - (*pragma_buff)->base) * 2);
682 (*pragma_buff)->next = next;
685 *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
686 BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
687 if (token->type == CPP_PRAGMA_EOL)
689 token = cpp_get_token (pfile);
691 while (token->type != CPP_EOF);
693 /* In deferred pragmas parsing_args and prevent_expansion
694 had been changed, reset it. */
695 pfile->state.parsing_args = 2;
696 pfile->state.prevent_expansion = 1;
698 if (token->type == CPP_EOF)
704 arg->first[ntokens++] = token;
707 /* Drop trailing padding. */
708 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
711 arg->count = ntokens;
712 arg->first[ntokens] = &pfile->eof;
714 /* Terminate the argument. Excess arguments loop back and
715 overwrite the final legitimate argument, before failing. */
716 if (argc <= macro->paramc)
718 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
719 if (argc != macro->paramc)
723 while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
725 if (token->type == CPP_EOF)
727 /* We still need the CPP_EOF to end directives, and to end
728 pre-expansion of a macro argument. Step back is not
729 unconditional, since we don't want to return a CPP_EOF to our
730 callers at the end of an -include-d file. */
731 if (pfile->context->prev || pfile->state.in_directive)
732 _cpp_backup_tokens (pfile, 1);
733 cpp_error (pfile, CPP_DL_ERROR,
734 "unterminated argument list invoking macro \"%s\"",
739 /* A single empty argument is counted as no argument. */
740 if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
742 if (_cpp_arguments_ok (pfile, macro, node, argc))
744 /* GCC has special semantics for , ## b where b is a varargs
745 parameter: we remove the comma if b was omitted entirely.
746 If b was merely an empty argument, the comma is retained.
747 If the macro takes just one (varargs) parameter, then we
748 retain the comma only if we are standards conforming.
750 If FIRST is NULL replace_args () swallows the comma. */
751 if (macro->variadic && (argc < macro->paramc
752 || (argc == 1 && args[0].count == 0
753 && !CPP_OPTION (pfile, std))))
754 args[macro->paramc - 1].first = NULL;
759 /* An error occurred. */
760 _cpp_release_buff (pfile, base_buff);
764 /* Search for an opening parenthesis to the macro of NODE, in such a
765 way that, if none is found, we don't lose the information in any
766 intervening padding tokens. If we find the parenthesis, collect
767 the arguments and return the buffer containing them. PRAGMA_BUFF
768 argument is the same as in collect_args. */
770 funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
771 _cpp_buff **pragma_buff)
773 const cpp_token *token, *padding = NULL;
777 token = cpp_get_token (pfile);
778 if (token->type != CPP_PADDING)
781 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
785 if (token->type == CPP_OPEN_PAREN)
787 pfile->state.parsing_args = 2;
788 return collect_args (pfile, node, pragma_buff);
791 /* CPP_EOF can be the end of macro arguments, or the end of the
792 file. We mustn't back up over the latter. Ugh. */
793 if (token->type != CPP_EOF || token == &pfile->eof)
795 /* Back up. We may have skipped padding, in which case backing
796 up more than one token when expanding macros is in general
797 too difficult. We re-insert it in its own context. */
798 _cpp_backup_tokens (pfile, 1);
800 _cpp_push_token_context (pfile, NULL, padding, 1);
806 /* Return the real number of tokens in the expansion of MACRO. */
807 static inline unsigned int
808 macro_real_token_count (const cpp_macro *macro)
811 if (__builtin_expect (!macro->extra_tokens, true))
813 for (i = 0; i < macro->count; i++)
814 if (macro->exp.tokens[i].type == CPP_PASTE)
819 /* Push the context of a macro with hash entry NODE onto the context
820 stack. If we can successfully expand the macro, we push a context
821 containing its yet-to-be-rescanned replacement list and return one.
822 If there were additionally any unexpanded deferred #pragma directives
823 among macro arguments, push another context containing the
824 pragma tokens before the yet-to-be-rescanned replacement list
825 and return two. Otherwise, we don't push a context and return zero. */
827 enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
828 const cpp_token *result)
830 /* The presence of a macro invalidates a file's controlling macro. */
831 pfile->mi_valid = false;
833 pfile->state.angled_headers = false;
835 if ((node->flags & NODE_BUILTIN) && !(node->flags & NODE_USED))
837 node->flags |= NODE_USED;
838 if (pfile->cb.used_define)
839 pfile->cb.used_define (pfile, pfile->directive_line, node);
842 /* Handle standard macros. */
843 if (! (node->flags & NODE_BUILTIN))
845 cpp_macro *macro = node->value.macro;
846 _cpp_buff *pragma_buff = NULL;
852 pfile->state.prevent_expansion++;
853 pfile->keep_tokens++;
854 pfile->state.parsing_args = 1;
855 buff = funlike_invocation_p (pfile, node, &pragma_buff);
856 pfile->state.parsing_args = 0;
857 pfile->keep_tokens--;
858 pfile->state.prevent_expansion--;
862 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
863 cpp_error (pfile, CPP_DL_WARNING,
864 "function-like macro \"%s\" must be used with arguments in traditional C",
868 _cpp_release_buff (pfile, pragma_buff);
873 if (macro->paramc > 0)
874 replace_args (pfile, node, macro, (macro_arg *) buff->base);
875 _cpp_release_buff (pfile, buff);
878 /* Disable the macro within its expansion. */
879 node->flags |= NODE_DISABLED;
881 if (!(node->flags & NODE_USED))
883 node->flags |= NODE_USED;
884 if (pfile->cb.used_define)
885 pfile->cb.used_define (pfile, pfile->directive_line, node);
890 if (macro->paramc == 0)
891 _cpp_push_token_context (pfile, node, macro->exp.tokens,
892 macro_real_token_count (macro));
896 if (!pfile->state.in_directive)
897 _cpp_push_token_context (pfile, NULL,
898 padding_token (pfile, result), 1);
901 _cpp_buff *tail = pragma_buff->next;
902 pragma_buff->next = NULL;
903 push_ptoken_context (pfile, NULL, pragma_buff,
904 (const cpp_token **) pragma_buff->base,
905 ((const cpp_token **) BUFF_FRONT (pragma_buff)
906 - (const cpp_token **) pragma_buff->base));
909 while (pragma_buff != NULL);
916 /* Handle built-in macros and the _Pragma operator. */
917 return builtin_macro (pfile, node);
920 /* Replace the parameters in a function-like macro of NODE with the
921 actual ARGS, and place the result in a newly pushed token context.
922 Expand each argument before replacing, unless it is operated upon
923 by the # or ## operators. */
925 replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro, macro_arg *args)
927 unsigned int i, total;
928 const cpp_token *src, *limit;
929 const cpp_token **dest, **first;
934 /* First, fully macro-expand arguments, calculating the number of
935 tokens in the final expansion as we go. The ordering of the if
936 statements below is subtle; we must handle stringification before
938 count = macro_real_token_count (macro);
940 limit = macro->exp.tokens + count;
942 for (src = macro->exp.tokens; src < limit; src++)
943 if (src->type == CPP_MACRO_ARG)
945 /* Leading and trailing padding tokens. */
948 /* We have an argument. If it is not being stringified or
949 pasted it is macro-replaced before insertion. */
950 arg = &args[src->val.macro_arg.arg_no - 1];
952 if (src->flags & STRINGIFY_ARG)
954 if (!arg->stringified)
955 arg->stringified = stringify_arg (pfile, arg);
957 else if ((src->flags & PASTE_LEFT)
958 || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
959 total += arg->count - 1;
963 expand_arg (pfile, arg);
964 total += arg->expanded_count - 1;
968 /* Now allocate space for the expansion, copy the tokens and replace
970 buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
971 first = (const cpp_token **) buff->base;
974 for (src = macro->exp.tokens; src < limit; src++)
977 const cpp_token **from, **paste_flag;
979 if (src->type != CPP_MACRO_ARG)
986 arg = &args[src->val.macro_arg.arg_no - 1];
987 if (src->flags & STRINGIFY_ARG)
988 count = 1, from = &arg->stringified;
989 else if (src->flags & PASTE_LEFT)
990 count = arg->count, from = arg->first;
991 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
993 count = arg->count, from = arg->first;
996 if (dest[-1]->type == CPP_COMMA
998 && src->val.macro_arg.arg_no == macro->paramc)
1000 /* Swallow a pasted comma if from == NULL, otherwise
1001 drop the paste flag. */
1005 paste_flag = dest - 1;
1007 /* Remove the paste flag if the RHS is a placemarker. */
1008 else if (count == 0)
1009 paste_flag = dest - 1;
1013 count = arg->expanded_count, from = arg->expanded;
1015 /* Padding on the left of an argument (unless RHS of ##). */
1016 if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
1017 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
1018 *dest++ = padding_token (pfile, src);
1022 memcpy (dest, from, count * sizeof (cpp_token *));
1025 /* With a non-empty argument on the LHS of ##, the last
1026 token should be flagged PASTE_LEFT. */
1027 if (src->flags & PASTE_LEFT)
1028 paste_flag = dest - 1;
1030 else if (CPP_PEDANTIC (pfile) && ! macro->syshdr
1031 && ! CPP_OPTION (pfile, c99)
1032 && ! cpp_in_system_header (pfile))
1034 cpp_error (pfile, CPP_DL_PEDWARN,
1035 "invoking macro %s argument %d: "
1036 "empty macro arguments are undefined"
1037 " in ISO C90 and ISO C++98",
1039 src->val.macro_arg.arg_no);
1042 /* Avoid paste on RHS (even case count == 0). */
1043 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
1044 *dest++ = &pfile->avoid_paste;
1046 /* Add a new paste flag, or remove an unwanted one. */
1049 cpp_token *token = _cpp_temp_token (pfile);
1050 token->type = (*paste_flag)->type;
1051 token->val = (*paste_flag)->val;
1052 if (src->flags & PASTE_LEFT)
1053 token->flags = (*paste_flag)->flags | PASTE_LEFT;
1055 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1056 *paste_flag = token;
1060 /* Free the expanded arguments. */
1061 for (i = 0; i < macro->paramc; i++)
1062 if (args[i].expanded)
1063 free (args[i].expanded);
1065 push_ptoken_context (pfile, node, buff, first, dest - first);
1068 /* Return a special padding token, with padding inherited from SOURCE. */
1069 static const cpp_token *
1070 padding_token (cpp_reader *pfile, const cpp_token *source)
1072 cpp_token *result = _cpp_temp_token (pfile);
1074 result->type = CPP_PADDING;
1076 /* Data in GCed data structures cannot be made const so far, so we
1077 need a cast here. */
1078 result->val.source = (cpp_token *) source;
1083 /* Get a new uninitialized context. Create a new one if we cannot
1084 re-use an old one. */
1085 static cpp_context *
1086 next_context (cpp_reader *pfile)
1088 cpp_context *result = pfile->context->next;
1092 result = XNEW (cpp_context);
1093 result->prev = pfile->context;
1095 pfile->context->next = result;
1098 pfile->context = result;
1102 /* Push a list of pointers to tokens. */
1104 push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
1105 const cpp_token **first, unsigned int count)
1107 cpp_context *context = next_context (pfile);
1109 context->direct_p = false;
1110 context->macro = macro;
1111 context->buff = buff;
1112 FIRST (context).ptoken = first;
1113 LAST (context).ptoken = first + count;
1116 /* Push a list of tokens. */
1118 _cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
1119 const cpp_token *first, unsigned int count)
1121 cpp_context *context = next_context (pfile);
1123 context->direct_p = true;
1124 context->macro = macro;
1125 context->buff = NULL;
1126 FIRST (context).token = first;
1127 LAST (context).token = first + count;
1130 /* Push a traditional macro's replacement text. */
1132 _cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
1133 const uchar *start, size_t len)
1135 cpp_context *context = next_context (pfile);
1137 context->direct_p = true;
1138 context->macro = macro;
1139 context->buff = NULL;
1140 CUR (context) = start;
1141 RLIMIT (context) = start + len;
1142 macro->flags |= NODE_DISABLED;
1145 /* Expand an argument ARG before replacing parameters in a
1146 function-like macro. This works by pushing a context with the
1147 argument's tokens, and then expanding that into a temporary buffer
1148 as if it were a normal part of the token stream. collect_args()
1149 has terminated the argument's tokens with a CPP_EOF so that we know
1150 when we have fully expanded the argument. */
1152 expand_arg (cpp_reader *pfile, macro_arg *arg)
1154 unsigned int capacity;
1155 bool saved_warn_trad;
1157 if (arg->count == 0)
1160 /* Don't warn about funlike macros when pre-expanding. */
1161 saved_warn_trad = CPP_WTRADITIONAL (pfile);
1162 CPP_WTRADITIONAL (pfile) = 0;
1164 /* Loop, reading in the arguments. */
1166 arg->expanded = XNEWVEC (const cpp_token *, capacity);
1168 push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1);
1171 const cpp_token *token;
1173 if (arg->expanded_count + 1 >= capacity)
1176 arg->expanded = XRESIZEVEC (const cpp_token *, arg->expanded,
1180 token = cpp_get_token (pfile);
1182 if (token->type == CPP_EOF)
1185 arg->expanded[arg->expanded_count++] = token;
1188 _cpp_pop_context (pfile);
1190 CPP_WTRADITIONAL (pfile) = saved_warn_trad;
1193 /* Pop the current context off the stack, re-enabling the macro if the
1194 context represented a macro's replacement list. The context
1195 structure is not freed so that we can re-use it later. */
1197 _cpp_pop_context (cpp_reader *pfile)
1199 cpp_context *context = pfile->context;
1202 context->macro->flags &= ~NODE_DISABLED;
1205 _cpp_release_buff (pfile, context->buff);
1207 pfile->context = context->prev;
1210 /* External routine to get a token. Also used nearly everywhere
1211 internally, except for places where we know we can safely call
1212 _cpp_lex_token directly, such as lexing a directive name.
1214 Macro expansions and directives are transparently handled,
1215 including entering included files. Thus tokens are post-macro
1216 expansion, and after any intervening directives. External callers
1217 see CPP_EOF only at EOF. Internal callers also see it when meeting
1218 a directive inside a macro call, when at the end of a directive and
1219 state.in_directive is still 1, and at the end of argument
1222 cpp_get_token (cpp_reader *pfile)
1224 const cpp_token *result;
1225 bool can_set = pfile->set_invocation_location;
1226 pfile->set_invocation_location = false;
1231 cpp_context *context = pfile->context;
1233 /* Context->prev == 0 <=> base context. */
1235 result = _cpp_lex_token (pfile);
1236 else if (FIRST (context).token != LAST (context).token)
1238 if (context->direct_p)
1239 result = FIRST (context).token++;
1241 result = *FIRST (context).ptoken++;
1243 if (result->flags & PASTE_LEFT)
1245 paste_all_tokens (pfile, result);
1246 if (pfile->state.in_directive)
1248 return padding_token (pfile, result);
1253 _cpp_pop_context (pfile);
1254 if (pfile->state.in_directive)
1256 return &pfile->avoid_paste;
1259 if (pfile->state.in_directive && result->type == CPP_COMMENT)
1262 if (result->type != CPP_NAME)
1265 node = result->val.node.node;
1267 if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
1270 if (!(node->flags & NODE_DISABLED))
1273 /* If not in a macro context, and we're going to start an
1274 expansion, record the location. */
1275 if (can_set && !context->macro)
1276 pfile->invocation_location = result->src_loc;
1277 if (pfile->state.prevent_expansion)
1280 /* Conditional macros require that a predicate be evaluated
1282 if ((node->flags & NODE_CONDITIONAL) != 0)
1284 if (pfile->cb.macro_to_expand)
1286 bool whitespace_after;
1287 const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
1289 whitespace_after = (peek_tok->type == CPP_PADDING
1290 || (peek_tok->flags & PREV_WHITE));
1291 node = pfile->cb.macro_to_expand (pfile, result);
1293 ret = enter_macro_context (pfile, node, result);
1294 else if (whitespace_after)
1296 /* If macro_to_expand hook returned NULL and it
1297 ate some tokens, see if we don't need to add
1298 a padding token in between this and the
1300 peek_tok = cpp_peek_token (pfile, 0);
1301 if (peek_tok->type != CPP_PADDING
1302 && (peek_tok->flags & PREV_WHITE) == 0)
1303 _cpp_push_token_context (pfile, NULL,
1304 padding_token (pfile,
1310 ret = enter_macro_context (pfile, node, result);
1313 if (pfile->state.in_directive || ret == 2)
1315 return padding_token (pfile, result);
1320 /* Flag this token as always unexpandable. FIXME: move this
1321 to collect_args()?. */
1322 cpp_token *t = _cpp_temp_token (pfile);
1323 t->type = result->type;
1324 t->flags = result->flags | NO_EXPAND;
1325 t->val = result->val;
1335 /* Like cpp_get_token, but also returns a location separate from the
1336 one provided by the returned token. LOC is an out parameter; *LOC
1337 is set to the location "as expected by the user". This matters
1338 when a token results from macro expansion -- the token's location
1339 will indicate where the macro is defined, but *LOC will be the
1340 location of the start of the expansion. */
1342 cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
1344 const cpp_token *result;
1346 pfile->set_invocation_location = true;
1347 result = cpp_get_token (pfile);
1348 if (pfile->context->macro)
1349 *loc = pfile->invocation_location;
1351 *loc = result->src_loc;
1356 /* Returns true if we're expanding an object-like macro that was
1357 defined in a system header. Just checks the macro at the top of
1358 the stack. Used for diagnostic suppression. */
1360 cpp_sys_macro_p (cpp_reader *pfile)
1362 cpp_hashnode *node = pfile->context->macro;
1364 return node && node->value.macro && node->value.macro->syshdr;
1367 /* Read each token in, until end of the current file. Directives are
1368 transparently processed. */
1370 cpp_scan_nooutput (cpp_reader *pfile)
1372 /* Request a CPP_EOF token at the end of this file, rather than
1373 transparently continuing with the including file. */
1374 pfile->buffer->return_at_eof = true;
1376 pfile->state.discarding_output++;
1377 pfile->state.prevent_expansion++;
1379 if (CPP_OPTION (pfile, traditional))
1380 while (_cpp_read_logical_line_trad (pfile))
1383 while (cpp_get_token (pfile)->type != CPP_EOF)
1386 pfile->state.discarding_output--;
1387 pfile->state.prevent_expansion--;
1390 /* Step back one or more tokens obtained from the lexer. */
1392 _cpp_backup_tokens_direct (cpp_reader *pfile, unsigned int count)
1394 pfile->lookaheads += count;
1398 if (pfile->cur_token == pfile->cur_run->base
1399 /* Possible with -fpreprocessed and no leading #line. */
1400 && pfile->cur_run->prev != NULL)
1402 pfile->cur_run = pfile->cur_run->prev;
1403 pfile->cur_token = pfile->cur_run->limit;
1408 /* Step back one (or more) tokens. Can only step back more than 1 if
1409 they are from the lexer, and not from macro expansion. */
1411 _cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
1413 if (pfile->context->prev == NULL)
1414 _cpp_backup_tokens_direct (pfile, count);
1419 if (pfile->context->direct_p)
1420 FIRST (pfile->context).token--;
1422 FIRST (pfile->context).ptoken--;
1426 /* #define directive parsing and handling. */
1428 /* Returns nonzero if a macro redefinition warning is required. */
1430 warn_of_redefinition (cpp_reader *pfile, const cpp_hashnode *node,
1431 const cpp_macro *macro2)
1433 const cpp_macro *macro1;
1436 /* Some redefinitions need to be warned about regardless. */
1437 if (node->flags & NODE_WARN)
1440 /* Suppress warnings for builtins that lack the NODE_WARN flag. */
1441 if (node->flags & NODE_BUILTIN)
1444 /* Redefinitions of conditional (context-sensitive) macros, on
1445 the other hand, must be allowed silently. */
1446 if (node->flags & NODE_CONDITIONAL)
1449 /* Redefinition of a macro is allowed if and only if the old and new
1450 definitions are the same. (6.10.3 paragraph 2). */
1451 macro1 = node->value.macro;
1453 /* Don't check count here as it can be different in valid
1454 traditional redefinitions with just whitespace differences. */
1455 if (macro1->paramc != macro2->paramc
1456 || macro1->fun_like != macro2->fun_like
1457 || macro1->variadic != macro2->variadic)
1460 /* Check parameter spellings. */
1461 for (i = 0; i < macro1->paramc; i++)
1462 if (macro1->params[i] != macro2->params[i])
1465 /* Check the replacement text or tokens. */
1466 if (CPP_OPTION (pfile, traditional))
1467 return _cpp_expansions_different_trad (macro1, macro2);
1469 if (macro1->count != macro2->count)
1472 for (i = 0; i < macro1->count; i++)
1473 if (!_cpp_equiv_tokens (¯o1->exp.tokens[i], ¯o2->exp.tokens[i]))
1479 /* Free the definition of hashnode H. */
1481 _cpp_free_definition (cpp_hashnode *h)
1483 /* Macros and assertions no longer have anything to free. */
1485 /* Clear builtin flag in case of redefinition. */
1486 h->flags &= ~(NODE_BUILTIN | NODE_DISABLED | NODE_USED);
1489 /* Save parameter NODE to the parameter list of macro MACRO. Returns
1490 zero on success, nonzero if the parameter is a duplicate. */
1492 _cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
1495 /* Constraint 6.10.3.6 - duplicate parameter names. */
1496 if (node->flags & NODE_MACRO_ARG)
1498 cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
1503 if (BUFF_ROOM (pfile->a_buff)
1504 < (macro->paramc + 1) * sizeof (cpp_hashnode *))
1505 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
1507 ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
1508 node->flags |= NODE_MACRO_ARG;
1509 len = macro->paramc * sizeof (union _cpp_hashnode_value);
1510 if (len > pfile->macro_buffer_len)
1512 pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
1514 pfile->macro_buffer_len = len;
1516 ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
1519 node->value.arg_index = macro->paramc;
1523 /* Check the syntax of the parameters in a MACRO definition. Returns
1524 false if an error occurs. */
1526 parse_params (cpp_reader *pfile, cpp_macro *macro)
1528 unsigned int prev_ident = 0;
1532 const cpp_token *token = _cpp_lex_token (pfile);
1534 switch (token->type)
1537 /* Allow/ignore comments in parameter lists if we are
1538 preserving comments in macro expansions. */
1539 if (token->type == CPP_COMMENT
1540 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
1543 cpp_error (pfile, CPP_DL_ERROR,
1544 "\"%s\" may not appear in macro parameter list",
1545 cpp_token_as_text (pfile, token));
1551 cpp_error (pfile, CPP_DL_ERROR,
1552 "macro parameters must be comma-separated");
1557 if (_cpp_save_parameter (pfile, macro, token->val.node.node))
1561 case CPP_CLOSE_PAREN:
1562 if (prev_ident || macro->paramc == 0)
1565 /* Fall through to pick up the error. */
1569 cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
1576 macro->variadic = 1;
1579 _cpp_save_parameter (pfile, macro,
1580 pfile->spec_nodes.n__VA_ARGS__);
1581 pfile->state.va_args_ok = 1;
1582 if (! CPP_OPTION (pfile, c99)
1583 && CPP_OPTION (pfile, pedantic)
1584 && CPP_OPTION (pfile, warn_variadic_macros))
1585 cpp_error (pfile, CPP_DL_PEDWARN,
1586 "anonymous variadic macros were introduced in C99");
1588 else if (CPP_OPTION (pfile, pedantic)
1589 && CPP_OPTION (pfile, warn_variadic_macros))
1590 cpp_error (pfile, CPP_DL_PEDWARN,
1591 "ISO C does not permit named variadic macros");
1593 /* We're at the end, and just expect a closing parenthesis. */
1594 token = _cpp_lex_token (pfile);
1595 if (token->type == CPP_CLOSE_PAREN)
1600 cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
1606 /* Allocate room for a token from a macro's replacement list. */
1608 alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
1610 if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
1611 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
1613 return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
1616 /* Lex a token from the expansion of MACRO, but mark parameters as we
1617 find them and warn of traditional stringification. */
1619 lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
1621 cpp_token *token, *saved_cur_token;
1623 saved_cur_token = pfile->cur_token;
1624 pfile->cur_token = alloc_expansion_token (pfile, macro);
1625 token = _cpp_lex_direct (pfile);
1626 pfile->cur_token = saved_cur_token;
1628 /* Is this a parameter? */
1629 if (token->type == CPP_NAME
1630 && (token->val.node.node->flags & NODE_MACRO_ARG) != 0)
1632 token->type = CPP_MACRO_ARG;
1633 token->val.macro_arg.arg_no = token->val.node.node->value.arg_index;
1635 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1636 && (token->type == CPP_STRING || token->type == CPP_CHAR))
1637 check_trad_stringification (pfile, macro, &token->val.str);
1643 create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
1646 const cpp_token *ctoken;
1647 bool following_paste_op = false;
1648 const char *paste_op_error_msg =
1649 N_("'##' cannot appear at either end of a macro expansion");
1650 unsigned int num_extra_tokens = 0;
1652 /* Get the first token of the expansion (or the '(' of a
1653 function-like macro). */
1654 ctoken = _cpp_lex_token (pfile);
1656 if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
1658 bool ok = parse_params (pfile, macro);
1659 macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
1663 /* Success. Commit or allocate the parameter array. */
1664 if (pfile->hash_table->alloc_subobject)
1666 cpp_hashnode **params =
1667 (cpp_hashnode **) pfile->hash_table->alloc_subobject
1668 (sizeof (cpp_hashnode *) * macro->paramc);
1669 memcpy (params, macro->params,
1670 sizeof (cpp_hashnode *) * macro->paramc);
1671 macro->params = params;
1674 BUFF_FRONT (pfile->a_buff) = (uchar *) ¯o->params[macro->paramc];
1675 macro->fun_like = 1;
1677 else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
1679 /* While ISO C99 requires whitespace before replacement text
1680 in a macro definition, ISO C90 with TC1 allows there characters
1681 from the basic source character set. */
1682 if (CPP_OPTION (pfile, c99))
1683 cpp_error (pfile, CPP_DL_PEDWARN,
1684 "ISO C99 requires whitespace after the macro name");
1687 int warntype = CPP_DL_WARNING;
1688 switch (ctoken->type)
1692 case CPP_OBJC_STRING:
1693 /* '@' is not in basic character set. */
1694 warntype = CPP_DL_PEDWARN;
1697 /* Basic character set sans letters, digits and _. */
1698 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
1699 ctoken->val.str.text[0]) == NULL)
1700 warntype = CPP_DL_PEDWARN;
1703 /* All other tokens start with a character from basic
1707 cpp_error (pfile, warntype,
1708 "missing whitespace after the macro name");
1712 if (macro->fun_like)
1713 token = lex_expansion_token (pfile, macro);
1716 token = alloc_expansion_token (pfile, macro);
1722 /* Check the stringifying # constraint 6.10.3.2.1 of
1723 function-like macros when lexing the subsequent token. */
1724 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1726 if (token->type == CPP_MACRO_ARG)
1728 if (token->flags & PREV_WHITE)
1729 token->flags |= SP_PREV_WHITE;
1730 if (token[-1].flags & DIGRAPH)
1731 token->flags |= SP_DIGRAPH;
1732 token->flags &= ~PREV_WHITE;
1733 token->flags |= STRINGIFY_ARG;
1734 token->flags |= token[-1].flags & PREV_WHITE;
1735 token[-1] = token[0];
1738 /* Let assembler get away with murder. */
1739 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
1741 cpp_error (pfile, CPP_DL_ERROR,
1742 "'#' is not followed by a macro parameter");
1747 if (token->type == CPP_EOF)
1749 /* Paste operator constraint 6.10.3.3.1:
1750 Token-paste ##, can appear in both object-like and
1751 function-like macros, but not at the end. */
1752 if (following_paste_op)
1754 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
1760 /* Paste operator constraint 6.10.3.3.1. */
1761 if (token->type == CPP_PASTE)
1763 /* Token-paste ##, can appear in both object-like and
1764 function-like macros, but not at the beginning. */
1765 if (macro->count == 1)
1767 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
1771 if (token[-1].flags & PASTE_LEFT)
1773 macro->extra_tokens = 1;
1775 token->val.token_no = macro->count - 1;
1780 token[-1].flags |= PASTE_LEFT;
1781 if (token->flags & DIGRAPH)
1782 token[-1].flags |= SP_DIGRAPH;
1783 if (token->flags & PREV_WHITE)
1784 token[-1].flags |= SP_PREV_WHITE;
1788 following_paste_op = (token->type == CPP_PASTE);
1789 token = lex_expansion_token (pfile, macro);
1792 macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
1793 macro->traditional = 0;
1795 /* Don't count the CPP_EOF. */
1798 /* Clear whitespace on first token for warn_of_redefinition(). */
1800 macro->exp.tokens[0].flags &= ~PREV_WHITE;
1802 /* Commit or allocate the memory. */
1803 if (pfile->hash_table->alloc_subobject)
1806 (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
1808 if (num_extra_tokens)
1810 /* Place second and subsequent ## or %:%: tokens in
1811 sequences of consecutive such tokens at the end of the
1812 list to preserve information about where they appear, how
1813 they are spelt and whether they are preceded by
1814 whitespace without otherwise interfering with macro
1816 cpp_token *normal_dest = tokns;
1817 cpp_token *extra_dest = tokns + macro->count - num_extra_tokens;
1819 for (i = 0; i < macro->count; i++)
1821 if (macro->exp.tokens[i].type == CPP_PASTE)
1822 *extra_dest++ = macro->exp.tokens[i];
1824 *normal_dest++ = macro->exp.tokens[i];
1828 memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
1829 macro->exp.tokens = tokns;
1832 BUFF_FRONT (pfile->a_buff) = (uchar *) ¯o->exp.tokens[macro->count];
1837 /* Parse a macro and save its expansion. Returns nonzero on success. */
1839 _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
1845 if (pfile->hash_table->alloc_subobject)
1846 macro = (cpp_macro *) pfile->hash_table->alloc_subobject
1847 (sizeof (cpp_macro));
1849 macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
1850 macro->line = pfile->directive_line;
1853 macro->variadic = 0;
1854 macro->used = !CPP_OPTION (pfile, warn_unused_macros);
1856 macro->fun_like = 0;
1857 macro->extra_tokens = 0;
1858 /* To suppress some diagnostics. */
1859 macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
1861 if (CPP_OPTION (pfile, traditional))
1862 ok = _cpp_create_trad_definition (pfile, macro);
1865 ok = create_iso_definition (pfile, macro);
1867 /* We set the type for SEEN_EOL() in directives.c.
1869 Longer term we should lex the whole line before coming here,
1870 and just copy the expansion. */
1872 /* Stop the lexer accepting __VA_ARGS__. */
1873 pfile->state.va_args_ok = 0;
1876 /* Clear the fast argument lookup indices. */
1877 for (i = macro->paramc; i-- > 0; )
1879 struct cpp_hashnode *node = macro->params[i];
1880 node->flags &= ~ NODE_MACRO_ARG;
1881 node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
1887 if (node->type == NT_MACRO)
1889 if (CPP_OPTION (pfile, warn_unused_macros))
1890 _cpp_warn_if_unused_macro (pfile, node, NULL);
1892 if (warn_of_redefinition (pfile, node, macro))
1895 warned = cpp_error_with_line (pfile, CPP_DL_PEDWARN,
1896 pfile->directive_line, 0,
1897 "\"%s\" redefined", NODE_NAME (node));
1899 if (warned && node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
1900 cpp_error_with_line (pfile, CPP_DL_NOTE,
1901 node->value.macro->line, 0,
1902 "this is the location of the previous definition");
1906 if (node->type != NT_VOID)
1907 _cpp_free_definition (node);
1909 /* Enter definition in hash table. */
1910 node->type = NT_MACRO;
1911 node->value.macro = macro;
1912 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
1913 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
1914 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
1915 in the C standard, as something that one must use in C++.
1916 However DR#593 indicates that these aren't actually mentioned
1917 in the C++ standard. We special-case them anyway. */
1918 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
1919 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
1920 node->flags |= NODE_WARN;
1922 /* If user defines one of the conditional macros, remove the
1924 node->flags &= ~NODE_CONDITIONAL;
1929 /* Warn if a token in STRING matches one of a function-like MACRO's
1932 check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
1933 const cpp_string *string)
1935 unsigned int i, len;
1936 const uchar *p, *q, *limit;
1938 /* Loop over the string. */
1939 limit = string->text + string->len - 1;
1940 for (p = string->text + 1; p < limit; p = q)
1942 /* Find the start of an identifier. */
1943 while (p < limit && !is_idstart (*p))
1946 /* Find the end of the identifier. */
1948 while (q < limit && is_idchar (*q))
1953 /* Loop over the function macro arguments to see if the
1954 identifier inside the string matches one of them. */
1955 for (i = 0; i < macro->paramc; i++)
1957 const cpp_hashnode *node = macro->params[i];
1959 if (NODE_LEN (node) == len
1960 && !memcmp (p, NODE_NAME (node), len))
1962 cpp_error (pfile, CPP_DL_WARNING,
1963 "macro argument \"%s\" would be stringified in traditional C",
1971 /* Returns the name, arguments and expansion of a macro, in a format
1972 suitable to be read back in again, and therefore also for DWARF 2
1973 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1974 Caller is expected to generate the "#define" bit if needed. The
1975 returned text is temporary, and automatically freed later. */
1976 const unsigned char *
1977 cpp_macro_definition (cpp_reader *pfile, const cpp_hashnode *node)
1979 unsigned int i, len;
1980 const cpp_macro *macro = node->value.macro;
1981 unsigned char *buffer;
1983 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1985 cpp_error (pfile, CPP_DL_ICE,
1986 "invalid hash type %d in cpp_macro_definition", node->type);
1990 /* Calculate length. */
1991 len = NODE_LEN (node) + 2; /* ' ' and NUL. */
1992 if (macro->fun_like)
1994 len += 4; /* "()" plus possible final ".." of named
1995 varargs (we have + 1 below). */
1996 for (i = 0; i < macro->paramc; i++)
1997 len += NODE_LEN (macro->params[i]) + 1; /* "," */
2000 /* This should match below where we fill in the buffer. */
2001 if (CPP_OPTION (pfile, traditional))
2002 len += _cpp_replacement_text_len (macro);
2005 unsigned int count = macro_real_token_count (macro);
2006 for (i = 0; i < count; i++)
2008 cpp_token *token = ¯o->exp.tokens[i];
2010 if (token->type == CPP_MACRO_ARG)
2011 len += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
2013 len += cpp_token_len (token);
2015 if (token->flags & STRINGIFY_ARG)
2017 if (token->flags & PASTE_LEFT)
2018 len += 3; /* " ##" */
2019 if (token->flags & PREV_WHITE)
2024 if (len > pfile->macro_buffer_len)
2026 pfile->macro_buffer = XRESIZEVEC (unsigned char,
2027 pfile->macro_buffer, len);
2028 pfile->macro_buffer_len = len;
2031 /* Fill in the buffer. Start with the macro name. */
2032 buffer = pfile->macro_buffer;
2033 memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
2034 buffer += NODE_LEN (node);
2036 /* Parameter names. */
2037 if (macro->fun_like)
2040 for (i = 0; i < macro->paramc; i++)
2042 cpp_hashnode *param = macro->params[i];
2044 if (param != pfile->spec_nodes.n__VA_ARGS__)
2046 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
2047 buffer += NODE_LEN (param);
2050 if (i + 1 < macro->paramc)
2051 /* Don't emit a space after the comma here; we're trying
2052 to emit a Dwarf-friendly definition, and the Dwarf spec
2053 forbids spaces in the argument list. */
2055 else if (macro->variadic)
2056 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
2061 /* The Dwarf spec requires a space after the macro name, even if the
2062 definition is the empty string. */
2065 if (CPP_OPTION (pfile, traditional))
2066 buffer = _cpp_copy_replacement_text (macro, buffer);
2067 else if (macro->count)
2068 /* Expansion tokens. */
2070 unsigned int count = macro_real_token_count (macro);
2071 for (i = 0; i < count; i++)
2073 cpp_token *token = ¯o->exp.tokens[i];
2075 if (token->flags & PREV_WHITE)
2077 if (token->flags & STRINGIFY_ARG)
2080 if (token->type == CPP_MACRO_ARG)
2083 NODE_NAME (macro->params[token->val.macro_arg.arg_no - 1]),
2084 NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]));
2085 buffer += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
2088 buffer = cpp_spell_token (pfile, token, buffer, false);
2090 if (token->flags & PASTE_LEFT)
2095 /* Next has PREV_WHITE; see _cpp_create_definition. */
2101 return pfile->macro_buffer;