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