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, 2005 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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_ptoken_context (cpp_reader
*, cpp_hashnode
*, _cpp_buff
*,
46 const cpp_token
**, unsigned int);
47 static _cpp_buff
*collect_args (cpp_reader
*, const cpp_hashnode
*);
48 static cpp_context
*next_context (cpp_reader
*);
49 static const cpp_token
*padding_token (cpp_reader
*, const cpp_token
*);
50 static void expand_arg (cpp_reader
*, macro_arg
*);
51 static const cpp_token
*new_string_token (cpp_reader
*, uchar
*, unsigned int);
52 static const cpp_token
*stringify_arg (cpp_reader
*, macro_arg
*);
53 static void paste_all_tokens (cpp_reader
*, const cpp_token
*);
54 static bool paste_tokens (cpp_reader
*, const cpp_token
**, const cpp_token
*);
55 static void replace_args (cpp_reader
*, cpp_hashnode
*, cpp_macro
*,
57 static _cpp_buff
*funlike_invocation_p (cpp_reader
*, cpp_hashnode
*);
58 static bool create_iso_definition (cpp_reader
*, cpp_macro
*);
60 /* #define directive parsing and handling. */
62 static cpp_token
*alloc_expansion_token (cpp_reader
*, cpp_macro
*);
63 static cpp_token
*lex_expansion_token (cpp_reader
*, cpp_macro
*);
64 static bool warn_of_redefinition (cpp_reader
*, const cpp_hashnode
*,
66 static bool parse_params (cpp_reader
*, cpp_macro
*);
67 static void check_trad_stringification (cpp_reader
*, const cpp_macro
*,
70 /* Emits a warning if NODE is a macro defined in the main file that
73 _cpp_warn_if_unused_macro (cpp_reader
*pfile
, cpp_hashnode
*node
,
74 void *v ATTRIBUTE_UNUSED
)
76 if (node
->type
== NT_MACRO
&& !(node
->flags
& NODE_BUILTIN
))
78 cpp_macro
*macro
= node
->value
.macro
;
81 && MAIN_FILE_P (linemap_lookup (pfile
->line_table
, macro
->line
)))
82 cpp_error_with_line (pfile
, CPP_DL_WARNING
, macro
->line
, 0,
83 "macro \"%s\" is not used", NODE_NAME (node
));
89 /* Allocates and returns a CPP_STRING token, containing TEXT of length
90 LEN, after null-terminating it. TEXT must be in permanent storage. */
91 static const cpp_token
*
92 new_string_token (cpp_reader
*pfile
, unsigned char *text
, unsigned int len
)
94 cpp_token
*token
= _cpp_temp_token (pfile
);
97 token
->type
= CPP_STRING
;
98 token
->val
.str
.len
= len
;
99 token
->val
.str
.text
= text
;
104 static const char * const monthnames
[] =
106 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
107 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
110 /* Helper function for builtin_macro. Returns the text generated by
113 _cpp_builtin_macro_text (cpp_reader
*pfile
, cpp_hashnode
*node
)
115 const struct line_map
*map
;
116 const uchar
*result
= NULL
;
117 unsigned int number
= 1;
119 switch (node
->value
.builtin
)
122 cpp_error (pfile
, CPP_DL_ICE
, "invalid built-in macro \"%s\"",
128 cpp_buffer
*pbuffer
= cpp_get_buffer (pfile
);
129 if (pbuffer
->timestamp
== NULL
)
131 /* Initialize timestamp value of the assotiated file. */
132 struct _cpp_file
*file
= cpp_get_file (pbuffer
);
135 /* Generate __TIMESTAMP__ string, that represents
136 the date and time of the last modification
137 of the current source file. The string constant
138 looks like "Sun Sep 16 01:03:52 1973". */
139 struct tm
*tb
= NULL
;
140 struct stat
*st
= _cpp_get_file_stat (file
);
142 tb
= localtime (&st
->st_mtime
);
145 char *str
= asctime (tb
);
146 size_t len
= strlen (str
);
147 unsigned char *buf
= _cpp_unaligned_alloc (pfile
, len
+ 2);
149 strcpy ((char *) buf
+ 1, str
);
151 pbuffer
->timestamp
= buf
;
155 cpp_errno (pfile
, CPP_DL_WARNING
,
156 "could not determine file timestamp");
157 pbuffer
->timestamp
= U
"\"??? ??? ?? ??:??:?? ????\"";
161 result
= pbuffer
->timestamp
;
170 map
= linemap_lookup (pfile
->line_table
, pfile
->line_table
->highest_line
);
172 if (node
->value
.builtin
== BT_BASE_FILE
)
173 while (! MAIN_FILE_P (map
))
174 map
= INCLUDED_FROM (pfile
->line_table
, map
);
178 buf
= _cpp_unaligned_alloc (pfile
, len
* 2 + 3);
181 buf
= cpp_quote_string (buf
+ 1, (const unsigned char *) name
, len
);
187 case BT_INCLUDE_LEVEL
:
188 /* The line map depth counts the primary source as level 1, but
189 historically __INCLUDE_DEPTH__ has called the primary source
191 number
= pfile
->line_table
->depth
- 1;
195 map
= &pfile
->line_table
->maps
[pfile
->line_table
->used
-1];
196 /* If __LINE__ is embedded in a macro, it must expand to the
197 line of the macro's invocation, not its definition.
198 Otherwise things like assert() will not work properly. */
199 if (CPP_OPTION (pfile
, traditional
))
200 number
= pfile
->line_table
->highest_line
;
202 number
= pfile
->cur_token
[-1].src_loc
;
203 number
= SOURCE_LINE (map
, number
);
206 /* __STDC__ has the value 1 under normal circumstances.
207 However, if (a) we are in a system header, (b) the option
208 stdc_0_in_system_headers is true (set by target config), and
209 (c) we are not in strictly conforming mode, then it has the
210 value 0. (b) and (c) are already checked in cpp_init_builtins. */
212 if (cpp_in_system_header (pfile
))
220 if (pfile
->date
== NULL
)
222 /* Allocate __DATE__ and __TIME__ strings from permanent
223 storage. We only do this once, and don't generate them
224 at init time, because time() and localtime() are very
225 slow on some systems. */
227 struct tm
*tb
= NULL
;
229 /* (time_t) -1 is a legitimate value for "number of seconds
230 since the Epoch", so we have to do a little dance to
231 distinguish that from a genuine error. */
234 if (tt
!= (time_t)-1 || errno
== 0)
235 tb
= localtime (&tt
);
239 pfile
->date
= _cpp_unaligned_alloc (pfile
,
240 sizeof ("\"Oct 11 1347\""));
241 sprintf ((char *) pfile
->date
, "\"%s %2d %4d\"",
242 monthnames
[tb
->tm_mon
], tb
->tm_mday
,
245 pfile
->time
= _cpp_unaligned_alloc (pfile
,
246 sizeof ("\"12:34:56\""));
247 sprintf ((char *) pfile
->time
, "\"%02d:%02d:%02d\"",
248 tb
->tm_hour
, tb
->tm_min
, tb
->tm_sec
);
252 cpp_errno (pfile
, CPP_DL_WARNING
,
253 "could not determine date and time");
255 pfile
->date
= U
"\"??? ?? ????\"";
256 pfile
->time
= U
"\"??:??:??\"";
260 if (node
->value
.builtin
== BT_DATE
)
261 result
= pfile
->date
;
263 result
= pfile
->time
;
269 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
270 result
= _cpp_unaligned_alloc (pfile
, 21);
271 sprintf ((char *) result
, "%u", number
);
277 /* Convert builtin macros like __FILE__ to a token and push it on the
278 context stack. Also handles _Pragma, for which a new token may not
279 be created. Returns 1 if it generates a new token context, 0 to
280 return the token to the caller. */
282 builtin_macro (cpp_reader
*pfile
, cpp_hashnode
*node
)
288 if (node
->value
.builtin
== BT_PRAGMA
)
290 /* Don't interpret _Pragma within directives. The standard is
291 not clear on this, but to me this makes most sense. */
292 if (pfile
->state
.in_directive
)
295 _cpp_do__Pragma (pfile
);
299 buf
= _cpp_builtin_macro_text (pfile
, node
);
301 nbuf
= (char *) alloca (len
+ 1);
302 memcpy (nbuf
, buf
, len
);
305 cpp_push_buffer (pfile
, (uchar
*) nbuf
, len
, /* from_stage3 */ true);
306 _cpp_clean_line (pfile
);
308 /* Set pfile->cur_token as required by _cpp_lex_direct. */
309 pfile
->cur_token
= _cpp_temp_token (pfile
);
310 _cpp_push_token_context (pfile
, NULL
, _cpp_lex_direct (pfile
), 1);
311 if (pfile
->buffer
->cur
!= pfile
->buffer
->rlimit
)
312 cpp_error (pfile
, CPP_DL_ICE
, "invalid built-in macro \"%s\"",
314 _cpp_pop_buffer (pfile
);
319 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
320 backslashes and double quotes. DEST must be of sufficient size.
321 Returns a pointer to the end of the string. */
323 cpp_quote_string (uchar
*dest
, const uchar
*src
, unsigned int len
)
329 if (c
== '\\' || c
== '"')
341 /* Convert a token sequence ARG to a single string token according to
342 the rules of the ISO C #-operator. */
343 static const cpp_token
*
344 stringify_arg (cpp_reader
*pfile
, macro_arg
*arg
)
347 unsigned int i
, escape_it
, backslash_count
= 0;
348 const cpp_token
*source
= NULL
;
351 if (BUFF_ROOM (pfile
->u_buff
) < 3)
352 _cpp_extend_buff (pfile
, &pfile
->u_buff
, 3);
353 dest
= BUFF_FRONT (pfile
->u_buff
);
356 /* Loop, reading in the argument's tokens. */
357 for (i
= 0; i
< arg
->count
; i
++)
359 const cpp_token
*token
= arg
->first
[i
];
361 if (token
->type
== CPP_PADDING
)
364 source
= token
->val
.source
;
368 escape_it
= (token
->type
== CPP_STRING
|| token
->type
== CPP_WSTRING
369 || token
->type
== CPP_CHAR
|| token
->type
== CPP_WCHAR
);
371 /* Room for each char being written in octal, initial space and
372 final quote and NUL. */
373 len
= cpp_token_len (token
);
378 if ((size_t) (BUFF_LIMIT (pfile
->u_buff
) - dest
) < len
)
380 size_t len_so_far
= dest
- BUFF_FRONT (pfile
->u_buff
);
381 _cpp_extend_buff (pfile
, &pfile
->u_buff
, len
);
382 dest
= BUFF_FRONT (pfile
->u_buff
) + len_so_far
;
385 /* Leading white space? */
386 if (dest
- 1 != BUFF_FRONT (pfile
->u_buff
))
390 if (source
->flags
& PREV_WHITE
)
397 _cpp_buff
*buff
= _cpp_get_buff (pfile
, len
);
398 unsigned char *buf
= BUFF_FRONT (buff
);
399 len
= cpp_spell_token (pfile
, token
, buf
, true) - buf
;
400 dest
= cpp_quote_string (dest
, buf
, len
);
401 _cpp_release_buff (pfile
, buff
);
404 dest
= cpp_spell_token (pfile
, token
, dest
, true);
406 if (token
->type
== CPP_OTHER
&& token
->val
.str
.text
[0] == '\\')
412 /* Ignore the final \ of invalid string literals. */
413 if (backslash_count
& 1)
415 cpp_error (pfile
, CPP_DL_WARNING
,
416 "invalid string literal, ignoring final '\\'");
420 /* Commit the memory, including NUL, and return the token. */
422 len
= dest
- BUFF_FRONT (pfile
->u_buff
);
423 BUFF_FRONT (pfile
->u_buff
) = dest
+ 1;
424 return new_string_token (pfile
, dest
- len
, len
);
427 /* Try to paste two tokens. On success, return nonzero. In any
428 case, PLHS is updated to point to the pasted token, which is
429 guaranteed to not have the PASTE_LEFT flag set. */
431 paste_tokens (cpp_reader
*pfile
, const cpp_token
**plhs
, const cpp_token
*rhs
)
433 unsigned char *buf
, *end
, *lhsend
;
434 const cpp_token
*lhs
;
438 len
= cpp_token_len (lhs
) + cpp_token_len (rhs
) + 1;
439 buf
= (unsigned char *) alloca (len
);
440 end
= lhsend
= cpp_spell_token (pfile
, lhs
, buf
, false);
442 /* Avoid comment headers, since they are still processed in stage 3.
443 It is simpler to insert a space here, rather than modifying the
444 lexer to ignore comments in some circumstances. Simply returning
445 false doesn't work, since we want to clear the PASTE_LEFT flag. */
446 if (lhs
->type
== CPP_DIV
&& rhs
->type
!= CPP_EQ
)
448 end
= cpp_spell_token (pfile
, rhs
, end
, false);
451 cpp_push_buffer (pfile
, buf
, end
- buf
, /* from_stage3 */ true);
452 _cpp_clean_line (pfile
);
454 /* Set pfile->cur_token as required by _cpp_lex_direct. */
455 pfile
->cur_token
= _cpp_temp_token (pfile
);
456 *plhs
= _cpp_lex_direct (pfile
);
457 if (pfile
->buffer
->cur
!= pfile
->buffer
->rlimit
)
459 _cpp_pop_buffer (pfile
);
460 _cpp_backup_tokens (pfile
, 1);
463 /* Mandatory error for all apart from assembler. */
464 if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
465 cpp_error (pfile
, CPP_DL_ERROR
,
466 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
467 buf
, cpp_token_as_text (pfile
, rhs
));
471 _cpp_pop_buffer (pfile
);
475 /* Handles an arbitrarily long sequence of ## operators, with initial
476 operand LHS. This implementation is left-associative,
477 non-recursive, and finishes a paste before handling succeeding
478 ones. If a paste fails, we back up to the RHS of the failing ##
479 operator before pushing the context containing the result of prior
480 successful pastes, with the effect that the RHS appears in the
481 output stream after the pasted LHS normally. */
483 paste_all_tokens (cpp_reader
*pfile
, const cpp_token
*lhs
)
485 const cpp_token
*rhs
;
486 cpp_context
*context
= pfile
->context
;
490 /* Take the token directly from the current context. We can do
491 this, because we are in the replacement list of either an
492 object-like macro, or a function-like macro with arguments
493 inserted. In either case, the constraints to #define
494 guarantee we have at least one more token. */
495 if (context
->direct_p
)
496 rhs
= FIRST (context
).token
++;
498 rhs
= *FIRST (context
).ptoken
++;
500 if (rhs
->type
== CPP_PADDING
)
503 if (!paste_tokens (pfile
, &lhs
, rhs
))
506 while (rhs
->flags
& PASTE_LEFT
);
508 /* Put the resulting token in its own context. */
509 _cpp_push_token_context (pfile
, NULL
, lhs
, 1);
512 /* Returns TRUE if the number of arguments ARGC supplied in an
513 invocation of the MACRO referenced by NODE is valid. An empty
514 invocation to a macro with no parameters should pass ARGC as zero.
516 Note that MACRO cannot necessarily be deduced from NODE, in case
517 NODE was redefined whilst collecting arguments. */
519 _cpp_arguments_ok (cpp_reader
*pfile
, cpp_macro
*macro
, const cpp_hashnode
*node
, unsigned int argc
)
521 if (argc
== macro
->paramc
)
524 if (argc
< macro
->paramc
)
526 /* As an extension, a rest argument is allowed to not appear in
527 the invocation at all.
528 e.g. #define debug(format, args...) something
531 This is exactly the same as if there had been an empty rest
532 argument - debug("string", ). */
534 if (argc
+ 1 == macro
->paramc
&& macro
->variadic
)
536 if (CPP_PEDANTIC (pfile
) && ! macro
->syshdr
)
537 cpp_error (pfile
, CPP_DL_PEDWARN
,
538 "ISO C99 requires rest arguments to be used");
542 cpp_error (pfile
, CPP_DL_ERROR
,
543 "macro \"%s\" requires %u arguments, but only %u given",
544 NODE_NAME (node
), macro
->paramc
, argc
);
547 cpp_error (pfile
, CPP_DL_ERROR
,
548 "macro \"%s\" passed %u arguments, but takes just %u",
549 NODE_NAME (node
), argc
, macro
->paramc
);
554 /* Reads and returns the arguments to a function-like macro
555 invocation. Assumes the opening parenthesis has been processed.
556 If there is an error, emits an appropriate diagnostic and returns
557 NULL. Each argument is terminated by a CPP_EOF token, for the
558 future benefit of expand_arg(). */
560 collect_args (cpp_reader
*pfile
, const cpp_hashnode
*node
)
562 _cpp_buff
*buff
, *base_buff
;
564 macro_arg
*args
, *arg
;
565 const cpp_token
*token
;
568 macro
= node
->value
.macro
;
570 argc
= macro
->paramc
;
573 buff
= _cpp_get_buff (pfile
, argc
* (50 * sizeof (cpp_token
*)
574 + sizeof (macro_arg
)));
576 args
= (macro_arg
*) buff
->base
;
577 memset (args
, 0, argc
* sizeof (macro_arg
));
578 buff
->cur
= (unsigned char *) &args
[argc
];
579 arg
= args
, argc
= 0;
581 /* Collect the tokens making up each argument. We don't yet know
582 how many arguments have been supplied, whether too many or too
583 few. Hence the slightly bizarre usage of "argc" and "arg". */
586 unsigned int paren_depth
= 0;
587 unsigned int ntokens
= 0;
590 arg
->first
= (const cpp_token
**) buff
->cur
;
594 /* Require space for 2 new tokens (including a CPP_EOF). */
595 if ((unsigned char *) &arg
->first
[ntokens
+ 2] > buff
->limit
)
597 buff
= _cpp_append_extend_buff (pfile
, buff
,
598 1000 * sizeof (cpp_token
*));
599 arg
->first
= (const cpp_token
**) buff
->cur
;
602 token
= cpp_get_token (pfile
);
604 if (token
->type
== CPP_PADDING
)
606 /* Drop leading padding. */
610 else if (token
->type
== CPP_OPEN_PAREN
)
612 else if (token
->type
== CPP_CLOSE_PAREN
)
614 if (paren_depth
-- == 0)
617 else if (token
->type
== CPP_COMMA
)
619 /* A comma does not terminate an argument within
620 parentheses or as part of a variable argument. */
622 && ! (macro
->variadic
&& argc
== macro
->paramc
))
625 else if (token
->type
== CPP_EOF
626 || (token
->type
== CPP_HASH
&& token
->flags
& BOL
))
629 arg
->first
[ntokens
++] = token
;
632 /* Drop trailing padding. */
633 while (ntokens
> 0 && arg
->first
[ntokens
- 1]->type
== CPP_PADDING
)
636 arg
->count
= ntokens
;
637 arg
->first
[ntokens
] = &pfile
->eof
;
639 /* Terminate the argument. Excess arguments loop back and
640 overwrite the final legitimate argument, before failing. */
641 if (argc
<= macro
->paramc
)
643 buff
->cur
= (unsigned char *) &arg
->first
[ntokens
+ 1];
644 if (argc
!= macro
->paramc
)
648 while (token
->type
!= CPP_CLOSE_PAREN
&& token
->type
!= CPP_EOF
);
650 if (token
->type
== CPP_EOF
)
652 /* We still need the CPP_EOF to end directives, and to end
653 pre-expansion of a macro argument. Step back is not
654 unconditional, since we don't want to return a CPP_EOF to our
655 callers at the end of an -include-d file. */
656 if (pfile
->context
->prev
|| pfile
->state
.in_directive
)
657 _cpp_backup_tokens (pfile
, 1);
658 cpp_error (pfile
, CPP_DL_ERROR
,
659 "unterminated argument list invoking macro \"%s\"",
664 /* A single empty argument is counted as no argument. */
665 if (argc
== 1 && macro
->paramc
== 0 && args
[0].count
== 0)
667 if (_cpp_arguments_ok (pfile
, macro
, node
, argc
))
669 /* GCC has special semantics for , ## b where b is a varargs
670 parameter: we remove the comma if b was omitted entirely.
671 If b was merely an empty argument, the comma is retained.
672 If the macro takes just one (varargs) parameter, then we
673 retain the comma only if we are standards conforming.
675 If FIRST is NULL replace_args () swallows the comma. */
676 if (macro
->variadic
&& (argc
< macro
->paramc
677 || (argc
== 1 && args
[0].count
== 0
678 && !CPP_OPTION (pfile
, std
))))
679 args
[macro
->paramc
- 1].first
= NULL
;
684 /* An error occurred. */
685 _cpp_release_buff (pfile
, base_buff
);
689 /* Search for an opening parenthesis to the macro of NODE, in such a
690 way that, if none is found, we don't lose the information in any
691 intervening padding tokens. If we find the parenthesis, collect
692 the arguments and return the buffer containing them. */
694 funlike_invocation_p (cpp_reader
*pfile
, cpp_hashnode
*node
)
696 const cpp_token
*token
, *padding
= NULL
;
700 token
= cpp_get_token (pfile
);
701 if (token
->type
!= CPP_PADDING
)
704 || (!(padding
->flags
& PREV_WHITE
) && token
->val
.source
== NULL
))
708 if (token
->type
== CPP_OPEN_PAREN
)
710 pfile
->state
.parsing_args
= 2;
711 return collect_args (pfile
, node
);
714 /* CPP_EOF can be the end of macro arguments, or the end of the
715 file. We mustn't back up over the latter. Ugh. */
716 if (token
->type
!= CPP_EOF
|| token
== &pfile
->eof
)
718 /* Back up. We may have skipped padding, in which case backing
719 up more than one token when expanding macros is in general
720 too difficult. We re-insert it in its own context. */
721 _cpp_backup_tokens (pfile
, 1);
723 _cpp_push_token_context (pfile
, NULL
, padding
, 1);
729 /* Push the context of a macro with hash entry NODE onto the context
730 stack. If we can successfully expand the macro, we push a context
731 containing its yet-to-be-rescanned replacement list and return one.
732 Otherwise, we don't push a context and return zero. */
734 enter_macro_context (cpp_reader
*pfile
, cpp_hashnode
*node
)
736 /* The presence of a macro invalidates a file's controlling macro. */
737 pfile
->mi_valid
= false;
739 pfile
->state
.angled_headers
= false;
741 /* Handle standard macros. */
742 if (! (node
->flags
& NODE_BUILTIN
))
744 cpp_macro
*macro
= node
->value
.macro
;
750 pfile
->state
.prevent_expansion
++;
751 pfile
->keep_tokens
++;
752 pfile
->state
.parsing_args
= 1;
753 buff
= funlike_invocation_p (pfile
, node
);
754 pfile
->state
.parsing_args
= 0;
755 pfile
->keep_tokens
--;
756 pfile
->state
.prevent_expansion
--;
760 if (CPP_WTRADITIONAL (pfile
) && ! node
->value
.macro
->syshdr
)
761 cpp_error (pfile
, CPP_DL_WARNING
,
762 "function-like macro \"%s\" must be used with arguments in traditional C",
768 if (macro
->paramc
> 0)
769 replace_args (pfile
, node
, macro
, (macro_arg
*) buff
->base
);
770 _cpp_release_buff (pfile
, buff
);
773 /* Disable the macro within its expansion. */
774 node
->flags
|= NODE_DISABLED
;
778 if (macro
->paramc
== 0)
779 _cpp_push_token_context (pfile
, node
, macro
->exp
.tokens
, macro
->count
);
784 /* Handle built-in macros and the _Pragma operator. */
785 return builtin_macro (pfile
, node
);
788 /* Replace the parameters in a function-like macro of NODE with the
789 actual ARGS, and place the result in a newly pushed token context.
790 Expand each argument before replacing, unless it is operated upon
791 by the # or ## operators. */
793 replace_args (cpp_reader
*pfile
, cpp_hashnode
*node
, cpp_macro
*macro
, macro_arg
*args
)
795 unsigned int i
, total
;
796 const cpp_token
*src
, *limit
;
797 const cpp_token
**dest
, **first
;
801 /* First, fully macro-expand arguments, calculating the number of
802 tokens in the final expansion as we go. The ordering of the if
803 statements below is subtle; we must handle stringification before
805 total
= macro
->count
;
806 limit
= macro
->exp
.tokens
+ macro
->count
;
808 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
809 if (src
->type
== CPP_MACRO_ARG
)
811 /* Leading and trailing padding tokens. */
814 /* We have an argument. If it is not being stringified or
815 pasted it is macro-replaced before insertion. */
816 arg
= &args
[src
->val
.arg_no
- 1];
818 if (src
->flags
& STRINGIFY_ARG
)
820 if (!arg
->stringified
)
821 arg
->stringified
= stringify_arg (pfile
, arg
);
823 else if ((src
->flags
& PASTE_LEFT
)
824 || (src
> macro
->exp
.tokens
&& (src
[-1].flags
& PASTE_LEFT
)))
825 total
+= arg
->count
- 1;
829 expand_arg (pfile
, arg
);
830 total
+= arg
->expanded_count
- 1;
834 /* Now allocate space for the expansion, copy the tokens and replace
836 buff
= _cpp_get_buff (pfile
, total
* sizeof (cpp_token
*));
837 first
= (const cpp_token
**) buff
->base
;
840 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
843 const cpp_token
**from
, **paste_flag
;
845 if (src
->type
!= CPP_MACRO_ARG
)
852 arg
= &args
[src
->val
.arg_no
- 1];
853 if (src
->flags
& STRINGIFY_ARG
)
854 count
= 1, from
= &arg
->stringified
;
855 else if (src
->flags
& PASTE_LEFT
)
856 count
= arg
->count
, from
= arg
->first
;
857 else if (src
!= macro
->exp
.tokens
&& (src
[-1].flags
& PASTE_LEFT
))
859 count
= arg
->count
, from
= arg
->first
;
862 if (dest
[-1]->type
== CPP_COMMA
864 && src
->val
.arg_no
== macro
->paramc
)
866 /* Swallow a pasted comma if from == NULL, otherwise
867 drop the paste flag. */
871 paste_flag
= dest
- 1;
873 /* Remove the paste flag if the RHS is a placemarker. */
875 paste_flag
= dest
- 1;
879 count
= arg
->expanded_count
, from
= arg
->expanded
;
881 /* Padding on the left of an argument (unless RHS of ##). */
882 if ((!pfile
->state
.in_directive
|| pfile
->state
.directive_wants_padding
)
883 && src
!= macro
->exp
.tokens
&& !(src
[-1].flags
& PASTE_LEFT
))
884 *dest
++ = padding_token (pfile
, src
);
888 memcpy (dest
, from
, count
* sizeof (cpp_token
*));
891 /* With a non-empty argument on the LHS of ##, the last
892 token should be flagged PASTE_LEFT. */
893 if (src
->flags
& PASTE_LEFT
)
894 paste_flag
= dest
- 1;
897 /* Avoid paste on RHS (even case count == 0). */
898 if (!pfile
->state
.in_directive
&& !(src
->flags
& PASTE_LEFT
))
899 *dest
++ = &pfile
->avoid_paste
;
901 /* Add a new paste flag, or remove an unwanted one. */
904 cpp_token
*token
= _cpp_temp_token (pfile
);
905 token
->type
= (*paste_flag
)->type
;
906 token
->val
= (*paste_flag
)->val
;
907 if (src
->flags
& PASTE_LEFT
)
908 token
->flags
= (*paste_flag
)->flags
| PASTE_LEFT
;
910 token
->flags
= (*paste_flag
)->flags
& ~PASTE_LEFT
;
915 /* Free the expanded arguments. */
916 for (i
= 0; i
< macro
->paramc
; i
++)
917 if (args
[i
].expanded
)
918 free (args
[i
].expanded
);
920 push_ptoken_context (pfile
, node
, buff
, first
, dest
- first
);
923 /* Return a special padding token, with padding inherited from SOURCE. */
924 static const cpp_token
*
925 padding_token (cpp_reader
*pfile
, const cpp_token
*source
)
927 cpp_token
*result
= _cpp_temp_token (pfile
);
929 result
->type
= CPP_PADDING
;
931 /* Data in GCed data structures cannot be made const so far, so we
933 result
->val
.source
= (cpp_token
*) source
;
938 /* Get a new uninitialized context. Create a new one if we cannot
939 re-use an old one. */
941 next_context (cpp_reader
*pfile
)
943 cpp_context
*result
= pfile
->context
->next
;
947 result
= XNEW (cpp_context
);
948 result
->prev
= pfile
->context
;
950 pfile
->context
->next
= result
;
953 pfile
->context
= result
;
957 /* Push a list of pointers to tokens. */
959 push_ptoken_context (cpp_reader
*pfile
, cpp_hashnode
*macro
, _cpp_buff
*buff
,
960 const cpp_token
**first
, unsigned int count
)
962 cpp_context
*context
= next_context (pfile
);
964 context
->direct_p
= false;
965 context
->macro
= macro
;
966 context
->buff
= buff
;
967 FIRST (context
).ptoken
= first
;
968 LAST (context
).ptoken
= first
+ count
;
971 /* Push a list of tokens. */
973 _cpp_push_token_context (cpp_reader
*pfile
, cpp_hashnode
*macro
,
974 const cpp_token
*first
, unsigned int count
)
976 cpp_context
*context
= next_context (pfile
);
978 context
->direct_p
= true;
979 context
->macro
= macro
;
980 context
->buff
= NULL
;
981 FIRST (context
).token
= first
;
982 LAST (context
).token
= first
+ count
;
985 /* Push a traditional macro's replacement text. */
987 _cpp_push_text_context (cpp_reader
*pfile
, cpp_hashnode
*macro
,
988 const uchar
*start
, size_t len
)
990 cpp_context
*context
= next_context (pfile
);
992 context
->direct_p
= true;
993 context
->macro
= macro
;
994 context
->buff
= NULL
;
995 CUR (context
) = start
;
996 RLIMIT (context
) = start
+ len
;
997 macro
->flags
|= NODE_DISABLED
;
1000 /* Expand an argument ARG before replacing parameters in a
1001 function-like macro. This works by pushing a context with the
1002 argument's tokens, and then expanding that into a temporary buffer
1003 as if it were a normal part of the token stream. collect_args()
1004 has terminated the argument's tokens with a CPP_EOF so that we know
1005 when we have fully expanded the argument. */
1007 expand_arg (cpp_reader
*pfile
, macro_arg
*arg
)
1009 unsigned int capacity
;
1010 bool saved_warn_trad
;
1012 if (arg
->count
== 0)
1015 /* Don't warn about funlike macros when pre-expanding. */
1016 saved_warn_trad
= CPP_WTRADITIONAL (pfile
);
1017 CPP_WTRADITIONAL (pfile
) = 0;
1019 /* Loop, reading in the arguments. */
1021 arg
->expanded
= XNEWVEC (const cpp_token
*, capacity
);
1023 push_ptoken_context (pfile
, NULL
, NULL
, arg
->first
, arg
->count
+ 1);
1026 const cpp_token
*token
;
1028 if (arg
->expanded_count
+ 1 >= capacity
)
1031 arg
->expanded
= XRESIZEVEC (const cpp_token
*, arg
->expanded
,
1035 token
= cpp_get_token (pfile
);
1037 if (token
->type
== CPP_EOF
)
1040 arg
->expanded
[arg
->expanded_count
++] = token
;
1043 _cpp_pop_context (pfile
);
1045 CPP_WTRADITIONAL (pfile
) = saved_warn_trad
;
1048 /* Pop the current context off the stack, re-enabling the macro if the
1049 context represented a macro's replacement list. The context
1050 structure is not freed so that we can re-use it later. */
1052 _cpp_pop_context (cpp_reader
*pfile
)
1054 cpp_context
*context
= pfile
->context
;
1057 context
->macro
->flags
&= ~NODE_DISABLED
;
1060 _cpp_release_buff (pfile
, context
->buff
);
1062 pfile
->context
= context
->prev
;
1065 /* External routine to get a token. Also used nearly everywhere
1066 internally, except for places where we know we can safely call
1067 _cpp_lex_token directly, such as lexing a directive name.
1069 Macro expansions and directives are transparently handled,
1070 including entering included files. Thus tokens are post-macro
1071 expansion, and after any intervening directives. External callers
1072 see CPP_EOF only at EOF. Internal callers also see it when meeting
1073 a directive inside a macro call, when at the end of a directive and
1074 state.in_directive is still 1, and at the end of argument
1077 cpp_get_token (cpp_reader
*pfile
)
1079 const cpp_token
*result
;
1084 cpp_context
*context
= pfile
->context
;
1086 /* Context->prev == 0 <=> base context. */
1088 result
= _cpp_lex_token (pfile
);
1089 else if (FIRST (context
).token
!= LAST (context
).token
)
1091 if (context
->direct_p
)
1092 result
= FIRST (context
).token
++;
1094 result
= *FIRST (context
).ptoken
++;
1096 if (result
->flags
& PASTE_LEFT
)
1098 paste_all_tokens (pfile
, result
);
1099 if (pfile
->state
.in_directive
)
1101 return padding_token (pfile
, result
);
1106 _cpp_pop_context (pfile
);
1107 if (pfile
->state
.in_directive
)
1109 return &pfile
->avoid_paste
;
1112 if (pfile
->state
.in_directive
&& result
->type
== CPP_COMMENT
)
1115 if (result
->type
!= CPP_NAME
)
1118 node
= result
->val
.node
;
1120 if (node
->type
!= NT_MACRO
|| (result
->flags
& NO_EXPAND
))
1123 if (!(node
->flags
& NODE_DISABLED
))
1125 if (!pfile
->state
.prevent_expansion
1126 && enter_macro_context (pfile
, node
))
1128 if (pfile
->state
.in_directive
)
1130 return padding_token (pfile
, result
);
1135 /* Flag this token as always unexpandable. FIXME: move this
1136 to collect_args()?. */
1137 cpp_token
*t
= _cpp_temp_token (pfile
);
1138 t
->type
= result
->type
;
1139 t
->flags
= result
->flags
| NO_EXPAND
;
1140 t
->val
= result
->val
;
1150 /* Returns true if we're expanding an object-like macro that was
1151 defined in a system header. Just checks the macro at the top of
1152 the stack. Used for diagnostic suppression. */
1154 cpp_sys_macro_p (cpp_reader
*pfile
)
1156 cpp_hashnode
*node
= pfile
->context
->macro
;
1158 return node
&& node
->value
.macro
&& node
->value
.macro
->syshdr
;
1161 /* Read each token in, until end of the current file. Directives are
1162 transparently processed. */
1164 cpp_scan_nooutput (cpp_reader
*pfile
)
1166 /* Request a CPP_EOF token at the end of this file, rather than
1167 transparently continuing with the including file. */
1168 pfile
->buffer
->return_at_eof
= true;
1170 pfile
->state
.discarding_output
++;
1171 pfile
->state
.prevent_expansion
++;
1173 if (CPP_OPTION (pfile
, traditional
))
1174 while (_cpp_read_logical_line_trad (pfile
))
1177 while (cpp_get_token (pfile
)->type
!= CPP_EOF
)
1180 pfile
->state
.discarding_output
--;
1181 pfile
->state
.prevent_expansion
--;
1184 /* Step back one (or more) tokens. Can only step back more than 1 if
1185 they are from the lexer, and not from macro expansion. */
1187 _cpp_backup_tokens (cpp_reader
*pfile
, unsigned int count
)
1189 if (pfile
->context
->prev
== NULL
)
1191 pfile
->lookaheads
+= count
;
1195 if (pfile
->cur_token
== pfile
->cur_run
->base
1196 /* Possible with -fpreprocessed and no leading #line. */
1197 && pfile
->cur_run
->prev
!= NULL
)
1199 pfile
->cur_run
= pfile
->cur_run
->prev
;
1200 pfile
->cur_token
= pfile
->cur_run
->limit
;
1208 if (pfile
->context
->direct_p
)
1209 FIRST (pfile
->context
).token
--;
1211 FIRST (pfile
->context
).ptoken
--;
1215 /* #define directive parsing and handling. */
1217 /* Returns nonzero if a macro redefinition warning is required. */
1219 warn_of_redefinition (cpp_reader
*pfile
, const cpp_hashnode
*node
,
1220 const cpp_macro
*macro2
)
1222 const cpp_macro
*macro1
;
1225 /* Some redefinitions need to be warned about regardless. */
1226 if (node
->flags
& NODE_WARN
)
1229 /* Redefinition of a macro is allowed if and only if the old and new
1230 definitions are the same. (6.10.3 paragraph 2). */
1231 macro1
= node
->value
.macro
;
1233 /* Don't check count here as it can be different in valid
1234 traditional redefinitions with just whitespace differences. */
1235 if (macro1
->paramc
!= macro2
->paramc
1236 || macro1
->fun_like
!= macro2
->fun_like
1237 || macro1
->variadic
!= macro2
->variadic
)
1240 /* Check parameter spellings. */
1241 for (i
= 0; i
< macro1
->paramc
; i
++)
1242 if (macro1
->params
[i
] != macro2
->params
[i
])
1245 /* Check the replacement text or tokens. */
1246 if (CPP_OPTION (pfile
, traditional
))
1247 return _cpp_expansions_different_trad (macro1
, macro2
);
1249 if (macro1
->count
!= macro2
->count
)
1252 for (i
= 0; i
< macro1
->count
; i
++)
1253 if (!_cpp_equiv_tokens (¯o1
->exp
.tokens
[i
], ¯o2
->exp
.tokens
[i
]))
1259 /* Free the definition of hashnode H. */
1261 _cpp_free_definition (cpp_hashnode
*h
)
1263 /* Macros and assertions no longer have anything to free. */
1265 /* Clear builtin flag in case of redefinition. */
1266 h
->flags
&= ~(NODE_BUILTIN
| NODE_DISABLED
);
1269 /* Save parameter NODE to the parameter list of macro MACRO. Returns
1270 zero on success, nonzero if the parameter is a duplicate. */
1272 _cpp_save_parameter (cpp_reader
*pfile
, cpp_macro
*macro
, cpp_hashnode
*node
)
1275 /* Constraint 6.10.3.6 - duplicate parameter names. */
1276 if (node
->flags
& NODE_MACRO_ARG
)
1278 cpp_error (pfile
, CPP_DL_ERROR
, "duplicate macro parameter \"%s\"",
1283 if (BUFF_ROOM (pfile
->a_buff
)
1284 < (macro
->paramc
+ 1) * sizeof (cpp_hashnode
*))
1285 _cpp_extend_buff (pfile
, &pfile
->a_buff
, sizeof (cpp_hashnode
*));
1287 ((cpp_hashnode
**) BUFF_FRONT (pfile
->a_buff
))[macro
->paramc
++] = node
;
1288 node
->flags
|= NODE_MACRO_ARG
;
1289 len
= macro
->paramc
* sizeof (union _cpp_hashnode_value
);
1290 if (len
> pfile
->macro_buffer_len
)
1292 pfile
->macro_buffer
= XRESIZEVEC (unsigned char, pfile
->macro_buffer
,
1294 pfile
->macro_buffer_len
= len
;
1296 ((union _cpp_hashnode_value
*) pfile
->macro_buffer
)[macro
->paramc
- 1]
1299 node
->value
.arg_index
= macro
->paramc
;
1303 /* Check the syntax of the parameters in a MACRO definition. Returns
1304 false if an error occurs. */
1306 parse_params (cpp_reader
*pfile
, cpp_macro
*macro
)
1308 unsigned int prev_ident
= 0;
1312 const cpp_token
*token
= _cpp_lex_token (pfile
);
1314 switch (token
->type
)
1317 /* Allow/ignore comments in parameter lists if we are
1318 preserving comments in macro expansions. */
1319 if (token
->type
== CPP_COMMENT
1320 && ! CPP_OPTION (pfile
, discard_comments_in_macro_exp
))
1323 cpp_error (pfile
, CPP_DL_ERROR
,
1324 "\"%s\" may not appear in macro parameter list",
1325 cpp_token_as_text (pfile
, token
));
1331 cpp_error (pfile
, CPP_DL_ERROR
,
1332 "macro parameters must be comma-separated");
1337 if (_cpp_save_parameter (pfile
, macro
, token
->val
.node
))
1341 case CPP_CLOSE_PAREN
:
1342 if (prev_ident
|| macro
->paramc
== 0)
1345 /* Fall through to pick up the error. */
1349 cpp_error (pfile
, CPP_DL_ERROR
, "parameter name missing");
1356 macro
->variadic
= 1;
1359 _cpp_save_parameter (pfile
, macro
,
1360 pfile
->spec_nodes
.n__VA_ARGS__
);
1361 pfile
->state
.va_args_ok
= 1;
1362 if (! CPP_OPTION (pfile
, c99
)
1363 && CPP_OPTION (pfile
, pedantic
)
1364 && CPP_OPTION (pfile
, warn_variadic_macros
))
1365 cpp_error (pfile
, CPP_DL_PEDWARN
,
1366 "anonymous variadic macros were introduced in C99");
1368 else if (CPP_OPTION (pfile
, pedantic
)
1369 && CPP_OPTION (pfile
, warn_variadic_macros
))
1370 cpp_error (pfile
, CPP_DL_PEDWARN
,
1371 "ISO C does not permit named variadic macros");
1373 /* We're at the end, and just expect a closing parenthesis. */
1374 token
= _cpp_lex_token (pfile
);
1375 if (token
->type
== CPP_CLOSE_PAREN
)
1380 cpp_error (pfile
, CPP_DL_ERROR
, "missing ')' in macro parameter list");
1386 /* Allocate room for a token from a macro's replacement list. */
1388 alloc_expansion_token (cpp_reader
*pfile
, cpp_macro
*macro
)
1390 if (BUFF_ROOM (pfile
->a_buff
) < (macro
->count
+ 1) * sizeof (cpp_token
))
1391 _cpp_extend_buff (pfile
, &pfile
->a_buff
, sizeof (cpp_token
));
1393 return &((cpp_token
*) BUFF_FRONT (pfile
->a_buff
))[macro
->count
++];
1396 /* Lex a token from the expansion of MACRO, but mark parameters as we
1397 find them and warn of traditional stringification. */
1399 lex_expansion_token (cpp_reader
*pfile
, cpp_macro
*macro
)
1403 pfile
->cur_token
= alloc_expansion_token (pfile
, macro
);
1404 token
= _cpp_lex_direct (pfile
);
1406 /* Is this a parameter? */
1407 if (token
->type
== CPP_NAME
1408 && (token
->val
.node
->flags
& NODE_MACRO_ARG
) != 0)
1410 token
->type
= CPP_MACRO_ARG
;
1411 token
->val
.arg_no
= token
->val
.node
->value
.arg_index
;
1413 else if (CPP_WTRADITIONAL (pfile
) && macro
->paramc
> 0
1414 && (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
))
1415 check_trad_stringification (pfile
, macro
, &token
->val
.str
);
1421 create_iso_definition (cpp_reader
*pfile
, cpp_macro
*macro
)
1424 const cpp_token
*ctoken
;
1426 /* Get the first token of the expansion (or the '(' of a
1427 function-like macro). */
1428 ctoken
= _cpp_lex_token (pfile
);
1430 if (ctoken
->type
== CPP_OPEN_PAREN
&& !(ctoken
->flags
& PREV_WHITE
))
1432 bool ok
= parse_params (pfile
, macro
);
1433 macro
->params
= (cpp_hashnode
**) BUFF_FRONT (pfile
->a_buff
);
1437 /* Success. Commit or allocate the parameter array. */
1438 if (pfile
->hash_table
->alloc_subobject
)
1440 cpp_hashnode
**params
=
1441 (cpp_hashnode
**) pfile
->hash_table
->alloc_subobject
1442 (sizeof (cpp_hashnode
*) * macro
->paramc
);
1443 memcpy (params
, macro
->params
,
1444 sizeof (cpp_hashnode
*) * macro
->paramc
);
1445 macro
->params
= params
;
1448 BUFF_FRONT (pfile
->a_buff
) = (uchar
*) ¯o
->params
[macro
->paramc
];
1449 macro
->fun_like
= 1;
1451 else if (ctoken
->type
!= CPP_EOF
&& !(ctoken
->flags
& PREV_WHITE
))
1453 /* While ISO C99 requires whitespace before replacement text
1454 in a macro definition, ISO C90 with TC1 allows there characters
1455 from the basic source character set. */
1456 if (CPP_OPTION (pfile
, c99
))
1457 cpp_error (pfile
, CPP_DL_PEDWARN
,
1458 "ISO C99 requires whitespace after the macro name");
1461 int warntype
= CPP_DL_WARNING
;
1462 switch (ctoken
->type
)
1466 case CPP_OBJC_STRING
:
1467 /* '@' is not in basic character set. */
1468 warntype
= CPP_DL_PEDWARN
;
1471 /* Basic character set sans letters, digits and _. */
1472 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
1473 ctoken
->val
.str
.text
[0]) == NULL
)
1474 warntype
= CPP_DL_PEDWARN
;
1477 /* All other tokens start with a character from basic
1481 cpp_error (pfile
, warntype
,
1482 "missing 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
, CPP_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
, CPP_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
);
1542 macro
->traditional
= 0;
1544 /* Don't count the CPP_EOF. */
1547 /* Clear whitespace on first token for warn_of_redefinition(). */
1549 macro
->exp
.tokens
[0].flags
&= ~PREV_WHITE
;
1551 /* Commit or allocate the memory. */
1552 if (pfile
->hash_table
->alloc_subobject
)
1555 (cpp_token
*) pfile
->hash_table
->alloc_subobject (sizeof (cpp_token
)
1557 memcpy (tokns
, macro
->exp
.tokens
, sizeof (cpp_token
) * macro
->count
);
1558 macro
->exp
.tokens
= tokns
;
1561 BUFF_FRONT (pfile
->a_buff
) = (uchar
*) ¯o
->exp
.tokens
[macro
->count
];
1566 /* Parse a macro and save its expansion. Returns nonzero on success. */
1568 _cpp_create_definition (cpp_reader
*pfile
, cpp_hashnode
*node
)
1574 if (pfile
->hash_table
->alloc_subobject
)
1575 macro
= (cpp_macro
*) pfile
->hash_table
->alloc_subobject
1576 (sizeof (cpp_macro
));
1578 macro
= (cpp_macro
*) _cpp_aligned_alloc (pfile
, sizeof (cpp_macro
));
1579 macro
->line
= pfile
->directive_line
;
1582 macro
->variadic
= 0;
1583 macro
->used
= !CPP_OPTION (pfile
, warn_unused_macros
);
1585 macro
->fun_like
= 0;
1586 /* To suppress some diagnostics. */
1587 macro
->syshdr
= pfile
->buffer
&& pfile
->buffer
->sysp
!= 0;
1589 if (CPP_OPTION (pfile
, traditional
))
1590 ok
= _cpp_create_trad_definition (pfile
, macro
);
1593 cpp_token
*saved_cur_token
= pfile
->cur_token
;
1595 ok
= create_iso_definition (pfile
, macro
);
1597 /* Restore lexer position because of games lex_expansion_token()
1598 plays lexing the macro. We set the type for SEEN_EOL() in
1601 Longer term we should lex the whole line before coming here,
1602 and just copy the expansion. */
1603 saved_cur_token
[-1].type
= pfile
->cur_token
[-1].type
;
1604 pfile
->cur_token
= saved_cur_token
;
1606 /* Stop the lexer accepting __VA_ARGS__. */
1607 pfile
->state
.va_args_ok
= 0;
1610 /* Clear the fast argument lookup indices. */
1611 for (i
= macro
->paramc
; i
-- > 0; )
1613 struct cpp_hashnode
*node
= macro
->params
[i
];
1614 node
->flags
&= ~ NODE_MACRO_ARG
;
1615 node
->value
= ((union _cpp_hashnode_value
*) pfile
->macro_buffer
)[i
];
1621 if (node
->type
== NT_MACRO
)
1623 if (CPP_OPTION (pfile
, warn_unused_macros
))
1624 _cpp_warn_if_unused_macro (pfile
, node
, NULL
);
1626 if (warn_of_redefinition (pfile
, node
, macro
))
1628 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, pfile
->directive_line
, 0,
1629 "\"%s\" redefined", NODE_NAME (node
));
1631 if (node
->type
== NT_MACRO
&& !(node
->flags
& NODE_BUILTIN
))
1632 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
,
1633 node
->value
.macro
->line
, 0,
1634 "this is the location of the previous definition");
1638 if (node
->type
!= NT_VOID
)
1639 _cpp_free_definition (node
);
1641 /* Enter definition in hash table. */
1642 node
->type
= NT_MACRO
;
1643 node
->value
.macro
= macro
;
1644 if (! ustrncmp (NODE_NAME (node
), DSC ("__STDC_")))
1645 node
->flags
|= NODE_WARN
;
1650 /* Warn if a token in STRING matches one of a function-like MACRO's
1653 check_trad_stringification (cpp_reader
*pfile
, const cpp_macro
*macro
,
1654 const cpp_string
*string
)
1656 unsigned int i
, len
;
1657 const uchar
*p
, *q
, *limit
;
1659 /* Loop over the string. */
1660 limit
= string
->text
+ string
->len
- 1;
1661 for (p
= string
->text
+ 1; p
< limit
; p
= q
)
1663 /* Find the start of an identifier. */
1664 while (p
< limit
&& !is_idstart (*p
))
1667 /* Find the end of the identifier. */
1669 while (q
< limit
&& is_idchar (*q
))
1674 /* Loop over the function macro arguments to see if the
1675 identifier inside the string matches one of them. */
1676 for (i
= 0; i
< macro
->paramc
; i
++)
1678 const cpp_hashnode
*node
= macro
->params
[i
];
1680 if (NODE_LEN (node
) == len
1681 && !memcmp (p
, NODE_NAME (node
), len
))
1683 cpp_error (pfile
, CPP_DL_WARNING
,
1684 "macro argument \"%s\" would be stringified in traditional C",
1692 /* Returns the name, arguments and expansion of a macro, in a format
1693 suitable to be read back in again, and therefore also for DWARF 2
1694 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1695 Caller is expected to generate the "#define" bit if needed. The
1696 returned text is temporary, and automatically freed later. */
1697 const unsigned char *
1698 cpp_macro_definition (cpp_reader
*pfile
, const cpp_hashnode
*node
)
1700 unsigned int i
, len
;
1701 const cpp_macro
*macro
= node
->value
.macro
;
1702 unsigned char *buffer
;
1704 if (node
->type
!= NT_MACRO
|| (node
->flags
& NODE_BUILTIN
))
1706 cpp_error (pfile
, CPP_DL_ICE
,
1707 "invalid hash type %d in cpp_macro_definition", node
->type
);
1711 /* Calculate length. */
1712 len
= NODE_LEN (node
) + 2; /* ' ' and NUL. */
1713 if (macro
->fun_like
)
1715 len
+= 4; /* "()" plus possible final ".." of named
1716 varargs (we have + 1 below). */
1717 for (i
= 0; i
< macro
->paramc
; i
++)
1718 len
+= NODE_LEN (macro
->params
[i
]) + 1; /* "," */
1721 /* This should match below where we fill in the buffer. */
1722 if (CPP_OPTION (pfile
, traditional
))
1723 len
+= _cpp_replacement_text_len (macro
);
1726 for (i
= 0; i
< macro
->count
; i
++)
1728 cpp_token
*token
= ¯o
->exp
.tokens
[i
];
1730 if (token
->type
== CPP_MACRO_ARG
)
1731 len
+= NODE_LEN (macro
->params
[token
->val
.arg_no
- 1]);
1733 len
+= cpp_token_len (token
);
1735 if (token
->flags
& STRINGIFY_ARG
)
1737 if (token
->flags
& PASTE_LEFT
)
1738 len
+= 3; /* " ##" */
1739 if (token
->flags
& PREV_WHITE
)
1744 if (len
> pfile
->macro_buffer_len
)
1746 pfile
->macro_buffer
= XRESIZEVEC (unsigned char,
1747 pfile
->macro_buffer
, len
);
1748 pfile
->macro_buffer_len
= len
;
1751 /* Fill in the buffer. Start with the macro name. */
1752 buffer
= pfile
->macro_buffer
;
1753 memcpy (buffer
, NODE_NAME (node
), NODE_LEN (node
));
1754 buffer
+= NODE_LEN (node
);
1756 /* Parameter names. */
1757 if (macro
->fun_like
)
1760 for (i
= 0; i
< macro
->paramc
; i
++)
1762 cpp_hashnode
*param
= macro
->params
[i
];
1764 if (param
!= pfile
->spec_nodes
.n__VA_ARGS__
)
1766 memcpy (buffer
, NODE_NAME (param
), NODE_LEN (param
));
1767 buffer
+= NODE_LEN (param
);
1770 if (i
+ 1 < macro
->paramc
)
1771 /* Don't emit a space after the comma here; we're trying
1772 to emit a Dwarf-friendly definition, and the Dwarf spec
1773 forbids spaces in the argument list. */
1775 else if (macro
->variadic
)
1776 *buffer
++ = '.', *buffer
++ = '.', *buffer
++ = '.';
1781 /* The Dwarf spec requires a space after the macro name, even if the
1782 definition is the empty string. */
1785 if (CPP_OPTION (pfile
, traditional
))
1786 buffer
= _cpp_copy_replacement_text (macro
, buffer
);
1787 else if (macro
->count
)
1788 /* Expansion tokens. */
1790 for (i
= 0; i
< macro
->count
; i
++)
1792 cpp_token
*token
= ¯o
->exp
.tokens
[i
];
1794 if (token
->flags
& PREV_WHITE
)
1796 if (token
->flags
& STRINGIFY_ARG
)
1799 if (token
->type
== CPP_MACRO_ARG
)
1802 NODE_NAME (macro
->params
[token
->val
.arg_no
- 1]),
1803 NODE_LEN (macro
->params
[token
->val
.arg_no
- 1]));
1804 buffer
+= NODE_LEN (macro
->params
[token
->val
.arg_no
- 1]);
1807 buffer
= cpp_spell_token (pfile
, token
, buffer
, false);
1809 if (token
->flags
& PASTE_LEFT
)
1814 /* Next has PREV_WHITE; see _cpp_create_definition. */
1820 return pfile
->macro_buffer
;