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