]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/macro.c
2005-02-13 James A. Morrison <phython@gcc.gnu.org>
[thirdparty/gcc.git] / libcpp / macro.c
CommitLineData
79bd622b 1/* Part of CPP library. (Macro and #define handling.)
69461e0d 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
a8349c62 3 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
69461e0d 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
7
8This program is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 2, or (at your option) any
11later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
20Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
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! */
25
26#include "config.h"
27#include "system.h"
28#include "cpplib.h"
d856c8a6 29#include "internal.h"
69461e0d 30
79bd622b 31typedef struct macro_arg macro_arg;
32struct macro_arg
33{
f9b5f742 34 const cpp_token **first; /* First token in unexpanded argument. */
1e625a2e 35 const cpp_token **expanded; /* Macro-expanded argument. */
f9b5f742 36 const cpp_token *stringified; /* Stringified argument. */
79bd622b 37 unsigned int count; /* # of tokens in argument. */
38 unsigned int expanded_count; /* # of tokens in expanded argument. */
69461e0d 39};
40
79bd622b 41/* Macro expansion. */
42
f7fdd7a1 43static int enter_macro_context (cpp_reader *, cpp_hashnode *);
44static int builtin_macro (cpp_reader *, cpp_hashnode *);
45static void push_token_context (cpp_reader *, cpp_hashnode *,
46 const cpp_token *, unsigned int);
47static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
48 const cpp_token **, unsigned int);
49static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *);
50static cpp_context *next_context (cpp_reader *);
51static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
52static void expand_arg (cpp_reader *, macro_arg *);
53static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
54static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
55static void paste_all_tokens (cpp_reader *, const cpp_token *);
56static bool paste_tokens (cpp_reader *, const cpp_token **, const cpp_token *);
57static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
58 macro_arg *);
59static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *);
60static bool create_iso_definition (cpp_reader *, cpp_macro *);
79bd622b 61
79bd622b 62/* #define directive parsing and handling. */
63
f7fdd7a1 64static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
65static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
66static bool warn_of_redefinition (cpp_reader *, const cpp_hashnode *,
67 const cpp_macro *);
68static bool parse_params (cpp_reader *, cpp_macro *);
69static void check_trad_stringification (cpp_reader *, const cpp_macro *,
70 const cpp_string *);
69461e0d 71
71a7c282 72/* Emits a warning if NODE is a macro defined in the main file that
73 has not been used. */
74int
f7fdd7a1 75_cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
76 void *v ATTRIBUTE_UNUSED)
71a7c282 77{
78 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
79 {
80 cpp_macro *macro = node->value.macro;
81
82 if (!macro->used
ceec9c13 83 && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
d80d2074 84 cpp_error_with_line (pfile, CPP_DL_WARNING, macro->line, 0,
71a7c282 85 "macro \"%s\" is not used", NODE_NAME (node));
86 }
87
88 return 1;
89}
90
f9b5f742 91/* Allocates and returns a CPP_STRING token, containing TEXT of length
92 LEN, after null-terminating it. TEXT must be in permanent storage. */
93static const cpp_token *
f7fdd7a1 94new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
79bd622b 95{
f9b5f742 96 cpp_token *token = _cpp_temp_token (pfile);
79bd622b 97
f9b5f742 98 text[len] = '\0';
79bd622b 99 token->type = CPP_STRING;
f9b5f742 100 token->val.str.len = len;
101 token->val.str.text = text;
79bd622b 102 token->flags = 0;
f9b5f742 103 return token;
79bd622b 104}
105
79bd622b 106static const char * const monthnames[] =
107{
108 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
109 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
110};
111
d6d3c909 112/* Helper function for builtin_macro. Returns the text generated by
113 a builtin macro. */
9c343313 114const uchar *
f7fdd7a1 115_cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
79bd622b 116{
610625e3 117 const struct line_map *map;
9c343313 118 const uchar *result = NULL;
119 unsigned int number = 1;
c7e5d924 120
79bd622b 121 switch (node->value.builtin)
122 {
f9b5f742 123 default:
d80d2074 124 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
73328dce 125 NODE_NAME (node));
9c343313 126 break;
f9b5f742 127
79bd622b 128 case BT_FILE:
129 case BT_BASE_FILE:
69461e0d 130 {
f9b5f742 131 unsigned int len;
6cee4464 132 const char *name;
b6d18b0a 133 uchar *buf;
dbddc569 134 map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line);
6cee4464 135
136 if (node->value.builtin == BT_BASE_FILE)
5a9f87bb 137 while (! MAIN_FILE_P (map))
ceec9c13 138 map = INCLUDED_FROM (pfile->line_table, map);
6cee4464 139
5a9f87bb 140 name = map->to_file;
f9b5f742 141 len = strlen (name);
9c343313 142 buf = _cpp_unaligned_alloc (pfile, len * 4 + 3);
143 result = buf;
144 *buf = '"';
145 buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
146 *buf++ = '"';
147 *buf = '\0';
69461e0d 148 }
c7e5d924 149 break;
150
79bd622b 151 case BT_INCLUDE_LEVEL:
4087823d 152 /* The line map depth counts the primary source as level 1, but
153 historically __INCLUDE_DEPTH__ has called the primary source
154 level 0. */
ceec9c13 155 number = pfile->line_table->depth - 1;
c7e5d924 156 break;
79bd622b 157
158 case BT_SPECLINE:
dbddc569 159 map = &pfile->line_table->maps[pfile->line_table->used-1];
79bd622b 160 /* If __LINE__ is embedded in a macro, it must expand to the
161 line of the macro's invocation, not its definition.
162 Otherwise things like assert() will not work properly. */
9c343313 163 if (CPP_OPTION (pfile, traditional))
dbddc569 164 number = pfile->line_table->highest_line;
9c343313 165 else
610625e3 166 number = pfile->cur_token[-1].src_loc;
167 number = SOURCE_LINE (map, number);
c7e5d924 168 break;
79bd622b 169
63994318 170 /* __STDC__ has the value 1 under normal circumstances.
171 However, if (a) we are in a system header, (b) the option
965e9876 172 stdc_0_in_system_headers is true (set by target config), and
173 (c) we are not in strictly conforming mode, then it has the
174 value 0. */
79bd622b 175 case BT_STDC:
176 {
610625e3 177 if (cpp_in_system_header (pfile)
63994318 178 && CPP_OPTION (pfile, stdc_0_in_system_headers)
ed909a09 179 && !CPP_OPTION (pfile,std))
9c343313 180 number = 0;
63994318 181 else
9c343313 182 number = 1;
79bd622b 183 }
c7e5d924 184 break;
69461e0d 185
79bd622b 186 case BT_DATE:
187 case BT_TIME:
9c343313 188 if (pfile->date == NULL)
79bd622b 189 {
f9b5f742 190 /* Allocate __DATE__ and __TIME__ strings from permanent
191 storage. We only do this once, and don't generate them
192 at init time, because time() and localtime() are very
193 slow on some systems. */
3385506f 194 time_t tt;
195 struct tm *tb = NULL;
196
197 /* (time_t) -1 is a legitimate value for "number of seconds
198 since the Epoch", so we have to do a little dance to
199 distinguish that from a genuine error. */
200 errno = 0;
201 tt = time(NULL);
202 if (tt != (time_t)-1 || errno == 0)
203 tb = localtime (&tt);
204
205 if (tb)
206 {
207 pfile->date = _cpp_unaligned_alloc (pfile,
208 sizeof ("\"Oct 11 1347\""));
209 sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
f7fdd7a1 210 monthnames[tb->tm_mon], tb->tm_mday,
211 tb->tm_year + 1900);
3385506f 212
213 pfile->time = _cpp_unaligned_alloc (pfile,
214 sizeof ("\"12:34:56\""));
215 sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
216 tb->tm_hour, tb->tm_min, tb->tm_sec);
217 }
218 else
219 {
d80d2074 220 cpp_errno (pfile, CPP_DL_WARNING,
3385506f 221 "could not determine date and time");
222
223 pfile->date = U"\"??? ?? ????\"";
224 pfile->time = U"\"??:??:??\"";
225 }
79bd622b 226 }
79bd622b 227
c7e5d924 228 if (node->value.builtin == BT_DATE)
9c343313 229 result = pfile->date;
c7e5d924 230 else
9c343313 231 result = pfile->time;
c7e5d924 232 break;
9c343313 233 }
234
235 if (result == NULL)
236 {
237 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
238 result = _cpp_unaligned_alloc (pfile, 21);
239 sprintf ((char *) result, "%u", number);
240 }
241
242 return result;
243}
244
245/* Convert builtin macros like __FILE__ to a token and push it on the
d6d3c909 246 context stack. Also handles _Pragma, for which a new token may not
247 be created. Returns 1 if it generates a new token context, 0 to
9c343313 248 return the token to the caller. */
249static int
f7fdd7a1 250builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
9c343313 251{
252 const uchar *buf;
a54e0bf8 253 size_t len;
254 char *nbuf;
c7e5d924 255
9c343313 256 if (node->value.builtin == BT_PRAGMA)
257 {
c7e5d924 258 /* Don't interpret _Pragma within directives. The standard is
259 not clear on this, but to me this makes most sense. */
260 if (pfile->state.in_directive)
261 return 0;
262
263 _cpp_do__Pragma (pfile);
d6d3c909 264 if (pfile->directive_result.type == CPP_PRAGMA)
265 {
266 cpp_token *tok = _cpp_temp_token (pfile);
267 *tok = pfile->directive_result;
268 push_token_context (pfile, NULL, tok, 1);
269 }
270
c7e5d924 271 return 1;
79bd622b 272 }
c7e5d924 273
9c343313 274 buf = _cpp_builtin_macro_text (pfile, node);
a54e0bf8 275 len = ustrlen (buf);
276 nbuf = alloca (len + 1);
277 memcpy (nbuf, buf, len);
278 nbuf[len]='\n';
9c343313 279
9eb74666 280 cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
a54e0bf8 281 _cpp_clean_line (pfile);
9c343313 282
283 /* Set pfile->cur_token as required by _cpp_lex_direct. */
284 pfile->cur_token = _cpp_temp_token (pfile);
285 push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
286 if (pfile->buffer->cur != pfile->buffer->rlimit)
d80d2074 287 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
9c343313 288 NODE_NAME (node));
289 _cpp_pop_buffer (pfile);
290
c7e5d924 291 return 1;
69461e0d 292}
293
88cf66fa 294/* Copies SRC, of length LEN, to DEST, adding backslashes before all
295 backslashes and double quotes. Non-printable characters are
25266990 296 converted to octal. DEST must be of sufficient size. Returns
297 a pointer to the end of the string. */
b6d18b0a 298uchar *
f7fdd7a1 299cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
79bd622b 300{
301 while (len--)
302 {
b6d18b0a 303 uchar c = *src++;
69461e0d 304
79bd622b 305 if (c == '\\' || c == '"')
306 {
307 *dest++ = '\\';
308 *dest++ = c;
309 }
310 else
311 {
312 if (ISPRINT (c))
313 *dest++ = c;
314 else
69461e0d 315 {
79bd622b 316 sprintf ((char *) dest, "\\%03o", c);
317 dest += 4;
69461e0d 318 }
79bd622b 319 }
320 }
69461e0d 321
79bd622b 322 return dest;
323}
69461e0d 324
88cf66fa 325/* Convert a token sequence ARG to a single string token according to
326 the rules of the ISO C #-operator. */
f9b5f742 327static const cpp_token *
f7fdd7a1 328stringify_arg (cpp_reader *pfile, macro_arg *arg)
79bd622b 329{
4970d4c2 330 unsigned char *dest;
1fdf6039 331 unsigned int i, escape_it, backslash_count = 0;
f9b5f742 332 const cpp_token *source = NULL;
1fdf6039 333 size_t len;
69461e0d 334
4970d4c2 335 if (BUFF_ROOM (pfile->u_buff) < 3)
336 _cpp_extend_buff (pfile, &pfile->u_buff, 3);
337 dest = BUFF_FRONT (pfile->u_buff);
338 *dest++ = '"';
339
79bd622b 340 /* Loop, reading in the argument's tokens. */
341 for (i = 0; i < arg->count; i++)
342 {
f9b5f742 343 const cpp_token *token = arg->first[i];
f9b5f742 344
345 if (token->type == CPP_PADDING)
346 {
347 if (source == NULL)
348 source = token->val.source;
349 continue;
350 }
69461e0d 351
79bd622b 352 escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING
9ee99ac6 353 || token->type == CPP_CHAR || token->type == CPP_WCHAR);
69461e0d 354
1fdf6039 355 /* Room for each char being written in octal, initial space and
4970d4c2 356 final quote and NUL. */
f9b5f742 357 len = cpp_token_len (token);
79bd622b 358 if (escape_it)
79bd622b 359 len *= 4;
4970d4c2 360 len += 3;
69461e0d 361
1fdf6039 362 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
79bd622b 363 {
1fdf6039 364 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
e6a5f963 365 _cpp_extend_buff (pfile, &pfile->u_buff, len);
1fdf6039 366 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
79bd622b 367 }
69461e0d 368
f9b5f742 369 /* Leading white space? */
4970d4c2 370 if (dest - 1 != BUFF_FRONT (pfile->u_buff))
f9b5f742 371 {
372 if (source == NULL)
373 source = token;
374 if (source->flags & PREV_WHITE)
375 *dest++ = ' ';
376 }
377 source = NULL;
69461e0d 378
79bd622b 379 if (escape_it)
380 {
1fdf6039 381 _cpp_buff *buff = _cpp_get_buff (pfile, len);
382 unsigned char *buf = BUFF_FRONT (buff);
79bd622b 383 len = cpp_spell_token (pfile, token, buf) - buf;
25266990 384 dest = cpp_quote_string (dest, buf, len);
1fdf6039 385 _cpp_release_buff (pfile, buff);
79bd622b 386 }
387 else
388 dest = cpp_spell_token (pfile, token, dest);
79bd622b 389
bc205914 390 if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
79bd622b 391 backslash_count++;
392 else
393 backslash_count = 0;
394 }
395
396 /* Ignore the final \ of invalid string literals. */
397 if (backslash_count & 1)
398 {
d80d2074 399 cpp_error (pfile, CPP_DL_WARNING,
73328dce 400 "invalid string literal, ignoring final '\\'");
1fdf6039 401 dest--;
79bd622b 402 }
403
f9b5f742 404 /* Commit the memory, including NUL, and return the token. */
4970d4c2 405 *dest++ = '"';
1fdf6039 406 len = dest - BUFF_FRONT (pfile->u_buff);
407 BUFF_FRONT (pfile->u_buff) = dest + 1;
408 return new_string_token (pfile, dest - len, len);
79bd622b 409}
410
d10cfa8d 411/* Try to paste two tokens. On success, return nonzero. In any
1785b647 412 case, PLHS is updated to point to the pasted token, which is
413 guaranteed to not have the PASTE_LEFT flag set. */
414static bool
f7fdd7a1 415paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
08138c65 416{
1785b647 417 unsigned char *buf, *end;
418 const cpp_token *lhs;
419 unsigned int len;
420 bool valid;
421
422 lhs = *plhs;
423 len = cpp_token_len (lhs) + cpp_token_len (rhs) + 1;
f0af5a88 424 buf = alloca (len);
1785b647 425 end = cpp_spell_token (pfile, lhs, buf);
426
427 /* Avoid comment headers, since they are still processed in stage 3.
428 It is simpler to insert a space here, rather than modifying the
429 lexer to ignore comments in some circumstances. Simply returning
430 false doesn't work, since we want to clear the PASTE_LEFT flag. */
bc5dbce5 431 if (lhs->type == CPP_DIV && rhs->type != CPP_EQ)
1785b647 432 *end++ = ' ';
433 end = cpp_spell_token (pfile, rhs, end);
a54e0bf8 434 *end = '\n';
1785b647 435
9eb74666 436 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
a54e0bf8 437 _cpp_clean_line (pfile);
1785b647 438
439 /* Set pfile->cur_token as required by _cpp_lex_direct. */
440 pfile->cur_token = _cpp_temp_token (pfile);
441 *plhs = _cpp_lex_direct (pfile);
1c124f85 442 valid = pfile->buffer->cur == pfile->buffer->rlimit;
1785b647 443 _cpp_pop_buffer (pfile);
444
445 return valid;
08138c65 446}
447
88cf66fa 448/* Handles an arbitrarily long sequence of ## operators, with initial
449 operand LHS. This implementation is left-associative,
450 non-recursive, and finishes a paste before handling succeeding
451 ones. If a paste fails, we back up to the RHS of the failing ##
452 operator before pushing the context containing the result of prior
453 successful pastes, with the effect that the RHS appears in the
454 output stream after the pasted LHS normally. */
79bd622b 455static void
f7fdd7a1 456paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
79bd622b 457{
f9b5f742 458 const cpp_token *rhs;
459 cpp_context *context = pfile->context;
460
79bd622b 461 do
462 {
463 /* Take the token directly from the current context. We can do
464 this, because we are in the replacement list of either an
465 object-like macro, or a function-like macro with arguments
466 inserted. In either case, the constraints to #define
08138c65 467 guarantee we have at least one more token. */
f9b5f742 468 if (context->direct_p)
a854276a 469 rhs = FIRST (context).token++;
f9b5f742 470 else
a854276a 471 rhs = *FIRST (context).ptoken++;
f9b5f742 472
473 if (rhs->type == CPP_PADDING)
474 abort ();
475
1785b647 476 if (!paste_tokens (pfile, &lhs, rhs))
79bd622b 477 {
f9b5f742 478 _cpp_backup_tokens (pfile, 1);
1785b647 479
8e1db61c 480 /* Mandatory error for all apart from assembler. */
1785b647 481 if (CPP_OPTION (pfile, lang) != CLK_ASM)
d80d2074 482 cpp_error (pfile, CPP_DL_ERROR,
1785b647 483 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
73328dce 484 cpp_token_as_text (pfile, lhs),
485 cpp_token_as_text (pfile, rhs));
3c7df4d3 486 break;
79bd622b 487 }
79bd622b 488 }
489 while (rhs->flags & PASTE_LEFT);
490
1785b647 491 /* Put the resulting token in its own context. */
492 push_token_context (pfile, NULL, lhs, 1);
79bd622b 493}
494
06025647 495/* Returns TRUE if the number of arguments ARGC supplied in an
496 invocation of the MACRO referenced by NODE is valid. An empty
497 invocation to a macro with no parameters should pass ARGC as zero.
498
499 Note that MACRO cannot necessarily be deduced from NODE, in case
500 NODE was redefined whilst collecting arguments. */
501bool
f7fdd7a1 502_cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
06025647 503{
504 if (argc == macro->paramc)
505 return true;
506
507 if (argc < macro->paramc)
508 {
509 /* As an extension, a rest argument is allowed to not appear in
510 the invocation at all.
511 e.g. #define debug(format, args...) something
512 debug("string");
513
514 This is exactly the same as if there had been an empty rest
515 argument - debug("string", ). */
516
517 if (argc + 1 == macro->paramc && macro->variadic)
518 {
519 if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
d80d2074 520 cpp_error (pfile, CPP_DL_PEDWARN,
06025647 521 "ISO C99 requires rest arguments to be used");
522 return true;
523 }
524
d80d2074 525 cpp_error (pfile, CPP_DL_ERROR,
06025647 526 "macro \"%s\" requires %u arguments, but only %u given",
527 NODE_NAME (node), macro->paramc, argc);
528 }
529 else
d80d2074 530 cpp_error (pfile, CPP_DL_ERROR,
06025647 531 "macro \"%s\" passed %u arguments, but takes just %u",
532 NODE_NAME (node), argc, macro->paramc);
533
534 return false;
535}
536
88cf66fa 537/* Reads and returns the arguments to a function-like macro
538 invocation. Assumes the opening parenthesis has been processed.
539 If there is an error, emits an appropriate diagnostic and returns
540 NULL. Each argument is terminated by a CPP_EOF token, for the
541 future benefit of expand_arg(). */
06c92cbc 542static _cpp_buff *
f7fdd7a1 543collect_args (cpp_reader *pfile, const cpp_hashnode *node)
79bd622b 544{
06c92cbc 545 _cpp_buff *buff, *base_buff;
546 cpp_macro *macro;
547 macro_arg *args, *arg;
548 const cpp_token *token;
549 unsigned int argc;
06c92cbc 550
551 macro = node->value.macro;
552 if (macro->paramc)
553 argc = macro->paramc;
554 else
555 argc = 1;
556 buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
557 + sizeof (macro_arg)));
558 base_buff = buff;
559 args = (macro_arg *) buff->base;
560 memset (args, 0, argc * sizeof (macro_arg));
1fdf6039 561 buff->cur = (unsigned char *) &args[argc];
06c92cbc 562 arg = args, argc = 0;
563
564 /* Collect the tokens making up each argument. We don't yet know
565 how many arguments have been supplied, whether too many or too
566 few. Hence the slightly bizarre usage of "argc" and "arg". */
567 do
79bd622b 568 {
06c92cbc 569 unsigned int paren_depth = 0;
570 unsigned int ntokens = 0;
79bd622b 571
06c92cbc 572 argc++;
573 arg->first = (const cpp_token **) buff->cur;
69461e0d 574
06c92cbc 575 for (;;)
576 {
577 /* Require space for 2 new tokens (including a CPP_EOF). */
1fdf6039 578 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
06c92cbc 579 {
e6a5f963 580 buff = _cpp_append_extend_buff (pfile, buff,
581 1000 * sizeof (cpp_token *));
06c92cbc 582 arg->first = (const cpp_token **) buff->cur;
583 }
f9b5f742 584
06c92cbc 585 token = cpp_get_token (pfile);
69461e0d 586
06c92cbc 587 if (token->type == CPP_PADDING)
588 {
589 /* Drop leading padding. */
590 if (ntokens == 0)
591 continue;
592 }
593 else if (token->type == CPP_OPEN_PAREN)
594 paren_depth++;
595 else if (token->type == CPP_CLOSE_PAREN)
596 {
597 if (paren_depth-- == 0)
598 break;
599 }
600 else if (token->type == CPP_COMMA)
601 {
602 /* A comma does not terminate an argument within
603 parentheses or as part of a variable argument. */
604 if (paren_depth == 0
605 && ! (macro->variadic && argc == macro->paramc))
606 break;
607 }
608 else if (token->type == CPP_EOF
609 || (token->type == CPP_HASH && token->flags & BOL))
610 break;
79bd622b 611
06c92cbc 612 arg->first[ntokens++] = token;
613 }
79bd622b 614
06c92cbc 615 /* Drop trailing padding. */
616 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
617 ntokens--;
79bd622b 618
06c92cbc 619 arg->count = ntokens;
620 arg->first[ntokens] = &pfile->eof;
79bd622b 621
06c92cbc 622 /* Terminate the argument. Excess arguments loop back and
623 overwrite the final legitimate argument, before failing. */
624 if (argc <= macro->paramc)
625 {
1fdf6039 626 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
06c92cbc 627 if (argc != macro->paramc)
628 arg++;
629 }
79bd622b 630 }
d6af0368 631 while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
79bd622b 632
d6af0368 633 if (token->type == CPP_EOF)
79bd622b 634 {
1fdf6039 635 /* We still need the CPP_EOF to end directives, and to end
636 pre-expansion of a macro argument. Step back is not
637 unconditional, since we don't want to return a CPP_EOF to our
638 callers at the end of an -include-d file. */
d6af0368 639 if (pfile->context->prev || pfile->state.in_directive)
06c92cbc 640 _cpp_backup_tokens (pfile, 1);
d80d2074 641 cpp_error (pfile, CPP_DL_ERROR,
73328dce 642 "unterminated argument list invoking macro \"%s\"",
c86dbc5b 643 NODE_NAME (node));
79bd622b 644 }
06025647 645 else
79bd622b 646 {
06025647 647 /* A single empty argument is counted as no argument. */
648 if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
649 argc = 0;
650 if (_cpp_arguments_ok (pfile, macro, node, argc))
ed909a09 651 {
652 /* GCC has special semantics for , ## b where b is a varargs
653 parameter: we remove the comma if b was omitted entirely.
654 If b was merely an empty argument, the comma is retained.
655 If the macro takes just one (varargs) parameter, then we
656 retain the comma only if we are standards conforming.
657
658 If FIRST is NULL replace_args () swallows the comma. */
659 if (macro->variadic && (argc < macro->paramc
660 || (argc == 1 && args[0].count == 0
661 && !CPP_OPTION (pfile, std))))
662 args[macro->paramc - 1].first = NULL;
663 return base_buff;
664 }
79bd622b 665 }
666
06025647 667 /* An error occurred. */
06c92cbc 668 _cpp_release_buff (pfile, base_buff);
669 return NULL;
79bd622b 670}
671
2b0e25fe 672/* Search for an opening parenthesis to the macro of NODE, in such a
673 way that, if none is found, we don't lose the information in any
674 intervening padding tokens. If we find the parenthesis, collect
675 the arguments and return the buffer containing them. */
676static _cpp_buff *
f7fdd7a1 677funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node)
79bd622b 678{
2b0e25fe 679 const cpp_token *token, *padding = NULL;
f9b5f742 680
2b0e25fe 681 for (;;)
fb5ab82c 682 {
2b0e25fe 683 token = cpp_get_token (pfile);
684 if (token->type != CPP_PADDING)
685 break;
686 if (padding == NULL
687 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
688 padding = token;
fb5ab82c 689 }
79bd622b 690
2b0e25fe 691 if (token->type == CPP_OPEN_PAREN)
79bd622b 692 {
2b0e25fe 693 pfile->state.parsing_args = 2;
694 return collect_args (pfile, node);
79bd622b 695 }
696
7e2fc40e 697 /* CPP_EOF can be the end of macro arguments, or the end of the
698 file. We mustn't back up over the latter. Ugh. */
699 if (token->type != CPP_EOF || token == &pfile->eof)
700 {
701 /* Back up. We may have skipped padding, in which case backing
702 up more than one token when expanding macros is in general
703 too difficult. We re-insert it in its own context. */
704 _cpp_backup_tokens (pfile, 1);
705 if (padding)
706 push_token_context (pfile, NULL, padding, 1);
707 }
2b0e25fe 708
709 return NULL;
79bd622b 710}
711
88cf66fa 712/* Push the context of a macro with hash entry NODE onto the context
713 stack. If we can successfully expand the macro, we push a context
714 containing its yet-to-be-rescanned replacement list and return one.
715 Otherwise, we don't push a context and return zero. */
69461e0d 716static int
f7fdd7a1 717enter_macro_context (cpp_reader *pfile, cpp_hashnode *node)
69461e0d 718{
88cf66fa 719 /* The presence of a macro invalidates a file's controlling macro. */
c7e5d924 720 pfile->mi_valid = false;
721
606942e3 722 pfile->state.angled_headers = false;
723
88cf66fa 724 /* Handle standard macros. */
c7e5d924 725 if (! (node->flags & NODE_BUILTIN))
69461e0d 726 {
f9b5f742 727 cpp_macro *macro = node->value.macro;
3c7df4d3 728
2b0e25fe 729 if (macro->fun_like)
730 {
731 _cpp_buff *buff;
732
733 pfile->state.prevent_expansion++;
734 pfile->keep_tokens++;
735 pfile->state.parsing_args = 1;
736 buff = funlike_invocation_p (pfile, node);
737 pfile->state.parsing_args = 0;
738 pfile->keep_tokens--;
739 pfile->state.prevent_expansion--;
740
741 if (buff == NULL)
742 {
743 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
d80d2074 744 cpp_error (pfile, CPP_DL_WARNING,
2b0e25fe 745 "function-like macro \"%s\" must be used with arguments in traditional C",
73328dce 746 NODE_NAME (node));
2b0e25fe 747
748 return 0;
749 }
750
d6af0368 751 if (macro->paramc > 0)
752 replace_args (pfile, node, macro, (macro_arg *) buff->base);
2b0e25fe 753 _cpp_release_buff (pfile, buff);
754 }
79bd622b 755
f9b5f742 756 /* Disable the macro within its expansion. */
c7e5d924 757 node->flags |= NODE_DISABLED;
79bd622b 758
71a7c282 759 macro->used = 1;
760
f9b5f742 761 if (macro->paramc == 0)
672f38da 762 push_token_context (pfile, node, macro->exp.tokens, macro->count);
c7e5d924 763
764 return 1;
69461e0d 765 }
c7e5d924 766
88cf66fa 767 /* Handle built-in macros and the _Pragma operator. */
c7e5d924 768 return builtin_macro (pfile, node);
79bd622b 769}
770
88cf66fa 771/* Replace the parameters in a function-like macro of NODE with the
772 actual ARGS, and place the result in a newly pushed token context.
773 Expand each argument before replacing, unless it is operated upon
774 by the # or ## operators. */
79bd622b 775static void
f7fdd7a1 776replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro, macro_arg *args)
79bd622b 777{
778 unsigned int i, total;
779 const cpp_token *src, *limit;
f9b5f742 780 const cpp_token **dest, **first;
79bd622b 781 macro_arg *arg;
084163dc 782 _cpp_buff *buff;
79bd622b 783
79bd622b 784 /* First, fully macro-expand arguments, calculating the number of
084163dc 785 tokens in the final expansion as we go. The ordering of the if
786 statements below is subtle; we must handle stringification before
787 pasting. */
f9b5f742 788 total = macro->count;
672f38da 789 limit = macro->exp.tokens + macro->count;
f9b5f742 790
672f38da 791 for (src = macro->exp.tokens; src < limit; src++)
79bd622b 792 if (src->type == CPP_MACRO_ARG)
793 {
f9b5f742 794 /* Leading and trailing padding tokens. */
795 total += 2;
796
79bd622b 797 /* We have an argument. If it is not being stringified or
798 pasted it is macro-replaced before insertion. */
33344a1c 799 arg = &args[src->val.arg_no - 1];
3c7df4d3 800
79bd622b 801 if (src->flags & STRINGIFY_ARG)
802 {
803 if (!arg->stringified)
f9b5f742 804 arg->stringified = stringify_arg (pfile, arg);
79bd622b 805 }
806 else if ((src->flags & PASTE_LEFT)
672f38da 807 || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
79bd622b 808 total += arg->count - 1;
809 else
810 {
811 if (!arg->expanded)
f9b5f742 812 expand_arg (pfile, arg);
79bd622b 813 total += arg->expanded_count - 1;
814 }
815 }
816
f9b5f742 817 /* Now allocate space for the expansion, copy the tokens and replace
818 the arguments. */
084163dc 819 buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
820 first = (const cpp_token **) buff->base;
f9b5f742 821 dest = first;
79bd622b 822
672f38da 823 for (src = macro->exp.tokens; src < limit; src++)
f9b5f742 824 {
825 unsigned int count;
826 const cpp_token **from, **paste_flag;
79bd622b 827
f9b5f742 828 if (src->type != CPP_MACRO_ARG)
829 {
830 *dest++ = src;
831 continue;
832 }
79bd622b 833
f9b5f742 834 paste_flag = 0;
835 arg = &args[src->val.arg_no - 1];
836 if (src->flags & STRINGIFY_ARG)
837 count = 1, from = &arg->stringified;
838 else if (src->flags & PASTE_LEFT)
839 count = arg->count, from = arg->first;
672f38da 840 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
f9b5f742 841 {
842 count = arg->count, from = arg->first;
843 if (dest != first)
844 {
f9b5f742 845 if (dest[-1]->type == CPP_COMMA
846 && macro->variadic
847 && src->val.arg_no == macro->paramc)
848 {
ed909a09 849 /* Swallow a pasted comma if from == NULL, otherwise
850 drop the paste flag. */
851 if (from == NULL)
f9b5f742 852 dest--;
853 else
854 paste_flag = dest - 1;
855 }
856 /* Remove the paste flag if the RHS is a placemarker. */
857 else if (count == 0)
858 paste_flag = dest - 1;
859 }
860 }
861 else
862 count = arg->expanded_count, from = arg->expanded;
3c7df4d3 863
f9b5f742 864 /* Padding on the left of an argument (unless RHS of ##). */
7825551f 865 if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
672f38da 866 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
f9b5f742 867 *dest++ = padding_token (pfile, src);
79bd622b 868
f9b5f742 869 if (count)
870 {
871 memcpy (dest, from, count * sizeof (cpp_token *));
872 dest += count;
79bd622b 873
f9b5f742 874 /* With a non-empty argument on the LHS of ##, the last
875 token should be flagged PASTE_LEFT. */
876 if (src->flags & PASTE_LEFT)
877 paste_flag = dest - 1;
878 }
efdcc728 879
f9b5f742 880 /* Avoid paste on RHS (even case count == 0). */
881 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
882 *dest++ = &pfile->avoid_paste;
79bd622b 883
f9b5f742 884 /* Add a new paste flag, or remove an unwanted one. */
885 if (paste_flag)
886 {
887 cpp_token *token = _cpp_temp_token (pfile);
888 token->type = (*paste_flag)->type;
889 token->val.str = (*paste_flag)->val.str;
890 if (src->flags & PASTE_LEFT)
891 token->flags = (*paste_flag)->flags | PASTE_LEFT;
892 else
893 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
894 *paste_flag = token;
895 }
896 }
3c7df4d3 897
79bd622b 898 /* Free the expanded arguments. */
899 for (i = 0; i < macro->paramc; i++)
f9b5f742 900 if (args[i].expanded)
901 free (args[i].expanded);
902
c7e5d924 903 push_ptoken_context (pfile, node, buff, first, dest - first);
f9b5f742 904}
905
906/* Return a special padding token, with padding inherited from SOURCE. */
907static const cpp_token *
f7fdd7a1 908padding_token (cpp_reader *pfile, const cpp_token *source)
f9b5f742 909{
910 cpp_token *result = _cpp_temp_token (pfile);
911
912 result->type = CPP_PADDING;
913 result->val.source = source;
914 result->flags = 0;
915 return result;
916}
917
88cf66fa 918/* Get a new uninitialized context. Create a new one if we cannot
919 re-use an old one. */
f9b5f742 920static cpp_context *
f7fdd7a1 921next_context (cpp_reader *pfile)
f9b5f742 922{
923 cpp_context *result = pfile->context->next;
924
925 if (result == 0)
69461e0d 926 {
3b298764 927 result = XNEW (cpp_context);
f9b5f742 928 result->prev = pfile->context;
929 result->next = 0;
930 pfile->context->next = result;
79bd622b 931 }
f9b5f742 932
933 pfile->context = result;
934 return result;
79bd622b 935}
936
f9b5f742 937/* Push a list of pointers to tokens. */
938static void
f7fdd7a1 939push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
940 const cpp_token **first, unsigned int count)
79bd622b 941{
942 cpp_context *context = next_context (pfile);
79bd622b 943
f9b5f742 944 context->direct_p = false;
945 context->macro = macro;
084163dc 946 context->buff = buff;
a854276a 947 FIRST (context).ptoken = first;
948 LAST (context).ptoken = first + count;
f9b5f742 949}
950
951/* Push a list of tokens. */
952static void
f7fdd7a1 953push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
954 const cpp_token *first, unsigned int count)
f9b5f742 955{
956 cpp_context *context = next_context (pfile);
957
958 context->direct_p = true;
959 context->macro = macro;
084163dc 960 context->buff = NULL;
a854276a 961 FIRST (context).token = first;
962 LAST (context).token = first + count;
79bd622b 963}
964
f15f6c8d 965/* Push a traditional macro's replacement text. */
966void
f7fdd7a1 967_cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
968 const uchar *start, size_t len)
f15f6c8d 969{
970 cpp_context *context = next_context (pfile);
971
972 context->direct_p = true;
973 context->macro = macro;
974 context->buff = NULL;
975 CUR (context) = start;
06025647 976 RLIMIT (context) = start + len;
01628c3c 977 macro->flags |= NODE_DISABLED;
f15f6c8d 978}
979
88cf66fa 980/* Expand an argument ARG before replacing parameters in a
981 function-like macro. This works by pushing a context with the
982 argument's tokens, and then expanding that into a temporary buffer
983 as if it were a normal part of the token stream. collect_args()
984 has terminated the argument's tokens with a CPP_EOF so that we know
985 when we have fully expanded the argument. */
79bd622b 986static void
f7fdd7a1 987expand_arg (cpp_reader *pfile, macro_arg *arg)
79bd622b 988{
f9b5f742 989 unsigned int capacity;
dbb7d6f7 990 bool saved_warn_trad;
f9b5f742 991
f9b5f742 992 if (arg->count == 0)
993 return;
79bd622b 994
dbb7d6f7 995 /* Don't warn about funlike macros when pre-expanding. */
996 saved_warn_trad = CPP_WTRADITIONAL (pfile);
997 CPP_WTRADITIONAL (pfile) = 0;
998
79bd622b 999 /* Loop, reading in the arguments. */
f9b5f742 1000 capacity = 256;
f0af5a88 1001 arg->expanded = xmalloc (capacity * sizeof (cpp_token *));
79bd622b 1002
084163dc 1003 push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1);
f9b5f742 1004 for (;;)
79bd622b 1005 {
f9b5f742 1006 const cpp_token *token;
1007
1008 if (arg->expanded_count + 1 >= capacity)
69461e0d 1009 {
79bd622b 1010 capacity *= 2;
f0af5a88 1011 arg->expanded = xrealloc (arg->expanded,
1012 capacity * sizeof (cpp_token *));
79bd622b 1013 }
79bd622b 1014
f9b5f742 1015 token = cpp_get_token (pfile);
79bd622b 1016
f9b5f742 1017 if (token->type == CPP_EOF)
1018 break;
1019
1020 arg->expanded[arg->expanded_count++] = token;
1021 }
1022
084163dc 1023 _cpp_pop_context (pfile);
dbb7d6f7 1024
1025 CPP_WTRADITIONAL (pfile) = saved_warn_trad;
79bd622b 1026}
1027
88cf66fa 1028/* Pop the current context off the stack, re-enabling the macro if the
1029 context represented a macro's replacement list. The context
1030 structure is not freed so that we can re-use it later. */
79bd622b 1031void
f7fdd7a1 1032_cpp_pop_context (cpp_reader *pfile)
79bd622b 1033{
084163dc 1034 cpp_context *context = pfile->context;
1035
084163dc 1036 if (context->macro)
c7e5d924 1037 context->macro->flags &= ~NODE_DISABLED;
084163dc 1038
1039 if (context->buff)
1040 _cpp_release_buff (pfile, context->buff);
79bd622b 1041
084163dc 1042 pfile->context = context->prev;
79bd622b 1043}
1044
5c120a72 1045/* External routine to get a token. Also used nearly everywhere
343fd982 1046 internally, except for places where we know we can safely call
5c120a72 1047 _cpp_lex_token directly, such as lexing a directive name.
343fd982 1048
1049 Macro expansions and directives are transparently handled,
1050 including entering included files. Thus tokens are post-macro
1051 expansion, and after any intervening directives. External callers
1052 see CPP_EOF only at EOF. Internal callers also see it when meeting
1053 a directive inside a macro call, when at the end of a directive and
1054 state.in_directive is still 1, and at the end of argument
1055 pre-expansion. */
f9b5f742 1056const cpp_token *
f7fdd7a1 1057cpp_get_token (cpp_reader *pfile)
79bd622b 1058{
f9b5f742 1059 const cpp_token *result;
1060
def71b06 1061 for (;;)
79bd622b 1062 {
f9b5f742 1063 cpp_hashnode *node;
79bd622b 1064 cpp_context *context = pfile->context;
1065
79bd622b 1066 /* Context->prev == 0 <=> base context. */
fb5ab82c 1067 if (!context->prev)
f9b5f742 1068 result = _cpp_lex_token (pfile);
a854276a 1069 else if (FIRST (context).token != LAST (context).token)
def71b06 1070 {
f9b5f742 1071 if (context->direct_p)
a854276a 1072 result = FIRST (context).token++;
f9b5f742 1073 else
a854276a 1074 result = *FIRST (context).ptoken++;
f9b5f742 1075
1076 if (result->flags & PASTE_LEFT)
e55de93e 1077 {
f9b5f742 1078 paste_all_tokens (pfile, result);
1079 if (pfile->state.in_directive)
1080 continue;
1081 return padding_token (pfile, result);
e55de93e 1082 }
def71b06 1083 }
79bd622b 1084 else
1085 {
fb5ab82c 1086 _cpp_pop_context (pfile);
f9b5f742 1087 if (pfile->state.in_directive)
1088 continue;
1089 return &pfile->avoid_paste;
79bd622b 1090 }
79bd622b 1091
d3f7919d 1092 if (pfile->state.in_directive && result->type == CPP_COMMENT)
1093 continue;
1094
f9b5f742 1095 if (result->type != CPP_NAME)
79bd622b 1096 break;
1097
f9b5f742 1098 node = result->val.node;
1099
c7e5d924 1100 if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
1101 break;
b1a9ff83 1102
c7e5d924 1103 if (!(node->flags & NODE_DISABLED))
79bd622b 1104 {
c7e5d924 1105 if (!pfile->state.prevent_expansion
1106 && enter_macro_context (pfile, node))
8c2e2fc5 1107 {
f9b5f742 1108 if (pfile->state.in_directive)
1109 continue;
1110 return padding_token (pfile, result);
8c2e2fc5 1111 }
79bd622b 1112 }
c7e5d924 1113 else
1114 {
88cf66fa 1115 /* Flag this token as always unexpandable. FIXME: move this
1116 to collect_args()?. */
c7e5d924 1117 cpp_token *t = _cpp_temp_token (pfile);
1118 t->type = result->type;
1119 t->flags = result->flags | NO_EXPAND;
1120 t->val.str = result->val.str;
1121 result = t;
1122 }
396ffa86 1123
c7e5d924 1124 break;
79bd622b 1125 }
f9b5f742 1126
1127 return result;
79bd622b 1128}
1129
ae2348f6 1130/* Returns true if we're expanding an object-like macro that was
1131 defined in a system header. Just checks the macro at the top of
1132 the stack. Used for diagnostic suppression. */
1133int
f7fdd7a1 1134cpp_sys_macro_p (cpp_reader *pfile)
ae2348f6 1135{
c7e5d924 1136 cpp_hashnode *node = pfile->context->macro;
ae2348f6 1137
c7e5d924 1138 return node && node->value.macro && node->value.macro->syshdr;
ae2348f6 1139}
1140
02516fb9 1141/* Read each token in, until end of the current file. Directives are
1142 transparently processed. */
79bd622b 1143void
f7fdd7a1 1144cpp_scan_nooutput (cpp_reader *pfile)
79bd622b 1145{
6e04daf1 1146 /* Request a CPP_EOF token at the end of this file, rather than
1147 transparently continuing with the including file. */
1148 pfile->buffer->return_at_eof = true;
1149
3eb3f293 1150 pfile->state.discarding_output++;
1151 pfile->state.prevent_expansion++;
1152
7951771a 1153 if (CPP_OPTION (pfile, traditional))
1154 while (_cpp_read_logical_line_trad (pfile))
1155 ;
1156 else
1157 while (cpp_get_token (pfile)->type != CPP_EOF)
1158 ;
3eb3f293 1159
1160 pfile->state.discarding_output--;
1161 pfile->state.prevent_expansion--;
79bd622b 1162}
1163
fb5ab82c 1164/* Step back one (or more) tokens. Can only step mack more than 1 if
1165 they are from the lexer, and not from macro expansion. */
920b5d41 1166void
f7fdd7a1 1167_cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
79bd622b 1168{
fb5ab82c 1169 if (pfile->context->prev == NULL)
79bd622b 1170 {
fb5ab82c 1171 pfile->lookaheads += count;
1172 while (count--)
1173 {
61a655af 1174 pfile->cur_token--;
1175 if (pfile->cur_token == pfile->cur_run->base
1176 /* Possible with -fpreprocessed and no leading #line. */
1177 && pfile->cur_run->prev != NULL)
fb5ab82c 1178 {
fb5ab82c 1179 pfile->cur_run = pfile->cur_run->prev;
1180 pfile->cur_token = pfile->cur_run->limit;
1181 }
1182 }
79bd622b 1183 }
fb5ab82c 1184 else
79bd622b 1185 {
fb5ab82c 1186 if (count != 1)
1187 abort ();
f9b5f742 1188 if (pfile->context->direct_p)
a854276a 1189 FIRST (pfile->context).token--;
f9b5f742 1190 else
a854276a 1191 FIRST (pfile->context).ptoken--;
79bd622b 1192 }
1193}
69461e0d 1194
79bd622b 1195/* #define directive parsing and handling. */
1196
d10cfa8d 1197/* Returns nonzero if a macro redefinition warning is required. */
f15f6c8d 1198static bool
f7fdd7a1 1199warn_of_redefinition (cpp_reader *pfile, const cpp_hashnode *node,
1200 const cpp_macro *macro2)
79bd622b 1201{
1202 const cpp_macro *macro1;
1203 unsigned int i;
1204
31ca26b1 1205 /* Some redefinitions need to be warned about regardless. */
1206 if (node->flags & NODE_WARN)
f15f6c8d 1207 return true;
79bd622b 1208
31ca26b1 1209 /* Redefinition of a macro is allowed if and only if the old and new
2c0e001b 1210 definitions are the same. (6.10.3 paragraph 2). */
79bd622b 1211 macro1 = node->value.macro;
1212
3396dc80 1213 /* Don't check count here as it can be different in valid
1214 traditional redefinitions with just whitespace differences. */
1215 if (macro1->paramc != macro2->paramc
79bd622b 1216 || macro1->fun_like != macro2->fun_like
53c052ca 1217 || macro1->variadic != macro2->variadic)
f15f6c8d 1218 return true;
79bd622b 1219
1220 /* Check parameter spellings. */
1221 for (i = 0; i < macro1->paramc; i++)
1222 if (macro1->params[i] != macro2->params[i])
f15f6c8d 1223 return true;
79bd622b 1224
f15f6c8d 1225 /* Check the replacement text or tokens. */
1226 if (CPP_OPTION (pfile, traditional))
3396dc80 1227 return _cpp_expansions_different_trad (macro1, macro2);
f15f6c8d 1228
9c7ff5cc 1229 if (macro1->count != macro2->count)
1230 return true;
1231
1232 for (i = 0; i < macro1->count; i++)
1233 if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
1234 return true;
f15f6c8d 1235
1236 return false;
79bd622b 1237}
1238
1239/* Free the definition of hashnode H. */
69461e0d 1240void
f7fdd7a1 1241_cpp_free_definition (cpp_hashnode *h)
69461e0d 1242{
79bd622b 1243 /* Macros and assertions no longer have anything to free. */
1244 h->type = NT_VOID;
1245 /* Clear builtin flag in case of redefinition. */
c7e5d924 1246 h->flags &= ~(NODE_BUILTIN | NODE_DISABLED);
79bd622b 1247}
1248
10b4496a 1249/* Save parameter NODE to the parameter list of macro MACRO. Returns
d10cfa8d 1250 zero on success, nonzero if the parameter is a duplicate. */
198b48a0 1251bool
f7fdd7a1 1252_cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
79bd622b 1253{
805e22b2 1254 unsigned int len;
79bd622b 1255 /* Constraint 6.10.3.6 - duplicate parameter names. */
805e22b2 1256 if (node->flags & NODE_MACRO_ARG)
11d10d3f 1257 {
d80d2074 1258 cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
73328dce 1259 NODE_NAME (node));
1ae6ed16 1260 return true;
79bd622b 1261 }
11d10d3f 1262
e6a5f963 1263 if (BUFF_ROOM (pfile->a_buff)
1264 < (macro->paramc + 1) * sizeof (cpp_hashnode *))
1265 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
11d10d3f 1266
e6a5f963 1267 ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
805e22b2 1268 node->flags |= NODE_MACRO_ARG;
1269 len = macro->paramc * sizeof (union _cpp_hashnode_value);
1270 if (len > pfile->macro_buffer_len)
1271 {
f0af5a88 1272 pfile->macro_buffer = xrealloc (pfile->macro_buffer, len);
805e22b2 1273 pfile->macro_buffer_len = len;
1274 }
1275 ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
1276 = node->value;
1277
1278 node->value.arg_index = macro->paramc;
1ae6ed16 1279 return false;
69461e0d 1280}
1281
1ae6ed16 1282/* Check the syntax of the parameters in a MACRO definition. Returns
1283 false if an error occurs. */
1284static bool
f7fdd7a1 1285parse_params (cpp_reader *pfile, cpp_macro *macro)
69461e0d 1286{
79bd622b 1287 unsigned int prev_ident = 0;
69461e0d 1288
79bd622b 1289 for (;;)
69461e0d 1290 {
c00e481c 1291 const cpp_token *token = _cpp_lex_token (pfile);
69461e0d 1292
c00e481c 1293 switch (token->type)
69461e0d 1294 {
79bd622b 1295 default:
d3f7919d 1296 /* Allow/ignore comments in parameter lists if we are
1297 preserving comments in macro expansions. */
1298 if (token->type == CPP_COMMENT
1299 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
1300 continue;
1301
d80d2074 1302 cpp_error (pfile, CPP_DL_ERROR,
73328dce 1303 "\"%s\" may not appear in macro parameter list",
c00e481c 1304 cpp_token_as_text (pfile, token));
1ae6ed16 1305 return false;
79bd622b 1306
69461e0d 1307 case CPP_NAME:
79bd622b 1308 if (prev_ident)
1309 {
d80d2074 1310 cpp_error (pfile, CPP_DL_ERROR,
73328dce 1311 "macro parameters must be comma-separated");
1ae6ed16 1312 return false;
79bd622b 1313 }
1314 prev_ident = 1;
1315
198b48a0 1316 if (_cpp_save_parameter (pfile, macro, token->val.node))
1ae6ed16 1317 return false;
79bd622b 1318 continue;
69461e0d 1319
79bd622b 1320 case CPP_CLOSE_PAREN:
1321 if (prev_ident || macro->paramc == 0)
1ae6ed16 1322 return true;
69461e0d 1323
79bd622b 1324 /* Fall through to pick up the error. */
1325 case CPP_COMMA:
1326 if (!prev_ident)
1327 {
d80d2074 1328 cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
1ae6ed16 1329 return false;
79bd622b 1330 }
1331 prev_ident = 0;
69461e0d 1332 continue;
1333
79bd622b 1334 case CPP_ELLIPSIS:
53c052ca 1335 macro->variadic = 1;
79bd622b 1336 if (!prev_ident)
1337 {
198b48a0 1338 _cpp_save_parameter (pfile, macro,
1339 pfile->spec_nodes.n__VA_ARGS__);
79bd622b 1340 pfile->state.va_args_ok = 1;
05d51900 1341 if (! CPP_OPTION (pfile, c99)
1342 && CPP_OPTION (pfile, pedantic)
1343 && CPP_OPTION (pfile, warn_variadic_macros))
d80d2074 1344 cpp_error (pfile, CPP_DL_PEDWARN,
73328dce 1345 "anonymous variadic macros were introduced in C99");
79bd622b 1346 }
05d51900 1347 else if (CPP_OPTION (pfile, pedantic)
1348 && CPP_OPTION (pfile, warn_variadic_macros))
d80d2074 1349 cpp_error (pfile, CPP_DL_PEDWARN,
73328dce 1350 "ISO C does not permit named variadic macros");
69461e0d 1351
79bd622b 1352 /* We're at the end, and just expect a closing parenthesis. */
c00e481c 1353 token = _cpp_lex_token (pfile);
1354 if (token->type == CPP_CLOSE_PAREN)
1ae6ed16 1355 return true;
79bd622b 1356 /* Fall through. */
69461e0d 1357
79bd622b 1358 case CPP_EOF:
d80d2074 1359 cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
1ae6ed16 1360 return false;
69461e0d 1361 }
69461e0d 1362 }
79bd622b 1363}
1364
10b4496a 1365/* Allocate room for a token from a macro's replacement list. */
79bd622b 1366static cpp_token *
f7fdd7a1 1367alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
79bd622b 1368{
e6a5f963 1369 if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
1370 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
69461e0d 1371
e6a5f963 1372 return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
10b4496a 1373}
1374
88cf66fa 1375/* Lex a token from the expansion of MACRO, but mark parameters as we
1376 find them and warn of traditional stringification. */
10b4496a 1377static cpp_token *
f7fdd7a1 1378lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
10b4496a 1379{
1380 cpp_token *token;
1381
1382 pfile->cur_token = alloc_expansion_token (pfile, macro);
1383 token = _cpp_lex_direct (pfile);
79bd622b 1384
88cf66fa 1385 /* Is this a parameter? */
805e22b2 1386 if (token->type == CPP_NAME
1387 && (token->val.node->flags & NODE_MACRO_ARG) != 0)
79bd622b 1388 {
1389 token->type = CPP_MACRO_ARG;
805e22b2 1390 token->val.arg_no = token->val.node->value.arg_index;
79bd622b 1391 }
1392 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1393 && (token->type == CPP_STRING || token->type == CPP_CHAR))
1394 check_trad_stringification (pfile, macro, &token->val.str);
1395
1396 return token;
69461e0d 1397}
1398
f15f6c8d 1399static bool
f7fdd7a1 1400create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
69461e0d 1401{
f15f6c8d 1402 cpp_token *token;
10b4496a 1403 const cpp_token *ctoken;
79bd622b 1404
1405 /* Get the first token of the expansion (or the '(' of a
1406 function-like macro). */
10b4496a 1407 ctoken = _cpp_lex_token (pfile);
1408
1409 if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
79bd622b 1410 {
f15f6c8d 1411 bool ok = parse_params (pfile, macro);
e6a5f963 1412 macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
1413 if (!ok)
f15f6c8d 1414 return false;
e6a5f963 1415
c39ed964 1416 /* Success. Commit or allocate the parameter array. */
1417 if (pfile->hash_table->alloc_subobject)
1418 {
1419 cpp_token *tokns = pfile->hash_table->alloc_subobject
1420 (sizeof (cpp_token) * macro->paramc);
1421 memcpy (tokns, macro->params, sizeof (cpp_token) * macro->paramc);
1422 macro->params = tokns;
1423 }
1424 else
1425 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
79bd622b 1426 macro->fun_like = 1;
79bd622b 1427 }
10b4496a 1428 else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
d80d2074 1429 cpp_error (pfile, CPP_DL_PEDWARN,
73328dce 1430 "ISO C requires whitespace after the macro name");
69461e0d 1431
10b4496a 1432 if (macro->fun_like)
1433 token = lex_expansion_token (pfile, macro);
1434 else
1435 {
1436 token = alloc_expansion_token (pfile, macro);
1437 *token = *ctoken;
1438 }
69461e0d 1439
79bd622b 1440 for (;;)
1441 {
1442 /* Check the stringifying # constraint 6.10.3.2.1 of
1443 function-like macros when lexing the subsequent token. */
1444 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1445 {
1446 if (token->type == CPP_MACRO_ARG)
1447 {
1448 token->flags &= ~PREV_WHITE;
1449 token->flags |= STRINGIFY_ARG;
1450 token->flags |= token[-1].flags & PREV_WHITE;
1451 token[-1] = token[0];
1452 macro->count--;
1453 }
1454 /* Let assembler get away with murder. */
5db5d057 1455 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
79bd622b 1456 {
d80d2074 1457 cpp_error (pfile, CPP_DL_ERROR,
73328dce 1458 "'#' is not followed by a macro parameter");
f15f6c8d 1459 return false;
79bd622b 1460 }
1461 }
1462
1463 if (token->type == CPP_EOF)
1464 break;
1465
1466 /* Paste operator constraint 6.10.3.3.1. */
1467 if (token->type == CPP_PASTE)
1468 {
1469 /* Token-paste ##, can appear in both object-like and
1470 function-like macros, but not at the ends. */
1471 if (--macro->count > 0)
1472 token = lex_expansion_token (pfile, macro);
1473
1474 if (macro->count == 0 || token->type == CPP_EOF)
1475 {
d80d2074 1476 cpp_error (pfile, CPP_DL_ERROR,
f7fdd7a1 1477 "'##' cannot appear at either end of a macro expansion");
f15f6c8d 1478 return false;
79bd622b 1479 }
69461e0d 1480
79bd622b 1481 token[-1].flags |= PASTE_LEFT;
79bd622b 1482 }
1483
1484 token = lex_expansion_token (pfile, macro);
1485 }
1486
672f38da 1487 macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
c39ed964 1488 macro->traditional = 0;
e6a5f963 1489
3c7df4d3 1490 /* Don't count the CPP_EOF. */
1491 macro->count--;
79bd622b 1492
88cf66fa 1493 /* Clear whitespace on first token for warn_of_redefinition(). */
e6a5f963 1494 if (macro->count)
672f38da 1495 macro->exp.tokens[0].flags &= ~PREV_WHITE;
e6a5f963 1496
c39ed964 1497 /* Commit or allocate the memory. */
1498 if (pfile->hash_table->alloc_subobject)
1499 {
1500 cpp_token *tokns = pfile->hash_table->alloc_subobject (sizeof (cpp_token)
1501 * macro->count);
1502 memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
1503 macro->exp.tokens = tokns;
1504 }
1505 else
1506 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
e6a5f963 1507
f15f6c8d 1508 return true;
1509}
1510
d10cfa8d 1511/* Parse a macro and save its expansion. Returns nonzero on success. */
f15f6c8d 1512bool
f7fdd7a1 1513_cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
f15f6c8d 1514{
1515 cpp_macro *macro;
1516 unsigned int i;
1517 bool ok;
4dab9f9f 1518
c39ed964 1519 if (pfile->hash_table->alloc_subobject)
1520 macro = pfile->hash_table->alloc_subobject (sizeof (cpp_macro));
1521 else
1522 macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
f15f6c8d 1523 macro->line = pfile->directive_line;
1524 macro->params = 0;
1525 macro->paramc = 0;
1526 macro->variadic = 0;
b717e161 1527 macro->used = !CPP_OPTION (pfile, warn_unused_macros);
f15f6c8d 1528 macro->count = 0;
1529 macro->fun_like = 0;
ae2348f6 1530 /* To suppress some diagnostics. */
610625e3 1531 macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
ae2348f6 1532
f15f6c8d 1533 if (CPP_OPTION (pfile, traditional))
1534 ok = _cpp_create_trad_definition (pfile, macro);
1535 else
1536 {
1537 cpp_token *saved_cur_token = pfile->cur_token;
1538
1539 ok = create_iso_definition (pfile, macro);
1540
1541 /* Restore lexer position because of games lex_expansion_token()
1542 plays lexing the macro. We set the type for SEEN_EOL() in
f03668bd 1543 directives.c.
f15f6c8d 1544
1545 Longer term we should lex the whole line before coming here,
1546 and just copy the expansion. */
1547 saved_cur_token[-1].type = pfile->cur_token[-1].type;
1548 pfile->cur_token = saved_cur_token;
1549
1550 /* Stop the lexer accepting __VA_ARGS__. */
1551 pfile->state.va_args_ok = 0;
1552 }
1553
1554 /* Clear the fast argument lookup indices. */
1555 for (i = macro->paramc; i-- > 0; )
805e22b2 1556 {
1557 struct cpp_hashnode *node = macro->params[i];
1558 node->flags &= ~ NODE_MACRO_ARG;
1559 node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
1560 }
f15f6c8d 1561
1562 if (!ok)
1563 return ok;
1564
70145d81 1565 if (node->type == NT_MACRO)
69461e0d 1566 {
71a7c282 1567 if (CPP_OPTION (pfile, warn_unused_macros))
1568 _cpp_warn_if_unused_macro (pfile, node, NULL);
1569
f15f6c8d 1570 if (warn_of_redefinition (pfile, node, macro))
69461e0d 1571 {
d80d2074 1572 cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->directive_line, 0,
73328dce 1573 "\"%s\" redefined", NODE_NAME (node));
79bd622b 1574
31ca26b1 1575 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
d80d2074 1576 cpp_error_with_line (pfile, CPP_DL_PEDWARN,
f15f6c8d 1577 node->value.macro->line, 0,
1578 "this is the location of the previous definition");
69461e0d 1579 }
69461e0d 1580 }
1581
70145d81 1582 if (node->type != NT_VOID)
1583 _cpp_free_definition (node);
1584
69461e0d 1585 /* Enter definition in hash table. */
79bd622b 1586 node->type = NT_MACRO;
1587 node->value.macro = macro;
c86dbc5b 1588 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_")))
31ca26b1 1589 node->flags |= NODE_WARN;
69461e0d 1590
79bd622b 1591 return ok;
69461e0d 1592}
1593
88cf66fa 1594/* Warn if a token in STRING matches one of a function-like MACRO's
1595 parameters. */
bceb9193 1596static void
f7fdd7a1 1597check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
1598 const cpp_string *string)
bceb9193 1599{
79bd622b 1600 unsigned int i, len;
4970d4c2 1601 const uchar *p, *q, *limit;
b1a9ff83 1602
bceb9193 1603 /* Loop over the string. */
4970d4c2 1604 limit = string->text + string->len - 1;
1605 for (p = string->text + 1; p < limit; p = q)
bceb9193 1606 {
bceb9193 1607 /* Find the start of an identifier. */
7e118154 1608 while (p < limit && !is_idstart (*p))
1609 p++;
bceb9193 1610
1611 /* Find the end of the identifier. */
1612 q = p;
7e118154 1613 while (q < limit && is_idchar (*q))
1614 q++;
79bd622b 1615
1616 len = q - p;
1617
bceb9193 1618 /* Loop over the function macro arguments to see if the
1619 identifier inside the string matches one of them. */
79bd622b 1620 for (i = 0; i < macro->paramc; i++)
1621 {
1622 const cpp_hashnode *node = macro->params[i];
bceb9193 1623
0d086e18 1624 if (NODE_LEN (node) == len
1625 && !memcmp (p, NODE_NAME (node), len))
bceb9193 1626 {
d80d2074 1627 cpp_error (pfile, CPP_DL_WARNING,
455730ef 1628 "macro argument \"%s\" would be stringified in traditional C",
73328dce 1629 NODE_NAME (node));
bceb9193 1630 break;
1631 }
1632 }
1633 }
1634}
79bd622b 1635
4d9e9a28 1636/* Returns the name, arguments and expansion of a macro, in a format
1637 suitable to be read back in again, and therefore also for DWARF 2
1638 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1639 Caller is expected to generate the "#define" bit if needed. The
79bd622b 1640 returned text is temporary, and automatically freed later. */
79bd622b 1641const unsigned char *
f7fdd7a1 1642cpp_macro_definition (cpp_reader *pfile, const cpp_hashnode *node)
79bd622b 1643{
1644 unsigned int i, len;
1645 const cpp_macro *macro = node->value.macro;
1646 unsigned char *buffer;
1647
1648 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1649 {
d80d2074 1650 cpp_error (pfile, CPP_DL_ICE,
73328dce 1651 "invalid hash type %d in cpp_macro_definition", node->type);
79bd622b 1652 return 0;
1653 }
1654
1655 /* Calculate length. */
f6bf950b 1656 len = NODE_LEN (node) + 2; /* ' ' and NUL. */
79bd622b 1657 if (macro->fun_like)
1658 {
3a68fd94 1659 len += 4; /* "()" plus possible final ".." of named
1660 varargs (we have + 1 below). */
79bd622b 1661 for (i = 0; i < macro->paramc; i++)
3a68fd94 1662 len += NODE_LEN (macro->params[i]) + 1; /* "," */
79bd622b 1663 }
1664
9c343313 1665 if (CPP_OPTION (pfile, traditional))
1666 len += _cpp_replacement_text_len (macro);
1667 else
79bd622b 1668 {
9c343313 1669 for (i = 0; i < macro->count; i++)
1670 {
1671 cpp_token *token = &macro->exp.tokens[i];
79bd622b 1672
9c343313 1673 if (token->type == CPP_MACRO_ARG)
1674 len += NODE_LEN (macro->params[token->val.arg_no - 1]);
1675 else
b1280514 1676 len += cpp_token_len (token) + 1; /* Includes room for ' '. */
9c343313 1677 if (token->flags & STRINGIFY_ARG)
1678 len++; /* "#" */
1679 if (token->flags & PASTE_LEFT)
1680 len += 3; /* " ##" */
1681 }
79bd622b 1682 }
1683
1684 if (len > pfile->macro_buffer_len)
8744fb7e 1685 {
f0af5a88 1686 pfile->macro_buffer = xrealloc (pfile->macro_buffer, len);
8744fb7e 1687 pfile->macro_buffer_len = len;
1688 }
4d9e9a28 1689
1690 /* Fill in the buffer. Start with the macro name. */
79bd622b 1691 buffer = pfile->macro_buffer;
4d9e9a28 1692 memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
1693 buffer += NODE_LEN (node);
79bd622b 1694
1695 /* Parameter names. */
1696 if (macro->fun_like)
1697 {
1698 *buffer++ = '(';
1699 for (i = 0; i < macro->paramc; i++)
1700 {
1701 cpp_hashnode *param = macro->params[i];
1702
1703 if (param != pfile->spec_nodes.n__VA_ARGS__)
1704 {
c86dbc5b 1705 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
1706 buffer += NODE_LEN (param);
79bd622b 1707 }
1708
1709 if (i + 1 < macro->paramc)
b1a9ff83 1710 /* Don't emit a space after the comma here; we're trying
1711 to emit a Dwarf-friendly definition, and the Dwarf spec
1712 forbids spaces in the argument list. */
3a68fd94 1713 *buffer++ = ',';
53c052ca 1714 else if (macro->variadic)
79bd622b 1715 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
1716 }
1717 *buffer++ = ')';
1718 }
1719
920e5093 1720 /* The Dwarf spec requires a space after the macro name, even if the
1721 definition is the empty string. */
1722 *buffer++ = ' ';
1723
9c343313 1724 if (CPP_OPTION (pfile, traditional))
1725 buffer = _cpp_copy_replacement_text (macro, buffer);
1726 else if (macro->count)
79bd622b 1727 /* Expansion tokens. */
79bd622b 1728 {
79bd622b 1729 for (i = 0; i < macro->count; i++)
1730 {
672f38da 1731 cpp_token *token = &macro->exp.tokens[i];
79bd622b 1732
1733 if (token->flags & PREV_WHITE)
1734 *buffer++ = ' ';
1735 if (token->flags & STRINGIFY_ARG)
1736 *buffer++ = '#';
1737
1738 if (token->type == CPP_MACRO_ARG)
1739 {
c86dbc5b 1740 len = NODE_LEN (macro->params[token->val.arg_no - 1]);
1741 memcpy (buffer,
1742 NODE_NAME (macro->params[token->val.arg_no - 1]), len);
79bd622b 1743 buffer += len;
1744 }
1745 else
1746 buffer = cpp_spell_token (pfile, token, buffer);
1747
1748 if (token->flags & PASTE_LEFT)
1749 {
1750 *buffer++ = ' ';
1751 *buffer++ = '#';
1752 *buffer++ = '#';
1753 /* Next has PREV_WHITE; see _cpp_create_definition. */
1754 }
1755 }
1756 }
1757
1758 *buffer = '\0';
1759 return pfile->macro_buffer;
1760}