1 /* Part of CPP library. (Macro and #define handling.)
2 Copyright (C) 1986-2013 Free Software Foundation, Inc.
3 Written by Per Bothner, 1994.
4 Based on CCCP program by Paul Rubin, June 1986
5 Adapted to ANSI C, Richard Stallman, Jan 1987
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3, or (at your option) any
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>.
21 In other words, you are welcome to use, share and improve this program.
22 You are forbidden to forbid anyone else to use, share and improve
23 what you give them. Help stamp out software-hoarding! */
30 typedef struct macro_arg macro_arg
;
31 /* This structure represents the tokens of a macro argument. These
32 tokens can be macro themselves, in which case they can be either
33 expanded or unexpanded. When they are expanded, this data
34 structure keeps both the expanded and unexpanded forms. */
37 const cpp_token
**first
; /* First token in unexpanded argument. */
38 const cpp_token
**expanded
; /* Macro-expanded argument. */
39 const cpp_token
*stringified
; /* Stringified argument. */
40 unsigned int count
; /* # of tokens in argument. */
41 unsigned int expanded_count
; /* # of tokens in expanded argument. */
42 source_location
*virt_locs
; /* Where virtual locations for
43 unexpanded tokens are stored. */
44 source_location
*expanded_virt_locs
; /* Where virtual locations for
49 /* The kind of macro tokens which the instance of
50 macro_arg_token_iter is supposed to iterate over. */
51 enum macro_arg_token_kind
{
52 MACRO_ARG_TOKEN_NORMAL
,
53 /* This is a macro argument token that got transformed into a string
54 litteral, e.g. #foo. */
55 MACRO_ARG_TOKEN_STRINGIFIED
,
56 /* This is a token resulting from the expansion of a macro
57 argument that was itself a macro. */
58 MACRO_ARG_TOKEN_EXPANDED
61 /* An iterator over tokens coming from a function-like macro
63 typedef struct macro_arg_token_iter macro_arg_token_iter
;
64 struct macro_arg_token_iter
66 /* Whether or not -ftrack-macro-expansion is used. */
67 bool track_macro_exp_p
;
68 /* The kind of token over which we are supposed to iterate. */
69 enum macro_arg_token_kind kind
;
70 /* A pointer to the current token pointed to by the iterator. */
71 const cpp_token
**token_ptr
;
72 /* A pointer to the "full" location of the current token. If
73 -ftrack-macro-expansion is used this location tracks loci across
75 const source_location
*location_ptr
;
76 #ifdef ENABLE_CHECKING
77 /* The number of times the iterator went forward. This useful only
78 when checking is enabled. */
83 /* Macro expansion. */
85 static int enter_macro_context (cpp_reader
*, cpp_hashnode
*,
86 const cpp_token
*, source_location
);
87 static int builtin_macro (cpp_reader
*, cpp_hashnode
*);
88 static void push_ptoken_context (cpp_reader
*, cpp_hashnode
*, _cpp_buff
*,
89 const cpp_token
**, unsigned int);
90 static void push_extended_tokens_context (cpp_reader
*, cpp_hashnode
*,
91 _cpp_buff
*, source_location
*,
92 const cpp_token
**, unsigned int);
93 static _cpp_buff
*collect_args (cpp_reader
*, const cpp_hashnode
*,
94 _cpp_buff
**, unsigned *);
95 static cpp_context
*next_context (cpp_reader
*);
96 static const cpp_token
*padding_token (cpp_reader
*, const cpp_token
*);
97 static void expand_arg (cpp_reader
*, macro_arg
*);
98 static const cpp_token
*new_string_token (cpp_reader
*, uchar
*, unsigned int);
99 static const cpp_token
*stringify_arg (cpp_reader
*, macro_arg
*);
100 static void paste_all_tokens (cpp_reader
*, const cpp_token
*);
101 static bool paste_tokens (cpp_reader
*, source_location
,
102 const cpp_token
**, const cpp_token
*);
103 static void alloc_expanded_arg_mem (cpp_reader
*, macro_arg
*, size_t);
104 static void ensure_expanded_arg_room (cpp_reader
*, macro_arg
*, size_t, size_t *);
105 static void delete_macro_args (_cpp_buff
*, unsigned num_args
);
106 static void set_arg_token (macro_arg
*, const cpp_token
*,
107 source_location
, size_t,
108 enum macro_arg_token_kind
,
110 static const source_location
*get_arg_token_location (const macro_arg
*,
111 enum macro_arg_token_kind
);
112 static const cpp_token
**arg_token_ptr_at (const macro_arg
*,
114 enum macro_arg_token_kind
,
115 source_location
**virt_location
);
117 static void macro_arg_token_iter_init (macro_arg_token_iter
*, bool,
118 enum macro_arg_token_kind
,
121 static const cpp_token
*macro_arg_token_iter_get_token
122 (const macro_arg_token_iter
*it
);
123 static source_location macro_arg_token_iter_get_location
124 (const macro_arg_token_iter
*);
125 static void macro_arg_token_iter_forward (macro_arg_token_iter
*);
126 static _cpp_buff
*tokens_buff_new (cpp_reader
*, size_t,
128 static size_t tokens_buff_count (_cpp_buff
*);
129 static const cpp_token
**tokens_buff_last_token_ptr (_cpp_buff
*);
130 static inline const cpp_token
**tokens_buff_put_token_to (const cpp_token
**,
135 const struct line_map
*,
138 static const cpp_token
**tokens_buff_add_token (_cpp_buff
*,
143 const struct line_map
*,
145 static inline void tokens_buff_remove_last_token (_cpp_buff
*);
146 static void replace_args (cpp_reader
*, cpp_hashnode
*, cpp_macro
*,
147 macro_arg
*, source_location
);
148 static _cpp_buff
*funlike_invocation_p (cpp_reader
*, cpp_hashnode
*,
149 _cpp_buff
**, unsigned *);
150 static bool create_iso_definition (cpp_reader
*, cpp_macro
*);
152 /* #define directive parsing and handling. */
154 static cpp_token
*alloc_expansion_token (cpp_reader
*, cpp_macro
*);
155 static cpp_token
*lex_expansion_token (cpp_reader
*, cpp_macro
*);
156 static bool warn_of_redefinition (cpp_reader
*, cpp_hashnode
*,
158 static bool parse_params (cpp_reader
*, cpp_macro
*);
159 static void check_trad_stringification (cpp_reader
*, const cpp_macro
*,
161 static bool reached_end_of_context (cpp_context
*);
162 static void consume_next_token_from_context (cpp_reader
*pfile
,
165 static const cpp_token
* cpp_get_token_1 (cpp_reader
*, source_location
*);
167 static cpp_hashnode
* macro_of_context (cpp_context
*context
);
169 static bool in_macro_expansion_p (cpp_reader
*pfile
);
171 /* Statistical counter tracking the number of macros that got
173 unsigned num_expanded_macros_counter
= 0;
174 /* Statistical counter tracking the total number tokens resulting
175 from macro expansion. */
176 unsigned num_macro_tokens_counter
= 0;
178 /* Emits a warning if NODE is a macro defined in the main file that
179 has not been used. */
181 _cpp_warn_if_unused_macro (cpp_reader
*pfile
, cpp_hashnode
*node
,
182 void *v ATTRIBUTE_UNUSED
)
184 if (node
->type
== NT_MACRO
&& !(node
->flags
& NODE_BUILTIN
))
186 cpp_macro
*macro
= node
->value
.macro
;
189 && MAIN_FILE_P (linemap_lookup (pfile
->line_table
, macro
->line
)))
190 cpp_warning_with_line (pfile
, CPP_W_UNUSED_MACROS
, macro
->line
, 0,
191 "macro \"%s\" is not used", NODE_NAME (node
));
197 /* Allocates and returns a CPP_STRING token, containing TEXT of length
198 LEN, after null-terminating it. TEXT must be in permanent storage. */
199 static const cpp_token
*
200 new_string_token (cpp_reader
*pfile
, unsigned char *text
, unsigned int len
)
202 cpp_token
*token
= _cpp_temp_token (pfile
);
205 token
->type
= CPP_STRING
;
206 token
->val
.str
.len
= len
;
207 token
->val
.str
.text
= text
;
212 static const char * const monthnames
[] =
214 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
215 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
218 /* Helper function for builtin_macro. Returns the text generated by
221 _cpp_builtin_macro_text (cpp_reader
*pfile
, cpp_hashnode
*node
)
223 const uchar
*result
= NULL
;
224 linenum_type number
= 1;
226 switch (node
->value
.builtin
)
229 cpp_error (pfile
, CPP_DL_ICE
, "invalid built-in macro \"%s\"",
235 cpp_buffer
*pbuffer
= cpp_get_buffer (pfile
);
236 if (pbuffer
->timestamp
== NULL
)
238 /* Initialize timestamp value of the assotiated file. */
239 struct _cpp_file
*file
= cpp_get_file (pbuffer
);
242 /* Generate __TIMESTAMP__ string, that represents
243 the date and time of the last modification
244 of the current source file. The string constant
245 looks like "Sun Sep 16 01:03:52 1973". */
246 struct tm
*tb
= NULL
;
247 struct stat
*st
= _cpp_get_file_stat (file
);
249 tb
= localtime (&st
->st_mtime
);
252 char *str
= asctime (tb
);
253 size_t len
= strlen (str
);
254 unsigned char *buf
= _cpp_unaligned_alloc (pfile
, len
+ 2);
256 strcpy ((char *) buf
+ 1, str
);
258 pbuffer
->timestamp
= buf
;
262 cpp_errno (pfile
, CPP_DL_WARNING
,
263 "could not determine file timestamp");
264 pbuffer
->timestamp
= UC
"\"??? ??? ?? ??:??:?? ????\"";
268 result
= pbuffer
->timestamp
;
278 if (node
->value
.builtin
== BT_FILE
)
279 name
= linemap_get_expansion_filename (pfile
->line_table
,
280 pfile
->line_table
->highest_line
);
283 name
= _cpp_get_file_name (pfile
->main_file
);
288 buf
= _cpp_unaligned_alloc (pfile
, len
* 2 + 3);
291 buf
= cpp_quote_string (buf
+ 1, (const unsigned char *) name
, len
);
297 case BT_INCLUDE_LEVEL
:
298 /* The line map depth counts the primary source as level 1, but
299 historically __INCLUDE_DEPTH__ has called the primary source
301 number
= pfile
->line_table
->depth
- 1;
305 /* If __LINE__ is embedded in a macro, it must expand to the
306 line of the macro's invocation, not its definition.
307 Otherwise things like assert() will not work properly. */
308 number
= linemap_get_expansion_line (pfile
->line_table
,
309 CPP_OPTION (pfile
, traditional
)
310 ? pfile
->line_table
->highest_line
311 : pfile
->cur_token
[-1].src_loc
);
314 /* __STDC__ has the value 1 under normal circumstances.
315 However, if (a) we are in a system header, (b) the option
316 stdc_0_in_system_headers is true (set by target config), and
317 (c) we are not in strictly conforming mode, then it has the
318 value 0. (b) and (c) are already checked in cpp_init_builtins. */
320 if (cpp_in_system_header (pfile
))
328 if (pfile
->date
== NULL
)
330 /* Allocate __DATE__ and __TIME__ strings from permanent
331 storage. We only do this once, and don't generate them
332 at init time, because time() and localtime() are very
333 slow on some systems. */
335 struct tm
*tb
= NULL
;
337 /* (time_t) -1 is a legitimate value for "number of seconds
338 since the Epoch", so we have to do a little dance to
339 distinguish that from a genuine error. */
342 if (tt
!= (time_t)-1 || errno
== 0)
343 tb
= localtime (&tt
);
347 pfile
->date
= _cpp_unaligned_alloc (pfile
,
348 sizeof ("\"Oct 11 1347\""));
349 sprintf ((char *) pfile
->date
, "\"%s %2d %4d\"",
350 monthnames
[tb
->tm_mon
], tb
->tm_mday
,
353 pfile
->time
= _cpp_unaligned_alloc (pfile
,
354 sizeof ("\"12:34:56\""));
355 sprintf ((char *) pfile
->time
, "\"%02d:%02d:%02d\"",
356 tb
->tm_hour
, tb
->tm_min
, tb
->tm_sec
);
360 cpp_errno (pfile
, CPP_DL_WARNING
,
361 "could not determine date and time");
363 pfile
->date
= UC
"\"??? ?? ????\"";
364 pfile
->time
= UC
"\"??:??:??\"";
368 if (node
->value
.builtin
== BT_DATE
)
369 result
= pfile
->date
;
371 result
= pfile
->time
;
375 if (CPP_OPTION (pfile
, directives_only
) && pfile
->state
.in_directive
)
376 cpp_error (pfile
, CPP_DL_ERROR
,
377 "__COUNTER__ expanded inside directive with -fdirectives-only");
378 number
= pfile
->counter
++;
384 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
385 result
= _cpp_unaligned_alloc (pfile
, 21);
386 sprintf ((char *) result
, "%u", number
);
392 /* Convert builtin macros like __FILE__ to a token and push it on the
393 context stack. Also handles _Pragma, for which a new token may not
394 be created. Returns 1 if it generates a new token context, 0 to
395 return the token to the caller. */
397 builtin_macro (cpp_reader
*pfile
, cpp_hashnode
*node
)
403 if (node
->value
.builtin
== BT_PRAGMA
)
405 /* Don't interpret _Pragma within directives. The standard is
406 not clear on this, but to me this makes most sense. */
407 if (pfile
->state
.in_directive
)
410 return _cpp_do__Pragma (pfile
);
413 buf
= _cpp_builtin_macro_text (pfile
, node
);
415 nbuf
= (char *) alloca (len
+ 1);
416 memcpy (nbuf
, buf
, len
);
419 cpp_push_buffer (pfile
, (uchar
*) nbuf
, len
, /* from_stage3 */ true);
420 _cpp_clean_line (pfile
);
422 /* Set pfile->cur_token as required by _cpp_lex_direct. */
423 pfile
->cur_token
= _cpp_temp_token (pfile
);
424 _cpp_push_token_context (pfile
, NULL
, _cpp_lex_direct (pfile
), 1);
425 if (pfile
->buffer
->cur
!= pfile
->buffer
->rlimit
)
426 cpp_error (pfile
, CPP_DL_ICE
, "invalid built-in macro \"%s\"",
428 _cpp_pop_buffer (pfile
);
433 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
434 backslashes and double quotes. DEST must be of sufficient size.
435 Returns a pointer to the end of the string. */
437 cpp_quote_string (uchar
*dest
, const uchar
*src
, unsigned int len
)
443 if (c
== '\\' || c
== '"')
455 /* Convert a token sequence ARG to a single string token according to
456 the rules of the ISO C #-operator. */
457 static const cpp_token
*
458 stringify_arg (cpp_reader
*pfile
, macro_arg
*arg
)
461 unsigned int i
, escape_it
, backslash_count
= 0;
462 const cpp_token
*source
= NULL
;
465 if (BUFF_ROOM (pfile
->u_buff
) < 3)
466 _cpp_extend_buff (pfile
, &pfile
->u_buff
, 3);
467 dest
= BUFF_FRONT (pfile
->u_buff
);
470 /* Loop, reading in the argument's tokens. */
471 for (i
= 0; i
< arg
->count
; i
++)
473 const cpp_token
*token
= arg
->first
[i
];
475 if (token
->type
== CPP_PADDING
)
478 || (!(source
->flags
& PREV_WHITE
)
479 && token
->val
.source
== NULL
))
480 source
= token
->val
.source
;
484 escape_it
= (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
485 || token
->type
== CPP_WSTRING
|| token
->type
== CPP_WCHAR
486 || token
->type
== CPP_STRING32
|| token
->type
== CPP_CHAR32
487 || token
->type
== CPP_STRING16
|| token
->type
== CPP_CHAR16
488 || token
->type
== CPP_UTF8STRING
);
490 /* Room for each char being written in octal, initial space and
491 final quote and NUL. */
492 len
= cpp_token_len (token
);
497 if ((size_t) (BUFF_LIMIT (pfile
->u_buff
) - dest
) < len
)
499 size_t len_so_far
= dest
- BUFF_FRONT (pfile
->u_buff
);
500 _cpp_extend_buff (pfile
, &pfile
->u_buff
, len
);
501 dest
= BUFF_FRONT (pfile
->u_buff
) + len_so_far
;
504 /* Leading white space? */
505 if (dest
- 1 != BUFF_FRONT (pfile
->u_buff
))
509 if (source
->flags
& PREV_WHITE
)
516 _cpp_buff
*buff
= _cpp_get_buff (pfile
, len
);
517 unsigned char *buf
= BUFF_FRONT (buff
);
518 len
= cpp_spell_token (pfile
, token
, buf
, true) - buf
;
519 dest
= cpp_quote_string (dest
, buf
, len
);
520 _cpp_release_buff (pfile
, buff
);
523 dest
= cpp_spell_token (pfile
, token
, dest
, true);
525 if (token
->type
== CPP_OTHER
&& token
->val
.str
.text
[0] == '\\')
531 /* Ignore the final \ of invalid string literals. */
532 if (backslash_count
& 1)
534 cpp_error (pfile
, CPP_DL_WARNING
,
535 "invalid string literal, ignoring final '\\'");
539 /* Commit the memory, including NUL, and return the token. */
541 len
= dest
- BUFF_FRONT (pfile
->u_buff
);
542 BUFF_FRONT (pfile
->u_buff
) = dest
+ 1;
543 return new_string_token (pfile
, dest
- len
, len
);
546 /* Try to paste two tokens. On success, return nonzero. In any
547 case, PLHS is updated to point to the pasted token, which is
548 guaranteed to not have the PASTE_LEFT flag set. LOCATION is
549 the virtual location used for error reporting. */
551 paste_tokens (cpp_reader
*pfile
, source_location location
,
552 const cpp_token
**plhs
, const cpp_token
*rhs
)
554 unsigned char *buf
, *end
, *lhsend
;
558 len
= cpp_token_len (*plhs
) + cpp_token_len (rhs
) + 1;
559 buf
= (unsigned char *) alloca (len
);
560 end
= lhsend
= cpp_spell_token (pfile
, *plhs
, buf
, false);
562 /* Avoid comment headers, since they are still processed in stage 3.
563 It is simpler to insert a space here, rather than modifying the
564 lexer to ignore comments in some circumstances. Simply returning
565 false doesn't work, since we want to clear the PASTE_LEFT flag. */
566 if ((*plhs
)->type
== CPP_DIV
&& rhs
->type
!= CPP_EQ
)
568 /* In one obscure case we might see padding here. */
569 if (rhs
->type
!= CPP_PADDING
)
570 end
= cpp_spell_token (pfile
, rhs
, end
, false);
573 cpp_push_buffer (pfile
, buf
, end
- buf
, /* from_stage3 */ true);
574 _cpp_clean_line (pfile
);
576 /* Set pfile->cur_token as required by _cpp_lex_direct. */
577 pfile
->cur_token
= _cpp_temp_token (pfile
);
578 lhs
= _cpp_lex_direct (pfile
);
579 if (pfile
->buffer
->cur
!= pfile
->buffer
->rlimit
)
581 source_location saved_loc
= lhs
->src_loc
;
583 _cpp_pop_buffer (pfile
);
584 _cpp_backup_tokens (pfile
, 1);
587 /* We have to remove the PASTE_LEFT flag from the old lhs, but
588 we want to keep the new location. */
591 lhs
->src_loc
= saved_loc
;
592 lhs
->flags
&= ~PASTE_LEFT
;
594 /* Mandatory error for all apart from assembler. */
595 if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
596 cpp_error_with_line (pfile
, CPP_DL_ERROR
, location
, 0,
597 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
598 buf
, cpp_token_as_text (pfile
, rhs
));
603 _cpp_pop_buffer (pfile
);
607 /* Handles an arbitrarily long sequence of ## operators, with initial
608 operand LHS. This implementation is left-associative,
609 non-recursive, and finishes a paste before handling succeeding
610 ones. If a paste fails, we back up to the RHS of the failing ##
611 operator before pushing the context containing the result of prior
612 successful pastes, with the effect that the RHS appears in the
613 output stream after the pasted LHS normally. */
615 paste_all_tokens (cpp_reader
*pfile
, const cpp_token
*lhs
)
617 const cpp_token
*rhs
= NULL
;
618 cpp_context
*context
= pfile
->context
;
619 source_location virt_loc
= 0;
621 /* We are expanding a macro and we must have been called on a token
622 that appears at the left hand side of a ## operator. */
623 if (macro_of_context (pfile
->context
) == NULL
624 || (!(lhs
->flags
& PASTE_LEFT
)))
627 if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
628 /* The caller must have called consume_next_token_from_context
629 right before calling us. That has incremented the pointer to
630 the current virtual location. So it now points to the location
631 of the token that comes right after *LHS. We want the
632 resulting pasted token to have the location of the current
634 virt_loc
= context
->c
.mc
->cur_virt_loc
[-1];
636 /* We are not tracking macro expansion. So the best virtual
637 location we can get here is the expansion point of the macro we
638 are currently expanding. */
639 virt_loc
= pfile
->invocation_location
;
643 /* Take the token directly from the current context. We can do
644 this, because we are in the replacement list of either an
645 object-like macro, or a function-like macro with arguments
646 inserted. In either case, the constraints to #define
647 guarantee we have at least one more token. */
648 if (context
->tokens_kind
== TOKENS_KIND_DIRECT
)
649 rhs
= FIRST (context
).token
++;
650 else if (context
->tokens_kind
== TOKENS_KIND_INDIRECT
)
651 rhs
= *FIRST (context
).ptoken
++;
652 else if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
654 /* So we are in presence of an extended token context, which
655 means that each token in this context has a virtual
656 location attached to it. So let's not forget to update
657 the pointer to the current virtual location of the
658 current token when we update the pointer to the current
661 rhs
= *FIRST (context
).ptoken
++;
662 /* context->c.mc must be non-null, as if we were not in a
663 macro context, context->tokens_kind could not be equal to
664 TOKENS_KIND_EXTENDED. */
665 context
->c
.mc
->cur_virt_loc
++;
668 if (rhs
->type
== CPP_PADDING
)
670 if (rhs
->flags
& PASTE_LEFT
)
673 if (!paste_tokens (pfile
, virt_loc
, &lhs
, rhs
))
676 while (rhs
->flags
& PASTE_LEFT
);
678 /* Put the resulting token in its own context. */
679 if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
681 source_location
*virt_locs
= NULL
;
682 _cpp_buff
*token_buf
= tokens_buff_new (pfile
, 1, &virt_locs
);
683 tokens_buff_add_token (token_buf
, virt_locs
, lhs
,
684 virt_loc
, 0, NULL
, 0);
685 push_extended_tokens_context (pfile
, context
->c
.mc
->macro_node
,
686 token_buf
, virt_locs
,
687 (const cpp_token
**)token_buf
->base
, 1);
690 _cpp_push_token_context (pfile
, NULL
, lhs
, 1);
693 /* Returns TRUE if the number of arguments ARGC supplied in an
694 invocation of the MACRO referenced by NODE is valid. An empty
695 invocation to a macro with no parameters should pass ARGC as zero.
697 Note that MACRO cannot necessarily be deduced from NODE, in case
698 NODE was redefined whilst collecting arguments. */
700 _cpp_arguments_ok (cpp_reader
*pfile
, cpp_macro
*macro
, const cpp_hashnode
*node
, unsigned int argc
)
702 if (argc
== macro
->paramc
)
705 if (argc
< macro
->paramc
)
707 /* As an extension, a rest argument is allowed to not appear in
708 the invocation at all.
709 e.g. #define debug(format, args...) something
712 This is exactly the same as if there had been an empty rest
713 argument - debug("string", ). */
715 if (argc
+ 1 == macro
->paramc
&& macro
->variadic
)
717 if (CPP_PEDANTIC (pfile
) && ! macro
->syshdr
)
718 cpp_error (pfile
, CPP_DL_PEDWARN
,
719 "ISO C99 requires rest arguments to be used");
723 cpp_error (pfile
, CPP_DL_ERROR
,
724 "macro \"%s\" requires %u arguments, but only %u given",
725 NODE_NAME (node
), macro
->paramc
, argc
);
728 cpp_error (pfile
, CPP_DL_ERROR
,
729 "macro \"%s\" passed %u arguments, but takes just %u",
730 NODE_NAME (node
), argc
, macro
->paramc
);
735 /* Reads and returns the arguments to a function-like macro
736 invocation. Assumes the opening parenthesis has been processed.
737 If there is an error, emits an appropriate diagnostic and returns
738 NULL. Each argument is terminated by a CPP_EOF token, for the
739 future benefit of expand_arg(). If there are any deferred
740 #pragma directives among macro arguments, store pointers to the
741 CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.
743 What is returned is the buffer that contains the memory allocated
744 to hold the macro arguments. NODE is the name of the macro this
745 function is dealing with. If NUM_ARGS is non-NULL, *NUM_ARGS is
746 set to the actual number of macro arguments allocated in the
749 collect_args (cpp_reader
*pfile
, const cpp_hashnode
*node
,
750 _cpp_buff
**pragma_buff
, unsigned *num_args
)
752 _cpp_buff
*buff
, *base_buff
;
754 macro_arg
*args
, *arg
;
755 const cpp_token
*token
;
757 source_location virt_loc
;
758 bool track_macro_expansion_p
= CPP_OPTION (pfile
, track_macro_expansion
);
759 unsigned num_args_alloced
= 0;
761 macro
= node
->value
.macro
;
763 argc
= macro
->paramc
;
767 #define DEFAULT_NUM_TOKENS_PER_MACRO_ARG 50
768 #define ARG_TOKENS_EXTENT 1000
770 buff
= _cpp_get_buff (pfile
, argc
* (DEFAULT_NUM_TOKENS_PER_MACRO_ARG
771 * sizeof (cpp_token
*)
772 + sizeof (macro_arg
)));
774 args
= (macro_arg
*) buff
->base
;
775 memset (args
, 0, argc
* sizeof (macro_arg
));
776 buff
->cur
= (unsigned char *) &args
[argc
];
777 arg
= args
, argc
= 0;
779 /* Collect the tokens making up each argument. We don't yet know
780 how many arguments have been supplied, whether too many or too
781 few. Hence the slightly bizarre usage of "argc" and "arg". */
784 unsigned int paren_depth
= 0;
785 unsigned int ntokens
= 0;
786 unsigned virt_locs_capacity
= DEFAULT_NUM_TOKENS_PER_MACRO_ARG
;
790 arg
->first
= (const cpp_token
**) buff
->cur
;
791 if (track_macro_expansion_p
)
793 virt_locs_capacity
= DEFAULT_NUM_TOKENS_PER_MACRO_ARG
;
794 arg
->virt_locs
= XNEWVEC (source_location
,
800 /* Require space for 2 new tokens (including a CPP_EOF). */
801 if ((unsigned char *) &arg
->first
[ntokens
+ 2] > buff
->limit
)
803 buff
= _cpp_append_extend_buff (pfile
, buff
,
805 * sizeof (cpp_token
*));
806 arg
->first
= (const cpp_token
**) buff
->cur
;
808 if (track_macro_expansion_p
809 && (ntokens
+ 2 > virt_locs_capacity
))
811 virt_locs_capacity
+= ARG_TOKENS_EXTENT
;
812 arg
->virt_locs
= XRESIZEVEC (source_location
,
817 token
= cpp_get_token_1 (pfile
, &virt_loc
);
819 if (token
->type
== CPP_PADDING
)
821 /* Drop leading padding. */
825 else if (token
->type
== CPP_OPEN_PAREN
)
827 else if (token
->type
== CPP_CLOSE_PAREN
)
829 if (paren_depth
-- == 0)
832 else if (token
->type
== CPP_COMMA
)
834 /* A comma does not terminate an argument within
835 parentheses or as part of a variable argument. */
837 && ! (macro
->variadic
&& argc
== macro
->paramc
))
840 else if (token
->type
== CPP_EOF
841 || (token
->type
== CPP_HASH
&& token
->flags
& BOL
))
843 else if (token
->type
== CPP_PRAGMA
)
845 cpp_token
*newtok
= _cpp_temp_token (pfile
);
847 /* CPP_PRAGMA token lives in directive_result, which will
848 be overwritten on the next directive. */
853 if (*pragma_buff
== NULL
854 || BUFF_ROOM (*pragma_buff
) < sizeof (cpp_token
*))
857 if (*pragma_buff
== NULL
)
859 = _cpp_get_buff (pfile
, 32 * sizeof (cpp_token
*));
864 = _cpp_get_buff (pfile
,
865 (BUFF_FRONT (*pragma_buff
)
866 - (*pragma_buff
)->base
) * 2);
867 (*pragma_buff
)->next
= next
;
870 *(const cpp_token
**) BUFF_FRONT (*pragma_buff
) = token
;
871 BUFF_FRONT (*pragma_buff
) += sizeof (cpp_token
*);
872 if (token
->type
== CPP_PRAGMA_EOL
)
874 token
= cpp_get_token_1 (pfile
, &virt_loc
);
876 while (token
->type
!= CPP_EOF
);
878 /* In deferred pragmas parsing_args and prevent_expansion
879 had been changed, reset it. */
880 pfile
->state
.parsing_args
= 2;
881 pfile
->state
.prevent_expansion
= 1;
883 if (token
->type
== CPP_EOF
)
888 set_arg_token (arg
, token
, virt_loc
,
889 ntokens
, MACRO_ARG_TOKEN_NORMAL
,
890 CPP_OPTION (pfile
, track_macro_expansion
));
894 /* Drop trailing padding. */
895 while (ntokens
> 0 && arg
->first
[ntokens
- 1]->type
== CPP_PADDING
)
898 arg
->count
= ntokens
;
899 set_arg_token (arg
, &pfile
->eof
, pfile
->eof
.src_loc
,
900 ntokens
, MACRO_ARG_TOKEN_NORMAL
,
901 CPP_OPTION (pfile
, track_macro_expansion
));
903 /* Terminate the argument. Excess arguments loop back and
904 overwrite the final legitimate argument, before failing. */
905 if (argc
<= macro
->paramc
)
907 buff
->cur
= (unsigned char *) &arg
->first
[ntokens
+ 1];
908 if (argc
!= macro
->paramc
)
912 while (token
->type
!= CPP_CLOSE_PAREN
&& token
->type
!= CPP_EOF
);
914 if (token
->type
== CPP_EOF
)
916 /* We still need the CPP_EOF to end directives, and to end
917 pre-expansion of a macro argument. Step back is not
918 unconditional, since we don't want to return a CPP_EOF to our
919 callers at the end of an -include-d file. */
920 if (pfile
->context
->prev
|| pfile
->state
.in_directive
)
921 _cpp_backup_tokens (pfile
, 1);
922 cpp_error (pfile
, CPP_DL_ERROR
,
923 "unterminated argument list invoking macro \"%s\"",
928 /* A single empty argument is counted as no argument. */
929 if (argc
== 1 && macro
->paramc
== 0 && args
[0].count
== 0)
931 if (_cpp_arguments_ok (pfile
, macro
, node
, argc
))
933 /* GCC has special semantics for , ## b where b is a varargs
934 parameter: we remove the comma if b was omitted entirely.
935 If b was merely an empty argument, the comma is retained.
936 If the macro takes just one (varargs) parameter, then we
937 retain the comma only if we are standards conforming.
939 If FIRST is NULL replace_args () swallows the comma. */
940 if (macro
->variadic
&& (argc
< macro
->paramc
941 || (argc
== 1 && args
[0].count
== 0
942 && !CPP_OPTION (pfile
, std
))))
943 args
[macro
->paramc
- 1].first
= NULL
;
945 *num_args
= num_args_alloced
;
950 /* An error occurred. */
951 _cpp_release_buff (pfile
, base_buff
);
955 /* Search for an opening parenthesis to the macro of NODE, in such a
956 way that, if none is found, we don't lose the information in any
957 intervening padding tokens. If we find the parenthesis, collect
958 the arguments and return the buffer containing them. PRAGMA_BUFF
959 argument is the same as in collect_args. If NUM_ARGS is non-NULL,
960 *NUM_ARGS is set to the number of arguments contained in the
963 funlike_invocation_p (cpp_reader
*pfile
, cpp_hashnode
*node
,
964 _cpp_buff
**pragma_buff
, unsigned *num_args
)
966 const cpp_token
*token
, *padding
= NULL
;
970 token
= cpp_get_token (pfile
);
971 if (token
->type
!= CPP_PADDING
)
974 || (!(padding
->flags
& PREV_WHITE
) && token
->val
.source
== NULL
))
978 if (token
->type
== CPP_OPEN_PAREN
)
980 pfile
->state
.parsing_args
= 2;
981 return collect_args (pfile
, node
, pragma_buff
, num_args
);
984 /* CPP_EOF can be the end of macro arguments, or the end of the
985 file. We mustn't back up over the latter. Ugh. */
986 if (token
->type
!= CPP_EOF
|| token
== &pfile
->eof
)
988 /* Back up. We may have skipped padding, in which case backing
989 up more than one token when expanding macros is in general
990 too difficult. We re-insert it in its own context. */
991 _cpp_backup_tokens (pfile
, 1);
993 _cpp_push_token_context (pfile
, NULL
, padding
, 1);
999 /* Return the real number of tokens in the expansion of MACRO. */
1000 static inline unsigned int
1001 macro_real_token_count (const cpp_macro
*macro
)
1004 if (__builtin_expect (!macro
->extra_tokens
, true))
1005 return macro
->count
;
1006 for (i
= 0; i
< macro
->count
; i
++)
1007 if (macro
->exp
.tokens
[i
].type
== CPP_PASTE
)
1012 /* Push the context of a macro with hash entry NODE onto the context
1013 stack. If we can successfully expand the macro, we push a context
1014 containing its yet-to-be-rescanned replacement list and return one.
1015 If there were additionally any unexpanded deferred #pragma
1016 directives among macro arguments, push another context containing
1017 the pragma tokens before the yet-to-be-rescanned replacement list
1018 and return two. Otherwise, we don't push a context and return
1019 zero. LOCATION is the location of the expansion point of the
1022 enter_macro_context (cpp_reader
*pfile
, cpp_hashnode
*node
,
1023 const cpp_token
*result
, source_location location
)
1025 /* The presence of a macro invalidates a file's controlling macro. */
1026 pfile
->mi_valid
= false;
1028 pfile
->state
.angled_headers
= false;
1030 /* From here to when we push the context for the macro later down
1031 this function, we need to flag the fact that we are about to
1032 expand a macro. This is useful when -ftrack-macro-expansion is
1033 turned off. In that case, we need to record the location of the
1034 expansion point of the top-most macro we are about to to expand,
1035 into pfile->invocation_location. But we must not record any such
1036 location once the process of expanding the macro starts; that is,
1037 we must not do that recording between now and later down this
1038 function where set this flag to FALSE. */
1039 pfile
->about_to_expand_macro_p
= true;
1041 if ((node
->flags
& NODE_BUILTIN
) && !(node
->flags
& NODE_USED
))
1043 node
->flags
|= NODE_USED
;
1044 if ((!pfile
->cb
.user_builtin_macro
1045 || !pfile
->cb
.user_builtin_macro (pfile
, node
))
1046 && pfile
->cb
.used_define
)
1047 pfile
->cb
.used_define (pfile
, pfile
->directive_line
, node
);
1050 /* Handle standard macros. */
1051 if (! (node
->flags
& NODE_BUILTIN
))
1053 cpp_macro
*macro
= node
->value
.macro
;
1054 _cpp_buff
*pragma_buff
= NULL
;
1056 if (macro
->fun_like
)
1059 unsigned num_args
= 0;
1061 pfile
->state
.prevent_expansion
++;
1062 pfile
->keep_tokens
++;
1063 pfile
->state
.parsing_args
= 1;
1064 buff
= funlike_invocation_p (pfile
, node
, &pragma_buff
,
1066 pfile
->state
.parsing_args
= 0;
1067 pfile
->keep_tokens
--;
1068 pfile
->state
.prevent_expansion
--;
1072 if (CPP_WTRADITIONAL (pfile
) && ! node
->value
.macro
->syshdr
)
1073 cpp_warning (pfile
, CPP_W_TRADITIONAL
,
1074 "function-like macro \"%s\" must be used with arguments in traditional C",
1078 _cpp_release_buff (pfile
, pragma_buff
);
1080 pfile
->about_to_expand_macro_p
= false;
1084 if (macro
->paramc
> 0)
1085 replace_args (pfile
, node
, macro
,
1086 (macro_arg
*) buff
->base
,
1088 /* Free the memory used by the arguments of this
1089 function-like macro. This memory has been allocated by
1090 funlike_invocation_p and by replace_args. */
1091 delete_macro_args (buff
, num_args
);
1094 /* Disable the macro within its expansion. */
1095 node
->flags
|= NODE_DISABLED
;
1097 if (!(node
->flags
& NODE_USED
))
1099 node
->flags
|= NODE_USED
;
1100 if (pfile
->cb
.used_define
)
1101 pfile
->cb
.used_define (pfile
, pfile
->directive_line
, node
);
1105 pfile
->cb
.used (pfile
, location
, node
);
1109 if (macro
->paramc
== 0)
1111 if (CPP_OPTION (pfile
, track_macro_expansion
))
1113 unsigned int i
, count
= macro
->count
;
1114 const cpp_token
*src
= macro
->exp
.tokens
;
1115 const struct line_map
*map
;
1116 source_location
*virt_locs
= NULL
;
1117 _cpp_buff
*macro_tokens
=
1118 tokens_buff_new (pfile
, count
, &virt_locs
);
1120 /* Create a macro map to record the locations of the
1121 tokens that are involved in the expansion. LOCATION
1122 is the location of the macro expansion point. */
1123 map
= linemap_enter_macro (pfile
->line_table
,
1124 node
, location
, count
);
1125 for (i
= 0; i
< count
; ++i
)
1127 tokens_buff_add_token (macro_tokens
, virt_locs
,
1129 src
->src_loc
, map
, i
);
1132 push_extended_tokens_context (pfile
, node
,
1135 (const cpp_token
**)
1138 num_macro_tokens_counter
+= count
;
1142 unsigned tokens_count
= macro_real_token_count (macro
);
1143 _cpp_push_token_context (pfile
, node
, macro
->exp
.tokens
,
1145 num_macro_tokens_counter
+= tokens_count
;
1151 if (!pfile
->state
.in_directive
)
1152 _cpp_push_token_context (pfile
, NULL
,
1153 padding_token (pfile
, result
), 1);
1156 unsigned tokens_count
;
1157 _cpp_buff
*tail
= pragma_buff
->next
;
1158 pragma_buff
->next
= NULL
;
1159 tokens_count
= ((const cpp_token
**) BUFF_FRONT (pragma_buff
)
1160 - (const cpp_token
**) pragma_buff
->base
);
1161 push_ptoken_context (pfile
, NULL
, pragma_buff
,
1162 (const cpp_token
**) pragma_buff
->base
,
1165 if (!CPP_OPTION (pfile
, track_macro_expansion
))
1166 num_macro_tokens_counter
+= tokens_count
;
1169 while (pragma_buff
!= NULL
);
1170 pfile
->about_to_expand_macro_p
= false;
1174 pfile
->about_to_expand_macro_p
= false;
1178 pfile
->about_to_expand_macro_p
= false;
1179 /* Handle built-in macros and the _Pragma operator. */
1180 return builtin_macro (pfile
, node
);
1183 /* De-allocate the memory used by BUFF which is an array of instances
1184 of macro_arg. NUM_ARGS is the number of instances of macro_arg
1187 delete_macro_args (_cpp_buff
*buff
, unsigned num_args
)
1189 macro_arg
*macro_args
;
1195 macro_args
= (macro_arg
*) buff
->base
;
1197 /* Walk instances of macro_arg to free their expanded tokens as well
1198 as their macro_arg::virt_locs members. */
1199 for (i
= 0; i
< num_args
; ++i
)
1201 if (macro_args
[i
].expanded
)
1203 free (macro_args
[i
].expanded
);
1204 macro_args
[i
].expanded
= NULL
;
1206 if (macro_args
[i
].virt_locs
)
1208 free (macro_args
[i
].virt_locs
);
1209 macro_args
[i
].virt_locs
= NULL
;
1211 if (macro_args
[i
].expanded_virt_locs
)
1213 free (macro_args
[i
].expanded_virt_locs
);
1214 macro_args
[i
].expanded_virt_locs
= NULL
;
1217 _cpp_free_buff (buff
);
1220 /* Set the INDEXth token of the macro argument ARG. TOKEN is the token
1221 to set, LOCATION is its virtual location. "Virtual" location means
1222 the location that encodes loci across macro expansion. Otherwise
1223 it has to be TOKEN->SRC_LOC. KIND is the kind of tokens the
1224 argument ARG is supposed to contain. Note that ARG must be
1225 tailored so that it has enough room to contain INDEX + 1 numbers of
1226 tokens, at least. */
1228 set_arg_token (macro_arg
*arg
, const cpp_token
*token
,
1229 source_location location
, size_t index
,
1230 enum macro_arg_token_kind kind
,
1231 bool track_macro_exp_p
)
1233 const cpp_token
**token_ptr
;
1234 source_location
*loc
= NULL
;
1237 arg_token_ptr_at (arg
, index
, kind
,
1238 track_macro_exp_p
? &loc
: NULL
);
1243 #ifdef ENABLE_CHECKING
1244 if (kind
== MACRO_ARG_TOKEN_STRINGIFIED
1245 || !track_macro_exp_p
)
1246 /* We can't set the location of a stringified argument
1247 token and we can't set any location if we aren't tracking
1248 macro expansion locations. */
1255 /* Get the pointer to the location of the argument token of the
1256 function-like macro argument ARG. This function must be called
1257 only when we -ftrack-macro-expansion is on. */
1258 static const source_location
*
1259 get_arg_token_location (const macro_arg
*arg
,
1260 enum macro_arg_token_kind kind
)
1262 const source_location
*loc
= NULL
;
1263 const cpp_token
**token_ptr
=
1264 arg_token_ptr_at (arg
, 0, kind
, (source_location
**) &loc
);
1266 if (token_ptr
== NULL
)
1272 /* Return the pointer to the INDEXth token of the macro argument ARG.
1273 KIND specifies the kind of token the macro argument ARG contains.
1274 If VIRT_LOCATION is non NULL, *VIRT_LOCATION is set to the address
1275 of the virtual location of the returned token if the
1276 -ftrack-macro-expansion flag is on; otherwise, it's set to the
1277 spelling location of the returned token. */
1278 static const cpp_token
**
1279 arg_token_ptr_at (const macro_arg
*arg
, size_t index
,
1280 enum macro_arg_token_kind kind
,
1281 source_location
**virt_location
)
1283 const cpp_token
**tokens_ptr
= NULL
;
1287 case MACRO_ARG_TOKEN_NORMAL
:
1288 tokens_ptr
= arg
->first
;
1290 case MACRO_ARG_TOKEN_STRINGIFIED
:
1291 tokens_ptr
= (const cpp_token
**) &arg
->stringified
;
1293 case MACRO_ARG_TOKEN_EXPANDED
:
1294 tokens_ptr
= arg
->expanded
;
1298 if (tokens_ptr
== NULL
)
1299 /* This can happen for e.g, an empty token argument to a
1300 funtion-like macro. */
1305 if (kind
== MACRO_ARG_TOKEN_NORMAL
)
1306 *virt_location
= &arg
->virt_locs
[index
];
1307 else if (kind
== MACRO_ARG_TOKEN_EXPANDED
)
1308 *virt_location
= &arg
->expanded_virt_locs
[index
];
1309 else if (kind
== MACRO_ARG_TOKEN_STRINGIFIED
)
1311 (source_location
*) &tokens_ptr
[index
]->src_loc
;
1313 return &tokens_ptr
[index
];
1316 /* Initialize an iterator so that it iterates over the tokens of a
1317 function-like macro argument. KIND is the kind of tokens we want
1318 ITER to iterate over. TOKEN_PTR points the first token ITER will
1321 macro_arg_token_iter_init (macro_arg_token_iter
*iter
,
1322 bool track_macro_exp_p
,
1323 enum macro_arg_token_kind kind
,
1324 const macro_arg
*arg
,
1325 const cpp_token
**token_ptr
)
1327 iter
->track_macro_exp_p
= track_macro_exp_p
;
1329 iter
->token_ptr
= token_ptr
;
1330 /* Unconditionally initialize this so that the compiler doesn't warn
1331 about iter->location_ptr being possibly uninitialized later after
1332 this code has been inlined somewhere. */
1333 iter
->location_ptr
= NULL
;
1334 if (track_macro_exp_p
)
1335 iter
->location_ptr
= get_arg_token_location (arg
, kind
);
1336 #ifdef ENABLE_CHECKING
1337 iter
->num_forwards
= 0;
1338 if (track_macro_exp_p
1339 && token_ptr
!= NULL
1340 && iter
->location_ptr
== NULL
)
1345 /* Move the iterator one token forward. Note that if IT was
1346 initialized on an argument that has a stringified token, moving it
1347 forward doesn't make sense as a stringified token is essentially one
1350 macro_arg_token_iter_forward (macro_arg_token_iter
*it
)
1354 case MACRO_ARG_TOKEN_NORMAL
:
1355 case MACRO_ARG_TOKEN_EXPANDED
:
1357 if (it
->track_macro_exp_p
)
1360 case MACRO_ARG_TOKEN_STRINGIFIED
:
1361 #ifdef ENABLE_CHECKING
1362 if (it
->num_forwards
> 0)
1368 #ifdef ENABLE_CHECKING
1373 /* Return the token pointed to by the iterator. */
1374 static const cpp_token
*
1375 macro_arg_token_iter_get_token (const macro_arg_token_iter
*it
)
1377 #ifdef ENABLE_CHECKING
1378 if (it
->kind
== MACRO_ARG_TOKEN_STRINGIFIED
1379 && it
->num_forwards
> 0)
1382 if (it
->token_ptr
== NULL
)
1384 return *it
->token_ptr
;
1387 /* Return the location of the token pointed to by the iterator.*/
1388 static source_location
1389 macro_arg_token_iter_get_location (const macro_arg_token_iter
*it
)
1391 #ifdef ENABLE_CHECKING
1392 if (it
->kind
== MACRO_ARG_TOKEN_STRINGIFIED
1393 && it
->num_forwards
> 0)
1396 if (it
->track_macro_exp_p
)
1397 return *it
->location_ptr
;
1399 return (*it
->token_ptr
)->src_loc
;
1402 /* Return the index of a token [resulting from macro expansion] inside
1403 the total list of tokens resulting from a given macro
1404 expansion. The index can be different depending on whether if we
1405 want each tokens resulting from function-like macro arguments
1406 expansion to have a different location or not.
1408 E.g, consider this function-like macro:
1412 Then consider us "calling" it (and thus expanding it) like:
1416 It will be expanded into:
1420 Let's consider the case of the token '4'.
1422 Its index can be 2 (it's the third token of the set of tokens
1423 resulting from the expansion) or it can be 0 if we consider that
1424 all tokens resulting from the expansion of the argument "1+2" have
1425 the same index, which is 0. In this later case, the index of token
1426 '-' would then be 1 and the index of token '3' would be 2.
1428 The later case is useful to use less memory e.g, for the case of
1429 the user using the option -ftrack-macro-expansion=1.
1431 ABSOLUTE_TOKEN_INDEX is the index of the macro argument token we
1432 are interested in. CUR_REPLACEMENT_TOKEN is the token of the macro
1433 parameter (inside the macro replacement list) that corresponds to
1434 the macro argument for which ABSOLUTE_TOKEN_INDEX is a token index
1437 If we refer to the example above, for the '4' argument token,
1438 ABSOLUTE_TOKEN_INDEX would be set to 2, and CUR_REPLACEMENT_TOKEN
1439 would be set to the token 'x', in the replacement list "x - 3" of
1442 This is a subroutine of replace_args. */
1443 inline static unsigned
1444 expanded_token_index (cpp_reader
*pfile
, cpp_macro
*macro
,
1445 const cpp_token
*cur_replacement_token
,
1446 unsigned absolute_token_index
)
1448 if (CPP_OPTION (pfile
, track_macro_expansion
) > 1)
1449 return absolute_token_index
;
1450 return cur_replacement_token
- macro
->exp
.tokens
;
1453 /* Replace the parameters in a function-like macro of NODE with the
1454 actual ARGS, and place the result in a newly pushed token context.
1455 Expand each argument before replacing, unless it is operated upon
1456 by the # or ## operators. EXPANSION_POINT_LOC is the location of
1457 the expansion point of the macro. E.g, the location of the
1458 function-like macro invocation. */
1460 replace_args (cpp_reader
*pfile
, cpp_hashnode
*node
, cpp_macro
*macro
,
1461 macro_arg
*args
, source_location expansion_point_loc
)
1463 unsigned int i
, total
;
1464 const cpp_token
*src
, *limit
;
1465 const cpp_token
**first
= NULL
;
1467 _cpp_buff
*buff
= NULL
;
1468 source_location
*virt_locs
= NULL
;
1469 unsigned int exp_count
;
1470 const struct line_map
*map
= NULL
;
1471 int track_macro_exp
;
1473 /* First, fully macro-expand arguments, calculating the number of
1474 tokens in the final expansion as we go. The ordering of the if
1475 statements below is subtle; we must handle stringification before
1478 /* EXP_COUNT is the number of tokens in the macro replacement
1479 list. TOTAL is the number of tokens /after/ macro parameters
1480 have been replaced by their arguments. */
1481 exp_count
= macro_real_token_count (macro
);
1483 limit
= macro
->exp
.tokens
+ exp_count
;
1485 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
1486 if (src
->type
== CPP_MACRO_ARG
)
1488 /* Leading and trailing padding tokens. */
1490 /* Account for leading and padding tokens in exp_count too.
1491 This is going to be important later down this function,
1492 when we want to handle the case of (track_macro_exp <
1496 /* We have an argument. If it is not being stringified or
1497 pasted it is macro-replaced before insertion. */
1498 arg
= &args
[src
->val
.macro_arg
.arg_no
- 1];
1500 if (src
->flags
& STRINGIFY_ARG
)
1502 if (!arg
->stringified
)
1503 arg
->stringified
= stringify_arg (pfile
, arg
);
1505 else if ((src
->flags
& PASTE_LEFT
)
1506 || (src
> macro
->exp
.tokens
&& (src
[-1].flags
& PASTE_LEFT
)))
1507 total
+= arg
->count
- 1;
1511 expand_arg (pfile
, arg
);
1512 total
+= arg
->expanded_count
- 1;
1516 /* When the compiler is called with the -ftrack-macro-expansion
1517 flag, we need to keep track of the location of each token that
1518 results from macro expansion.
1520 A token resulting from macro expansion is not a new token. It is
1521 simply the same token as the token coming from the macro
1522 definition. The new things that are allocated are the buffer
1523 that holds the tokens resulting from macro expansion and a new
1524 location that records many things like the locus of the expansion
1525 point as well as the original locus inside the definition of the
1526 macro. This location is called a virtual location.
1528 So the buffer BUFF holds a set of cpp_token*, and the buffer
1529 VIRT_LOCS holds the virtual locations of the tokens held by BUFF.
1531 Both of these two buffers are going to be hung off of the macro
1532 context, when the latter is pushed. The memory allocated to
1533 store the tokens and their locations is going to be freed once
1534 the context of macro expansion is popped.
1536 As far as tokens are concerned, the memory overhead of
1537 -ftrack-macro-expansion is proportional to the number of
1538 macros that get expanded multiplied by sizeof (source_location).
1539 The good news is that extra memory gets freed when the macro
1540 context is freed, i.e shortly after the macro got expanded. */
1542 /* Is the -ftrack-macro-expansion flag in effect? */
1543 track_macro_exp
= CPP_OPTION (pfile
, track_macro_expansion
);
1545 /* Now allocate memory space for tokens and locations resulting from
1546 the macro expansion, copy the tokens and replace the arguments.
1547 This memory must be freed when the context of the macro MACRO is
1549 buff
= tokens_buff_new (pfile
, total
, track_macro_exp
? &virt_locs
: NULL
);
1551 first
= (const cpp_token
**) buff
->base
;
1553 /* Create a macro map to record the locations of the tokens that are
1554 involved in the expansion. Note that the expansion point is set
1555 to the location of the closing parenthesis. Otherwise, the
1556 subsequent map created for the first token that comes after the
1557 macro map might have a wrong line number. That would lead to
1558 tokens with wrong line numbers after the macro expansion. This
1559 adds up to the memory overhead of the -ftrack-macro-expansion
1560 flag; for every macro that is expanded, a "macro map" is
1562 if (track_macro_exp
)
1564 int num_macro_tokens
= total
;
1565 if (track_macro_exp
< 2)
1566 /* Then the number of macro tokens won't take in account the
1567 fact that function-like macro arguments can expand to
1568 multiple tokens. This is to save memory at the expense of
1571 Suppose we have #define SQARE(A) A * A
1573 And then we do SQARE(2+3)
1575 Then the tokens 2, +, 3, will have the same location,
1576 saying they come from the expansion of the argument A. */
1577 num_macro_tokens
= exp_count
;
1578 map
= linemap_enter_macro (pfile
->line_table
, node
,
1579 expansion_point_loc
,
1583 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
1585 unsigned int arg_tokens_count
;
1586 macro_arg_token_iter from
;
1587 const cpp_token
**paste_flag
= NULL
;
1588 const cpp_token
**tmp_token_ptr
;
1590 if (src
->type
!= CPP_MACRO_ARG
)
1592 /* Allocate a virtual location for token SRC, and add that
1593 token and its virtual location into the buffers BUFF and
1595 unsigned index
= expanded_token_index (pfile
, macro
, src
, i
);
1596 tokens_buff_add_token (buff
, virt_locs
, src
,
1597 src
->src_loc
, src
->src_loc
,
1604 arg
= &args
[src
->val
.macro_arg
.arg_no
- 1];
1605 /* SRC is a macro parameter that we need to replace with its
1606 corresponding argument. So at some point we'll need to
1607 iterate over the tokens of the macro argument and copy them
1608 into the "place" now holding the correspondig macro
1609 parameter. We are going to use the iterator type
1610 macro_argo_token_iter to handle that iterating. The 'if'
1611 below is to initialize the iterator depending on the type of
1612 tokens the macro argument has. It also does some adjustment
1613 related to padding tokens and some pasting corner cases. */
1614 if (src
->flags
& STRINGIFY_ARG
)
1616 arg_tokens_count
= 1;
1617 macro_arg_token_iter_init (&from
,
1619 track_macro_expansion
),
1620 MACRO_ARG_TOKEN_STRINGIFIED
,
1621 arg
, &arg
->stringified
);
1623 else if (src
->flags
& PASTE_LEFT
)
1625 arg_tokens_count
= arg
->count
;
1626 macro_arg_token_iter_init (&from
,
1628 track_macro_expansion
),
1629 MACRO_ARG_TOKEN_NORMAL
,
1632 else if (src
!= macro
->exp
.tokens
&& (src
[-1].flags
& PASTE_LEFT
))
1635 arg_tokens_count
= arg
->count
;
1636 macro_arg_token_iter_init (&from
,
1638 track_macro_expansion
),
1639 MACRO_ARG_TOKEN_NORMAL
,
1642 num_toks
= tokens_buff_count (buff
);
1646 /* So the current parameter token is pasted to the previous
1647 token in the replacement list. Let's look at what
1648 we have as previous and current arguments. */
1650 /* This is the previous argument's token ... */
1651 tmp_token_ptr
= tokens_buff_last_token_ptr (buff
);
1653 if ((*tmp_token_ptr
)->type
== CPP_COMMA
1655 && src
->val
.macro_arg
.arg_no
== macro
->paramc
)
1657 /* ... which is a comma; and the current parameter
1658 is the last parameter of a variadic function-like
1659 macro. If the argument to the current last
1660 parameter is NULL, then swallow the comma,
1661 otherwise drop the paste flag. */
1662 if (macro_arg_token_iter_get_token (&from
) == NULL
)
1663 tokens_buff_remove_last_token (buff
);
1665 paste_flag
= tmp_token_ptr
;
1667 /* Remove the paste flag if the RHS is a placemarker. */
1668 else if (arg_tokens_count
== 0)
1669 paste_flag
= tmp_token_ptr
;
1674 arg_tokens_count
= arg
->expanded_count
;
1675 macro_arg_token_iter_init (&from
,
1677 track_macro_expansion
),
1678 MACRO_ARG_TOKEN_EXPANDED
,
1679 arg
, arg
->expanded
);
1682 /* Padding on the left of an argument (unless RHS of ##). */
1683 if ((!pfile
->state
.in_directive
|| pfile
->state
.directive_wants_padding
)
1684 && src
!= macro
->exp
.tokens
&& !(src
[-1].flags
& PASTE_LEFT
))
1686 const cpp_token
*t
= padding_token (pfile
, src
);
1687 unsigned index
= expanded_token_index (pfile
, macro
, src
, i
);
1688 /* Allocate a virtual location for the padding token and
1689 append the token and its location to BUFF and
1691 tokens_buff_add_token (buff
, virt_locs
, t
,
1692 t
->src_loc
, t
->src_loc
,
1696 if (arg_tokens_count
)
1698 /* So now we've got the number of tokens that make up the
1699 argument that is going to replace the current parameter
1700 in the macro's replacement list. */
1702 for (j
= 0; j
< arg_tokens_count
; ++j
)
1704 /* So if track_macro_exp is < 2, the user wants to
1705 save extra memory while tracking macro expansion
1706 locations. So in that case here is what we do:
1708 Suppose we have #define SQARE(A) A * A
1710 And then we do SQARE(2+3)
1712 Then the tokens 2, +, 3, will have the same location,
1713 saying they come from the expansion of the argument
1716 So that means we are going to ignore the COUNT tokens
1717 resulting from the expansion of the current macro
1718 arugment. In other words all the ARG_TOKENS_COUNT tokens
1719 resulting from the expansion of the macro argument will
1720 have the index I. Normally, each of those token should
1722 unsigned token_index
= i
;
1724 if (track_macro_exp
> 1)
1727 index
= expanded_token_index (pfile
, macro
, src
, token_index
);
1728 tokens_buff_add_token (buff
, virt_locs
,
1729 macro_arg_token_iter_get_token (&from
),
1730 macro_arg_token_iter_get_location (&from
),
1731 src
->src_loc
, map
, index
);
1732 macro_arg_token_iter_forward (&from
);
1735 /* With a non-empty argument on the LHS of ##, the last
1736 token should be flagged PASTE_LEFT. */
1737 if (src
->flags
& PASTE_LEFT
)
1739 (const cpp_token
**) tokens_buff_last_token_ptr (buff
);
1741 else if (CPP_PEDANTIC (pfile
) && ! macro
->syshdr
1742 && ! CPP_OPTION (pfile
, c99
)
1743 && ! cpp_in_system_header (pfile
))
1745 cpp_error (pfile
, CPP_DL_PEDWARN
,
1746 "invoking macro %s argument %d: "
1747 "empty macro arguments are undefined"
1748 " in ISO C90 and ISO C++98",
1750 src
->val
.macro_arg
.arg_no
);
1753 /* Avoid paste on RHS (even case count == 0). */
1754 if (!pfile
->state
.in_directive
&& !(src
->flags
& PASTE_LEFT
))
1756 const cpp_token
*t
= &pfile
->avoid_paste
;
1757 tokens_buff_add_token (buff
, virt_locs
,
1758 t
, t
->src_loc
, t
->src_loc
,
1762 /* Add a new paste flag, or remove an unwanted one. */
1765 cpp_token
*token
= _cpp_temp_token (pfile
);
1766 token
->type
= (*paste_flag
)->type
;
1767 token
->val
= (*paste_flag
)->val
;
1768 if (src
->flags
& PASTE_LEFT
)
1769 token
->flags
= (*paste_flag
)->flags
| PASTE_LEFT
;
1771 token
->flags
= (*paste_flag
)->flags
& ~PASTE_LEFT
;
1772 *paste_flag
= token
;
1775 i
+= arg_tokens_count
;
1778 if (track_macro_exp
)
1779 push_extended_tokens_context (pfile
, node
, buff
, virt_locs
, first
,
1780 tokens_buff_count (buff
));
1782 push_ptoken_context (pfile
, node
, buff
, first
,
1783 tokens_buff_count (buff
));
1785 num_macro_tokens_counter
+= tokens_buff_count (buff
);
1788 /* Return a special padding token, with padding inherited from SOURCE. */
1789 static const cpp_token
*
1790 padding_token (cpp_reader
*pfile
, const cpp_token
*source
)
1792 cpp_token
*result
= _cpp_temp_token (pfile
);
1794 result
->type
= CPP_PADDING
;
1796 /* Data in GCed data structures cannot be made const so far, so we
1797 need a cast here. */
1798 result
->val
.source
= (cpp_token
*) source
;
1803 /* Get a new uninitialized context. Create a new one if we cannot
1804 re-use an old one. */
1805 static cpp_context
*
1806 next_context (cpp_reader
*pfile
)
1808 cpp_context
*result
= pfile
->context
->next
;
1812 result
= XNEW (cpp_context
);
1813 memset (result
, 0, sizeof (cpp_context
));
1814 result
->prev
= pfile
->context
;
1816 pfile
->context
->next
= result
;
1819 pfile
->context
= result
;
1823 /* Push a list of pointers to tokens. */
1825 push_ptoken_context (cpp_reader
*pfile
, cpp_hashnode
*macro
, _cpp_buff
*buff
,
1826 const cpp_token
**first
, unsigned int count
)
1828 cpp_context
*context
= next_context (pfile
);
1830 context
->tokens_kind
= TOKENS_KIND_INDIRECT
;
1831 context
->c
.macro
= macro
;
1832 context
->buff
= buff
;
1833 FIRST (context
).ptoken
= first
;
1834 LAST (context
).ptoken
= first
+ count
;
1837 /* Push a list of tokens.
1839 A NULL macro means that we should continue the current macro
1840 expansion, in essence. That means that if we are currently in a
1841 macro expansion context, we'll make the new pfile->context refer to
1842 the current macro. */
1844 _cpp_push_token_context (cpp_reader
*pfile
, cpp_hashnode
*macro
,
1845 const cpp_token
*first
, unsigned int count
)
1847 cpp_context
*context
;
1850 macro
= macro_of_context (pfile
->context
);
1852 context
= next_context (pfile
);
1853 context
->tokens_kind
= TOKENS_KIND_DIRECT
;
1854 context
->c
.macro
= macro
;
1855 context
->buff
= NULL
;
1856 FIRST (context
).token
= first
;
1857 LAST (context
).token
= first
+ count
;
1860 /* Build a context containing a list of tokens as well as their
1861 virtual locations and push it. TOKENS_BUFF is the buffer that
1862 contains the tokens pointed to by FIRST. If TOKENS_BUFF is
1863 non-NULL, it means that the context owns it, meaning that
1864 _cpp_pop_context will free it as well as VIRT_LOCS_BUFF that
1865 contains the virtual locations.
1867 A NULL macro means that we should continue the current macro
1868 expansion, in essence. That means that if we are currently in a
1869 macro expansion context, we'll make the new pfile->context refer to
1870 the current macro. */
1872 push_extended_tokens_context (cpp_reader
*pfile
,
1873 cpp_hashnode
*macro
,
1874 _cpp_buff
*token_buff
,
1875 source_location
*virt_locs
,
1876 const cpp_token
**first
,
1879 cpp_context
*context
;
1883 macro
= macro_of_context (pfile
->context
);
1885 context
= next_context (pfile
);
1886 context
->tokens_kind
= TOKENS_KIND_EXTENDED
;
1887 context
->buff
= token_buff
;
1889 m
= XNEW (macro_context
);
1890 m
->macro_node
= macro
;
1891 m
->virt_locs
= virt_locs
;
1892 m
->cur_virt_loc
= virt_locs
;
1894 FIRST (context
).ptoken
= first
;
1895 LAST (context
).ptoken
= first
+ count
;
1898 /* Push a traditional macro's replacement text. */
1900 _cpp_push_text_context (cpp_reader
*pfile
, cpp_hashnode
*macro
,
1901 const uchar
*start
, size_t len
)
1903 cpp_context
*context
= next_context (pfile
);
1905 context
->tokens_kind
= TOKENS_KIND_DIRECT
;
1906 context
->c
.macro
= macro
;
1907 context
->buff
= NULL
;
1908 CUR (context
) = start
;
1909 RLIMIT (context
) = start
+ len
;
1910 macro
->flags
|= NODE_DISABLED
;
1913 /* Creates a buffer that holds tokens a.k.a "token buffer", usually
1914 for the purpose of storing them on a cpp_context. If VIRT_LOCS is
1915 non-null (which means that -ftrack-macro-expansion is on),
1916 *VIRT_LOCS is set to a newly allocated buffer that is supposed to
1917 hold the virtual locations of the tokens resulting from macro
1920 tokens_buff_new (cpp_reader
*pfile
, size_t len
,
1921 source_location
**virt_locs
)
1923 size_t tokens_size
= len
* sizeof (cpp_token
*);
1924 size_t locs_size
= len
* sizeof (source_location
);
1926 if (virt_locs
!= NULL
)
1927 *virt_locs
= XNEWVEC (source_location
, locs_size
);
1928 return _cpp_get_buff (pfile
, tokens_size
);
1931 /* Returns the number of tokens contained in a token buffer. The
1932 buffer holds a set of cpp_token*. */
1934 tokens_buff_count (_cpp_buff
*buff
)
1936 return (BUFF_FRONT (buff
) - buff
->base
) / sizeof (cpp_token
*);
1939 /* Return a pointer to the last token contained in the token buffer
1941 static const cpp_token
**
1942 tokens_buff_last_token_ptr (_cpp_buff
*buff
)
1944 return &((const cpp_token
**) BUFF_FRONT (buff
))[-1];
1947 /* Remove the last token contained in the token buffer TOKENS_BUFF.
1948 If VIRT_LOCS_BUFF is non-NULL, it should point at the buffer
1949 containing the virtual locations of the tokens in TOKENS_BUFF; in
1950 which case the function updates that buffer as well. */
1952 tokens_buff_remove_last_token (_cpp_buff
*tokens_buff
)
1955 if (BUFF_FRONT (tokens_buff
) > tokens_buff
->base
)
1956 BUFF_FRONT (tokens_buff
) =
1957 (unsigned char *) &((cpp_token
**) BUFF_FRONT (tokens_buff
))[-1];
1960 /* Insert a token into the token buffer at the position pointed to by
1961 DEST. Note that the buffer is not enlarged so the previous token
1962 that was at *DEST is overwritten. VIRT_LOC_DEST, if non-null,
1963 means -ftrack-macro-expansion is effect; it then points to where to
1964 insert the virtual location of TOKEN. TOKEN is the token to
1965 insert. VIRT_LOC is the virtual location of the token, i.e, the
1966 location possibly encoding its locus across macro expansion. If
1967 TOKEN is an argument of a function-like macro (inside a macro
1968 replacement list), PARM_DEF_LOC is the spelling location of the
1969 macro parameter that TOKEN is replacing, in the replacement list of
1970 the macro. If TOKEN is not an argument of a function-like macro or
1971 if it doesn't come from a macro expansion, then VIRT_LOC can just
1972 be set to the same value as PARM_DEF_LOC. If MAP is non null, it
1973 means TOKEN comes from a macro expansion and MAP is the macro map
1974 associated to the macro. MACRO_TOKEN_INDEX points to the index of
1975 the token in the macro map; it is not considered if MAP is NULL.
1977 Upon successful completion this function returns the a pointer to
1978 the position of the token coming right after the insertion
1980 static inline const cpp_token
**
1981 tokens_buff_put_token_to (const cpp_token
**dest
,
1982 source_location
*virt_loc_dest
,
1983 const cpp_token
*token
,
1984 source_location virt_loc
,
1985 source_location parm_def_loc
,
1986 const struct line_map
*map
,
1987 unsigned int macro_token_index
)
1989 source_location macro_loc
= virt_loc
;
1990 const cpp_token
**result
;
1994 /* -ftrack-macro-expansion is on. */
1996 macro_loc
= linemap_add_macro_token (map
, macro_token_index
,
1997 virt_loc
, parm_def_loc
);
1998 *virt_loc_dest
= macro_loc
;
2006 /* Adds a token at the end of the tokens contained in BUFFER. Note
2007 that this function doesn't enlarge BUFFER when the number of tokens
2008 reaches BUFFER's size; it aborts in that situation.
2010 TOKEN is the token to append. VIRT_LOC is the virtual location of
2011 the token, i.e, the location possibly encoding its locus across
2012 macro expansion. If TOKEN is an argument of a function-like macro
2013 (inside a macro replacement list), PARM_DEF_LOC is the location of
2014 the macro parameter that TOKEN is replacing. If TOKEN doesn't come
2015 from a macro expansion, then VIRT_LOC can just be set to the same
2016 value as PARM_DEF_LOC. If MAP is non null, it means TOKEN comes
2017 from a macro expansion and MAP is the macro map associated to the
2018 macro. MACRO_TOKEN_INDEX points to the index of the token in the
2019 macro map; It is not considered if MAP is NULL. If VIRT_LOCS is
2020 non-null, it means -ftrack-macro-expansion is on; in which case
2021 this function adds the virtual location DEF_LOC to the VIRT_LOCS
2022 array, at the same index as the one of TOKEN in BUFFER. Upon
2023 successful completion this function returns the a pointer to the
2024 position of the token coming right after the insertion point. */
2025 static const cpp_token
**
2026 tokens_buff_add_token (_cpp_buff
*buffer
,
2027 source_location
*virt_locs
,
2028 const cpp_token
*token
,
2029 source_location virt_loc
,
2030 source_location parm_def_loc
,
2031 const struct line_map
*map
,
2032 unsigned int macro_token_index
)
2034 const cpp_token
**result
;
2035 source_location
*virt_loc_dest
= NULL
;
2036 unsigned token_index
=
2037 (BUFF_FRONT (buffer
) - buffer
->base
) / sizeof (cpp_token
*);
2039 /* Abort if we pass the end the buffer. */
2040 if (BUFF_FRONT (buffer
) > BUFF_LIMIT (buffer
))
2043 if (virt_locs
!= NULL
)
2044 virt_loc_dest
= &virt_locs
[token_index
];
2047 tokens_buff_put_token_to ((const cpp_token
**) BUFF_FRONT (buffer
),
2048 virt_loc_dest
, token
, virt_loc
, parm_def_loc
,
2049 map
, macro_token_index
);
2051 BUFF_FRONT (buffer
) = (unsigned char *) result
;
2055 /* Allocate space for the function-like macro argument ARG to store
2056 the tokens resulting from the macro-expansion of the tokens that
2057 make up ARG itself. That space is allocated in ARG->expanded and
2058 needs to be freed using free. */
2060 alloc_expanded_arg_mem (cpp_reader
*pfile
, macro_arg
*arg
, size_t capacity
)
2062 #ifdef ENABLE_CHECKING
2063 if (arg
->expanded
!= NULL
2064 || arg
->expanded_virt_locs
!= NULL
)
2067 arg
->expanded
= XNEWVEC (const cpp_token
*, capacity
);
2068 if (CPP_OPTION (pfile
, track_macro_expansion
))
2069 arg
->expanded_virt_locs
= XNEWVEC (source_location
, capacity
);
2073 /* If necessary, enlarge ARG->expanded to so that it can contain SIZE
2076 ensure_expanded_arg_room (cpp_reader
*pfile
, macro_arg
*arg
,
2077 size_t size
, size_t *expanded_capacity
)
2079 if (size
<= *expanded_capacity
)
2085 XRESIZEVEC (const cpp_token
*, arg
->expanded
, size
);
2086 *expanded_capacity
= size
;
2088 if (CPP_OPTION (pfile
, track_macro_expansion
))
2090 if (arg
->expanded_virt_locs
== NULL
)
2091 arg
->expanded_virt_locs
= XNEWVEC (source_location
, size
);
2093 arg
->expanded_virt_locs
= XRESIZEVEC (source_location
,
2094 arg
->expanded_virt_locs
,
2099 /* Expand an argument ARG before replacing parameters in a
2100 function-like macro. This works by pushing a context with the
2101 argument's tokens, and then expanding that into a temporary buffer
2102 as if it were a normal part of the token stream. collect_args()
2103 has terminated the argument's tokens with a CPP_EOF so that we know
2104 when we have fully expanded the argument. */
2106 expand_arg (cpp_reader
*pfile
, macro_arg
*arg
)
2109 bool saved_warn_trad
;
2110 bool track_macro_exp_p
= CPP_OPTION (pfile
, track_macro_expansion
);
2113 || arg
->expanded
!= NULL
)
2116 /* Don't warn about funlike macros when pre-expanding. */
2117 saved_warn_trad
= CPP_WTRADITIONAL (pfile
);
2118 CPP_WTRADITIONAL (pfile
) = 0;
2120 /* Loop, reading in the tokens of the argument. */
2122 alloc_expanded_arg_mem (pfile
, arg
, capacity
);
2124 if (track_macro_exp_p
)
2125 push_extended_tokens_context (pfile
, NULL
, NULL
,
2130 push_ptoken_context (pfile
, NULL
, NULL
,
2131 arg
->first
, arg
->count
+ 1);
2135 const cpp_token
*token
;
2136 source_location location
;
2138 ensure_expanded_arg_room (pfile
, arg
, arg
->expanded_count
+ 1,
2141 token
= cpp_get_token_1 (pfile
, &location
);
2143 if (token
->type
== CPP_EOF
)
2146 set_arg_token (arg
, token
, location
,
2147 arg
->expanded_count
, MACRO_ARG_TOKEN_EXPANDED
,
2148 CPP_OPTION (pfile
, track_macro_expansion
));
2149 arg
->expanded_count
++;
2152 _cpp_pop_context (pfile
);
2154 CPP_WTRADITIONAL (pfile
) = saved_warn_trad
;
2157 /* Returns the macro associated to the current context if we are in
2158 the context a macro expansion, NULL otherwise. */
2159 static cpp_hashnode
*
2160 macro_of_context (cpp_context
*context
)
2162 if (context
== NULL
)
2165 return (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2166 ? context
->c
.mc
->macro_node
2170 /* Return TRUE iff we are expanding a macro or are about to start
2171 expanding one. If we are effectively expanding a macro, the
2172 function macro_of_context returns a pointer to the macro being
2175 in_macro_expansion_p (cpp_reader
*pfile
)
2180 return (pfile
->about_to_expand_macro_p
2181 || macro_of_context (pfile
->context
));
2184 /* Pop the current context off the stack, re-enabling the macro if the
2185 context represented a macro's replacement list. Initially the
2186 context structure was not freed so that we can re-use it later, but
2187 now we do free it to reduce peak memory consumption. */
2189 _cpp_pop_context (cpp_reader
*pfile
)
2191 cpp_context
*context
= pfile
->context
;
2193 /* We should not be popping the base context. */
2194 if (context
== &pfile
->base_context
)
2197 if (context
->c
.macro
)
2199 cpp_hashnode
*macro
;
2200 if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2202 macro_context
*mc
= context
->c
.mc
;
2203 macro
= mc
->macro_node
;
2204 /* If context->buff is set, it means the life time of tokens
2205 is bound to the life time of this context; so we must
2206 free the tokens; that means we must free the virtual
2207 locations of these tokens too. */
2208 if (context
->buff
&& mc
->virt_locs
)
2210 free (mc
->virt_locs
);
2211 mc
->virt_locs
= NULL
;
2214 context
->c
.mc
= NULL
;
2217 macro
= context
->c
.macro
;
2219 /* Beware that MACRO can be NULL in cases like when we are
2220 called from expand_arg. In those cases, a dummy context with
2221 tokens is pushed just for the purpose of walking them using
2222 cpp_get_token_1. In that case, no 'macro' field is set into
2223 the dummy context. */
2225 /* Several contiguous macro expansion contexts can be
2226 associated to the same macro; that means it's the same
2227 macro expansion that spans across all these (sub)
2228 contexts. So we should re-enable an expansion-disabled
2229 macro only when we are sure we are really out of that
2231 && macro_of_context (context
->prev
) != macro
)
2232 macro
->flags
&= ~NODE_DISABLED
;
2237 /* Decrease memory peak consumption by freeing the memory used
2239 _cpp_free_buff (context
->buff
);
2242 pfile
->context
= context
->prev
;
2243 /* decrease peak memory consumption by feeing the context. */
2244 pfile
->context
->next
= NULL
;
2248 /* Return TRUE if we reached the end of the set of tokens stored in
2249 CONTEXT, FALSE otherwise. */
2251 reached_end_of_context (cpp_context
*context
)
2253 if (context
->tokens_kind
== TOKENS_KIND_DIRECT
)
2254 return FIRST (context
).token
== LAST (context
).token
;
2255 else if (context
->tokens_kind
== TOKENS_KIND_INDIRECT
2256 || context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2257 return FIRST (context
).ptoken
== LAST (context
).ptoken
;
2262 /* Consume the next token contained in the current context of PFILE,
2263 and return it in *TOKEN. It's "full location" is returned in
2264 *LOCATION. If -ftrack-macro-location is in effeect, fFull location"
2265 means the location encoding the locus of the token across macro
2266 expansion; otherwise it's just is the "normal" location of the
2267 token which (*TOKEN)->src_loc. */
2269 consume_next_token_from_context (cpp_reader
*pfile
,
2270 const cpp_token
** token
,
2271 source_location
*location
)
2273 cpp_context
*c
= pfile
->context
;
2275 if ((c
)->tokens_kind
== TOKENS_KIND_DIRECT
)
2277 *token
= FIRST (c
).token
;
2278 *location
= (*token
)->src_loc
;
2281 else if ((c
)->tokens_kind
== TOKENS_KIND_INDIRECT
)
2283 *token
= *FIRST (c
).ptoken
;
2284 *location
= (*token
)->src_loc
;
2287 else if ((c
)->tokens_kind
== TOKENS_KIND_EXTENDED
)
2289 macro_context
*m
= c
->c
.mc
;
2290 *token
= *FIRST (c
).ptoken
;
2293 *location
= *m
->cur_virt_loc
;
2297 *location
= (*token
)->src_loc
;
2304 /* In the traditional mode of the preprocessor, if we are currently in
2305 a directive, the location of a token must be the location of the
2306 start of the directive line. This function returns the proper
2307 location if we are in the traditional mode, and just returns
2308 LOCATION otherwise. */
2310 static inline source_location
2311 maybe_adjust_loc_for_trad_cpp (cpp_reader
*pfile
, source_location location
)
2313 if (CPP_OPTION (pfile
, traditional
))
2315 if (pfile
->state
.in_directive
)
2316 return pfile
->directive_line
;
2321 /* Routine to get a token as well as its location.
2323 Macro expansions and directives are transparently handled,
2324 including entering included files. Thus tokens are post-macro
2325 expansion, and after any intervening directives. External callers
2326 see CPP_EOF only at EOF. Internal callers also see it when meeting
2327 a directive inside a macro call, when at the end of a directive and
2328 state.in_directive is still 1, and at the end of argument
2331 LOC is an out parameter; *LOC is set to the location "as expected
2332 by the user". Please read the comment of
2333 cpp_get_token_with_location to learn more about the meaning of this
2335 static const cpp_token
*
2336 cpp_get_token_1 (cpp_reader
*pfile
, source_location
*location
)
2338 const cpp_token
*result
;
2339 /* This token is a virtual token that either encodes a location
2340 related to macro expansion or a spelling location. */
2341 source_location virt_loc
= 0;
2342 /* pfile->about_to_expand_macro_p can be overriden by indirect calls
2343 to functions that push macro contexts. So let's save it so that
2344 we can restore it when we are about to leave this routine. */
2345 bool saved_about_to_expand_macro
= pfile
->about_to_expand_macro_p
;
2350 cpp_context
*context
= pfile
->context
;
2352 /* Context->prev == 0 <=> base context. */
2355 result
= _cpp_lex_token (pfile
);
2356 virt_loc
= result
->src_loc
;
2358 else if (!reached_end_of_context (context
))
2360 consume_next_token_from_context (pfile
, &result
,
2362 if (result
->flags
& PASTE_LEFT
)
2364 paste_all_tokens (pfile
, result
);
2365 if (pfile
->state
.in_directive
)
2367 result
= padding_token (pfile
, result
);
2373 if (pfile
->context
->c
.macro
)
2374 ++num_expanded_macros_counter
;
2375 _cpp_pop_context (pfile
);
2376 if (pfile
->state
.in_directive
)
2378 result
= &pfile
->avoid_paste
;
2382 if (pfile
->state
.in_directive
&& result
->type
== CPP_COMMENT
)
2385 if (result
->type
!= CPP_NAME
)
2388 node
= result
->val
.node
.node
;
2390 if (node
->type
!= NT_MACRO
|| (result
->flags
& NO_EXPAND
))
2393 if (!(node
->flags
& NODE_DISABLED
))
2396 /* If not in a macro context, and we're going to start an
2397 expansion, record the location. */
2398 if (!in_macro_expansion_p (pfile
))
2399 pfile
->invocation_location
= result
->src_loc
;
2400 if (pfile
->state
.prevent_expansion
)
2403 /* Conditional macros require that a predicate be evaluated
2405 if ((node
->flags
& NODE_CONDITIONAL
) != 0)
2407 if (pfile
->cb
.macro_to_expand
)
2409 bool whitespace_after
;
2410 const cpp_token
*peek_tok
= cpp_peek_token (pfile
, 0);
2412 whitespace_after
= (peek_tok
->type
== CPP_PADDING
2413 || (peek_tok
->flags
& PREV_WHITE
));
2414 node
= pfile
->cb
.macro_to_expand (pfile
, result
);
2416 ret
= enter_macro_context (pfile
, node
, result
,
2418 else if (whitespace_after
)
2420 /* If macro_to_expand hook returned NULL and it
2421 ate some tokens, see if we don't need to add
2422 a padding token in between this and the
2424 peek_tok
= cpp_peek_token (pfile
, 0);
2425 if (peek_tok
->type
!= CPP_PADDING
2426 && (peek_tok
->flags
& PREV_WHITE
) == 0)
2427 _cpp_push_token_context (pfile
, NULL
,
2428 padding_token (pfile
,
2434 ret
= enter_macro_context (pfile
, node
, result
,
2438 if (pfile
->state
.in_directive
|| ret
== 2)
2440 result
= padding_token (pfile
, result
);
2446 /* Flag this token as always unexpandable. FIXME: move this
2447 to collect_args()?. */
2448 cpp_token
*t
= _cpp_temp_token (pfile
);
2449 t
->type
= result
->type
;
2450 t
->flags
= result
->flags
| NO_EXPAND
;
2451 t
->val
= result
->val
;
2459 if (location
!= NULL
)
2462 virt_loc
= result
->src_loc
;
2463 *location
= virt_loc
;
2465 if (!CPP_OPTION (pfile
, track_macro_expansion
)
2466 && macro_of_context (pfile
->context
) != NULL
)
2467 /* We are in a macro expansion context, are not tracking
2468 virtual location, but were asked to report the location
2469 of the expansion point of the macro being expanded. */
2470 *location
= pfile
->invocation_location
;
2472 *location
= maybe_adjust_loc_for_trad_cpp (pfile
, *location
);
2475 pfile
->about_to_expand_macro_p
= saved_about_to_expand_macro
;
2479 /* External routine to get a token. Also used nearly everywhere
2480 internally, except for places where we know we can safely call
2481 _cpp_lex_token directly, such as lexing a directive name.
2483 Macro expansions and directives are transparently handled,
2484 including entering included files. Thus tokens are post-macro
2485 expansion, and after any intervening directives. External callers
2486 see CPP_EOF only at EOF. Internal callers also see it when meeting
2487 a directive inside a macro call, when at the end of a directive and
2488 state.in_directive is still 1, and at the end of argument
2491 cpp_get_token (cpp_reader
*pfile
)
2493 return cpp_get_token_1 (pfile
, NULL
);
2496 /* Like cpp_get_token, but also returns a virtual token location
2497 separate from the spelling location carried by the returned token.
2499 LOC is an out parameter; *LOC is set to the location "as expected
2500 by the user". This matters when a token results from macro
2501 expansion; in that case the token's spelling location indicates the
2502 locus of the token in the definition of the macro but *LOC
2503 virtually encodes all the other meaningful locuses associated to
2506 What? virtual location? Yes, virtual location.
2508 If the token results from macro expansion and if macro expansion
2509 location tracking is enabled its virtual location encodes (at the
2512 - the spelling location of the token
2514 - the locus of the macro expansion point
2516 - the locus of the point where the token got instantiated as part
2517 of the macro expansion process.
2519 You have to use the linemap API to get the locus you are interested
2520 in from a given virtual location.
2522 Note however that virtual locations are not necessarily ordered for
2523 relations '<' and '>'. One must use the function
2524 linemap_location_before_p instead of using the relational operator
2527 If macro expansion tracking is off and if the token results from
2528 macro expansion the virtual location is the expansion point of the
2529 macro that got expanded.
2531 When the token doesn't result from macro expansion, the virtual
2532 location is just the same thing as its spelling location. */
2535 cpp_get_token_with_location (cpp_reader
*pfile
, source_location
*loc
)
2537 return cpp_get_token_1 (pfile
, loc
);
2540 /* Returns true if we're expanding an object-like macro that was
2541 defined in a system header. Just checks the macro at the top of
2542 the stack. Used for diagnostic suppression. */
2544 cpp_sys_macro_p (cpp_reader
*pfile
)
2546 cpp_hashnode
*node
= NULL
;
2548 if (pfile
->context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2549 node
= pfile
->context
->c
.mc
->macro_node
;
2551 node
= pfile
->context
->c
.macro
;
2553 return node
&& node
->value
.macro
&& node
->value
.macro
->syshdr
;
2556 /* Read each token in, until end of the current file. Directives are
2557 transparently processed. */
2559 cpp_scan_nooutput (cpp_reader
*pfile
)
2561 /* Request a CPP_EOF token at the end of this file, rather than
2562 transparently continuing with the including file. */
2563 pfile
->buffer
->return_at_eof
= true;
2565 pfile
->state
.discarding_output
++;
2566 pfile
->state
.prevent_expansion
++;
2568 if (CPP_OPTION (pfile
, traditional
))
2569 while (_cpp_read_logical_line_trad (pfile
))
2572 while (cpp_get_token (pfile
)->type
!= CPP_EOF
)
2575 pfile
->state
.discarding_output
--;
2576 pfile
->state
.prevent_expansion
--;
2579 /* Step back one or more tokens obtained from the lexer. */
2581 _cpp_backup_tokens_direct (cpp_reader
*pfile
, unsigned int count
)
2583 pfile
->lookaheads
+= count
;
2587 if (pfile
->cur_token
== pfile
->cur_run
->base
2588 /* Possible with -fpreprocessed and no leading #line. */
2589 && pfile
->cur_run
->prev
!= NULL
)
2591 pfile
->cur_run
= pfile
->cur_run
->prev
;
2592 pfile
->cur_token
= pfile
->cur_run
->limit
;
2597 /* Step back one (or more) tokens. Can only step back more than 1 if
2598 they are from the lexer, and not from macro expansion. */
2600 _cpp_backup_tokens (cpp_reader
*pfile
, unsigned int count
)
2602 if (pfile
->context
->prev
== NULL
)
2603 _cpp_backup_tokens_direct (pfile
, count
);
2608 if (pfile
->context
->tokens_kind
== TOKENS_KIND_DIRECT
)
2609 FIRST (pfile
->context
).token
--;
2610 else if (pfile
->context
->tokens_kind
== TOKENS_KIND_INDIRECT
)
2611 FIRST (pfile
->context
).ptoken
--;
2612 else if (pfile
->context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2614 FIRST (pfile
->context
).ptoken
--;
2615 if (pfile
->context
->c
.macro
)
2617 macro_context
*m
= pfile
->context
->c
.mc
;
2619 #ifdef ENABLE_CHECKING
2620 if (m
->cur_virt_loc
< m
->virt_locs
)
2632 /* #define directive parsing and handling. */
2634 /* Returns nonzero if a macro redefinition warning is required. */
2636 warn_of_redefinition (cpp_reader
*pfile
, cpp_hashnode
*node
,
2637 const cpp_macro
*macro2
)
2639 const cpp_macro
*macro1
;
2642 /* Some redefinitions need to be warned about regardless. */
2643 if (node
->flags
& NODE_WARN
)
2646 /* Suppress warnings for builtins that lack the NODE_WARN flag. */
2647 if (node
->flags
& NODE_BUILTIN
)
2649 if (!pfile
->cb
.user_builtin_macro
2650 || !pfile
->cb
.user_builtin_macro (pfile
, node
))
2654 /* Redefinitions of conditional (context-sensitive) macros, on
2655 the other hand, must be allowed silently. */
2656 if (node
->flags
& NODE_CONDITIONAL
)
2659 /* Redefinition of a macro is allowed if and only if the old and new
2660 definitions are the same. (6.10.3 paragraph 2). */
2661 macro1
= node
->value
.macro
;
2663 /* Don't check count here as it can be different in valid
2664 traditional redefinitions with just whitespace differences. */
2665 if (macro1
->paramc
!= macro2
->paramc
2666 || macro1
->fun_like
!= macro2
->fun_like
2667 || macro1
->variadic
!= macro2
->variadic
)
2670 /* Check parameter spellings. */
2671 for (i
= 0; i
< macro1
->paramc
; i
++)
2672 if (macro1
->params
[i
] != macro2
->params
[i
])
2675 /* Check the replacement text or tokens. */
2676 if (CPP_OPTION (pfile
, traditional
))
2677 return _cpp_expansions_different_trad (macro1
, macro2
);
2679 if (macro1
->count
!= macro2
->count
)
2682 for (i
= 0; i
< macro1
->count
; i
++)
2683 if (!_cpp_equiv_tokens (¯o1
->exp
.tokens
[i
], ¯o2
->exp
.tokens
[i
]))
2689 /* Free the definition of hashnode H. */
2691 _cpp_free_definition (cpp_hashnode
*h
)
2693 /* Macros and assertions no longer have anything to free. */
2695 /* Clear builtin flag in case of redefinition. */
2696 h
->flags
&= ~(NODE_BUILTIN
| NODE_DISABLED
| NODE_USED
);
2699 /* Save parameter NODE to the parameter list of macro MACRO. Returns
2700 zero on success, nonzero if the parameter is a duplicate. */
2702 _cpp_save_parameter (cpp_reader
*pfile
, cpp_macro
*macro
, cpp_hashnode
*node
)
2705 /* Constraint 6.10.3.6 - duplicate parameter names. */
2706 if (node
->flags
& NODE_MACRO_ARG
)
2708 cpp_error (pfile
, CPP_DL_ERROR
, "duplicate macro parameter \"%s\"",
2713 if (BUFF_ROOM (pfile
->a_buff
)
2714 < (macro
->paramc
+ 1) * sizeof (cpp_hashnode
*))
2715 _cpp_extend_buff (pfile
, &pfile
->a_buff
, sizeof (cpp_hashnode
*));
2717 ((cpp_hashnode
**) BUFF_FRONT (pfile
->a_buff
))[macro
->paramc
++] = node
;
2718 node
->flags
|= NODE_MACRO_ARG
;
2719 len
= macro
->paramc
* sizeof (union _cpp_hashnode_value
);
2720 if (len
> pfile
->macro_buffer_len
)
2722 pfile
->macro_buffer
= XRESIZEVEC (unsigned char, pfile
->macro_buffer
,
2724 pfile
->macro_buffer_len
= len
;
2726 ((union _cpp_hashnode_value
*) pfile
->macro_buffer
)[macro
->paramc
- 1]
2729 node
->value
.arg_index
= macro
->paramc
;
2733 /* Check the syntax of the parameters in a MACRO definition. Returns
2734 false if an error occurs. */
2736 parse_params (cpp_reader
*pfile
, cpp_macro
*macro
)
2738 unsigned int prev_ident
= 0;
2742 const cpp_token
*token
= _cpp_lex_token (pfile
);
2744 switch (token
->type
)
2747 /* Allow/ignore comments in parameter lists if we are
2748 preserving comments in macro expansions. */
2749 if (token
->type
== CPP_COMMENT
2750 && ! CPP_OPTION (pfile
, discard_comments_in_macro_exp
))
2753 cpp_error (pfile
, CPP_DL_ERROR
,
2754 "\"%s\" may not appear in macro parameter list",
2755 cpp_token_as_text (pfile
, token
));
2761 cpp_error (pfile
, CPP_DL_ERROR
,
2762 "macro parameters must be comma-separated");
2767 if (_cpp_save_parameter (pfile
, macro
, token
->val
.node
.node
))
2771 case CPP_CLOSE_PAREN
:
2772 if (prev_ident
|| macro
->paramc
== 0)
2775 /* Fall through to pick up the error. */
2779 cpp_error (pfile
, CPP_DL_ERROR
, "parameter name missing");
2786 macro
->variadic
= 1;
2789 _cpp_save_parameter (pfile
, macro
,
2790 pfile
->spec_nodes
.n__VA_ARGS__
);
2791 pfile
->state
.va_args_ok
= 1;
2792 if (! CPP_OPTION (pfile
, c99
)
2793 && CPP_OPTION (pfile
, cpp_pedantic
)
2794 && CPP_OPTION (pfile
, warn_variadic_macros
))
2796 (pfile
, CPP_W_VARIADIC_MACROS
,
2797 "anonymous variadic macros were introduced in C99");
2799 else if (CPP_OPTION (pfile
, cpp_pedantic
)
2800 && CPP_OPTION (pfile
, warn_variadic_macros
))
2801 cpp_pedwarning (pfile
, CPP_W_VARIADIC_MACROS
,
2802 "ISO C does not permit named variadic macros");
2804 /* We're at the end, and just expect a closing parenthesis. */
2805 token
= _cpp_lex_token (pfile
);
2806 if (token
->type
== CPP_CLOSE_PAREN
)
2811 cpp_error (pfile
, CPP_DL_ERROR
, "missing ')' in macro parameter list");
2817 /* Allocate room for a token from a macro's replacement list. */
2819 alloc_expansion_token (cpp_reader
*pfile
, cpp_macro
*macro
)
2821 if (BUFF_ROOM (pfile
->a_buff
) < (macro
->count
+ 1) * sizeof (cpp_token
))
2822 _cpp_extend_buff (pfile
, &pfile
->a_buff
, sizeof (cpp_token
));
2824 return &((cpp_token
*) BUFF_FRONT (pfile
->a_buff
))[macro
->count
++];
2827 /* Lex a token from the expansion of MACRO, but mark parameters as we
2828 find them and warn of traditional stringification. */
2830 lex_expansion_token (cpp_reader
*pfile
, cpp_macro
*macro
)
2832 cpp_token
*token
, *saved_cur_token
;
2834 saved_cur_token
= pfile
->cur_token
;
2835 pfile
->cur_token
= alloc_expansion_token (pfile
, macro
);
2836 token
= _cpp_lex_direct (pfile
);
2837 pfile
->cur_token
= saved_cur_token
;
2839 /* Is this a parameter? */
2840 if (token
->type
== CPP_NAME
2841 && (token
->val
.node
.node
->flags
& NODE_MACRO_ARG
) != 0)
2843 token
->type
= CPP_MACRO_ARG
;
2844 token
->val
.macro_arg
.arg_no
= token
->val
.node
.node
->value
.arg_index
;
2846 else if (CPP_WTRADITIONAL (pfile
) && macro
->paramc
> 0
2847 && (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
))
2848 check_trad_stringification (pfile
, macro
, &token
->val
.str
);
2854 create_iso_definition (cpp_reader
*pfile
, cpp_macro
*macro
)
2857 const cpp_token
*ctoken
;
2858 bool following_paste_op
= false;
2859 const char *paste_op_error_msg
=
2860 N_("'##' cannot appear at either end of a macro expansion");
2861 unsigned int num_extra_tokens
= 0;
2863 /* Get the first token of the expansion (or the '(' of a
2864 function-like macro). */
2865 ctoken
= _cpp_lex_token (pfile
);
2867 if (ctoken
->type
== CPP_OPEN_PAREN
&& !(ctoken
->flags
& PREV_WHITE
))
2869 bool ok
= parse_params (pfile
, macro
);
2870 macro
->params
= (cpp_hashnode
**) BUFF_FRONT (pfile
->a_buff
);
2874 /* Success. Commit or allocate the parameter array. */
2875 if (pfile
->hash_table
->alloc_subobject
)
2877 cpp_hashnode
**params
=
2878 (cpp_hashnode
**) pfile
->hash_table
->alloc_subobject
2879 (sizeof (cpp_hashnode
*) * macro
->paramc
);
2880 memcpy (params
, macro
->params
,
2881 sizeof (cpp_hashnode
*) * macro
->paramc
);
2882 macro
->params
= params
;
2885 BUFF_FRONT (pfile
->a_buff
) = (uchar
*) ¯o
->params
[macro
->paramc
];
2886 macro
->fun_like
= 1;
2888 else if (ctoken
->type
!= CPP_EOF
&& !(ctoken
->flags
& PREV_WHITE
))
2890 /* While ISO C99 requires whitespace before replacement text
2891 in a macro definition, ISO C90 with TC1 allows there characters
2892 from the basic source character set. */
2893 if (CPP_OPTION (pfile
, c99
))
2894 cpp_error (pfile
, CPP_DL_PEDWARN
,
2895 "ISO C99 requires whitespace after the macro name");
2898 int warntype
= CPP_DL_WARNING
;
2899 switch (ctoken
->type
)
2903 case CPP_OBJC_STRING
:
2904 /* '@' is not in basic character set. */
2905 warntype
= CPP_DL_PEDWARN
;
2908 /* Basic character set sans letters, digits and _. */
2909 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
2910 ctoken
->val
.str
.text
[0]) == NULL
)
2911 warntype
= CPP_DL_PEDWARN
;
2914 /* All other tokens start with a character from basic
2918 cpp_error (pfile
, warntype
,
2919 "missing whitespace after the macro name");
2923 if (macro
->fun_like
)
2924 token
= lex_expansion_token (pfile
, macro
);
2927 token
= alloc_expansion_token (pfile
, macro
);
2933 /* Check the stringifying # constraint 6.10.3.2.1 of
2934 function-like macros when lexing the subsequent token. */
2935 if (macro
->count
> 1 && token
[-1].type
== CPP_HASH
&& macro
->fun_like
)
2937 if (token
->type
== CPP_MACRO_ARG
)
2939 if (token
->flags
& PREV_WHITE
)
2940 token
->flags
|= SP_PREV_WHITE
;
2941 if (token
[-1].flags
& DIGRAPH
)
2942 token
->flags
|= SP_DIGRAPH
;
2943 token
->flags
&= ~PREV_WHITE
;
2944 token
->flags
|= STRINGIFY_ARG
;
2945 token
->flags
|= token
[-1].flags
& PREV_WHITE
;
2946 token
[-1] = token
[0];
2949 /* Let assembler get away with murder. */
2950 else if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
2952 cpp_error (pfile
, CPP_DL_ERROR
,
2953 "'#' is not followed by a macro parameter");
2958 if (token
->type
== CPP_EOF
)
2960 /* Paste operator constraint 6.10.3.3.1:
2961 Token-paste ##, can appear in both object-like and
2962 function-like macros, but not at the end. */
2963 if (following_paste_op
)
2965 cpp_error (pfile
, CPP_DL_ERROR
, paste_op_error_msg
);
2971 /* Paste operator constraint 6.10.3.3.1. */
2972 if (token
->type
== CPP_PASTE
)
2974 /* Token-paste ##, can appear in both object-like and
2975 function-like macros, but not at the beginning. */
2976 if (macro
->count
== 1)
2978 cpp_error (pfile
, CPP_DL_ERROR
, paste_op_error_msg
);
2982 if (token
[-1].flags
& PASTE_LEFT
)
2984 macro
->extra_tokens
= 1;
2986 token
->val
.token_no
= macro
->count
- 1;
2991 token
[-1].flags
|= PASTE_LEFT
;
2992 if (token
->flags
& DIGRAPH
)
2993 token
[-1].flags
|= SP_DIGRAPH
;
2994 if (token
->flags
& PREV_WHITE
)
2995 token
[-1].flags
|= SP_PREV_WHITE
;
2999 following_paste_op
= (token
->type
== CPP_PASTE
);
3000 token
= lex_expansion_token (pfile
, macro
);
3003 macro
->exp
.tokens
= (cpp_token
*) BUFF_FRONT (pfile
->a_buff
);
3004 macro
->traditional
= 0;
3006 /* Don't count the CPP_EOF. */
3009 /* Clear whitespace on first token for warn_of_redefinition(). */
3011 macro
->exp
.tokens
[0].flags
&= ~PREV_WHITE
;
3013 /* Commit or allocate the memory. */
3014 if (pfile
->hash_table
->alloc_subobject
)
3017 (cpp_token
*) pfile
->hash_table
->alloc_subobject (sizeof (cpp_token
)
3019 if (num_extra_tokens
)
3021 /* Place second and subsequent ## or %:%: tokens in
3022 sequences of consecutive such tokens at the end of the
3023 list to preserve information about where they appear, how
3024 they are spelt and whether they are preceded by
3025 whitespace without otherwise interfering with macro
3027 cpp_token
*normal_dest
= tokns
;
3028 cpp_token
*extra_dest
= tokns
+ macro
->count
- num_extra_tokens
;
3030 for (i
= 0; i
< macro
->count
; i
++)
3032 if (macro
->exp
.tokens
[i
].type
== CPP_PASTE
)
3033 *extra_dest
++ = macro
->exp
.tokens
[i
];
3035 *normal_dest
++ = macro
->exp
.tokens
[i
];
3039 memcpy (tokns
, macro
->exp
.tokens
, sizeof (cpp_token
) * macro
->count
);
3040 macro
->exp
.tokens
= tokns
;
3043 BUFF_FRONT (pfile
->a_buff
) = (uchar
*) ¯o
->exp
.tokens
[macro
->count
];
3048 /* Parse a macro and save its expansion. Returns nonzero on success. */
3050 _cpp_create_definition (cpp_reader
*pfile
, cpp_hashnode
*node
)
3056 if (pfile
->hash_table
->alloc_subobject
)
3057 macro
= (cpp_macro
*) pfile
->hash_table
->alloc_subobject
3058 (sizeof (cpp_macro
));
3060 macro
= (cpp_macro
*) _cpp_aligned_alloc (pfile
, sizeof (cpp_macro
));
3061 macro
->line
= pfile
->directive_line
;
3064 macro
->variadic
= 0;
3065 macro
->used
= !CPP_OPTION (pfile
, warn_unused_macros
);
3067 macro
->fun_like
= 0;
3068 macro
->extra_tokens
= 0;
3069 /* To suppress some diagnostics. */
3070 macro
->syshdr
= pfile
->buffer
&& pfile
->buffer
->sysp
!= 0;
3072 if (CPP_OPTION (pfile
, traditional
))
3073 ok
= _cpp_create_trad_definition (pfile
, macro
);
3076 ok
= create_iso_definition (pfile
, macro
);
3078 /* We set the type for SEEN_EOL() in directives.c.
3080 Longer term we should lex the whole line before coming here,
3081 and just copy the expansion. */
3083 /* Stop the lexer accepting __VA_ARGS__. */
3084 pfile
->state
.va_args_ok
= 0;
3087 /* Clear the fast argument lookup indices. */
3088 for (i
= macro
->paramc
; i
-- > 0; )
3090 struct cpp_hashnode
*node
= macro
->params
[i
];
3091 node
->flags
&= ~ NODE_MACRO_ARG
;
3092 node
->value
= ((union _cpp_hashnode_value
*) pfile
->macro_buffer
)[i
];
3098 if (node
->type
== NT_MACRO
)
3100 if (CPP_OPTION (pfile
, warn_unused_macros
))
3101 _cpp_warn_if_unused_macro (pfile
, node
, NULL
);
3103 if (warn_of_redefinition (pfile
, node
, macro
))
3105 const int reason
= (node
->flags
& NODE_BUILTIN
)
3106 ? CPP_W_BUILTIN_MACRO_REDEFINED
: CPP_W_NONE
;
3109 warned
= cpp_pedwarning_with_line (pfile
, reason
,
3110 pfile
->directive_line
, 0,
3114 if (warned
&& node
->type
== NT_MACRO
&& !(node
->flags
& NODE_BUILTIN
))
3115 cpp_error_with_line (pfile
, CPP_DL_NOTE
,
3116 node
->value
.macro
->line
, 0,
3117 "this is the location of the previous definition");
3121 if (node
->type
!= NT_VOID
)
3122 _cpp_free_definition (node
);
3124 /* Enter definition in hash table. */
3125 node
->type
= NT_MACRO
;
3126 node
->value
.macro
= macro
;
3127 if (! ustrncmp (NODE_NAME (node
), DSC ("__STDC_"))
3128 && ustrcmp (NODE_NAME (node
), (const uchar
*) "__STDC_FORMAT_MACROS")
3129 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
3130 in the C standard, as something that one must use in C++.
3131 However DR#593 indicates that these aren't actually mentioned
3132 in the C++ standard. We special-case them anyway. */
3133 && ustrcmp (NODE_NAME (node
), (const uchar
*) "__STDC_LIMIT_MACROS")
3134 && ustrcmp (NODE_NAME (node
), (const uchar
*) "__STDC_CONSTANT_MACROS"))
3135 node
->flags
|= NODE_WARN
;
3137 /* If user defines one of the conditional macros, remove the
3139 node
->flags
&= ~NODE_CONDITIONAL
;
3144 /* Warn if a token in STRING matches one of a function-like MACRO's
3147 check_trad_stringification (cpp_reader
*pfile
, const cpp_macro
*macro
,
3148 const cpp_string
*string
)
3150 unsigned int i
, len
;
3151 const uchar
*p
, *q
, *limit
;
3153 /* Loop over the string. */
3154 limit
= string
->text
+ string
->len
- 1;
3155 for (p
= string
->text
+ 1; p
< limit
; p
= q
)
3157 /* Find the start of an identifier. */
3158 while (p
< limit
&& !is_idstart (*p
))
3161 /* Find the end of the identifier. */
3163 while (q
< limit
&& is_idchar (*q
))
3168 /* Loop over the function macro arguments to see if the
3169 identifier inside the string matches one of them. */
3170 for (i
= 0; i
< macro
->paramc
; i
++)
3172 const cpp_hashnode
*node
= macro
->params
[i
];
3174 if (NODE_LEN (node
) == len
3175 && !memcmp (p
, NODE_NAME (node
), len
))
3177 cpp_error (pfile
, CPP_DL_WARNING
,
3178 "macro argument \"%s\" would be stringified in traditional C",
3186 /* Returns the name, arguments and expansion of a macro, in a format
3187 suitable to be read back in again, and therefore also for DWARF 2
3188 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
3189 Caller is expected to generate the "#define" bit if needed. The
3190 returned text is temporary, and automatically freed later. */
3191 const unsigned char *
3192 cpp_macro_definition (cpp_reader
*pfile
, cpp_hashnode
*node
)
3194 unsigned int i
, len
;
3195 const cpp_macro
*macro
;
3196 unsigned char *buffer
;
3198 if (node
->type
!= NT_MACRO
|| (node
->flags
& NODE_BUILTIN
))
3200 if (node
->type
!= NT_MACRO
3201 || !pfile
->cb
.user_builtin_macro
3202 || !pfile
->cb
.user_builtin_macro (pfile
, node
))
3204 cpp_error (pfile
, CPP_DL_ICE
,
3205 "invalid hash type %d in cpp_macro_definition",
3211 macro
= node
->value
.macro
;
3212 /* Calculate length. */
3213 len
= NODE_LEN (node
) + 2; /* ' ' and NUL. */
3214 if (macro
->fun_like
)
3216 len
+= 4; /* "()" plus possible final ".." of named
3217 varargs (we have + 1 below). */
3218 for (i
= 0; i
< macro
->paramc
; i
++)
3219 len
+= NODE_LEN (macro
->params
[i
]) + 1; /* "," */
3222 /* This should match below where we fill in the buffer. */
3223 if (CPP_OPTION (pfile
, traditional
))
3224 len
+= _cpp_replacement_text_len (macro
);
3227 unsigned int count
= macro_real_token_count (macro
);
3228 for (i
= 0; i
< count
; i
++)
3230 cpp_token
*token
= ¯o
->exp
.tokens
[i
];
3232 if (token
->type
== CPP_MACRO_ARG
)
3233 len
+= NODE_LEN (macro
->params
[token
->val
.macro_arg
.arg_no
- 1]);
3235 len
+= cpp_token_len (token
);
3237 if (token
->flags
& STRINGIFY_ARG
)
3239 if (token
->flags
& PASTE_LEFT
)
3240 len
+= 3; /* " ##" */
3241 if (token
->flags
& PREV_WHITE
)
3246 if (len
> pfile
->macro_buffer_len
)
3248 pfile
->macro_buffer
= XRESIZEVEC (unsigned char,
3249 pfile
->macro_buffer
, len
);
3250 pfile
->macro_buffer_len
= len
;
3253 /* Fill in the buffer. Start with the macro name. */
3254 buffer
= pfile
->macro_buffer
;
3255 memcpy (buffer
, NODE_NAME (node
), NODE_LEN (node
));
3256 buffer
+= NODE_LEN (node
);
3258 /* Parameter names. */
3259 if (macro
->fun_like
)
3262 for (i
= 0; i
< macro
->paramc
; i
++)
3264 cpp_hashnode
*param
= macro
->params
[i
];
3266 if (param
!= pfile
->spec_nodes
.n__VA_ARGS__
)
3268 memcpy (buffer
, NODE_NAME (param
), NODE_LEN (param
));
3269 buffer
+= NODE_LEN (param
);
3272 if (i
+ 1 < macro
->paramc
)
3273 /* Don't emit a space after the comma here; we're trying
3274 to emit a Dwarf-friendly definition, and the Dwarf spec
3275 forbids spaces in the argument list. */
3277 else if (macro
->variadic
)
3278 *buffer
++ = '.', *buffer
++ = '.', *buffer
++ = '.';
3283 /* The Dwarf spec requires a space after the macro name, even if the
3284 definition is the empty string. */
3287 if (CPP_OPTION (pfile
, traditional
))
3288 buffer
= _cpp_copy_replacement_text (macro
, buffer
);
3289 else if (macro
->count
)
3290 /* Expansion tokens. */
3292 unsigned int count
= macro_real_token_count (macro
);
3293 for (i
= 0; i
< count
; i
++)
3295 cpp_token
*token
= ¯o
->exp
.tokens
[i
];
3297 if (token
->flags
& PREV_WHITE
)
3299 if (token
->flags
& STRINGIFY_ARG
)
3302 if (token
->type
== CPP_MACRO_ARG
)
3305 NODE_NAME (macro
->params
[token
->val
.macro_arg
.arg_no
- 1]),
3306 NODE_LEN (macro
->params
[token
->val
.macro_arg
.arg_no
- 1]));
3307 buffer
+= NODE_LEN (macro
->params
[token
->val
.macro_arg
.arg_no
- 1]);
3310 buffer
= cpp_spell_token (pfile
, token
, buffer
, false);
3312 if (token
->flags
& PASTE_LEFT
)
3317 /* Next has PREV_WHITE; see _cpp_create_definition. */
3323 return pfile
->macro_buffer
;