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