ifcvt.c (noce_try_addcc): Do not call emit_conditional_add with weird operands.
[official-gcc.git] / gcc / cppmacro.c
bloba00b83520dc9416942365045d9327e2d60d149cc
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
11 later version.
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! */
26 #include "config.h"
27 #include "system.h"
28 #include "coretypes.h"
29 #include "tm.h"
30 #include "cpplib.h"
31 #include "cpphash.h"
33 typedef struct macro_arg macro_arg;
34 struct macro_arg
36 const cpp_token **first; /* First token in unexpanded argument. */
37 const cpp_token **expanded; /* Macro-expanded argument. */
38 const cpp_token *stringified; /* Stringified argument. */
39 unsigned int count; /* # of tokens in argument. */
40 unsigned int expanded_count; /* # of tokens in expanded argument. */
43 /* Macro expansion. */
45 static int enter_macro_context PARAMS ((cpp_reader *, cpp_hashnode *));
46 static int builtin_macro PARAMS ((cpp_reader *, cpp_hashnode *));
47 static void push_token_context
48 PARAMS ((cpp_reader *, cpp_hashnode *, const cpp_token *, unsigned int));
49 static void push_ptoken_context
50 PARAMS ((cpp_reader *, cpp_hashnode *, _cpp_buff *,
51 const cpp_token **, unsigned int));
52 static _cpp_buff *collect_args PARAMS ((cpp_reader *, const cpp_hashnode *));
53 static cpp_context *next_context PARAMS ((cpp_reader *));
54 static const cpp_token *padding_token
55 PARAMS ((cpp_reader *, const cpp_token *));
56 static void expand_arg PARAMS ((cpp_reader *, macro_arg *));
57 static const cpp_token *new_string_token PARAMS ((cpp_reader *, uchar *,
58 unsigned int));
59 static const cpp_token *stringify_arg PARAMS ((cpp_reader *, macro_arg *));
60 static void paste_all_tokens PARAMS ((cpp_reader *, const cpp_token *));
61 static bool paste_tokens PARAMS ((cpp_reader *, const cpp_token **,
62 const cpp_token *));
63 static void replace_args PARAMS ((cpp_reader *, cpp_hashnode *, cpp_macro *,
64 macro_arg *));
65 static _cpp_buff *funlike_invocation_p PARAMS ((cpp_reader *, cpp_hashnode *));
66 static bool create_iso_definition PARAMS ((cpp_reader *, cpp_macro *));
68 /* #define directive parsing and handling. */
70 static cpp_token *alloc_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
71 static cpp_token *lex_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
72 static bool warn_of_redefinition PARAMS ((cpp_reader *, const cpp_hashnode *,
73 const cpp_macro *));
74 static bool parse_params PARAMS ((cpp_reader *, cpp_macro *));
75 static void check_trad_stringification PARAMS ((cpp_reader *,
76 const cpp_macro *,
77 const cpp_string *));
79 /* Emits a warning if NODE is a macro defined in the main file that
80 has not been used. */
81 int
82 _cpp_warn_if_unused_macro (pfile, node, v)
83 cpp_reader *pfile;
84 cpp_hashnode *node;
85 void *v ATTRIBUTE_UNUSED;
87 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
89 cpp_macro *macro = node->value.macro;
91 if (!macro->used
92 /* Skip front-end built-ins and command line macros. */
93 && macro->line >= pfile->first_unused_line
94 && MAIN_FILE_P (lookup_line (&pfile->line_maps, macro->line)))
95 cpp_error_with_line (pfile, DL_WARNING, macro->line, 0,
96 "macro \"%s\" is not used", NODE_NAME (node));
99 return 1;
102 /* Allocates and returns a CPP_STRING token, containing TEXT of length
103 LEN, after null-terminating it. TEXT must be in permanent storage. */
104 static const cpp_token *
105 new_string_token (pfile, text, len)
106 cpp_reader *pfile;
107 unsigned char *text;
108 unsigned int len;
110 cpp_token *token = _cpp_temp_token (pfile);
112 text[len] = '\0';
113 token->type = CPP_STRING;
114 token->val.str.len = len;
115 token->val.str.text = text;
116 token->flags = 0;
117 return token;
120 static const char * const monthnames[] =
122 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
123 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
126 /* Handle builtin macros like __FILE__, and push the resulting token
127 on the context stack. Also handles _Pragma, for which no new token
128 is created. Returns 1 if it generates a new token context, 0 to
129 return the token to the caller. */
130 const uchar *
131 _cpp_builtin_macro_text (pfile, node)
132 cpp_reader *pfile;
133 cpp_hashnode *node;
135 const uchar *result = NULL;
136 unsigned int number = 1;
138 switch (node->value.builtin)
140 default:
141 cpp_error (pfile, DL_ICE, "invalid built-in macro \"%s\"",
142 NODE_NAME (node));
143 break;
145 case BT_FILE:
146 case BT_BASE_FILE:
148 unsigned int len;
149 const char *name;
150 uchar *buf;
151 const struct line_map *map = pfile->map;
153 if (node->value.builtin == BT_BASE_FILE)
154 while (! MAIN_FILE_P (map))
155 map = INCLUDED_FROM (&pfile->line_maps, map);
157 name = map->to_file;
158 len = strlen (name);
159 buf = _cpp_unaligned_alloc (pfile, len * 4 + 3);
160 result = buf;
161 *buf = '"';
162 buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
163 *buf++ = '"';
164 *buf = '\0';
166 break;
168 case BT_INCLUDE_LEVEL:
169 /* The line map depth counts the primary source as level 1, but
170 historically __INCLUDE_DEPTH__ has called the primary source
171 level 0. */
172 number = pfile->line_maps.depth - 1;
173 break;
175 case BT_SPECLINE:
176 /* If __LINE__ is embedded in a macro, it must expand to the
177 line of the macro's invocation, not its definition.
178 Otherwise things like assert() will not work properly. */
179 if (CPP_OPTION (pfile, traditional))
180 number = pfile->line;
181 else
182 number = pfile->cur_token[-1].line;
183 number = SOURCE_LINE (pfile->map, number);
184 break;
186 /* __STDC__ has the value 1 under normal circumstances.
187 However, if (a) we are in a system header, (b) the option
188 stdc_0_in_system_headers is true (set by target config), and
189 (c) we are not in strictly conforming mode, then it has the
190 value 0. */
191 case BT_STDC:
193 if (CPP_IN_SYSTEM_HEADER (pfile)
194 && CPP_OPTION (pfile, stdc_0_in_system_headers)
195 && !CPP_OPTION (pfile,std))
196 number = 0;
197 else
198 number = 1;
200 break;
202 case BT_DATE:
203 case BT_TIME:
204 if (pfile->date == NULL)
206 /* Allocate __DATE__ and __TIME__ strings from permanent
207 storage. We only do this once, and don't generate them
208 at init time, because time() and localtime() are very
209 slow on some systems. */
210 time_t tt;
211 struct tm *tb = NULL;
213 /* (time_t) -1 is a legitimate value for "number of seconds
214 since the Epoch", so we have to do a little dance to
215 distinguish that from a genuine error. */
216 errno = 0;
217 tt = time(NULL);
218 if (tt != (time_t)-1 || errno == 0)
219 tb = localtime (&tt);
221 if (tb)
223 pfile->date = _cpp_unaligned_alloc (pfile,
224 sizeof ("\"Oct 11 1347\""));
225 sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
226 monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900);
228 pfile->time = _cpp_unaligned_alloc (pfile,
229 sizeof ("\"12:34:56\""));
230 sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
231 tb->tm_hour, tb->tm_min, tb->tm_sec);
233 else
235 cpp_errno (pfile, DL_WARNING,
236 "could not determine date and time");
238 pfile->date = U"\"??? ?? ????\"";
239 pfile->time = U"\"??:??:??\"";
243 if (node->value.builtin == BT_DATE)
244 result = pfile->date;
245 else
246 result = pfile->time;
247 break;
250 if (result == NULL)
252 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
253 result = _cpp_unaligned_alloc (pfile, 21);
254 sprintf ((char *) result, "%u", number);
257 return result;
260 /* Convert builtin macros like __FILE__ to a token and push it on the
261 context stack. Also handles _Pragma, for which no new token is
262 created. Returns 1 if it generates a new token context, 0 to
263 return the token to the caller. */
264 static int
265 builtin_macro (pfile, node)
266 cpp_reader *pfile;
267 cpp_hashnode *node;
269 const uchar *buf;
271 if (node->value.builtin == BT_PRAGMA)
273 /* Don't interpret _Pragma within directives. The standard is
274 not clear on this, but to me this makes most sense. */
275 if (pfile->state.in_directive)
276 return 0;
278 _cpp_do__Pragma (pfile);
279 return 1;
282 buf = _cpp_builtin_macro_text (pfile, node);
284 cpp_push_buffer (pfile, buf, ustrlen (buf), /* from_stage3 */ true, 1);
286 /* Tweak the column number the lexer will report. */
287 pfile->buffer->col_adjust = pfile->cur_token[-1].col - 1;
289 /* We don't want a leading # to be interpreted as a directive. */
290 pfile->buffer->saved_flags = 0;
292 /* Set pfile->cur_token as required by _cpp_lex_direct. */
293 pfile->cur_token = _cpp_temp_token (pfile);
294 push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
295 if (pfile->buffer->cur != pfile->buffer->rlimit)
296 cpp_error (pfile, DL_ICE, "invalid built-in macro \"%s\"",
297 NODE_NAME (node));
298 _cpp_pop_buffer (pfile);
300 return 1;
303 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
304 backslashes and double quotes. Non-printable characters are
305 converted to octal. DEST must be of sufficient size. Returns
306 a pointer to the end of the string. */
307 uchar *
308 cpp_quote_string (dest, src, len)
309 uchar *dest;
310 const uchar *src;
311 unsigned int len;
313 while (len--)
315 uchar c = *src++;
317 if (c == '\\' || c == '"')
319 *dest++ = '\\';
320 *dest++ = c;
322 else
324 if (ISPRINT (c))
325 *dest++ = c;
326 else
328 sprintf ((char *) dest, "\\%03o", c);
329 dest += 4;
334 return dest;
337 /* Convert a token sequence ARG to a single string token according to
338 the rules of the ISO C #-operator. */
339 static const cpp_token *
340 stringify_arg (pfile, arg)
341 cpp_reader *pfile;
342 macro_arg *arg;
344 unsigned char *dest = BUFF_FRONT (pfile->u_buff);
345 unsigned int i, escape_it, backslash_count = 0;
346 const cpp_token *source = NULL;
347 size_t len;
349 /* Loop, reading in the argument's tokens. */
350 for (i = 0; i < arg->count; i++)
352 const cpp_token *token = arg->first[i];
354 if (token->type == CPP_PADDING)
356 if (source == NULL)
357 source = token->val.source;
358 continue;
361 escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING
362 || token->type == CPP_CHAR || token->type == CPP_WCHAR);
364 /* Room for each char being written in octal, initial space and
365 final NUL. */
366 len = cpp_token_len (token);
367 if (escape_it)
368 len *= 4;
369 len += 2;
371 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
373 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
374 _cpp_extend_buff (pfile, &pfile->u_buff, len);
375 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
378 /* Leading white space? */
379 if (dest != BUFF_FRONT (pfile->u_buff))
381 if (source == NULL)
382 source = token;
383 if (source->flags & PREV_WHITE)
384 *dest++ = ' ';
386 source = NULL;
388 if (escape_it)
390 _cpp_buff *buff = _cpp_get_buff (pfile, len);
391 unsigned char *buf = BUFF_FRONT (buff);
392 len = cpp_spell_token (pfile, token, buf) - buf;
393 dest = cpp_quote_string (dest, buf, len);
394 _cpp_release_buff (pfile, buff);
396 else
397 dest = cpp_spell_token (pfile, token, dest);
399 if (token->type == CPP_OTHER && token->val.c == '\\')
400 backslash_count++;
401 else
402 backslash_count = 0;
405 /* Ignore the final \ of invalid string literals. */
406 if (backslash_count & 1)
408 cpp_error (pfile, DL_WARNING,
409 "invalid string literal, ignoring final '\\'");
410 dest--;
413 /* Commit the memory, including NUL, and return the token. */
414 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < 1)
416 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
417 _cpp_extend_buff (pfile, &pfile->u_buff, 1);
418 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
420 len = dest - BUFF_FRONT (pfile->u_buff);
421 BUFF_FRONT (pfile->u_buff) = dest + 1;
422 return new_string_token (pfile, dest - len, len);
425 /* Try to paste two tokens. On success, return nonzero. In any
426 case, PLHS is updated to point to the pasted token, which is
427 guaranteed to not have the PASTE_LEFT flag set. */
428 static bool
429 paste_tokens (pfile, plhs, rhs)
430 cpp_reader *pfile;
431 const cpp_token **plhs, *rhs;
433 unsigned char *buf, *end;
434 const cpp_token *lhs;
435 unsigned int len;
436 bool valid;
438 lhs = *plhs;
439 len = cpp_token_len (lhs) + cpp_token_len (rhs) + 1;
440 buf = (unsigned char *) alloca (len);
441 end = cpp_spell_token (pfile, lhs, buf);
443 /* Avoid comment headers, since they are still processed in stage 3.
444 It is simpler to insert a space here, rather than modifying the
445 lexer to ignore comments in some circumstances. Simply returning
446 false doesn't work, since we want to clear the PASTE_LEFT flag. */
447 if (lhs->type == CPP_DIV && rhs->type != CPP_EQ)
448 *end++ = ' ';
449 end = cpp_spell_token (pfile, rhs, end);
450 *end = '\0';
452 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true, 1);
454 /* Tweak the column number the lexer will report. */
455 pfile->buffer->col_adjust = pfile->cur_token[-1].col - 1;
457 /* We don't want a leading # to be interpreted as a directive. */
458 pfile->buffer->saved_flags = 0;
460 /* Set pfile->cur_token as required by _cpp_lex_direct. */
461 pfile->cur_token = _cpp_temp_token (pfile);
462 *plhs = _cpp_lex_direct (pfile);
463 valid = pfile->buffer->cur == pfile->buffer->rlimit;
464 _cpp_pop_buffer (pfile);
466 return valid;
469 /* Handles an arbitrarily long sequence of ## operators, with initial
470 operand LHS. This implementation is left-associative,
471 non-recursive, and finishes a paste before handling succeeding
472 ones. If a paste fails, we back up to the RHS of the failing ##
473 operator before pushing the context containing the result of prior
474 successful pastes, with the effect that the RHS appears in the
475 output stream after the pasted LHS normally. */
476 static void
477 paste_all_tokens (pfile, lhs)
478 cpp_reader *pfile;
479 const cpp_token *lhs;
481 const cpp_token *rhs;
482 cpp_context *context = pfile->context;
486 /* Take the token directly from the current context. We can do
487 this, because we are in the replacement list of either an
488 object-like macro, or a function-like macro with arguments
489 inserted. In either case, the constraints to #define
490 guarantee we have at least one more token. */
491 if (context->direct_p)
492 rhs = FIRST (context).token++;
493 else
494 rhs = *FIRST (context).ptoken++;
496 if (rhs->type == CPP_PADDING)
497 abort ();
499 if (!paste_tokens (pfile, &lhs, rhs))
501 _cpp_backup_tokens (pfile, 1);
503 /* Mandatory error for all apart from assembler. */
504 if (CPP_OPTION (pfile, lang) != CLK_ASM)
505 cpp_error (pfile, DL_ERROR,
506 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
507 cpp_token_as_text (pfile, lhs),
508 cpp_token_as_text (pfile, rhs));
509 break;
512 while (rhs->flags & PASTE_LEFT);
514 /* Put the resulting token in its own context. */
515 push_token_context (pfile, NULL, lhs, 1);
518 /* Returns TRUE if the number of arguments ARGC supplied in an
519 invocation of the MACRO referenced by NODE is valid. An empty
520 invocation to a macro with no parameters should pass ARGC as zero.
522 Note that MACRO cannot necessarily be deduced from NODE, in case
523 NODE was redefined whilst collecting arguments. */
524 bool
525 _cpp_arguments_ok (pfile, macro, node, argc)
526 cpp_reader *pfile;
527 cpp_macro *macro;
528 const cpp_hashnode *node;
529 unsigned int argc;
531 if (argc == macro->paramc)
532 return true;
534 if (argc < macro->paramc)
536 /* As an extension, a rest argument is allowed to not appear in
537 the invocation at all.
538 e.g. #define debug(format, args...) something
539 debug("string");
541 This is exactly the same as if there had been an empty rest
542 argument - debug("string", ). */
544 if (argc + 1 == macro->paramc && macro->variadic)
546 if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
547 cpp_error (pfile, DL_PEDWARN,
548 "ISO C99 requires rest arguments to be used");
549 return true;
552 cpp_error (pfile, DL_ERROR,
553 "macro \"%s\" requires %u arguments, but only %u given",
554 NODE_NAME (node), macro->paramc, argc);
556 else
557 cpp_error (pfile, DL_ERROR,
558 "macro \"%s\" passed %u arguments, but takes just %u",
559 NODE_NAME (node), argc, macro->paramc);
561 return false;
564 /* Reads and returns the arguments to a function-like macro
565 invocation. Assumes the opening parenthesis has been processed.
566 If there is an error, emits an appropriate diagnostic and returns
567 NULL. Each argument is terminated by a CPP_EOF token, for the
568 future benefit of expand_arg(). */
569 static _cpp_buff *
570 collect_args (pfile, node)
571 cpp_reader *pfile;
572 const cpp_hashnode *node;
574 _cpp_buff *buff, *base_buff;
575 cpp_macro *macro;
576 macro_arg *args, *arg;
577 const cpp_token *token;
578 unsigned int argc;
580 macro = node->value.macro;
581 if (macro->paramc)
582 argc = macro->paramc;
583 else
584 argc = 1;
585 buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
586 + sizeof (macro_arg)));
587 base_buff = buff;
588 args = (macro_arg *) buff->base;
589 memset (args, 0, argc * sizeof (macro_arg));
590 buff->cur = (unsigned char *) &args[argc];
591 arg = args, argc = 0;
593 /* Collect the tokens making up each argument. We don't yet know
594 how many arguments have been supplied, whether too many or too
595 few. Hence the slightly bizarre usage of "argc" and "arg". */
598 unsigned int paren_depth = 0;
599 unsigned int ntokens = 0;
601 argc++;
602 arg->first = (const cpp_token **) buff->cur;
604 for (;;)
606 /* Require space for 2 new tokens (including a CPP_EOF). */
607 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
609 buff = _cpp_append_extend_buff (pfile, buff,
610 1000 * sizeof (cpp_token *));
611 arg->first = (const cpp_token **) buff->cur;
614 token = cpp_get_token (pfile);
616 if (token->type == CPP_PADDING)
618 /* Drop leading padding. */
619 if (ntokens == 0)
620 continue;
622 else if (token->type == CPP_OPEN_PAREN)
623 paren_depth++;
624 else if (token->type == CPP_CLOSE_PAREN)
626 if (paren_depth-- == 0)
627 break;
629 else if (token->type == CPP_COMMA)
631 /* A comma does not terminate an argument within
632 parentheses or as part of a variable argument. */
633 if (paren_depth == 0
634 && ! (macro->variadic && argc == macro->paramc))
635 break;
637 else if (token->type == CPP_EOF
638 || (token->type == CPP_HASH && token->flags & BOL))
639 break;
641 arg->first[ntokens++] = token;
644 /* Drop trailing padding. */
645 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
646 ntokens--;
648 arg->count = ntokens;
649 arg->first[ntokens] = &pfile->eof;
651 /* Terminate the argument. Excess arguments loop back and
652 overwrite the final legitimate argument, before failing. */
653 if (argc <= macro->paramc)
655 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
656 if (argc != macro->paramc)
657 arg++;
660 while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
662 if (token->type == CPP_EOF)
664 /* We still need the CPP_EOF to end directives, and to end
665 pre-expansion of a macro argument. Step back is not
666 unconditional, since we don't want to return a CPP_EOF to our
667 callers at the end of an -include-d file. */
668 if (pfile->context->prev || pfile->state.in_directive)
669 _cpp_backup_tokens (pfile, 1);
670 cpp_error (pfile, DL_ERROR,
671 "unterminated argument list invoking macro \"%s\"",
672 NODE_NAME (node));
674 else
676 /* A single empty argument is counted as no argument. */
677 if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
678 argc = 0;
679 if (_cpp_arguments_ok (pfile, macro, node, argc))
681 /* GCC has special semantics for , ## b where b is a varargs
682 parameter: we remove the comma if b was omitted entirely.
683 If b was merely an empty argument, the comma is retained.
684 If the macro takes just one (varargs) parameter, then we
685 retain the comma only if we are standards conforming.
687 If FIRST is NULL replace_args () swallows the comma. */
688 if (macro->variadic && (argc < macro->paramc
689 || (argc == 1 && args[0].count == 0
690 && !CPP_OPTION (pfile, std))))
691 args[macro->paramc - 1].first = NULL;
692 return base_buff;
696 /* An error occurred. */
697 _cpp_release_buff (pfile, base_buff);
698 return NULL;
701 /* Search for an opening parenthesis to the macro of NODE, in such a
702 way that, if none is found, we don't lose the information in any
703 intervening padding tokens. If we find the parenthesis, collect
704 the arguments and return the buffer containing them. */
705 static _cpp_buff *
706 funlike_invocation_p (pfile, node)
707 cpp_reader *pfile;
708 cpp_hashnode *node;
710 const cpp_token *token, *padding = NULL;
712 for (;;)
714 token = cpp_get_token (pfile);
715 if (token->type != CPP_PADDING)
716 break;
717 if (padding == NULL
718 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
719 padding = token;
722 if (token->type == CPP_OPEN_PAREN)
724 pfile->state.parsing_args = 2;
725 return collect_args (pfile, node);
728 /* CPP_EOF can be the end of macro arguments, or the end of the
729 file. We mustn't back up over the latter. Ugh. */
730 if (token->type != CPP_EOF || token == &pfile->eof)
732 /* Back up. We may have skipped padding, in which case backing
733 up more than one token when expanding macros is in general
734 too difficult. We re-insert it in its own context. */
735 _cpp_backup_tokens (pfile, 1);
736 if (padding)
737 push_token_context (pfile, NULL, padding, 1);
740 return NULL;
743 /* Push the context of a macro with hash entry NODE onto the context
744 stack. If we can successfully expand the macro, we push a context
745 containing its yet-to-be-rescanned replacement list and return one.
746 Otherwise, we don't push a context and return zero. */
747 static int
748 enter_macro_context (pfile, node)
749 cpp_reader *pfile;
750 cpp_hashnode *node;
752 /* The presence of a macro invalidates a file's controlling macro. */
753 pfile->mi_valid = false;
755 pfile->state.angled_headers = false;
757 /* Handle standard macros. */
758 if (! (node->flags & NODE_BUILTIN))
760 cpp_macro *macro = node->value.macro;
762 if (macro->fun_like)
764 _cpp_buff *buff;
766 pfile->state.prevent_expansion++;
767 pfile->keep_tokens++;
768 pfile->state.parsing_args = 1;
769 buff = funlike_invocation_p (pfile, node);
770 pfile->state.parsing_args = 0;
771 pfile->keep_tokens--;
772 pfile->state.prevent_expansion--;
774 if (buff == NULL)
776 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
777 cpp_error (pfile, DL_WARNING,
778 "function-like macro \"%s\" must be used with arguments in traditional C",
779 NODE_NAME (node));
781 return 0;
784 if (macro->paramc > 0)
785 replace_args (pfile, node, macro, (macro_arg *) buff->base);
786 _cpp_release_buff (pfile, buff);
789 /* Disable the macro within its expansion. */
790 node->flags |= NODE_DISABLED;
792 macro->used = 1;
794 if (macro->paramc == 0)
795 push_token_context (pfile, node, macro->exp.tokens, macro->count);
797 return 1;
800 /* Handle built-in macros and the _Pragma operator. */
801 return builtin_macro (pfile, node);
804 /* Replace the parameters in a function-like macro of NODE with the
805 actual ARGS, and place the result in a newly pushed token context.
806 Expand each argument before replacing, unless it is operated upon
807 by the # or ## operators. */
808 static void
809 replace_args (pfile, node, macro, args)
810 cpp_reader *pfile;
811 cpp_hashnode *node;
812 cpp_macro *macro;
813 macro_arg *args;
815 unsigned int i, total;
816 const cpp_token *src, *limit;
817 const cpp_token **dest, **first;
818 macro_arg *arg;
819 _cpp_buff *buff;
821 /* First, fully macro-expand arguments, calculating the number of
822 tokens in the final expansion as we go. The ordering of the if
823 statements below is subtle; we must handle stringification before
824 pasting. */
825 total = macro->count;
826 limit = macro->exp.tokens + macro->count;
828 for (src = macro->exp.tokens; src < limit; src++)
829 if (src->type == CPP_MACRO_ARG)
831 /* Leading and trailing padding tokens. */
832 total += 2;
834 /* We have an argument. If it is not being stringified or
835 pasted it is macro-replaced before insertion. */
836 arg = &args[src->val.arg_no - 1];
838 if (src->flags & STRINGIFY_ARG)
840 if (!arg->stringified)
841 arg->stringified = stringify_arg (pfile, arg);
843 else if ((src->flags & PASTE_LEFT)
844 || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
845 total += arg->count - 1;
846 else
848 if (!arg->expanded)
849 expand_arg (pfile, arg);
850 total += arg->expanded_count - 1;
854 /* Now allocate space for the expansion, copy the tokens and replace
855 the arguments. */
856 buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
857 first = (const cpp_token **) buff->base;
858 dest = first;
860 for (src = macro->exp.tokens; src < limit; src++)
862 unsigned int count;
863 const cpp_token **from, **paste_flag;
865 if (src->type != CPP_MACRO_ARG)
867 *dest++ = src;
868 continue;
871 paste_flag = 0;
872 arg = &args[src->val.arg_no - 1];
873 if (src->flags & STRINGIFY_ARG)
874 count = 1, from = &arg->stringified;
875 else if (src->flags & PASTE_LEFT)
876 count = arg->count, from = arg->first;
877 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
879 count = arg->count, from = arg->first;
880 if (dest != first)
882 if (dest[-1]->type == CPP_COMMA
883 && macro->variadic
884 && src->val.arg_no == macro->paramc)
886 /* Swallow a pasted comma if from == NULL, otherwise
887 drop the paste flag. */
888 if (from == NULL)
889 dest--;
890 else
891 paste_flag = dest - 1;
893 /* Remove the paste flag if the RHS is a placemarker. */
894 else if (count == 0)
895 paste_flag = dest - 1;
898 else
899 count = arg->expanded_count, from = arg->expanded;
901 /* Padding on the left of an argument (unless RHS of ##). */
902 if (!pfile->state.in_directive
903 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
904 *dest++ = padding_token (pfile, src);
906 if (count)
908 memcpy (dest, from, count * sizeof (cpp_token *));
909 dest += count;
911 /* With a non-empty argument on the LHS of ##, the last
912 token should be flagged PASTE_LEFT. */
913 if (src->flags & PASTE_LEFT)
914 paste_flag = dest - 1;
917 /* Avoid paste on RHS (even case count == 0). */
918 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
919 *dest++ = &pfile->avoid_paste;
921 /* Add a new paste flag, or remove an unwanted one. */
922 if (paste_flag)
924 cpp_token *token = _cpp_temp_token (pfile);
925 token->type = (*paste_flag)->type;
926 token->val.str = (*paste_flag)->val.str;
927 if (src->flags & PASTE_LEFT)
928 token->flags = (*paste_flag)->flags | PASTE_LEFT;
929 else
930 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
931 *paste_flag = token;
935 /* Free the expanded arguments. */
936 for (i = 0; i < macro->paramc; i++)
937 if (args[i].expanded)
938 free (args[i].expanded);
940 push_ptoken_context (pfile, node, buff, first, dest - first);
943 /* Return a special padding token, with padding inherited from SOURCE. */
944 static const cpp_token *
945 padding_token (pfile, source)
946 cpp_reader *pfile;
947 const cpp_token *source;
949 cpp_token *result = _cpp_temp_token (pfile);
951 result->type = CPP_PADDING;
952 result->val.source = source;
953 result->flags = 0;
954 return result;
957 /* Get a new uninitialized context. Create a new one if we cannot
958 re-use an old one. */
959 static cpp_context *
960 next_context (pfile)
961 cpp_reader *pfile;
963 cpp_context *result = pfile->context->next;
965 if (result == 0)
967 result = xnew (cpp_context);
968 result->prev = pfile->context;
969 result->next = 0;
970 pfile->context->next = result;
973 pfile->context = result;
974 return result;
977 /* Push a list of pointers to tokens. */
978 static void
979 push_ptoken_context (pfile, macro, buff, first, count)
980 cpp_reader *pfile;
981 cpp_hashnode *macro;
982 _cpp_buff *buff;
983 const cpp_token **first;
984 unsigned int count;
986 cpp_context *context = next_context (pfile);
988 context->direct_p = false;
989 context->macro = macro;
990 context->buff = buff;
991 FIRST (context).ptoken = first;
992 LAST (context).ptoken = first + count;
995 /* Push a list of tokens. */
996 static void
997 push_token_context (pfile, macro, first, count)
998 cpp_reader *pfile;
999 cpp_hashnode *macro;
1000 const cpp_token *first;
1001 unsigned int count;
1003 cpp_context *context = next_context (pfile);
1005 context->direct_p = true;
1006 context->macro = macro;
1007 context->buff = NULL;
1008 FIRST (context).token = first;
1009 LAST (context).token = first + count;
1012 /* Push a traditional macro's replacement text. */
1013 void
1014 _cpp_push_text_context (pfile, macro, start, len)
1015 cpp_reader *pfile;
1016 cpp_hashnode *macro;
1017 const uchar *start;
1018 size_t len;
1020 cpp_context *context = next_context (pfile);
1022 context->direct_p = true;
1023 context->macro = macro;
1024 context->buff = NULL;
1025 CUR (context) = start;
1026 RLIMIT (context) = start + len;
1027 macro->flags |= NODE_DISABLED;
1030 /* Expand an argument ARG before replacing parameters in a
1031 function-like macro. This works by pushing a context with the
1032 argument's tokens, and then expanding that into a temporary buffer
1033 as if it were a normal part of the token stream. collect_args()
1034 has terminated the argument's tokens with a CPP_EOF so that we know
1035 when we have fully expanded the argument. */
1036 static void
1037 expand_arg (pfile, arg)
1038 cpp_reader *pfile;
1039 macro_arg *arg;
1041 unsigned int capacity;
1042 bool saved_warn_trad;
1044 if (arg->count == 0)
1045 return;
1047 /* Don't warn about funlike macros when pre-expanding. */
1048 saved_warn_trad = CPP_WTRADITIONAL (pfile);
1049 CPP_WTRADITIONAL (pfile) = 0;
1051 /* Loop, reading in the arguments. */
1052 capacity = 256;
1053 arg->expanded = (const cpp_token **)
1054 xmalloc (capacity * sizeof (cpp_token *));
1056 push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1);
1057 for (;;)
1059 const cpp_token *token;
1061 if (arg->expanded_count + 1 >= capacity)
1063 capacity *= 2;
1064 arg->expanded = (const cpp_token **)
1065 xrealloc (arg->expanded, capacity * sizeof (cpp_token *));
1068 token = cpp_get_token (pfile);
1070 if (token->type == CPP_EOF)
1071 break;
1073 arg->expanded[arg->expanded_count++] = token;
1076 _cpp_pop_context (pfile);
1078 CPP_WTRADITIONAL (pfile) = saved_warn_trad;
1081 /* Pop the current context off the stack, re-enabling the macro if the
1082 context represented a macro's replacement list. The context
1083 structure is not freed so that we can re-use it later. */
1084 void
1085 _cpp_pop_context (pfile)
1086 cpp_reader *pfile;
1088 cpp_context *context = pfile->context;
1090 if (context->macro)
1091 context->macro->flags &= ~NODE_DISABLED;
1093 if (context->buff)
1094 _cpp_release_buff (pfile, context->buff);
1096 pfile->context = context->prev;
1099 /* Eternal routine to get a token. Also used nearly everywhere
1100 internally, except for places where we know we can safely call
1101 the lexer directly, such as lexing a directive name.
1103 Macro expansions and directives are transparently handled,
1104 including entering included files. Thus tokens are post-macro
1105 expansion, and after any intervening directives. External callers
1106 see CPP_EOF only at EOF. Internal callers also see it when meeting
1107 a directive inside a macro call, when at the end of a directive and
1108 state.in_directive is still 1, and at the end of argument
1109 pre-expansion. */
1110 const cpp_token *
1111 cpp_get_token (pfile)
1112 cpp_reader *pfile;
1114 const cpp_token *result;
1116 for (;;)
1118 cpp_hashnode *node;
1119 cpp_context *context = pfile->context;
1121 /* Context->prev == 0 <=> base context. */
1122 if (!context->prev)
1123 result = _cpp_lex_token (pfile);
1124 else if (FIRST (context).token != LAST (context).token)
1126 if (context->direct_p)
1127 result = FIRST (context).token++;
1128 else
1129 result = *FIRST (context).ptoken++;
1131 if (result->flags & PASTE_LEFT)
1133 paste_all_tokens (pfile, result);
1134 if (pfile->state.in_directive)
1135 continue;
1136 return padding_token (pfile, result);
1139 else
1141 _cpp_pop_context (pfile);
1142 if (pfile->state.in_directive)
1143 continue;
1144 return &pfile->avoid_paste;
1147 if (pfile->state.in_directive && result->type == CPP_COMMENT)
1148 continue;
1150 if (result->type != CPP_NAME)
1151 break;
1153 node = result->val.node;
1155 if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
1156 break;
1158 if (!(node->flags & NODE_DISABLED))
1160 if (!pfile->state.prevent_expansion
1161 && enter_macro_context (pfile, node))
1163 if (pfile->state.in_directive)
1164 continue;
1165 return padding_token (pfile, result);
1168 else
1170 /* Flag this token as always unexpandable. FIXME: move this
1171 to collect_args()?. */
1172 cpp_token *t = _cpp_temp_token (pfile);
1173 t->type = result->type;
1174 t->flags = result->flags | NO_EXPAND;
1175 t->val.str = result->val.str;
1176 result = t;
1179 break;
1182 return result;
1185 /* Returns true if we're expanding an object-like macro that was
1186 defined in a system header. Just checks the macro at the top of
1187 the stack. Used for diagnostic suppression. */
1189 cpp_sys_macro_p (pfile)
1190 cpp_reader *pfile;
1192 cpp_hashnode *node = pfile->context->macro;
1194 return node && node->value.macro && node->value.macro->syshdr;
1197 /* Read each token in, until end of the current file. Directives are
1198 transparently processed. */
1199 void
1200 cpp_scan_nooutput (pfile)
1201 cpp_reader *pfile;
1203 /* Request a CPP_EOF token at the end of this file, rather than
1204 transparently continuing with the including file. */
1205 pfile->buffer->return_at_eof = true;
1207 if (CPP_OPTION (pfile, traditional))
1208 while (_cpp_read_logical_line_trad (pfile))
1210 else
1211 while (cpp_get_token (pfile)->type != CPP_EOF)
1215 /* Step back one (or more) tokens. Can only step mack more than 1 if
1216 they are from the lexer, and not from macro expansion. */
1217 void
1218 _cpp_backup_tokens (pfile, count)
1219 cpp_reader *pfile;
1220 unsigned int count;
1222 if (pfile->context->prev == NULL)
1224 pfile->lookaheads += count;
1225 while (count--)
1227 pfile->cur_token--;
1228 if (pfile->cur_token == pfile->cur_run->base
1229 /* Possible with -fpreprocessed and no leading #line. */
1230 && pfile->cur_run->prev != NULL)
1232 pfile->cur_run = pfile->cur_run->prev;
1233 pfile->cur_token = pfile->cur_run->limit;
1237 else
1239 if (count != 1)
1240 abort ();
1241 if (pfile->context->direct_p)
1242 FIRST (pfile->context).token--;
1243 else
1244 FIRST (pfile->context).ptoken--;
1248 /* #define directive parsing and handling. */
1250 /* Returns nonzero if a macro redefinition warning is required. */
1251 static bool
1252 warn_of_redefinition (pfile, node, macro2)
1253 cpp_reader *pfile;
1254 const cpp_hashnode *node;
1255 const cpp_macro *macro2;
1257 const cpp_macro *macro1;
1258 unsigned int i;
1260 /* Some redefinitions need to be warned about regardless. */
1261 if (node->flags & NODE_WARN)
1262 return true;
1264 /* Redefinition of a macro is allowed if and only if the old and new
1265 definitions are the same. (6.10.3 paragraph 2). */
1266 macro1 = node->value.macro;
1268 /* Don't check count here as it can be different in valid
1269 traditional redefinitions with just whitespace differences. */
1270 if (macro1->paramc != macro2->paramc
1271 || macro1->fun_like != macro2->fun_like
1272 || macro1->variadic != macro2->variadic)
1273 return true;
1275 /* Check parameter spellings. */
1276 for (i = 0; i < macro1->paramc; i++)
1277 if (macro1->params[i] != macro2->params[i])
1278 return true;
1280 /* Check the replacement text or tokens. */
1281 if (CPP_OPTION (pfile, traditional))
1282 return _cpp_expansions_different_trad (macro1, macro2);
1284 if (macro1->count == macro2->count)
1285 for (i = 0; i < macro1->count; i++)
1286 if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
1287 return true;
1289 return false;
1292 /* Free the definition of hashnode H. */
1293 void
1294 _cpp_free_definition (h)
1295 cpp_hashnode *h;
1297 /* Macros and assertions no longer have anything to free. */
1298 h->type = NT_VOID;
1299 /* Clear builtin flag in case of redefinition. */
1300 h->flags &= ~(NODE_BUILTIN | NODE_DISABLED);
1303 /* Save parameter NODE to the parameter list of macro MACRO. Returns
1304 zero on success, nonzero if the parameter is a duplicate. */
1305 bool
1306 _cpp_save_parameter (pfile, macro, node)
1307 cpp_reader *pfile;
1308 cpp_macro *macro;
1309 cpp_hashnode *node;
1311 unsigned int len;
1312 /* Constraint 6.10.3.6 - duplicate parameter names. */
1313 if (node->flags & NODE_MACRO_ARG)
1315 cpp_error (pfile, DL_ERROR, "duplicate macro parameter \"%s\"",
1316 NODE_NAME (node));
1317 return true;
1320 if (BUFF_ROOM (pfile->a_buff)
1321 < (macro->paramc + 1) * sizeof (cpp_hashnode *))
1322 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
1324 ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
1325 node->flags |= NODE_MACRO_ARG;
1326 len = macro->paramc * sizeof (union _cpp_hashnode_value);
1327 if (len > pfile->macro_buffer_len)
1329 pfile->macro_buffer = (uchar *) xrealloc (pfile->macro_buffer, len);
1330 pfile->macro_buffer_len = len;
1332 ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
1333 = node->value;
1335 node->value.arg_index = macro->paramc;
1336 return false;
1339 /* Check the syntax of the parameters in a MACRO definition. Returns
1340 false if an error occurs. */
1341 static bool
1342 parse_params (pfile, macro)
1343 cpp_reader *pfile;
1344 cpp_macro *macro;
1346 unsigned int prev_ident = 0;
1348 for (;;)
1350 const cpp_token *token = _cpp_lex_token (pfile);
1352 switch (token->type)
1354 default:
1355 /* Allow/ignore comments in parameter lists if we are
1356 preserving comments in macro expansions. */
1357 if (token->type == CPP_COMMENT
1358 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
1359 continue;
1361 cpp_error (pfile, DL_ERROR,
1362 "\"%s\" may not appear in macro parameter list",
1363 cpp_token_as_text (pfile, token));
1364 return false;
1366 case CPP_NAME:
1367 if (prev_ident)
1369 cpp_error (pfile, DL_ERROR,
1370 "macro parameters must be comma-separated");
1371 return false;
1373 prev_ident = 1;
1375 if (_cpp_save_parameter (pfile, macro, token->val.node))
1376 return false;
1377 continue;
1379 case CPP_CLOSE_PAREN:
1380 if (prev_ident || macro->paramc == 0)
1381 return true;
1383 /* Fall through to pick up the error. */
1384 case CPP_COMMA:
1385 if (!prev_ident)
1387 cpp_error (pfile, DL_ERROR, "parameter name missing");
1388 return false;
1390 prev_ident = 0;
1391 continue;
1393 case CPP_ELLIPSIS:
1394 macro->variadic = 1;
1395 if (!prev_ident)
1397 _cpp_save_parameter (pfile, macro,
1398 pfile->spec_nodes.n__VA_ARGS__);
1399 pfile->state.va_args_ok = 1;
1400 if (! CPP_OPTION (pfile, c99) && CPP_OPTION (pfile, pedantic))
1401 cpp_error (pfile, DL_PEDWARN,
1402 "anonymous variadic macros were introduced in C99");
1404 else if (CPP_OPTION (pfile, pedantic))
1405 cpp_error (pfile, DL_PEDWARN,
1406 "ISO C does not permit named variadic macros");
1408 /* We're at the end, and just expect a closing parenthesis. */
1409 token = _cpp_lex_token (pfile);
1410 if (token->type == CPP_CLOSE_PAREN)
1411 return true;
1412 /* Fall through. */
1414 case CPP_EOF:
1415 cpp_error (pfile, DL_ERROR, "missing ')' in macro parameter list");
1416 return false;
1421 /* Allocate room for a token from a macro's replacement list. */
1422 static cpp_token *
1423 alloc_expansion_token (pfile, macro)
1424 cpp_reader *pfile;
1425 cpp_macro *macro;
1427 if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
1428 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
1430 return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
1433 /* Lex a token from the expansion of MACRO, but mark parameters as we
1434 find them and warn of traditional stringification. */
1435 static cpp_token *
1436 lex_expansion_token (pfile, macro)
1437 cpp_reader *pfile;
1438 cpp_macro *macro;
1440 cpp_token *token;
1442 pfile->cur_token = alloc_expansion_token (pfile, macro);
1443 token = _cpp_lex_direct (pfile);
1445 /* Is this a parameter? */
1446 if (token->type == CPP_NAME
1447 && (token->val.node->flags & NODE_MACRO_ARG) != 0)
1449 token->type = CPP_MACRO_ARG;
1450 token->val.arg_no = token->val.node->value.arg_index;
1452 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1453 && (token->type == CPP_STRING || token->type == CPP_CHAR))
1454 check_trad_stringification (pfile, macro, &token->val.str);
1456 return token;
1459 static bool
1460 create_iso_definition (pfile, macro)
1461 cpp_reader *pfile;
1462 cpp_macro *macro;
1464 cpp_token *token;
1465 const cpp_token *ctoken;
1467 /* Get the first token of the expansion (or the '(' of a
1468 function-like macro). */
1469 ctoken = _cpp_lex_token (pfile);
1471 if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
1473 bool ok = parse_params (pfile, macro);
1474 macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
1475 if (!ok)
1476 return false;
1478 /* Success. Commit the parameter array. */
1479 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
1480 macro->fun_like = 1;
1482 else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
1483 cpp_error (pfile, DL_PEDWARN,
1484 "ISO C requires whitespace after the macro name");
1486 if (macro->fun_like)
1487 token = lex_expansion_token (pfile, macro);
1488 else
1490 token = alloc_expansion_token (pfile, macro);
1491 *token = *ctoken;
1494 for (;;)
1496 /* Check the stringifying # constraint 6.10.3.2.1 of
1497 function-like macros when lexing the subsequent token. */
1498 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1500 if (token->type == CPP_MACRO_ARG)
1502 token->flags &= ~PREV_WHITE;
1503 token->flags |= STRINGIFY_ARG;
1504 token->flags |= token[-1].flags & PREV_WHITE;
1505 token[-1] = token[0];
1506 macro->count--;
1508 /* Let assembler get away with murder. */
1509 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
1511 cpp_error (pfile, DL_ERROR,
1512 "'#' is not followed by a macro parameter");
1513 return false;
1517 if (token->type == CPP_EOF)
1518 break;
1520 /* Paste operator constraint 6.10.3.3.1. */
1521 if (token->type == CPP_PASTE)
1523 /* Token-paste ##, can appear in both object-like and
1524 function-like macros, but not at the ends. */
1525 if (--macro->count > 0)
1526 token = lex_expansion_token (pfile, macro);
1528 if (macro->count == 0 || token->type == CPP_EOF)
1530 cpp_error (pfile, DL_ERROR,
1531 "'##' cannot appear at either end of a macro expansion");
1532 return false;
1535 token[-1].flags |= PASTE_LEFT;
1538 token = lex_expansion_token (pfile, macro);
1541 macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
1543 /* Don't count the CPP_EOF. */
1544 macro->count--;
1546 /* Clear whitespace on first token for warn_of_redefinition(). */
1547 if (macro->count)
1548 macro->exp.tokens[0].flags &= ~PREV_WHITE;
1550 /* Commit the memory. */
1551 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
1553 return true;
1556 /* Parse a macro and save its expansion. Returns nonzero on success. */
1557 bool
1558 _cpp_create_definition (pfile, node)
1559 cpp_reader *pfile;
1560 cpp_hashnode *node;
1562 cpp_macro *macro;
1563 unsigned int i;
1564 bool ok;
1566 macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
1567 macro->line = pfile->directive_line;
1568 macro->params = 0;
1569 macro->paramc = 0;
1570 macro->variadic = 0;
1571 macro->used = 0;
1572 macro->count = 0;
1573 macro->fun_like = 0;
1574 /* To suppress some diagnostics. */
1575 macro->syshdr = pfile->map->sysp != 0;
1577 if (CPP_OPTION (pfile, traditional))
1578 ok = _cpp_create_trad_definition (pfile, macro);
1579 else
1581 cpp_token *saved_cur_token = pfile->cur_token;
1583 ok = create_iso_definition (pfile, macro);
1585 /* Restore lexer position because of games lex_expansion_token()
1586 plays lexing the macro. We set the type for SEEN_EOL() in
1587 cpplib.c.
1589 Longer term we should lex the whole line before coming here,
1590 and just copy the expansion. */
1591 saved_cur_token[-1].type = pfile->cur_token[-1].type;
1592 pfile->cur_token = saved_cur_token;
1594 /* Stop the lexer accepting __VA_ARGS__. */
1595 pfile->state.va_args_ok = 0;
1598 /* Clear the fast argument lookup indices. */
1599 for (i = macro->paramc; i-- > 0; )
1601 struct cpp_hashnode *node = macro->params[i];
1602 node->flags &= ~ NODE_MACRO_ARG;
1603 node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
1606 if (!ok)
1607 return ok;
1609 if (node->type == NT_MACRO)
1611 if (CPP_OPTION (pfile, warn_unused_macros))
1612 _cpp_warn_if_unused_macro (pfile, node, NULL);
1614 if (warn_of_redefinition (pfile, node, macro))
1616 cpp_error_with_line (pfile, DL_PEDWARN, pfile->directive_line, 0,
1617 "\"%s\" redefined", NODE_NAME (node));
1619 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
1620 cpp_error_with_line (pfile, DL_PEDWARN,
1621 node->value.macro->line, 0,
1622 "this is the location of the previous definition");
1626 if (node->type != NT_VOID)
1627 _cpp_free_definition (node);
1629 /* Enter definition in hash table. */
1630 node->type = NT_MACRO;
1631 node->value.macro = macro;
1632 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_")))
1633 node->flags |= NODE_WARN;
1635 return ok;
1638 /* Warn if a token in STRING matches one of a function-like MACRO's
1639 parameters. */
1640 static void
1641 check_trad_stringification (pfile, macro, string)
1642 cpp_reader *pfile;
1643 const cpp_macro *macro;
1644 const cpp_string *string;
1646 unsigned int i, len;
1647 const uchar *p, *q, *limit = string->text + string->len;
1649 /* Loop over the string. */
1650 for (p = string->text; p < limit; p = q)
1652 /* Find the start of an identifier. */
1653 while (p < limit && !is_idstart (*p))
1654 p++;
1656 /* Find the end of the identifier. */
1657 q = p;
1658 while (q < limit && is_idchar (*q))
1659 q++;
1661 len = q - p;
1663 /* Loop over the function macro arguments to see if the
1664 identifier inside the string matches one of them. */
1665 for (i = 0; i < macro->paramc; i++)
1667 const cpp_hashnode *node = macro->params[i];
1669 if (NODE_LEN (node) == len
1670 && !memcmp (p, NODE_NAME (node), len))
1672 cpp_error (pfile, DL_WARNING,
1673 "macro argument \"%s\" would be stringified in traditional C",
1674 NODE_NAME (node));
1675 break;
1681 /* Returns the name, arguments and expansion of a macro, in a format
1682 suitable to be read back in again, and therefore also for DWARF 2
1683 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1684 Caller is expected to generate the "#define" bit if needed. The
1685 returned text is temporary, and automatically freed later. */
1686 const unsigned char *
1687 cpp_macro_definition (pfile, node)
1688 cpp_reader *pfile;
1689 const cpp_hashnode *node;
1691 unsigned int i, len;
1692 const cpp_macro *macro = node->value.macro;
1693 unsigned char *buffer;
1695 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1697 cpp_error (pfile, DL_ICE,
1698 "invalid hash type %d in cpp_macro_definition", node->type);
1699 return 0;
1702 /* Calculate length. */
1703 len = NODE_LEN (node) + 2; /* ' ' and NUL. */
1704 if (macro->fun_like)
1706 len += 4; /* "()" plus possible final ".." of named
1707 varargs (we have + 1 below). */
1708 for (i = 0; i < macro->paramc; i++)
1709 len += NODE_LEN (macro->params[i]) + 1; /* "," */
1712 if (CPP_OPTION (pfile, traditional))
1713 len += _cpp_replacement_text_len (macro);
1714 else
1716 for (i = 0; i < macro->count; i++)
1718 cpp_token *token = &macro->exp.tokens[i];
1720 if (token->type == CPP_MACRO_ARG)
1721 len += NODE_LEN (macro->params[token->val.arg_no - 1]);
1722 else
1723 len += cpp_token_len (token); /* Includes room for ' '. */
1724 if (token->flags & STRINGIFY_ARG)
1725 len++; /* "#" */
1726 if (token->flags & PASTE_LEFT)
1727 len += 3; /* " ##" */
1731 if (len > pfile->macro_buffer_len)
1733 pfile->macro_buffer = (uchar *) xrealloc (pfile->macro_buffer, len);
1734 pfile->macro_buffer_len = len;
1737 /* Fill in the buffer. Start with the macro name. */
1738 buffer = pfile->macro_buffer;
1739 memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
1740 buffer += NODE_LEN (node);
1742 /* Parameter names. */
1743 if (macro->fun_like)
1745 *buffer++ = '(';
1746 for (i = 0; i < macro->paramc; i++)
1748 cpp_hashnode *param = macro->params[i];
1750 if (param != pfile->spec_nodes.n__VA_ARGS__)
1752 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
1753 buffer += NODE_LEN (param);
1756 if (i + 1 < macro->paramc)
1757 /* Don't emit a space after the comma here; we're trying
1758 to emit a Dwarf-friendly definition, and the Dwarf spec
1759 forbids spaces in the argument list. */
1760 *buffer++ = ',';
1761 else if (macro->variadic)
1762 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
1764 *buffer++ = ')';
1767 /* The Dwarf spec requires a space after the macro name, even if the
1768 definition is the empty string. */
1769 *buffer++ = ' ';
1771 if (CPP_OPTION (pfile, traditional))
1772 buffer = _cpp_copy_replacement_text (macro, buffer);
1773 else if (macro->count)
1774 /* Expansion tokens. */
1776 for (i = 0; i < macro->count; i++)
1778 cpp_token *token = &macro->exp.tokens[i];
1780 if (token->flags & PREV_WHITE)
1781 *buffer++ = ' ';
1782 if (token->flags & STRINGIFY_ARG)
1783 *buffer++ = '#';
1785 if (token->type == CPP_MACRO_ARG)
1787 len = NODE_LEN (macro->params[token->val.arg_no - 1]);
1788 memcpy (buffer,
1789 NODE_NAME (macro->params[token->val.arg_no - 1]), len);
1790 buffer += len;
1792 else
1793 buffer = cpp_spell_token (pfile, token, buffer);
1795 if (token->flags & PASTE_LEFT)
1797 *buffer++ = ' ';
1798 *buffer++ = '#';
1799 *buffer++ = '#';
1800 /* Next has PREV_WHITE; see _cpp_create_definition. */
1805 *buffer = '\0';
1806 return pfile->macro_buffer;