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