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