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