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
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
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.
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.
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! */
31 typedef struct macro_arg macro_arg
;
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. */
41 /* Macro expansion. */
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
*,
59 static _cpp_buff
*funlike_invocation_p (cpp_reader
*, cpp_hashnode
*);
60 static bool create_iso_definition (cpp_reader
*, cpp_macro
*);
62 /* #define directive parsing and handling. */
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
*,
68 static bool parse_params (cpp_reader
*, cpp_macro
*);
69 static void check_trad_stringification (cpp_reader
*, const cpp_macro
*,
72 /* Emits a warning if NODE is a macro defined in the main file that
75 _cpp_warn_if_unused_macro (cpp_reader
*pfile
, cpp_hashnode
*node
,
76 void *v ATTRIBUTE_UNUSED
)
78 if (node
->type
== NT_MACRO
&& !(node
->flags
& NODE_BUILTIN
))
80 cpp_macro
*macro
= node
->value
.macro
;
83 && MAIN_FILE_P (lookup_line (&pfile
->line_maps
, macro
->line
)))
84 cpp_error_with_line (pfile
, DL_WARNING
, macro
->line
, 0,
85 "macro \"%s\" is not used", NODE_NAME (node
));
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
)
96 cpp_token
*token
= _cpp_temp_token (pfile
);
99 token
->type
= CPP_STRING
;
100 token
->val
.str
.len
= len
;
101 token
->val
.str
.text
= text
;
106 static const char * const monthnames
[] =
108 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
109 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
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. */
117 _cpp_builtin_macro_text (cpp_reader
*pfile
, cpp_hashnode
*node
)
119 const uchar
*result
= NULL
;
120 unsigned int number
= 1;
122 switch (node
->value
.builtin
)
125 cpp_error (pfile
, DL_ICE
, "invalid built-in macro \"%s\"",
135 const struct line_map
*map
= pfile
->map
;
137 if (node
->value
.builtin
== BT_BASE_FILE
)
138 while (! MAIN_FILE_P (map
))
139 map
= INCLUDED_FROM (&pfile
->line_maps
, map
);
143 buf
= _cpp_unaligned_alloc (pfile
, len
* 4 + 3);
146 buf
= cpp_quote_string (buf
+ 1, (const unsigned char *) name
, len
);
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
156 number
= pfile
->line_maps
.depth
- 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
;
166 number
= pfile
->cur_token
[-1].line
;
167 number
= SOURCE_LINE (pfile
->map
, number
);
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
177 if (CPP_IN_SYSTEM_HEADER (pfile
)
178 && CPP_OPTION (pfile
, stdc_0_in_system_headers
)
179 && !CPP_OPTION (pfile
,std
))
188 if (pfile
->date
== NULL
)
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. */
195 struct tm
*tb
= NULL
;
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. */
202 if (tt
!= (time_t)-1 || errno
== 0)
203 tb
= localtime (&tt
);
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
,
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
);
220 cpp_errno (pfile
, DL_WARNING
,
221 "could not determine date and time");
223 pfile
->date
= U
"\"??? ?? ????\"";
224 pfile
->time
= U
"\"??:??:??\"";
228 if (node
->value
.builtin
== BT_DATE
)
229 result
= pfile
->date
;
231 result
= pfile
->time
;
237 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
238 result
= _cpp_unaligned_alloc (pfile
, 21);
239 sprintf ((char *) result
, "%u", number
);
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. */
250 builtin_macro (cpp_reader
*pfile
, cpp_hashnode
*node
)
256 if (node
->value
.builtin
== BT_PRAGMA
)
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
)
263 _cpp_do__Pragma (pfile
);
267 buf
= _cpp_builtin_macro_text (pfile
, node
);
269 nbuf
= alloca (len
+ 1);
270 memcpy (nbuf
, buf
, len
);
273 cpp_push_buffer (pfile
, (uchar
*) nbuf
, len
, /* from_stage3 */ true, 1);
274 _cpp_clean_line (pfile
);
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
, DL_ICE
, "invalid built-in macro \"%s\"",
282 _cpp_pop_buffer (pfile
);
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. */
292 cpp_quote_string (uchar
*dest
, const uchar
*src
, unsigned int len
)
298 if (c
== '\\' || c
== '"')
309 sprintf ((char *) dest
, "\\%03o", c
);
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
)
324 unsigned int i
, escape_it
, backslash_count
= 0;
325 const cpp_token
*source
= NULL
;
328 if (BUFF_ROOM (pfile
->u_buff
) < 3)
329 _cpp_extend_buff (pfile
, &pfile
->u_buff
, 3);
330 dest
= BUFF_FRONT (pfile
->u_buff
);
333 /* Loop, reading in the argument's tokens. */
334 for (i
= 0; i
< arg
->count
; i
++)
336 const cpp_token
*token
= arg
->first
[i
];
338 if (token
->type
== CPP_PADDING
)
341 source
= token
->val
.source
;
345 escape_it
= (token
->type
== CPP_STRING
|| token
->type
== CPP_WSTRING
346 || token
->type
== CPP_CHAR
|| token
->type
== CPP_WCHAR
);
348 /* Room for each char being written in octal, initial space and
349 final quote and NUL. */
350 len
= cpp_token_len (token
);
355 if ((size_t) (BUFF_LIMIT (pfile
->u_buff
) - dest
) < len
)
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
;
362 /* Leading white space? */
363 if (dest
- 1 != BUFF_FRONT (pfile
->u_buff
))
367 if (source
->flags
& PREV_WHITE
)
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
);
381 dest
= cpp_spell_token (pfile
, token
, dest
);
383 if (token
->type
== CPP_OTHER
&& token
->val
.str
.text
[0] == '\\')
389 /* Ignore the final \ of invalid string literals. */
390 if (backslash_count
& 1)
392 cpp_error (pfile
, DL_WARNING
,
393 "invalid string literal, ignoring final '\\'");
397 /* Commit the memory, including NUL, and return the token. */
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
);
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. */
408 paste_tokens (cpp_reader
*pfile
, const cpp_token
**plhs
, const cpp_token
*rhs
)
410 unsigned char *buf
, *end
;
411 const cpp_token
*lhs
;
416 len
= cpp_token_len (lhs
) + cpp_token_len (rhs
) + 1;
417 buf
= (unsigned char *) alloca (len
);
418 end
= cpp_spell_token (pfile
, lhs
, buf
);
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
)
426 end
= cpp_spell_token (pfile
, rhs
, end
);
429 cpp_push_buffer (pfile
, buf
, end
- buf
, /* from_stage3 */ true, 1);
430 _cpp_clean_line (pfile
);
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
);
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. */
449 paste_all_tokens (cpp_reader
*pfile
, const cpp_token
*lhs
)
451 const cpp_token
*rhs
;
452 cpp_context
*context
= pfile
->context
;
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
++;
464 rhs
= *FIRST (context
).ptoken
++;
466 if (rhs
->type
== CPP_PADDING
)
469 if (!paste_tokens (pfile
, &lhs
, rhs
))
471 _cpp_backup_tokens (pfile
, 1);
473 /* Mandatory error for all apart from assembler. */
474 if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
475 cpp_error (pfile
, 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
));
482 while (rhs
->flags
& PASTE_LEFT
);
484 /* Put the resulting token in its own context. */
485 push_token_context (pfile
, NULL
, lhs
, 1);
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.
492 Note that MACRO cannot necessarily be deduced from NODE, in case
493 NODE was redefined whilst collecting arguments. */
495 _cpp_arguments_ok (cpp_reader
*pfile
, cpp_macro
*macro
, const cpp_hashnode
*node
, unsigned int argc
)
497 if (argc
== macro
->paramc
)
500 if (argc
< macro
->paramc
)
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
507 This is exactly the same as if there had been an empty rest
508 argument - debug("string", ). */
510 if (argc
+ 1 == macro
->paramc
&& macro
->variadic
)
512 if (CPP_PEDANTIC (pfile
) && ! macro
->syshdr
)
513 cpp_error (pfile
, DL_PEDWARN
,
514 "ISO C99 requires rest arguments to be used");
518 cpp_error (pfile
, DL_ERROR
,
519 "macro \"%s\" requires %u arguments, but only %u given",
520 NODE_NAME (node
), macro
->paramc
, argc
);
523 cpp_error (pfile
, DL_ERROR
,
524 "macro \"%s\" passed %u arguments, but takes just %u",
525 NODE_NAME (node
), argc
, macro
->paramc
);
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(). */
536 collect_args (cpp_reader
*pfile
, const cpp_hashnode
*node
)
538 _cpp_buff
*buff
, *base_buff
;
540 macro_arg
*args
, *arg
;
541 const cpp_token
*token
;
544 macro
= node
->value
.macro
;
546 argc
= macro
->paramc
;
549 buff
= _cpp_get_buff (pfile
, argc
* (50 * sizeof (cpp_token
*)
550 + sizeof (macro_arg
)));
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;
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". */
562 unsigned int paren_depth
= 0;
563 unsigned int ntokens
= 0;
566 arg
->first
= (const cpp_token
**) buff
->cur
;
570 /* Require space for 2 new tokens (including a CPP_EOF). */
571 if ((unsigned char *) &arg
->first
[ntokens
+ 2] > buff
->limit
)
573 buff
= _cpp_append_extend_buff (pfile
, buff
,
574 1000 * sizeof (cpp_token
*));
575 arg
->first
= (const cpp_token
**) buff
->cur
;
578 token
= cpp_get_token (pfile
);
580 if (token
->type
== CPP_PADDING
)
582 /* Drop leading padding. */
586 else if (token
->type
== CPP_OPEN_PAREN
)
588 else if (token
->type
== CPP_CLOSE_PAREN
)
590 if (paren_depth
-- == 0)
593 else if (token
->type
== CPP_COMMA
)
595 /* A comma does not terminate an argument within
596 parentheses or as part of a variable argument. */
598 && ! (macro
->variadic
&& argc
== macro
->paramc
))
601 else if (token
->type
== CPP_EOF
602 || (token
->type
== CPP_HASH
&& token
->flags
& BOL
))
605 arg
->first
[ntokens
++] = token
;
608 /* Drop trailing padding. */
609 while (ntokens
> 0 && arg
->first
[ntokens
- 1]->type
== CPP_PADDING
)
612 arg
->count
= ntokens
;
613 arg
->first
[ntokens
] = &pfile
->eof
;
615 /* Terminate the argument. Excess arguments loop back and
616 overwrite the final legitimate argument, before failing. */
617 if (argc
<= macro
->paramc
)
619 buff
->cur
= (unsigned char *) &arg
->first
[ntokens
+ 1];
620 if (argc
!= macro
->paramc
)
624 while (token
->type
!= CPP_CLOSE_PAREN
&& token
->type
!= CPP_EOF
);
626 if (token
->type
== CPP_EOF
)
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
, DL_ERROR
,
635 "unterminated argument list invoking macro \"%s\"",
640 /* A single empty argument is counted as no argument. */
641 if (argc
== 1 && macro
->paramc
== 0 && args
[0].count
== 0)
643 if (_cpp_arguments_ok (pfile
, macro
, node
, argc
))
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.
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
;
660 /* An error occurred. */
661 _cpp_release_buff (pfile
, base_buff
);
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. */
670 funlike_invocation_p (cpp_reader
*pfile
, cpp_hashnode
*node
)
672 const cpp_token
*token
, *padding
= NULL
;
676 token
= cpp_get_token (pfile
);
677 if (token
->type
!= CPP_PADDING
)
680 || (!(padding
->flags
& PREV_WHITE
) && token
->val
.source
== NULL
))
684 if (token
->type
== CPP_OPEN_PAREN
)
686 pfile
->state
.parsing_args
= 2;
687 return collect_args (pfile
, node
);
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
)
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);
699 push_token_context (pfile
, NULL
, padding
, 1);
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. */
710 enter_macro_context (cpp_reader
*pfile
, cpp_hashnode
*node
)
712 /* The presence of a macro invalidates a file's controlling macro. */
713 pfile
->mi_valid
= false;
715 pfile
->state
.angled_headers
= false;
717 /* Handle standard macros. */
718 if (! (node
->flags
& NODE_BUILTIN
))
720 cpp_macro
*macro
= node
->value
.macro
;
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
--;
736 if (CPP_WTRADITIONAL (pfile
) && ! node
->value
.macro
->syshdr
)
737 cpp_error (pfile
, DL_WARNING
,
738 "function-like macro \"%s\" must be used with arguments in traditional C",
744 if (macro
->paramc
> 0)
745 replace_args (pfile
, node
, macro
, (macro_arg
*) buff
->base
);
746 _cpp_release_buff (pfile
, buff
);
749 /* Disable the macro within its expansion. */
750 node
->flags
|= NODE_DISABLED
;
754 if (macro
->paramc
== 0)
755 push_token_context (pfile
, node
, macro
->exp
.tokens
, macro
->count
);
760 /* Handle built-in macros and the _Pragma operator. */
761 return builtin_macro (pfile
, node
);
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. */
769 replace_args (cpp_reader
*pfile
, cpp_hashnode
*node
, cpp_macro
*macro
, macro_arg
*args
)
771 unsigned int i
, total
;
772 const cpp_token
*src
, *limit
;
773 const cpp_token
**dest
, **first
;
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
781 total
= macro
->count
;
782 limit
= macro
->exp
.tokens
+ macro
->count
;
784 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
785 if (src
->type
== CPP_MACRO_ARG
)
787 /* Leading and trailing padding tokens. */
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];
794 if (src
->flags
& STRINGIFY_ARG
)
796 if (!arg
->stringified
)
797 arg
->stringified
= stringify_arg (pfile
, arg
);
799 else if ((src
->flags
& PASTE_LEFT
)
800 || (src
> macro
->exp
.tokens
&& (src
[-1].flags
& PASTE_LEFT
)))
801 total
+= arg
->count
- 1;
805 expand_arg (pfile
, arg
);
806 total
+= arg
->expanded_count
- 1;
810 /* Now allocate space for the expansion, copy the tokens and replace
812 buff
= _cpp_get_buff (pfile
, total
* sizeof (cpp_token
*));
813 first
= (const cpp_token
**) buff
->base
;
816 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
819 const cpp_token
**from
, **paste_flag
;
821 if (src
->type
!= CPP_MACRO_ARG
)
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
))
835 count
= arg
->count
, from
= arg
->first
;
838 if (dest
[-1]->type
== CPP_COMMA
840 && src
->val
.arg_no
== macro
->paramc
)
842 /* Swallow a pasted comma if from == NULL, otherwise
843 drop the paste flag. */
847 paste_flag
= dest
- 1;
849 /* Remove the paste flag if the RHS is a placemarker. */
851 paste_flag
= dest
- 1;
855 count
= arg
->expanded_count
, from
= arg
->expanded
;
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
);
864 memcpy (dest
, from
, count
* sizeof (cpp_token
*));
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;
873 /* Avoid paste on RHS (even case count == 0). */
874 if (!pfile
->state
.in_directive
&& !(src
->flags
& PASTE_LEFT
))
875 *dest
++ = &pfile
->avoid_paste
;
877 /* Add a new paste flag, or remove an unwanted one. */
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
;
886 token
->flags
= (*paste_flag
)->flags
& ~PASTE_LEFT
;
891 /* Free the expanded arguments. */
892 for (i
= 0; i
< macro
->paramc
; i
++)
893 if (args
[i
].expanded
)
894 free (args
[i
].expanded
);
896 push_ptoken_context (pfile
, node
, buff
, first
, dest
- first
);
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
)
903 cpp_token
*result
= _cpp_temp_token (pfile
);
905 result
->type
= CPP_PADDING
;
906 result
->val
.source
= source
;
911 /* Get a new uninitialized context. Create a new one if we cannot
912 re-use an old one. */
914 next_context (cpp_reader
*pfile
)
916 cpp_context
*result
= pfile
->context
->next
;
920 result
= xnew (cpp_context
);
921 result
->prev
= pfile
->context
;
923 pfile
->context
->next
= result
;
926 pfile
->context
= result
;
930 /* Push a list of pointers to tokens. */
932 push_ptoken_context (cpp_reader
*pfile
, cpp_hashnode
*macro
, _cpp_buff
*buff
,
933 const cpp_token
**first
, unsigned int count
)
935 cpp_context
*context
= next_context (pfile
);
937 context
->direct_p
= false;
938 context
->macro
= macro
;
939 context
->buff
= buff
;
940 FIRST (context
).ptoken
= first
;
941 LAST (context
).ptoken
= first
+ count
;
944 /* Push a list of tokens. */
946 push_token_context (cpp_reader
*pfile
, cpp_hashnode
*macro
,
947 const cpp_token
*first
, unsigned int count
)
949 cpp_context
*context
= next_context (pfile
);
951 context
->direct_p
= true;
952 context
->macro
= macro
;
953 context
->buff
= NULL
;
954 FIRST (context
).token
= first
;
955 LAST (context
).token
= first
+ count
;
958 /* Push a traditional macro's replacement text. */
960 _cpp_push_text_context (cpp_reader
*pfile
, cpp_hashnode
*macro
,
961 const uchar
*start
, size_t len
)
963 cpp_context
*context
= next_context (pfile
);
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
;
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. */
980 expand_arg (cpp_reader
*pfile
, macro_arg
*arg
)
982 unsigned int capacity
;
983 bool saved_warn_trad
;
988 /* Don't warn about funlike macros when pre-expanding. */
989 saved_warn_trad
= CPP_WTRADITIONAL (pfile
);
990 CPP_WTRADITIONAL (pfile
) = 0;
992 /* Loop, reading in the arguments. */
994 arg
->expanded
= (const cpp_token
**)
995 xmalloc (capacity
* sizeof (cpp_token
*));
997 push_ptoken_context (pfile
, NULL
, NULL
, arg
->first
, arg
->count
+ 1);
1000 const cpp_token
*token
;
1002 if (arg
->expanded_count
+ 1 >= capacity
)
1005 arg
->expanded
= (const cpp_token
**)
1006 xrealloc (arg
->expanded
, capacity
* sizeof (cpp_token
*));
1009 token
= cpp_get_token (pfile
);
1011 if (token
->type
== CPP_EOF
)
1014 arg
->expanded
[arg
->expanded_count
++] = token
;
1017 _cpp_pop_context (pfile
);
1019 CPP_WTRADITIONAL (pfile
) = saved_warn_trad
;
1022 /* Pop the current context off the stack, re-enabling the macro if the
1023 context represented a macro's replacement list. The context
1024 structure is not freed so that we can re-use it later. */
1026 _cpp_pop_context (cpp_reader
*pfile
)
1028 cpp_context
*context
= pfile
->context
;
1031 context
->macro
->flags
&= ~NODE_DISABLED
;
1034 _cpp_release_buff (pfile
, context
->buff
);
1036 pfile
->context
= context
->prev
;
1039 /* External routine to get a token. Also used nearly everywhere
1040 internally, except for places where we know we can safely call
1041 _cpp_lex_token directly, such as lexing a directive name.
1043 Macro expansions and directives are transparently handled,
1044 including entering included files. Thus tokens are post-macro
1045 expansion, and after any intervening directives. External callers
1046 see CPP_EOF only at EOF. Internal callers also see it when meeting
1047 a directive inside a macro call, when at the end of a directive and
1048 state.in_directive is still 1, and at the end of argument
1051 cpp_get_token (cpp_reader
*pfile
)
1053 const cpp_token
*result
;
1058 cpp_context
*context
= pfile
->context
;
1060 /* Context->prev == 0 <=> base context. */
1062 result
= _cpp_lex_token (pfile
);
1063 else if (FIRST (context
).token
!= LAST (context
).token
)
1065 if (context
->direct_p
)
1066 result
= FIRST (context
).token
++;
1068 result
= *FIRST (context
).ptoken
++;
1070 if (result
->flags
& PASTE_LEFT
)
1072 paste_all_tokens (pfile
, result
);
1073 if (pfile
->state
.in_directive
)
1075 return padding_token (pfile
, result
);
1080 _cpp_pop_context (pfile
);
1081 if (pfile
->state
.in_directive
)
1083 return &pfile
->avoid_paste
;
1086 if (pfile
->state
.in_directive
&& result
->type
== CPP_COMMENT
)
1089 if (result
->type
!= CPP_NAME
)
1092 node
= result
->val
.node
;
1094 if (node
->type
!= NT_MACRO
|| (result
->flags
& NO_EXPAND
))
1097 if (!(node
->flags
& NODE_DISABLED
))
1099 if (!pfile
->state
.prevent_expansion
1100 && enter_macro_context (pfile
, node
))
1102 if (pfile
->state
.in_directive
)
1104 return padding_token (pfile
, result
);
1109 /* Flag this token as always unexpandable. FIXME: move this
1110 to collect_args()?. */
1111 cpp_token
*t
= _cpp_temp_token (pfile
);
1112 t
->type
= result
->type
;
1113 t
->flags
= result
->flags
| NO_EXPAND
;
1114 t
->val
.str
= result
->val
.str
;
1124 /* Returns true if we're expanding an object-like macro that was
1125 defined in a system header. Just checks the macro at the top of
1126 the stack. Used for diagnostic suppression. */
1128 cpp_sys_macro_p (cpp_reader
*pfile
)
1130 cpp_hashnode
*node
= pfile
->context
->macro
;
1132 return node
&& node
->value
.macro
&& node
->value
.macro
->syshdr
;
1135 /* Read each token in, until end of the current file. Directives are
1136 transparently processed. */
1138 cpp_scan_nooutput (cpp_reader
*pfile
)
1140 /* Request a CPP_EOF token at the end of this file, rather than
1141 transparently continuing with the including file. */
1142 pfile
->buffer
->return_at_eof
= true;
1144 if (CPP_OPTION (pfile
, traditional
))
1145 while (_cpp_read_logical_line_trad (pfile
))
1148 while (cpp_get_token (pfile
)->type
!= CPP_EOF
)
1152 /* Step back one (or more) tokens. Can only step mack more than 1 if
1153 they are from the lexer, and not from macro expansion. */
1155 _cpp_backup_tokens (cpp_reader
*pfile
, unsigned int count
)
1157 if (pfile
->context
->prev
== NULL
)
1159 pfile
->lookaheads
+= count
;
1163 if (pfile
->cur_token
== pfile
->cur_run
->base
1164 /* Possible with -fpreprocessed and no leading #line. */
1165 && pfile
->cur_run
->prev
!= NULL
)
1167 pfile
->cur_run
= pfile
->cur_run
->prev
;
1168 pfile
->cur_token
= pfile
->cur_run
->limit
;
1176 if (pfile
->context
->direct_p
)
1177 FIRST (pfile
->context
).token
--;
1179 FIRST (pfile
->context
).ptoken
--;
1183 /* #define directive parsing and handling. */
1185 /* Returns nonzero if a macro redefinition warning is required. */
1187 warn_of_redefinition (cpp_reader
*pfile
, const cpp_hashnode
*node
,
1188 const cpp_macro
*macro2
)
1190 const cpp_macro
*macro1
;
1193 /* Some redefinitions need to be warned about regardless. */
1194 if (node
->flags
& NODE_WARN
)
1197 /* Redefinition of a macro is allowed if and only if the old and new
1198 definitions are the same. (6.10.3 paragraph 2). */
1199 macro1
= node
->value
.macro
;
1201 /* Don't check count here as it can be different in valid
1202 traditional redefinitions with just whitespace differences. */
1203 if (macro1
->paramc
!= macro2
->paramc
1204 || macro1
->fun_like
!= macro2
->fun_like
1205 || macro1
->variadic
!= macro2
->variadic
)
1208 /* Check parameter spellings. */
1209 for (i
= 0; i
< macro1
->paramc
; i
++)
1210 if (macro1
->params
[i
] != macro2
->params
[i
])
1213 /* Check the replacement text or tokens. */
1214 if (CPP_OPTION (pfile
, traditional
))
1215 return _cpp_expansions_different_trad (macro1
, macro2
);
1217 if (macro1
->count
!= macro2
->count
)
1220 for (i
= 0; i
< macro1
->count
; i
++)
1221 if (!_cpp_equiv_tokens (¯o1
->exp
.tokens
[i
], ¯o2
->exp
.tokens
[i
]))
1227 /* Free the definition of hashnode H. */
1229 _cpp_free_definition (cpp_hashnode
*h
)
1231 /* Macros and assertions no longer have anything to free. */
1233 /* Clear builtin flag in case of redefinition. */
1234 h
->flags
&= ~(NODE_BUILTIN
| NODE_DISABLED
);
1237 /* Save parameter NODE to the parameter list of macro MACRO. Returns
1238 zero on success, nonzero if the parameter is a duplicate. */
1240 _cpp_save_parameter (cpp_reader
*pfile
, cpp_macro
*macro
, cpp_hashnode
*node
)
1243 /* Constraint 6.10.3.6 - duplicate parameter names. */
1244 if (node
->flags
& NODE_MACRO_ARG
)
1246 cpp_error (pfile
, DL_ERROR
, "duplicate macro parameter \"%s\"",
1251 if (BUFF_ROOM (pfile
->a_buff
)
1252 < (macro
->paramc
+ 1) * sizeof (cpp_hashnode
*))
1253 _cpp_extend_buff (pfile
, &pfile
->a_buff
, sizeof (cpp_hashnode
*));
1255 ((cpp_hashnode
**) BUFF_FRONT (pfile
->a_buff
))[macro
->paramc
++] = node
;
1256 node
->flags
|= NODE_MACRO_ARG
;
1257 len
= macro
->paramc
* sizeof (union _cpp_hashnode_value
);
1258 if (len
> pfile
->macro_buffer_len
)
1260 pfile
->macro_buffer
= (uchar
*) xrealloc (pfile
->macro_buffer
, len
);
1261 pfile
->macro_buffer_len
= len
;
1263 ((union _cpp_hashnode_value
*) pfile
->macro_buffer
)[macro
->paramc
- 1]
1266 node
->value
.arg_index
= macro
->paramc
;
1270 /* Check the syntax of the parameters in a MACRO definition. Returns
1271 false if an error occurs. */
1273 parse_params (cpp_reader
*pfile
, cpp_macro
*macro
)
1275 unsigned int prev_ident
= 0;
1279 const cpp_token
*token
= _cpp_lex_token (pfile
);
1281 switch (token
->type
)
1284 /* Allow/ignore comments in parameter lists if we are
1285 preserving comments in macro expansions. */
1286 if (token
->type
== CPP_COMMENT
1287 && ! CPP_OPTION (pfile
, discard_comments_in_macro_exp
))
1290 cpp_error (pfile
, DL_ERROR
,
1291 "\"%s\" may not appear in macro parameter list",
1292 cpp_token_as_text (pfile
, token
));
1298 cpp_error (pfile
, DL_ERROR
,
1299 "macro parameters must be comma-separated");
1304 if (_cpp_save_parameter (pfile
, macro
, token
->val
.node
))
1308 case CPP_CLOSE_PAREN
:
1309 if (prev_ident
|| macro
->paramc
== 0)
1312 /* Fall through to pick up the error. */
1316 cpp_error (pfile
, DL_ERROR
, "parameter name missing");
1323 macro
->variadic
= 1;
1326 _cpp_save_parameter (pfile
, macro
,
1327 pfile
->spec_nodes
.n__VA_ARGS__
);
1328 pfile
->state
.va_args_ok
= 1;
1329 if (! CPP_OPTION (pfile
, c99
) && CPP_OPTION (pfile
, pedantic
))
1330 cpp_error (pfile
, DL_PEDWARN
,
1331 "anonymous variadic macros were introduced in C99");
1333 else if (CPP_OPTION (pfile
, pedantic
))
1334 cpp_error (pfile
, DL_PEDWARN
,
1335 "ISO C does not permit named variadic macros");
1337 /* We're at the end, and just expect a closing parenthesis. */
1338 token
= _cpp_lex_token (pfile
);
1339 if (token
->type
== CPP_CLOSE_PAREN
)
1344 cpp_error (pfile
, DL_ERROR
, "missing ')' in macro parameter list");
1350 /* Allocate room for a token from a macro's replacement list. */
1352 alloc_expansion_token (cpp_reader
*pfile
, cpp_macro
*macro
)
1354 if (BUFF_ROOM (pfile
->a_buff
) < (macro
->count
+ 1) * sizeof (cpp_token
))
1355 _cpp_extend_buff (pfile
, &pfile
->a_buff
, sizeof (cpp_token
));
1357 return &((cpp_token
*) BUFF_FRONT (pfile
->a_buff
))[macro
->count
++];
1360 /* Lex a token from the expansion of MACRO, but mark parameters as we
1361 find them and warn of traditional stringification. */
1363 lex_expansion_token (cpp_reader
*pfile
, cpp_macro
*macro
)
1367 pfile
->cur_token
= alloc_expansion_token (pfile
, macro
);
1368 token
= _cpp_lex_direct (pfile
);
1370 /* Is this a parameter? */
1371 if (token
->type
== CPP_NAME
1372 && (token
->val
.node
->flags
& NODE_MACRO_ARG
) != 0)
1374 token
->type
= CPP_MACRO_ARG
;
1375 token
->val
.arg_no
= token
->val
.node
->value
.arg_index
;
1377 else if (CPP_WTRADITIONAL (pfile
) && macro
->paramc
> 0
1378 && (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
))
1379 check_trad_stringification (pfile
, macro
, &token
->val
.str
);
1385 create_iso_definition (cpp_reader
*pfile
, cpp_macro
*macro
)
1388 const cpp_token
*ctoken
;
1390 /* Get the first token of the expansion (or the '(' of a
1391 function-like macro). */
1392 ctoken
= _cpp_lex_token (pfile
);
1394 if (ctoken
->type
== CPP_OPEN_PAREN
&& !(ctoken
->flags
& PREV_WHITE
))
1396 bool ok
= parse_params (pfile
, macro
);
1397 macro
->params
= (cpp_hashnode
**) BUFF_FRONT (pfile
->a_buff
);
1401 /* Success. Commit the parameter array. */
1402 BUFF_FRONT (pfile
->a_buff
) = (uchar
*) ¯o
->params
[macro
->paramc
];
1403 macro
->fun_like
= 1;
1405 else if (ctoken
->type
!= CPP_EOF
&& !(ctoken
->flags
& PREV_WHITE
))
1406 cpp_error (pfile
, DL_PEDWARN
,
1407 "ISO C requires whitespace after the macro name");
1409 if (macro
->fun_like
)
1410 token
= lex_expansion_token (pfile
, macro
);
1413 token
= alloc_expansion_token (pfile
, macro
);
1419 /* Check the stringifying # constraint 6.10.3.2.1 of
1420 function-like macros when lexing the subsequent token. */
1421 if (macro
->count
> 1 && token
[-1].type
== CPP_HASH
&& macro
->fun_like
)
1423 if (token
->type
== CPP_MACRO_ARG
)
1425 token
->flags
&= ~PREV_WHITE
;
1426 token
->flags
|= STRINGIFY_ARG
;
1427 token
->flags
|= token
[-1].flags
& PREV_WHITE
;
1428 token
[-1] = token
[0];
1431 /* Let assembler get away with murder. */
1432 else if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
1434 cpp_error (pfile
, DL_ERROR
,
1435 "'#' is not followed by a macro parameter");
1440 if (token
->type
== CPP_EOF
)
1443 /* Paste operator constraint 6.10.3.3.1. */
1444 if (token
->type
== CPP_PASTE
)
1446 /* Token-paste ##, can appear in both object-like and
1447 function-like macros, but not at the ends. */
1448 if (--macro
->count
> 0)
1449 token
= lex_expansion_token (pfile
, macro
);
1451 if (macro
->count
== 0 || token
->type
== CPP_EOF
)
1453 cpp_error (pfile
, DL_ERROR
,
1454 "'##' cannot appear at either end of a macro expansion");
1458 token
[-1].flags
|= PASTE_LEFT
;
1461 token
= lex_expansion_token (pfile
, macro
);
1464 macro
->exp
.tokens
= (cpp_token
*) BUFF_FRONT (pfile
->a_buff
);
1466 /* Don't count the CPP_EOF. */
1469 /* Clear whitespace on first token for warn_of_redefinition(). */
1471 macro
->exp
.tokens
[0].flags
&= ~PREV_WHITE
;
1473 /* Commit the memory. */
1474 BUFF_FRONT (pfile
->a_buff
) = (uchar
*) ¯o
->exp
.tokens
[macro
->count
];
1479 /* Parse a macro and save its expansion. Returns nonzero on success. */
1481 _cpp_create_definition (cpp_reader
*pfile
, cpp_hashnode
*node
)
1487 macro
= (cpp_macro
*) _cpp_aligned_alloc (pfile
, sizeof (cpp_macro
));
1488 macro
->line
= pfile
->directive_line
;
1491 macro
->variadic
= 0;
1492 macro
->used
= !CPP_OPTION (pfile
, warn_unused_macros
);
1494 macro
->fun_like
= 0;
1495 /* To suppress some diagnostics. */
1496 macro
->syshdr
= pfile
->map
->sysp
!= 0;
1498 if (CPP_OPTION (pfile
, traditional
))
1499 ok
= _cpp_create_trad_definition (pfile
, macro
);
1502 cpp_token
*saved_cur_token
= pfile
->cur_token
;
1504 ok
= create_iso_definition (pfile
, macro
);
1506 /* Restore lexer position because of games lex_expansion_token()
1507 plays lexing the macro. We set the type for SEEN_EOL() in
1510 Longer term we should lex the whole line before coming here,
1511 and just copy the expansion. */
1512 saved_cur_token
[-1].type
= pfile
->cur_token
[-1].type
;
1513 pfile
->cur_token
= saved_cur_token
;
1515 /* Stop the lexer accepting __VA_ARGS__. */
1516 pfile
->state
.va_args_ok
= 0;
1519 /* Clear the fast argument lookup indices. */
1520 for (i
= macro
->paramc
; i
-- > 0; )
1522 struct cpp_hashnode
*node
= macro
->params
[i
];
1523 node
->flags
&= ~ NODE_MACRO_ARG
;
1524 node
->value
= ((union _cpp_hashnode_value
*) pfile
->macro_buffer
)[i
];
1530 if (node
->type
== NT_MACRO
)
1532 if (CPP_OPTION (pfile
, warn_unused_macros
))
1533 _cpp_warn_if_unused_macro (pfile
, node
, NULL
);
1535 if (warn_of_redefinition (pfile
, node
, macro
))
1537 cpp_error_with_line (pfile
, DL_PEDWARN
, pfile
->directive_line
, 0,
1538 "\"%s\" redefined", NODE_NAME (node
));
1540 if (node
->type
== NT_MACRO
&& !(node
->flags
& NODE_BUILTIN
))
1541 cpp_error_with_line (pfile
, DL_PEDWARN
,
1542 node
->value
.macro
->line
, 0,
1543 "this is the location of the previous definition");
1547 if (node
->type
!= NT_VOID
)
1548 _cpp_free_definition (node
);
1550 /* Enter definition in hash table. */
1551 node
->type
= NT_MACRO
;
1552 node
->value
.macro
= macro
;
1553 if (! ustrncmp (NODE_NAME (node
), DSC ("__STDC_")))
1554 node
->flags
|= NODE_WARN
;
1559 /* Warn if a token in STRING matches one of a function-like MACRO's
1562 check_trad_stringification (cpp_reader
*pfile
, const cpp_macro
*macro
,
1563 const cpp_string
*string
)
1565 unsigned int i
, len
;
1566 const uchar
*p
, *q
, *limit
;
1568 /* Loop over the string. */
1569 limit
= string
->text
+ string
->len
- 1;
1570 for (p
= string
->text
+ 1; p
< limit
; p
= q
)
1572 /* Find the start of an identifier. */
1573 while (p
< limit
&& !is_idstart (*p
))
1576 /* Find the end of the identifier. */
1578 while (q
< limit
&& is_idchar (*q
))
1583 /* Loop over the function macro arguments to see if the
1584 identifier inside the string matches one of them. */
1585 for (i
= 0; i
< macro
->paramc
; i
++)
1587 const cpp_hashnode
*node
= macro
->params
[i
];
1589 if (NODE_LEN (node
) == len
1590 && !memcmp (p
, NODE_NAME (node
), len
))
1592 cpp_error (pfile
, DL_WARNING
,
1593 "macro argument \"%s\" would be stringified in traditional C",
1601 /* Returns the name, arguments and expansion of a macro, in a format
1602 suitable to be read back in again, and therefore also for DWARF 2
1603 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1604 Caller is expected to generate the "#define" bit if needed. The
1605 returned text is temporary, and automatically freed later. */
1606 const unsigned char *
1607 cpp_macro_definition (cpp_reader
*pfile
, const cpp_hashnode
*node
)
1609 unsigned int i
, len
;
1610 const cpp_macro
*macro
= node
->value
.macro
;
1611 unsigned char *buffer
;
1613 if (node
->type
!= NT_MACRO
|| (node
->flags
& NODE_BUILTIN
))
1615 cpp_error (pfile
, DL_ICE
,
1616 "invalid hash type %d in cpp_macro_definition", node
->type
);
1620 /* Calculate length. */
1621 len
= NODE_LEN (node
) + 2; /* ' ' and NUL. */
1622 if (macro
->fun_like
)
1624 len
+= 4; /* "()" plus possible final ".." of named
1625 varargs (we have + 1 below). */
1626 for (i
= 0; i
< macro
->paramc
; i
++)
1627 len
+= NODE_LEN (macro
->params
[i
]) + 1; /* "," */
1630 if (CPP_OPTION (pfile
, traditional
))
1631 len
+= _cpp_replacement_text_len (macro
);
1634 for (i
= 0; i
< macro
->count
; i
++)
1636 cpp_token
*token
= ¯o
->exp
.tokens
[i
];
1638 if (token
->type
== CPP_MACRO_ARG
)
1639 len
+= NODE_LEN (macro
->params
[token
->val
.arg_no
- 1]);
1641 len
+= cpp_token_len (token
) + 1; /* Includes room for ' '. */
1642 if (token
->flags
& STRINGIFY_ARG
)
1644 if (token
->flags
& PASTE_LEFT
)
1645 len
+= 3; /* " ##" */
1649 if (len
> pfile
->macro_buffer_len
)
1651 pfile
->macro_buffer
= (uchar
*) xrealloc (pfile
->macro_buffer
, len
);
1652 pfile
->macro_buffer_len
= len
;
1655 /* Fill in the buffer. Start with the macro name. */
1656 buffer
= pfile
->macro_buffer
;
1657 memcpy (buffer
, NODE_NAME (node
), NODE_LEN (node
));
1658 buffer
+= NODE_LEN (node
);
1660 /* Parameter names. */
1661 if (macro
->fun_like
)
1664 for (i
= 0; i
< macro
->paramc
; i
++)
1666 cpp_hashnode
*param
= macro
->params
[i
];
1668 if (param
!= pfile
->spec_nodes
.n__VA_ARGS__
)
1670 memcpy (buffer
, NODE_NAME (param
), NODE_LEN (param
));
1671 buffer
+= NODE_LEN (param
);
1674 if (i
+ 1 < macro
->paramc
)
1675 /* Don't emit a space after the comma here; we're trying
1676 to emit a Dwarf-friendly definition, and the Dwarf spec
1677 forbids spaces in the argument list. */
1679 else if (macro
->variadic
)
1680 *buffer
++ = '.', *buffer
++ = '.', *buffer
++ = '.';
1685 /* The Dwarf spec requires a space after the macro name, even if the
1686 definition is the empty string. */
1689 if (CPP_OPTION (pfile
, traditional
))
1690 buffer
= _cpp_copy_replacement_text (macro
, buffer
);
1691 else if (macro
->count
)
1692 /* Expansion tokens. */
1694 for (i
= 0; i
< macro
->count
; i
++)
1696 cpp_token
*token
= ¯o
->exp
.tokens
[i
];
1698 if (token
->flags
& PREV_WHITE
)
1700 if (token
->flags
& STRINGIFY_ARG
)
1703 if (token
->type
== CPP_MACRO_ARG
)
1705 len
= NODE_LEN (macro
->params
[token
->val
.arg_no
- 1]);
1707 NODE_NAME (macro
->params
[token
->val
.arg_no
- 1]), len
);
1711 buffer
= cpp_spell_token (pfile
, token
, buffer
);
1713 if (token
->flags
& PASTE_LEFT
)
1718 /* Next has PREV_WHITE; see _cpp_create_definition. */
1724 return pfile
->macro_buffer
;