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