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 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! */
28 #include "coretypes.h"
33 typedef struct macro_arg macro_arg
;
36 const cpp_token
**first
; /* First token in unexpanded argument. */
37 const cpp_token
**expanded
; /* Macro-expanded argument. */
38 const cpp_token
*stringified
; /* Stringified argument. */
39 unsigned int count
; /* # of tokens in argument. */
40 unsigned int expanded_count
; /* # of tokens in expanded argument. */
43 /* Macro expansion. */
45 static int enter_macro_context
PARAMS ((cpp_reader
*, cpp_hashnode
*));
46 static int builtin_macro
PARAMS ((cpp_reader
*, cpp_hashnode
*));
47 static void push_token_context
48 PARAMS ((cpp_reader
*, cpp_hashnode
*, const cpp_token
*, unsigned int));
49 static void push_ptoken_context
50 PARAMS ((cpp_reader
*, cpp_hashnode
*, _cpp_buff
*,
51 const cpp_token
**, unsigned int));
52 static _cpp_buff
*collect_args
PARAMS ((cpp_reader
*, const cpp_hashnode
*));
53 static cpp_context
*next_context
PARAMS ((cpp_reader
*));
54 static const cpp_token
*padding_token
55 PARAMS ((cpp_reader
*, const cpp_token
*));
56 static void expand_arg
PARAMS ((cpp_reader
*, macro_arg
*));
57 static const cpp_token
*new_string_token
PARAMS ((cpp_reader
*, uchar
*,
59 static const cpp_token
*stringify_arg
PARAMS ((cpp_reader
*, macro_arg
*));
60 static void paste_all_tokens
PARAMS ((cpp_reader
*, const cpp_token
*));
61 static bool paste_tokens
PARAMS ((cpp_reader
*, const cpp_token
**,
63 static void replace_args
PARAMS ((cpp_reader
*, cpp_hashnode
*, cpp_macro
*,
65 static _cpp_buff
*funlike_invocation_p
PARAMS ((cpp_reader
*, cpp_hashnode
*));
66 static bool create_iso_definition
PARAMS ((cpp_reader
*, cpp_macro
*));
68 /* #define directive parsing and handling. */
70 static cpp_token
*alloc_expansion_token
PARAMS ((cpp_reader
*, cpp_macro
*));
71 static cpp_token
*lex_expansion_token
PARAMS ((cpp_reader
*, cpp_macro
*));
72 static bool warn_of_redefinition
PARAMS ((cpp_reader
*, const cpp_hashnode
*,
74 static bool parse_params
PARAMS ((cpp_reader
*, cpp_macro
*));
75 static void check_trad_stringification
PARAMS ((cpp_reader
*,
79 /* Emits a warning if NODE is a macro defined in the main file that
82 _cpp_warn_if_unused_macro (pfile
, node
, v
)
85 void *v ATTRIBUTE_UNUSED
;
87 if (node
->type
== NT_MACRO
&& !(node
->flags
& NODE_BUILTIN
))
89 cpp_macro
*macro
= node
->value
.macro
;
92 /* Skip front-end built-ins and command line macros. */
93 && macro
->line
>= pfile
->first_unused_line
94 && MAIN_FILE_P (lookup_line (&pfile
->line_maps
, macro
->line
)))
95 cpp_error_with_line (pfile
, DL_WARNING
, macro
->line
, 0,
96 "macro \"%s\" is not used", NODE_NAME (node
));
102 /* Allocates and returns a CPP_STRING token, containing TEXT of length
103 LEN, after null-terminating it. TEXT must be in permanent storage. */
104 static const cpp_token
*
105 new_string_token (pfile
, text
, len
)
110 cpp_token
*token
= _cpp_temp_token (pfile
);
113 token
->type
= CPP_STRING
;
114 token
->val
.str
.len
= len
;
115 token
->val
.str
.text
= text
;
120 static const char * const monthnames
[] =
122 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
123 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
126 /* Handle builtin macros like __FILE__, and push the resulting token
127 on the context stack. Also handles _Pragma, for which no new token
128 is created. Returns 1 if it generates a new token context, 0 to
129 return the token to the caller. */
131 _cpp_builtin_macro_text (pfile
, node
)
135 const uchar
*result
= NULL
;
136 unsigned int number
= 1;
138 switch (node
->value
.builtin
)
141 cpp_error (pfile
, DL_ICE
, "invalid built-in macro \"%s\"",
151 const struct line_map
*map
= pfile
->map
;
153 if (node
->value
.builtin
== BT_BASE_FILE
)
154 while (! MAIN_FILE_P (map
))
155 map
= INCLUDED_FROM (&pfile
->line_maps
, map
);
159 buf
= _cpp_unaligned_alloc (pfile
, len
* 4 + 3);
162 buf
= cpp_quote_string (buf
+ 1, (const unsigned char *) name
, len
);
168 case BT_INCLUDE_LEVEL
:
169 /* The line map depth counts the primary source as level 1, but
170 historically __INCLUDE_DEPTH__ has called the primary source
172 number
= pfile
->line_maps
.depth
- 1;
176 /* If __LINE__ is embedded in a macro, it must expand to the
177 line of the macro's invocation, not its definition.
178 Otherwise things like assert() will not work properly. */
179 if (CPP_OPTION (pfile
, traditional
))
180 number
= pfile
->line
;
182 number
= pfile
->cur_token
[-1].line
;
183 number
= SOURCE_LINE (pfile
->map
, number
);
186 /* __STDC__ has the value 1 under normal circumstances.
187 However, if (a) we are in a system header, (b) the option
188 stdc_0_in_system_headers is true (set by target config), and
189 (c) we are not in strictly conforming mode, then it has the
193 if (CPP_IN_SYSTEM_HEADER (pfile
)
194 && CPP_OPTION (pfile
, stdc_0_in_system_headers
)
195 && !CPP_OPTION (pfile
,std
))
204 if (pfile
->date
== NULL
)
206 /* Allocate __DATE__ and __TIME__ strings from permanent
207 storage. We only do this once, and don't generate them
208 at init time, because time() and localtime() are very
209 slow on some systems. */
211 struct tm
*tb
= NULL
;
213 /* (time_t) -1 is a legitimate value for "number of seconds
214 since the Epoch", so we have to do a little dance to
215 distinguish that from a genuine error. */
218 if (tt
!= (time_t)-1 || errno
== 0)
219 tb
= localtime (&tt
);
223 pfile
->date
= _cpp_unaligned_alloc (pfile
,
224 sizeof ("\"Oct 11 1347\""));
225 sprintf ((char *) pfile
->date
, "\"%s %2d %4d\"",
226 monthnames
[tb
->tm_mon
], tb
->tm_mday
, tb
->tm_year
+ 1900);
228 pfile
->time
= _cpp_unaligned_alloc (pfile
,
229 sizeof ("\"12:34:56\""));
230 sprintf ((char *) pfile
->time
, "\"%02d:%02d:%02d\"",
231 tb
->tm_hour
, tb
->tm_min
, tb
->tm_sec
);
235 cpp_errno (pfile
, DL_WARNING
,
236 "could not determine date and time");
238 pfile
->date
= U
"\"??? ?? ????\"";
239 pfile
->time
= U
"\"??:??:??\"";
243 if (node
->value
.builtin
== BT_DATE
)
244 result
= pfile
->date
;
246 result
= pfile
->time
;
252 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
253 result
= _cpp_unaligned_alloc (pfile
, 21);
254 sprintf ((char *) result
, "%u", number
);
260 /* Convert builtin macros like __FILE__ to a token and push it on the
261 context stack. Also handles _Pragma, for which no new token is
262 created. Returns 1 if it generates a new token context, 0 to
263 return the token to the caller. */
265 builtin_macro (pfile
, node
)
271 if (node
->value
.builtin
== BT_PRAGMA
)
273 /* Don't interpret _Pragma within directives. The standard is
274 not clear on this, but to me this makes most sense. */
275 if (pfile
->state
.in_directive
)
278 _cpp_do__Pragma (pfile
);
282 buf
= _cpp_builtin_macro_text (pfile
, node
);
284 cpp_push_buffer (pfile
, buf
, ustrlen (buf
), /* from_stage3 */ true, 1);
286 /* Tweak the column number the lexer will report. */
287 pfile
->buffer
->col_adjust
= pfile
->cur_token
[-1].col
- 1;
289 /* We don't want a leading # to be interpreted as a directive. */
290 pfile
->buffer
->saved_flags
= 0;
292 /* Set pfile->cur_token as required by _cpp_lex_direct. */
293 pfile
->cur_token
= _cpp_temp_token (pfile
);
294 push_token_context (pfile
, NULL
, _cpp_lex_direct (pfile
), 1);
295 if (pfile
->buffer
->cur
!= pfile
->buffer
->rlimit
)
296 cpp_error (pfile
, DL_ICE
, "invalid built-in macro \"%s\"",
298 _cpp_pop_buffer (pfile
);
303 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
304 backslashes and double quotes. Non-printable characters are
305 converted to octal. DEST must be of sufficient size. Returns
306 a pointer to the end of the string. */
308 cpp_quote_string (dest
, src
, len
)
317 if (c
== '\\' || c
== '"')
328 sprintf ((char *) dest
, "\\%03o", c
);
337 /* Convert a token sequence ARG to a single string token according to
338 the rules of the ISO C #-operator. */
339 static const cpp_token
*
340 stringify_arg (pfile
, arg
)
344 unsigned char *dest
= BUFF_FRONT (pfile
->u_buff
);
345 unsigned int i
, escape_it
, backslash_count
= 0;
346 const cpp_token
*source
= NULL
;
349 /* Loop, reading in the argument's tokens. */
350 for (i
= 0; i
< arg
->count
; i
++)
352 const cpp_token
*token
= arg
->first
[i
];
354 if (token
->type
== CPP_PADDING
)
357 source
= token
->val
.source
;
361 escape_it
= (token
->type
== CPP_STRING
|| token
->type
== CPP_WSTRING
362 || token
->type
== CPP_CHAR
|| token
->type
== CPP_WCHAR
);
364 /* Room for each char being written in octal, initial space and
366 len
= cpp_token_len (token
);
371 if ((size_t) (BUFF_LIMIT (pfile
->u_buff
) - dest
) < len
)
373 size_t len_so_far
= dest
- BUFF_FRONT (pfile
->u_buff
);
374 _cpp_extend_buff (pfile
, &pfile
->u_buff
, len
);
375 dest
= BUFF_FRONT (pfile
->u_buff
) + len_so_far
;
378 /* Leading white space? */
379 if (dest
!= BUFF_FRONT (pfile
->u_buff
))
383 if (source
->flags
& PREV_WHITE
)
390 _cpp_buff
*buff
= _cpp_get_buff (pfile
, len
);
391 unsigned char *buf
= BUFF_FRONT (buff
);
392 len
= cpp_spell_token (pfile
, token
, buf
) - buf
;
393 dest
= cpp_quote_string (dest
, buf
, len
);
394 _cpp_release_buff (pfile
, buff
);
397 dest
= cpp_spell_token (pfile
, token
, dest
);
399 if (token
->type
== CPP_OTHER
&& token
->val
.c
== '\\')
405 /* Ignore the final \ of invalid string literals. */
406 if (backslash_count
& 1)
408 cpp_error (pfile
, DL_WARNING
,
409 "invalid string literal, ignoring final '\\'");
413 /* Commit the memory, including NUL, and return the token. */
414 if ((size_t) (BUFF_LIMIT (pfile
->u_buff
) - dest
) < 1)
416 size_t len_so_far
= dest
- BUFF_FRONT (pfile
->u_buff
);
417 _cpp_extend_buff (pfile
, &pfile
->u_buff
, 1);
418 dest
= BUFF_FRONT (pfile
->u_buff
) + len_so_far
;
420 len
= dest
- BUFF_FRONT (pfile
->u_buff
);
421 BUFF_FRONT (pfile
->u_buff
) = dest
+ 1;
422 return new_string_token (pfile
, dest
- len
, len
);
425 /* Try to paste two tokens. On success, return nonzero. In any
426 case, PLHS is updated to point to the pasted token, which is
427 guaranteed to not have the PASTE_LEFT flag set. */
429 paste_tokens (pfile
, plhs
, rhs
)
431 const cpp_token
**plhs
, *rhs
;
433 unsigned char *buf
, *end
;
434 const cpp_token
*lhs
;
439 len
= cpp_token_len (lhs
) + cpp_token_len (rhs
) + 1;
440 buf
= (unsigned char *) alloca (len
);
441 end
= cpp_spell_token (pfile
, lhs
, buf
);
443 /* Avoid comment headers, since they are still processed in stage 3.
444 It is simpler to insert a space here, rather than modifying the
445 lexer to ignore comments in some circumstances. Simply returning
446 false doesn't work, since we want to clear the PASTE_LEFT flag. */
447 if (lhs
->type
== CPP_DIV
&& rhs
->type
!= CPP_EQ
)
449 end
= cpp_spell_token (pfile
, rhs
, end
);
452 cpp_push_buffer (pfile
, buf
, end
- buf
, /* from_stage3 */ true, 1);
454 /* Tweak the column number the lexer will report. */
455 pfile
->buffer
->col_adjust
= pfile
->cur_token
[-1].col
- 1;
457 /* We don't want a leading # to be interpreted as a directive. */
458 pfile
->buffer
->saved_flags
= 0;
460 /* Set pfile->cur_token as required by _cpp_lex_direct. */
461 pfile
->cur_token
= _cpp_temp_token (pfile
);
462 *plhs
= _cpp_lex_direct (pfile
);
463 valid
= pfile
->buffer
->cur
== pfile
->buffer
->rlimit
;
464 _cpp_pop_buffer (pfile
);
469 /* Handles an arbitrarily long sequence of ## operators, with initial
470 operand LHS. This implementation is left-associative,
471 non-recursive, and finishes a paste before handling succeeding
472 ones. If a paste fails, we back up to the RHS of the failing ##
473 operator before pushing the context containing the result of prior
474 successful pastes, with the effect that the RHS appears in the
475 output stream after the pasted LHS normally. */
477 paste_all_tokens (pfile
, lhs
)
479 const cpp_token
*lhs
;
481 const cpp_token
*rhs
;
482 cpp_context
*context
= pfile
->context
;
486 /* Take the token directly from the current context. We can do
487 this, because we are in the replacement list of either an
488 object-like macro, or a function-like macro with arguments
489 inserted. In either case, the constraints to #define
490 guarantee we have at least one more token. */
491 if (context
->direct_p
)
492 rhs
= FIRST (context
).token
++;
494 rhs
= *FIRST (context
).ptoken
++;
496 if (rhs
->type
== CPP_PADDING
)
499 if (!paste_tokens (pfile
, &lhs
, rhs
))
501 _cpp_backup_tokens (pfile
, 1);
503 /* Mandatory error for all apart from assembler. */
504 if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
505 cpp_error (pfile
, DL_ERROR
,
506 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
507 cpp_token_as_text (pfile
, lhs
),
508 cpp_token_as_text (pfile
, rhs
));
512 while (rhs
->flags
& PASTE_LEFT
);
514 /* Put the resulting token in its own context. */
515 push_token_context (pfile
, NULL
, lhs
, 1);
518 /* Returns TRUE if the number of arguments ARGC supplied in an
519 invocation of the MACRO referenced by NODE is valid. An empty
520 invocation to a macro with no parameters should pass ARGC as zero.
522 Note that MACRO cannot necessarily be deduced from NODE, in case
523 NODE was redefined whilst collecting arguments. */
525 _cpp_arguments_ok (pfile
, macro
, node
, argc
)
528 const cpp_hashnode
*node
;
531 if (argc
== macro
->paramc
)
534 if (argc
< macro
->paramc
)
536 /* As an extension, a rest argument is allowed to not appear in
537 the invocation at all.
538 e.g. #define debug(format, args...) something
541 This is exactly the same as if there had been an empty rest
542 argument - debug("string", ). */
544 if (argc
+ 1 == macro
->paramc
&& macro
->variadic
)
546 if (CPP_PEDANTIC (pfile
) && ! macro
->syshdr
)
547 cpp_error (pfile
, DL_PEDWARN
,
548 "ISO C99 requires rest arguments to be used");
552 cpp_error (pfile
, DL_ERROR
,
553 "macro \"%s\" requires %u arguments, but only %u given",
554 NODE_NAME (node
), macro
->paramc
, argc
);
557 cpp_error (pfile
, DL_ERROR
,
558 "macro \"%s\" passed %u arguments, but takes just %u",
559 NODE_NAME (node
), argc
, macro
->paramc
);
564 /* Reads and returns the arguments to a function-like macro
565 invocation. Assumes the opening parenthesis has been processed.
566 If there is an error, emits an appropriate diagnostic and returns
567 NULL. Each argument is terminated by a CPP_EOF token, for the
568 future benefit of expand_arg(). */
570 collect_args (pfile
, node
)
572 const cpp_hashnode
*node
;
574 _cpp_buff
*buff
, *base_buff
;
576 macro_arg
*args
, *arg
;
577 const cpp_token
*token
;
580 macro
= node
->value
.macro
;
582 argc
= macro
->paramc
;
585 buff
= _cpp_get_buff (pfile
, argc
* (50 * sizeof (cpp_token
*)
586 + sizeof (macro_arg
)));
588 args
= (macro_arg
*) buff
->base
;
589 memset (args
, 0, argc
* sizeof (macro_arg
));
590 buff
->cur
= (unsigned char *) &args
[argc
];
591 arg
= args
, argc
= 0;
593 /* Collect the tokens making up each argument. We don't yet know
594 how many arguments have been supplied, whether too many or too
595 few. Hence the slightly bizarre usage of "argc" and "arg". */
598 unsigned int paren_depth
= 0;
599 unsigned int ntokens
= 0;
602 arg
->first
= (const cpp_token
**) buff
->cur
;
606 /* Require space for 2 new tokens (including a CPP_EOF). */
607 if ((unsigned char *) &arg
->first
[ntokens
+ 2] > buff
->limit
)
609 buff
= _cpp_append_extend_buff (pfile
, buff
,
610 1000 * sizeof (cpp_token
*));
611 arg
->first
= (const cpp_token
**) buff
->cur
;
614 token
= cpp_get_token (pfile
);
616 if (token
->type
== CPP_PADDING
)
618 /* Drop leading padding. */
622 else if (token
->type
== CPP_OPEN_PAREN
)
624 else if (token
->type
== CPP_CLOSE_PAREN
)
626 if (paren_depth
-- == 0)
629 else if (token
->type
== CPP_COMMA
)
631 /* A comma does not terminate an argument within
632 parentheses or as part of a variable argument. */
634 && ! (macro
->variadic
&& argc
== macro
->paramc
))
637 else if (token
->type
== CPP_EOF
638 || (token
->type
== CPP_HASH
&& token
->flags
& BOL
))
641 arg
->first
[ntokens
++] = token
;
644 /* Drop trailing padding. */
645 while (ntokens
> 0 && arg
->first
[ntokens
- 1]->type
== CPP_PADDING
)
648 arg
->count
= ntokens
;
649 arg
->first
[ntokens
] = &pfile
->eof
;
651 /* Terminate the argument. Excess arguments loop back and
652 overwrite the final legitimate argument, before failing. */
653 if (argc
<= macro
->paramc
)
655 buff
->cur
= (unsigned char *) &arg
->first
[ntokens
+ 1];
656 if (argc
!= macro
->paramc
)
660 while (token
->type
!= CPP_CLOSE_PAREN
&& token
->type
!= CPP_EOF
);
662 if (token
->type
== CPP_EOF
)
664 /* We still need the CPP_EOF to end directives, and to end
665 pre-expansion of a macro argument. Step back is not
666 unconditional, since we don't want to return a CPP_EOF to our
667 callers at the end of an -include-d file. */
668 if (pfile
->context
->prev
|| pfile
->state
.in_directive
)
669 _cpp_backup_tokens (pfile
, 1);
670 cpp_error (pfile
, DL_ERROR
,
671 "unterminated argument list invoking macro \"%s\"",
676 /* A single empty argument is counted as no argument. */
677 if (argc
== 1 && macro
->paramc
== 0 && args
[0].count
== 0)
679 if (_cpp_arguments_ok (pfile
, macro
, node
, argc
))
681 /* GCC has special semantics for , ## b where b is a varargs
682 parameter: we remove the comma if b was omitted entirely.
683 If b was merely an empty argument, the comma is retained.
684 If the macro takes just one (varargs) parameter, then we
685 retain the comma only if we are standards conforming.
687 If FIRST is NULL replace_args () swallows the comma. */
688 if (macro
->variadic
&& (argc
< macro
->paramc
689 || (argc
== 1 && args
[0].count
== 0
690 && !CPP_OPTION (pfile
, std
))))
691 args
[macro
->paramc
- 1].first
= NULL
;
696 /* An error occurred. */
697 _cpp_release_buff (pfile
, base_buff
);
701 /* Search for an opening parenthesis to the macro of NODE, in such a
702 way that, if none is found, we don't lose the information in any
703 intervening padding tokens. If we find the parenthesis, collect
704 the arguments and return the buffer containing them. */
706 funlike_invocation_p (pfile
, node
)
710 const cpp_token
*token
, *padding
= NULL
;
714 token
= cpp_get_token (pfile
);
715 if (token
->type
!= CPP_PADDING
)
718 || (!(padding
->flags
& PREV_WHITE
) && token
->val
.source
== NULL
))
722 if (token
->type
== CPP_OPEN_PAREN
)
724 pfile
->state
.parsing_args
= 2;
725 return collect_args (pfile
, node
);
728 /* CPP_EOF can be the end of macro arguments, or the end of the
729 file. We mustn't back up over the latter. Ugh. */
730 if (token
->type
!= CPP_EOF
|| token
== &pfile
->eof
)
732 /* Back up. We may have skipped padding, in which case backing
733 up more than one token when expanding macros is in general
734 too difficult. We re-insert it in its own context. */
735 _cpp_backup_tokens (pfile
, 1);
737 push_token_context (pfile
, NULL
, padding
, 1);
743 /* Push the context of a macro with hash entry NODE onto the context
744 stack. If we can successfully expand the macro, we push a context
745 containing its yet-to-be-rescanned replacement list and return one.
746 Otherwise, we don't push a context and return zero. */
748 enter_macro_context (pfile
, node
)
752 /* The presence of a macro invalidates a file's controlling macro. */
753 pfile
->mi_valid
= false;
755 pfile
->state
.angled_headers
= false;
757 /* Handle standard macros. */
758 if (! (node
->flags
& NODE_BUILTIN
))
760 cpp_macro
*macro
= node
->value
.macro
;
766 pfile
->state
.prevent_expansion
++;
767 pfile
->keep_tokens
++;
768 pfile
->state
.parsing_args
= 1;
769 buff
= funlike_invocation_p (pfile
, node
);
770 pfile
->state
.parsing_args
= 0;
771 pfile
->keep_tokens
--;
772 pfile
->state
.prevent_expansion
--;
776 if (CPP_WTRADITIONAL (pfile
) && ! node
->value
.macro
->syshdr
)
777 cpp_error (pfile
, DL_WARNING
,
778 "function-like macro \"%s\" must be used with arguments in traditional C",
784 if (macro
->paramc
> 0)
785 replace_args (pfile
, node
, macro
, (macro_arg
*) buff
->base
);
786 _cpp_release_buff (pfile
, buff
);
789 /* Disable the macro within its expansion. */
790 node
->flags
|= NODE_DISABLED
;
794 if (macro
->paramc
== 0)
795 push_token_context (pfile
, node
, macro
->exp
.tokens
, macro
->count
);
800 /* Handle built-in macros and the _Pragma operator. */
801 return builtin_macro (pfile
, node
);
804 /* Replace the parameters in a function-like macro of NODE with the
805 actual ARGS, and place the result in a newly pushed token context.
806 Expand each argument before replacing, unless it is operated upon
807 by the # or ## operators. */
809 replace_args (pfile
, node
, macro
, args
)
815 unsigned int i
, total
;
816 const cpp_token
*src
, *limit
;
817 const cpp_token
**dest
, **first
;
821 /* First, fully macro-expand arguments, calculating the number of
822 tokens in the final expansion as we go. The ordering of the if
823 statements below is subtle; we must handle stringification before
825 total
= macro
->count
;
826 limit
= macro
->exp
.tokens
+ macro
->count
;
828 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
829 if (src
->type
== CPP_MACRO_ARG
)
831 /* Leading and trailing padding tokens. */
834 /* We have an argument. If it is not being stringified or
835 pasted it is macro-replaced before insertion. */
836 arg
= &args
[src
->val
.arg_no
- 1];
838 if (src
->flags
& STRINGIFY_ARG
)
840 if (!arg
->stringified
)
841 arg
->stringified
= stringify_arg (pfile
, arg
);
843 else if ((src
->flags
& PASTE_LEFT
)
844 || (src
> macro
->exp
.tokens
&& (src
[-1].flags
& PASTE_LEFT
)))
845 total
+= arg
->count
- 1;
849 expand_arg (pfile
, arg
);
850 total
+= arg
->expanded_count
- 1;
854 /* Now allocate space for the expansion, copy the tokens and replace
856 buff
= _cpp_get_buff (pfile
, total
* sizeof (cpp_token
*));
857 first
= (const cpp_token
**) buff
->base
;
860 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
863 const cpp_token
**from
, **paste_flag
;
865 if (src
->type
!= CPP_MACRO_ARG
)
872 arg
= &args
[src
->val
.arg_no
- 1];
873 if (src
->flags
& STRINGIFY_ARG
)
874 count
= 1, from
= &arg
->stringified
;
875 else if (src
->flags
& PASTE_LEFT
)
876 count
= arg
->count
, from
= arg
->first
;
877 else if (src
!= macro
->exp
.tokens
&& (src
[-1].flags
& PASTE_LEFT
))
879 count
= arg
->count
, from
= arg
->first
;
882 if (dest
[-1]->type
== CPP_COMMA
884 && src
->val
.arg_no
== macro
->paramc
)
886 /* Swallow a pasted comma if from == NULL, otherwise
887 drop the paste flag. */
891 paste_flag
= dest
- 1;
893 /* Remove the paste flag if the RHS is a placemarker. */
895 paste_flag
= dest
- 1;
899 count
= arg
->expanded_count
, from
= arg
->expanded
;
901 /* Padding on the left of an argument (unless RHS of ##). */
902 if (!pfile
->state
.in_directive
903 && src
!= macro
->exp
.tokens
&& !(src
[-1].flags
& PASTE_LEFT
))
904 *dest
++ = padding_token (pfile
, src
);
908 memcpy (dest
, from
, count
* sizeof (cpp_token
*));
911 /* With a non-empty argument on the LHS of ##, the last
912 token should be flagged PASTE_LEFT. */
913 if (src
->flags
& PASTE_LEFT
)
914 paste_flag
= dest
- 1;
917 /* Avoid paste on RHS (even case count == 0). */
918 if (!pfile
->state
.in_directive
&& !(src
->flags
& PASTE_LEFT
))
919 *dest
++ = &pfile
->avoid_paste
;
921 /* Add a new paste flag, or remove an unwanted one. */
924 cpp_token
*token
= _cpp_temp_token (pfile
);
925 token
->type
= (*paste_flag
)->type
;
926 token
->val
.str
= (*paste_flag
)->val
.str
;
927 if (src
->flags
& PASTE_LEFT
)
928 token
->flags
= (*paste_flag
)->flags
| PASTE_LEFT
;
930 token
->flags
= (*paste_flag
)->flags
& ~PASTE_LEFT
;
935 /* Free the expanded arguments. */
936 for (i
= 0; i
< macro
->paramc
; i
++)
937 if (args
[i
].expanded
)
938 free (args
[i
].expanded
);
940 push_ptoken_context (pfile
, node
, buff
, first
, dest
- first
);
943 /* Return a special padding token, with padding inherited from SOURCE. */
944 static const cpp_token
*
945 padding_token (pfile
, source
)
947 const cpp_token
*source
;
949 cpp_token
*result
= _cpp_temp_token (pfile
);
951 result
->type
= CPP_PADDING
;
952 result
->val
.source
= source
;
957 /* Get a new uninitialized context. Create a new one if we cannot
958 re-use an old one. */
963 cpp_context
*result
= pfile
->context
->next
;
967 result
= xnew (cpp_context
);
968 result
->prev
= pfile
->context
;
970 pfile
->context
->next
= result
;
973 pfile
->context
= result
;
977 /* Push a list of pointers to tokens. */
979 push_ptoken_context (pfile
, macro
, buff
, first
, count
)
983 const cpp_token
**first
;
986 cpp_context
*context
= next_context (pfile
);
988 context
->direct_p
= false;
989 context
->macro
= macro
;
990 context
->buff
= buff
;
991 FIRST (context
).ptoken
= first
;
992 LAST (context
).ptoken
= first
+ count
;
995 /* Push a list of tokens. */
997 push_token_context (pfile
, macro
, first
, count
)
1000 const cpp_token
*first
;
1003 cpp_context
*context
= next_context (pfile
);
1005 context
->direct_p
= true;
1006 context
->macro
= macro
;
1007 context
->buff
= NULL
;
1008 FIRST (context
).token
= first
;
1009 LAST (context
).token
= first
+ count
;
1012 /* Push a traditional macro's replacement text. */
1014 _cpp_push_text_context (pfile
, macro
, start
, len
)
1016 cpp_hashnode
*macro
;
1020 cpp_context
*context
= next_context (pfile
);
1022 context
->direct_p
= true;
1023 context
->macro
= macro
;
1024 context
->buff
= NULL
;
1025 CUR (context
) = start
;
1026 RLIMIT (context
) = start
+ len
;
1027 macro
->flags
|= NODE_DISABLED
;
1030 /* Expand an argument ARG before replacing parameters in a
1031 function-like macro. This works by pushing a context with the
1032 argument's tokens, and then expanding that into a temporary buffer
1033 as if it were a normal part of the token stream. collect_args()
1034 has terminated the argument's tokens with a CPP_EOF so that we know
1035 when we have fully expanded the argument. */
1037 expand_arg (pfile
, arg
)
1041 unsigned int capacity
;
1042 bool saved_warn_trad
;
1044 if (arg
->count
== 0)
1047 /* Don't warn about funlike macros when pre-expanding. */
1048 saved_warn_trad
= CPP_WTRADITIONAL (pfile
);
1049 CPP_WTRADITIONAL (pfile
) = 0;
1051 /* Loop, reading in the arguments. */
1053 arg
->expanded
= (const cpp_token
**)
1054 xmalloc (capacity
* sizeof (cpp_token
*));
1056 push_ptoken_context (pfile
, NULL
, NULL
, arg
->first
, arg
->count
+ 1);
1059 const cpp_token
*token
;
1061 if (arg
->expanded_count
+ 1 >= capacity
)
1064 arg
->expanded
= (const cpp_token
**)
1065 xrealloc (arg
->expanded
, capacity
* sizeof (cpp_token
*));
1068 token
= cpp_get_token (pfile
);
1070 if (token
->type
== CPP_EOF
)
1073 arg
->expanded
[arg
->expanded_count
++] = token
;
1076 _cpp_pop_context (pfile
);
1078 CPP_WTRADITIONAL (pfile
) = saved_warn_trad
;
1081 /* Pop the current context off the stack, re-enabling the macro if the
1082 context represented a macro's replacement list. The context
1083 structure is not freed so that we can re-use it later. */
1085 _cpp_pop_context (pfile
)
1088 cpp_context
*context
= pfile
->context
;
1091 context
->macro
->flags
&= ~NODE_DISABLED
;
1094 _cpp_release_buff (pfile
, context
->buff
);
1096 pfile
->context
= context
->prev
;
1099 /* Eternal routine to get a token. Also used nearly everywhere
1100 internally, except for places where we know we can safely call
1101 the lexer directly, such as lexing a directive name.
1103 Macro expansions and directives are transparently handled,
1104 including entering included files. Thus tokens are post-macro
1105 expansion, and after any intervening directives. External callers
1106 see CPP_EOF only at EOF. Internal callers also see it when meeting
1107 a directive inside a macro call, when at the end of a directive and
1108 state.in_directive is still 1, and at the end of argument
1111 cpp_get_token (pfile
)
1114 const cpp_token
*result
;
1119 cpp_context
*context
= pfile
->context
;
1121 /* Context->prev == 0 <=> base context. */
1123 result
= _cpp_lex_token (pfile
);
1124 else if (FIRST (context
).token
!= LAST (context
).token
)
1126 if (context
->direct_p
)
1127 result
= FIRST (context
).token
++;
1129 result
= *FIRST (context
).ptoken
++;
1131 if (result
->flags
& PASTE_LEFT
)
1133 paste_all_tokens (pfile
, result
);
1134 if (pfile
->state
.in_directive
)
1136 return padding_token (pfile
, result
);
1141 _cpp_pop_context (pfile
);
1142 if (pfile
->state
.in_directive
)
1144 return &pfile
->avoid_paste
;
1147 if (pfile
->state
.in_directive
&& result
->type
== CPP_COMMENT
)
1150 if (result
->type
!= CPP_NAME
)
1153 node
= result
->val
.node
;
1155 if (node
->type
!= NT_MACRO
|| (result
->flags
& NO_EXPAND
))
1158 if (!(node
->flags
& NODE_DISABLED
))
1160 if (!pfile
->state
.prevent_expansion
1161 && enter_macro_context (pfile
, node
))
1163 if (pfile
->state
.in_directive
)
1165 return padding_token (pfile
, result
);
1170 /* Flag this token as always unexpandable. FIXME: move this
1171 to collect_args()?. */
1172 cpp_token
*t
= _cpp_temp_token (pfile
);
1173 t
->type
= result
->type
;
1174 t
->flags
= result
->flags
| NO_EXPAND
;
1175 t
->val
.str
= result
->val
.str
;
1185 /* Returns true if we're expanding an object-like macro that was
1186 defined in a system header. Just checks the macro at the top of
1187 the stack. Used for diagnostic suppression. */
1189 cpp_sys_macro_p (pfile
)
1192 cpp_hashnode
*node
= pfile
->context
->macro
;
1194 return node
&& node
->value
.macro
&& node
->value
.macro
->syshdr
;
1197 /* Read each token in, until end of the current file. Directives are
1198 transparently processed. */
1200 cpp_scan_nooutput (pfile
)
1203 /* Request a CPP_EOF token at the end of this file, rather than
1204 transparently continuing with the including file. */
1205 pfile
->buffer
->return_at_eof
= true;
1207 if (CPP_OPTION (pfile
, traditional
))
1208 while (_cpp_read_logical_line_trad (pfile
))
1211 while (cpp_get_token (pfile
)->type
!= CPP_EOF
)
1215 /* Step back one (or more) tokens. Can only step mack more than 1 if
1216 they are from the lexer, and not from macro expansion. */
1218 _cpp_backup_tokens (pfile
, count
)
1222 if (pfile
->context
->prev
== NULL
)
1224 pfile
->lookaheads
+= count
;
1228 if (pfile
->cur_token
== pfile
->cur_run
->base
1229 /* Possible with -fpreprocessed and no leading #line. */
1230 && pfile
->cur_run
->prev
!= NULL
)
1232 pfile
->cur_run
= pfile
->cur_run
->prev
;
1233 pfile
->cur_token
= pfile
->cur_run
->limit
;
1241 if (pfile
->context
->direct_p
)
1242 FIRST (pfile
->context
).token
--;
1244 FIRST (pfile
->context
).ptoken
--;
1248 /* #define directive parsing and handling. */
1250 /* Returns nonzero if a macro redefinition warning is required. */
1252 warn_of_redefinition (pfile
, node
, macro2
)
1254 const cpp_hashnode
*node
;
1255 const cpp_macro
*macro2
;
1257 const cpp_macro
*macro1
;
1260 /* Some redefinitions need to be warned about regardless. */
1261 if (node
->flags
& NODE_WARN
)
1264 /* Redefinition of a macro is allowed if and only if the old and new
1265 definitions are the same. (6.10.3 paragraph 2). */
1266 macro1
= node
->value
.macro
;
1268 /* Don't check count here as it can be different in valid
1269 traditional redefinitions with just whitespace differences. */
1270 if (macro1
->paramc
!= macro2
->paramc
1271 || macro1
->fun_like
!= macro2
->fun_like
1272 || macro1
->variadic
!= macro2
->variadic
)
1275 /* Check parameter spellings. */
1276 for (i
= 0; i
< macro1
->paramc
; i
++)
1277 if (macro1
->params
[i
] != macro2
->params
[i
])
1280 /* Check the replacement text or tokens. */
1281 if (CPP_OPTION (pfile
, traditional
))
1282 return _cpp_expansions_different_trad (macro1
, macro2
);
1284 if (macro1
->count
== macro2
->count
)
1285 for (i
= 0; i
< macro1
->count
; i
++)
1286 if (!_cpp_equiv_tokens (¯o1
->exp
.tokens
[i
], ¯o2
->exp
.tokens
[i
]))
1292 /* Free the definition of hashnode H. */
1294 _cpp_free_definition (h
)
1297 /* Macros and assertions no longer have anything to free. */
1299 /* Clear builtin flag in case of redefinition. */
1300 h
->flags
&= ~(NODE_BUILTIN
| NODE_DISABLED
);
1303 /* Save parameter NODE to the parameter list of macro MACRO. Returns
1304 zero on success, nonzero if the parameter is a duplicate. */
1306 _cpp_save_parameter (pfile
, macro
, node
)
1312 /* Constraint 6.10.3.6 - duplicate parameter names. */
1313 if (node
->flags
& NODE_MACRO_ARG
)
1315 cpp_error (pfile
, DL_ERROR
, "duplicate macro parameter \"%s\"",
1320 if (BUFF_ROOM (pfile
->a_buff
)
1321 < (macro
->paramc
+ 1) * sizeof (cpp_hashnode
*))
1322 _cpp_extend_buff (pfile
, &pfile
->a_buff
, sizeof (cpp_hashnode
*));
1324 ((cpp_hashnode
**) BUFF_FRONT (pfile
->a_buff
))[macro
->paramc
++] = node
;
1325 node
->flags
|= NODE_MACRO_ARG
;
1326 len
= macro
->paramc
* sizeof (union _cpp_hashnode_value
);
1327 if (len
> pfile
->macro_buffer_len
)
1329 pfile
->macro_buffer
= (uchar
*) xrealloc (pfile
->macro_buffer
, len
);
1330 pfile
->macro_buffer_len
= len
;
1332 ((union _cpp_hashnode_value
*) pfile
->macro_buffer
)[macro
->paramc
- 1]
1335 node
->value
.arg_index
= macro
->paramc
;
1339 /* Check the syntax of the parameters in a MACRO definition. Returns
1340 false if an error occurs. */
1342 parse_params (pfile
, macro
)
1346 unsigned int prev_ident
= 0;
1350 const cpp_token
*token
= _cpp_lex_token (pfile
);
1352 switch (token
->type
)
1355 /* Allow/ignore comments in parameter lists if we are
1356 preserving comments in macro expansions. */
1357 if (token
->type
== CPP_COMMENT
1358 && ! CPP_OPTION (pfile
, discard_comments_in_macro_exp
))
1361 cpp_error (pfile
, DL_ERROR
,
1362 "\"%s\" may not appear in macro parameter list",
1363 cpp_token_as_text (pfile
, token
));
1369 cpp_error (pfile
, DL_ERROR
,
1370 "macro parameters must be comma-separated");
1375 if (_cpp_save_parameter (pfile
, macro
, token
->val
.node
))
1379 case CPP_CLOSE_PAREN
:
1380 if (prev_ident
|| macro
->paramc
== 0)
1383 /* Fall through to pick up the error. */
1387 cpp_error (pfile
, DL_ERROR
, "parameter name missing");
1394 macro
->variadic
= 1;
1397 _cpp_save_parameter (pfile
, macro
,
1398 pfile
->spec_nodes
.n__VA_ARGS__
);
1399 pfile
->state
.va_args_ok
= 1;
1400 if (! CPP_OPTION (pfile
, c99
) && CPP_OPTION (pfile
, pedantic
))
1401 cpp_error (pfile
, DL_PEDWARN
,
1402 "anonymous variadic macros were introduced in C99");
1404 else if (CPP_OPTION (pfile
, pedantic
))
1405 cpp_error (pfile
, DL_PEDWARN
,
1406 "ISO C does not permit named variadic macros");
1408 /* We're at the end, and just expect a closing parenthesis. */
1409 token
= _cpp_lex_token (pfile
);
1410 if (token
->type
== CPP_CLOSE_PAREN
)
1415 cpp_error (pfile
, DL_ERROR
, "missing ')' in macro parameter list");
1421 /* Allocate room for a token from a macro's replacement list. */
1423 alloc_expansion_token (pfile
, macro
)
1427 if (BUFF_ROOM (pfile
->a_buff
) < (macro
->count
+ 1) * sizeof (cpp_token
))
1428 _cpp_extend_buff (pfile
, &pfile
->a_buff
, sizeof (cpp_token
));
1430 return &((cpp_token
*) BUFF_FRONT (pfile
->a_buff
))[macro
->count
++];
1433 /* Lex a token from the expansion of MACRO, but mark parameters as we
1434 find them and warn of traditional stringification. */
1436 lex_expansion_token (pfile
, macro
)
1442 pfile
->cur_token
= alloc_expansion_token (pfile
, macro
);
1443 token
= _cpp_lex_direct (pfile
);
1445 /* Is this a parameter? */
1446 if (token
->type
== CPP_NAME
1447 && (token
->val
.node
->flags
& NODE_MACRO_ARG
) != 0)
1449 token
->type
= CPP_MACRO_ARG
;
1450 token
->val
.arg_no
= token
->val
.node
->value
.arg_index
;
1452 else if (CPP_WTRADITIONAL (pfile
) && macro
->paramc
> 0
1453 && (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
))
1454 check_trad_stringification (pfile
, macro
, &token
->val
.str
);
1460 create_iso_definition (pfile
, macro
)
1465 const cpp_token
*ctoken
;
1467 /* Get the first token of the expansion (or the '(' of a
1468 function-like macro). */
1469 ctoken
= _cpp_lex_token (pfile
);
1471 if (ctoken
->type
== CPP_OPEN_PAREN
&& !(ctoken
->flags
& PREV_WHITE
))
1473 bool ok
= parse_params (pfile
, macro
);
1474 macro
->params
= (cpp_hashnode
**) BUFF_FRONT (pfile
->a_buff
);
1478 /* Success. Commit the parameter array. */
1479 BUFF_FRONT (pfile
->a_buff
) = (uchar
*) ¯o
->params
[macro
->paramc
];
1480 macro
->fun_like
= 1;
1482 else if (ctoken
->type
!= CPP_EOF
&& !(ctoken
->flags
& PREV_WHITE
))
1483 cpp_error (pfile
, DL_PEDWARN
,
1484 "ISO C requires whitespace after the macro name");
1486 if (macro
->fun_like
)
1487 token
= lex_expansion_token (pfile
, macro
);
1490 token
= alloc_expansion_token (pfile
, macro
);
1496 /* Check the stringifying # constraint 6.10.3.2.1 of
1497 function-like macros when lexing the subsequent token. */
1498 if (macro
->count
> 1 && token
[-1].type
== CPP_HASH
&& macro
->fun_like
)
1500 if (token
->type
== CPP_MACRO_ARG
)
1502 token
->flags
&= ~PREV_WHITE
;
1503 token
->flags
|= STRINGIFY_ARG
;
1504 token
->flags
|= token
[-1].flags
& PREV_WHITE
;
1505 token
[-1] = token
[0];
1508 /* Let assembler get away with murder. */
1509 else if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
1511 cpp_error (pfile
, DL_ERROR
,
1512 "'#' is not followed by a macro parameter");
1517 if (token
->type
== CPP_EOF
)
1520 /* Paste operator constraint 6.10.3.3.1. */
1521 if (token
->type
== CPP_PASTE
)
1523 /* Token-paste ##, can appear in both object-like and
1524 function-like macros, but not at the ends. */
1525 if (--macro
->count
> 0)
1526 token
= lex_expansion_token (pfile
, macro
);
1528 if (macro
->count
== 0 || token
->type
== CPP_EOF
)
1530 cpp_error (pfile
, DL_ERROR
,
1531 "'##' cannot appear at either end of a macro expansion");
1535 token
[-1].flags
|= PASTE_LEFT
;
1538 token
= lex_expansion_token (pfile
, macro
);
1541 macro
->exp
.tokens
= (cpp_token
*) BUFF_FRONT (pfile
->a_buff
);
1543 /* Don't count the CPP_EOF. */
1546 /* Clear whitespace on first token for warn_of_redefinition(). */
1548 macro
->exp
.tokens
[0].flags
&= ~PREV_WHITE
;
1550 /* Commit the memory. */
1551 BUFF_FRONT (pfile
->a_buff
) = (uchar
*) ¯o
->exp
.tokens
[macro
->count
];
1556 /* Parse a macro and save its expansion. Returns nonzero on success. */
1558 _cpp_create_definition (pfile
, node
)
1566 macro
= (cpp_macro
*) _cpp_aligned_alloc (pfile
, sizeof (cpp_macro
));
1567 macro
->line
= pfile
->directive_line
;
1570 macro
->variadic
= 0;
1573 macro
->fun_like
= 0;
1574 /* To suppress some diagnostics. */
1575 macro
->syshdr
= pfile
->map
->sysp
!= 0;
1577 if (CPP_OPTION (pfile
, traditional
))
1578 ok
= _cpp_create_trad_definition (pfile
, macro
);
1581 cpp_token
*saved_cur_token
= pfile
->cur_token
;
1583 ok
= create_iso_definition (pfile
, macro
);
1585 /* Restore lexer position because of games lex_expansion_token()
1586 plays lexing the macro. We set the type for SEEN_EOL() in
1589 Longer term we should lex the whole line before coming here,
1590 and just copy the expansion. */
1591 saved_cur_token
[-1].type
= pfile
->cur_token
[-1].type
;
1592 pfile
->cur_token
= saved_cur_token
;
1594 /* Stop the lexer accepting __VA_ARGS__. */
1595 pfile
->state
.va_args_ok
= 0;
1598 /* Clear the fast argument lookup indices. */
1599 for (i
= macro
->paramc
; i
-- > 0; )
1601 struct cpp_hashnode
*node
= macro
->params
[i
];
1602 node
->flags
&= ~ NODE_MACRO_ARG
;
1603 node
->value
= ((union _cpp_hashnode_value
*) pfile
->macro_buffer
)[i
];
1609 if (node
->type
== NT_MACRO
)
1611 if (CPP_OPTION (pfile
, warn_unused_macros
))
1612 _cpp_warn_if_unused_macro (pfile
, node
, NULL
);
1614 if (warn_of_redefinition (pfile
, node
, macro
))
1616 cpp_error_with_line (pfile
, DL_PEDWARN
, pfile
->directive_line
, 0,
1617 "\"%s\" redefined", NODE_NAME (node
));
1619 if (node
->type
== NT_MACRO
&& !(node
->flags
& NODE_BUILTIN
))
1620 cpp_error_with_line (pfile
, DL_PEDWARN
,
1621 node
->value
.macro
->line
, 0,
1622 "this is the location of the previous definition");
1626 if (node
->type
!= NT_VOID
)
1627 _cpp_free_definition (node
);
1629 /* Enter definition in hash table. */
1630 node
->type
= NT_MACRO
;
1631 node
->value
.macro
= macro
;
1632 if (! ustrncmp (NODE_NAME (node
), DSC ("__STDC_")))
1633 node
->flags
|= NODE_WARN
;
1638 /* Warn if a token in STRING matches one of a function-like MACRO's
1641 check_trad_stringification (pfile
, macro
, string
)
1643 const cpp_macro
*macro
;
1644 const cpp_string
*string
;
1646 unsigned int i
, len
;
1647 const uchar
*p
, *q
, *limit
= string
->text
+ string
->len
;
1649 /* Loop over the string. */
1650 for (p
= string
->text
; p
< limit
; p
= q
)
1652 /* Find the start of an identifier. */
1653 while (p
< limit
&& !is_idstart (*p
))
1656 /* Find the end of the identifier. */
1658 while (q
< limit
&& is_idchar (*q
))
1663 /* Loop over the function macro arguments to see if the
1664 identifier inside the string matches one of them. */
1665 for (i
= 0; i
< macro
->paramc
; i
++)
1667 const cpp_hashnode
*node
= macro
->params
[i
];
1669 if (NODE_LEN (node
) == len
1670 && !memcmp (p
, NODE_NAME (node
), len
))
1672 cpp_error (pfile
, DL_WARNING
,
1673 "macro argument \"%s\" would be stringified in traditional C",
1681 /* Returns the name, arguments and expansion of a macro, in a format
1682 suitable to be read back in again, and therefore also for DWARF 2
1683 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1684 Caller is expected to generate the "#define" bit if needed. The
1685 returned text is temporary, and automatically freed later. */
1686 const unsigned char *
1687 cpp_macro_definition (pfile
, node
)
1689 const cpp_hashnode
*node
;
1691 unsigned int i
, len
;
1692 const cpp_macro
*macro
= node
->value
.macro
;
1693 unsigned char *buffer
;
1695 if (node
->type
!= NT_MACRO
|| (node
->flags
& NODE_BUILTIN
))
1697 cpp_error (pfile
, DL_ICE
,
1698 "invalid hash type %d in cpp_macro_definition", node
->type
);
1702 /* Calculate length. */
1703 len
= NODE_LEN (node
) + 2; /* ' ' and NUL. */
1704 if (macro
->fun_like
)
1706 len
+= 4; /* "()" plus possible final ".." of named
1707 varargs (we have + 1 below). */
1708 for (i
= 0; i
< macro
->paramc
; i
++)
1709 len
+= NODE_LEN (macro
->params
[i
]) + 1; /* "," */
1712 if (CPP_OPTION (pfile
, traditional
))
1713 len
+= _cpp_replacement_text_len (macro
);
1716 for (i
= 0; i
< macro
->count
; i
++)
1718 cpp_token
*token
= ¯o
->exp
.tokens
[i
];
1720 if (token
->type
== CPP_MACRO_ARG
)
1721 len
+= NODE_LEN (macro
->params
[token
->val
.arg_no
- 1]);
1723 len
+= cpp_token_len (token
); /* Includes room for ' '. */
1724 if (token
->flags
& STRINGIFY_ARG
)
1726 if (token
->flags
& PASTE_LEFT
)
1727 len
+= 3; /* " ##" */
1731 if (len
> pfile
->macro_buffer_len
)
1733 pfile
->macro_buffer
= (uchar
*) xrealloc (pfile
->macro_buffer
, len
);
1734 pfile
->macro_buffer_len
= len
;
1737 /* Fill in the buffer. Start with the macro name. */
1738 buffer
= pfile
->macro_buffer
;
1739 memcpy (buffer
, NODE_NAME (node
), NODE_LEN (node
));
1740 buffer
+= NODE_LEN (node
);
1742 /* Parameter names. */
1743 if (macro
->fun_like
)
1746 for (i
= 0; i
< macro
->paramc
; i
++)
1748 cpp_hashnode
*param
= macro
->params
[i
];
1750 if (param
!= pfile
->spec_nodes
.n__VA_ARGS__
)
1752 memcpy (buffer
, NODE_NAME (param
), NODE_LEN (param
));
1753 buffer
+= NODE_LEN (param
);
1756 if (i
+ 1 < macro
->paramc
)
1757 /* Don't emit a space after the comma here; we're trying
1758 to emit a Dwarf-friendly definition, and the Dwarf spec
1759 forbids spaces in the argument list. */
1761 else if (macro
->variadic
)
1762 *buffer
++ = '.', *buffer
++ = '.', *buffer
++ = '.';
1767 /* The Dwarf spec requires a space after the macro name, even if the
1768 definition is the empty string. */
1771 if (CPP_OPTION (pfile
, traditional
))
1772 buffer
= _cpp_copy_replacement_text (macro
, buffer
);
1773 else if (macro
->count
)
1774 /* Expansion tokens. */
1776 for (i
= 0; i
< macro
->count
; i
++)
1778 cpp_token
*token
= ¯o
->exp
.tokens
[i
];
1780 if (token
->flags
& PREV_WHITE
)
1782 if (token
->flags
& STRINGIFY_ARG
)
1785 if (token
->type
== CPP_MACRO_ARG
)
1787 len
= NODE_LEN (macro
->params
[token
->val
.arg_no
- 1]);
1789 NODE_NAME (macro
->params
[token
->val
.arg_no
- 1]), len
);
1793 buffer
= cpp_spell_token (pfile
, token
, buffer
);
1795 if (token
->flags
& PASTE_LEFT
)
1800 /* Next has PREV_WHITE; see _cpp_create_definition. */
1806 return pfile
->macro_buffer
;