1 /* Part of CPP library. (Macro and #define handling.)
2 Copyright (C) 1986-2018 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 location_t
*virt_locs
; /* Where virtual locations for
43 unexpanded tokens are stored. */
44 location_t
*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 literal, 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 location_t
*location_ptr
;
77 /* The number of times the iterator went forward. This useful only
78 when checking is enabled. */
83 /* Saved data about an identifier being used as a macro argument
85 struct macro_arg_saved_data
{
86 /* The canonical (UTF-8) spelling of this identifier. */
87 cpp_hashnode
*canonical_node
;
88 /* The previous value & type of this identifier. */
89 union _cpp_hashnode_value value
;
93 static const char *vaopt_paste_error
=
94 N_("'##' cannot appear at either end of __VA_OPT__");
96 /* A class for tracking __VA_OPT__ state while iterating over a
97 sequence of tokens. This is used during both macro definition and
103 /* Initialize the state tracker. ANY_ARGS is true if variable
104 arguments were provided to the macro invocation. */
105 vaopt_state (cpp_reader
*pfile
, bool is_variadic
, bool any_args
)
107 m_allowed (any_args
),
108 m_variadic (is_variadic
),
109 m_last_was_paste (false),
111 m_paste_location (0),
125 /* Given a token, update the state of this tracker and return a
126 boolean indicating whether the token should be be included in the
128 update_type
update (const cpp_token
*token
)
130 /* If the macro isn't variadic, just don't bother. */
134 if (token
->type
== CPP_NAME
135 && token
->val
.node
.node
== m_pfile
->spec_nodes
.n__VA_OPT__
)
139 cpp_error_at (m_pfile
, CPP_DL_ERROR
, token
->src_loc
,
140 "__VA_OPT__ may not appear in a __VA_OPT__");
144 m_location
= token
->src_loc
;
147 else if (m_state
== 1)
149 if (token
->type
!= CPP_OPEN_PAREN
)
151 cpp_error_at (m_pfile
, CPP_DL_ERROR
, m_location
,
152 "__VA_OPT__ must be followed by an "
159 else if (m_state
>= 2)
161 if (m_state
== 2 && token
->type
== CPP_PASTE
)
163 cpp_error_at (m_pfile
, CPP_DL_ERROR
, token
->src_loc
,
167 /* Advance states before further considering this token, in
168 case we see a close paren immediately after the open
173 bool was_paste
= m_last_was_paste
;
174 m_last_was_paste
= false;
175 if (token
->type
== CPP_PASTE
)
177 m_last_was_paste
= true;
178 m_paste_location
= token
->src_loc
;
180 else if (token
->type
== CPP_OPEN_PAREN
)
182 else if (token
->type
== CPP_CLOSE_PAREN
)
187 /* Saw the final paren. */
192 cpp_error_at (m_pfile
, CPP_DL_ERROR
, token
->src_loc
,
200 return m_allowed
? INCLUDE
: DROP
;
203 /* Nothing to do with __VA_OPT__. */
207 /* Ensure that any __VA_OPT__ was completed. If ok, return true.
208 Otherwise, issue an error and return false. */
211 if (m_variadic
&& m_state
!= 0)
212 cpp_error_at (m_pfile
, CPP_DL_ERROR
, m_location
,
213 "unterminated __VA_OPT__");
219 /* The cpp_reader. */
222 /* True if there were varargs. */
224 /* True if the macro is variadic. */
226 /* If true, the previous token was ##. This is used to detect when
227 a paste occurs at the end of the sequence. */
228 bool m_last_was_paste
;
230 /* The state variable:
232 1 means __VA_OPT__ seen, looking for "("
233 2 means "(" seen (so the next token can't be "##")
234 >= 3 means looking for ")", the number encodes the paren depth. */
237 /* The location of the paste token. */
238 location_t m_paste_location
;
240 /* Location of the __VA_OPT__ token. */
241 location_t m_location
;
244 /* Macro expansion. */
246 static int enter_macro_context (cpp_reader
*, cpp_hashnode
*,
247 const cpp_token
*, location_t
);
248 static int builtin_macro (cpp_reader
*, cpp_hashnode
*,
249 location_t
, location_t
);
250 static void push_ptoken_context (cpp_reader
*, cpp_hashnode
*, _cpp_buff
*,
251 const cpp_token
**, unsigned int);
252 static void push_extended_tokens_context (cpp_reader
*, cpp_hashnode
*,
253 _cpp_buff
*, location_t
*,
254 const cpp_token
**, unsigned int);
255 static _cpp_buff
*collect_args (cpp_reader
*, const cpp_hashnode
*,
256 _cpp_buff
**, unsigned *);
257 static cpp_context
*next_context (cpp_reader
*);
258 static const cpp_token
*padding_token (cpp_reader
*, const cpp_token
*);
259 static void expand_arg (cpp_reader
*, macro_arg
*);
260 static const cpp_token
*new_string_token (cpp_reader
*, uchar
*, unsigned int);
261 static const cpp_token
*stringify_arg (cpp_reader
*, macro_arg
*);
262 static void paste_all_tokens (cpp_reader
*, const cpp_token
*);
263 static bool paste_tokens (cpp_reader
*, location_t
,
264 const cpp_token
**, const cpp_token
*);
265 static void alloc_expanded_arg_mem (cpp_reader
*, macro_arg
*, size_t);
266 static void ensure_expanded_arg_room (cpp_reader
*, macro_arg
*, size_t, size_t *);
267 static void delete_macro_args (_cpp_buff
*, unsigned num_args
);
268 static void set_arg_token (macro_arg
*, const cpp_token
*,
270 enum macro_arg_token_kind
,
272 static const location_t
*get_arg_token_location (const macro_arg
*,
273 enum macro_arg_token_kind
);
274 static const cpp_token
**arg_token_ptr_at (const macro_arg
*,
276 enum macro_arg_token_kind
,
277 location_t
**virt_location
);
279 static void macro_arg_token_iter_init (macro_arg_token_iter
*, bool,
280 enum macro_arg_token_kind
,
283 static const cpp_token
*macro_arg_token_iter_get_token
284 (const macro_arg_token_iter
*it
);
285 static location_t macro_arg_token_iter_get_location
286 (const macro_arg_token_iter
*);
287 static void macro_arg_token_iter_forward (macro_arg_token_iter
*);
288 static _cpp_buff
*tokens_buff_new (cpp_reader
*, size_t,
290 static size_t tokens_buff_count (_cpp_buff
*);
291 static const cpp_token
**tokens_buff_last_token_ptr (_cpp_buff
*);
292 static inline const cpp_token
**tokens_buff_put_token_to (const cpp_token
**,
297 const line_map_macro
*,
300 static const cpp_token
**tokens_buff_add_token (_cpp_buff
*,
305 const line_map_macro
*,
307 static inline void tokens_buff_remove_last_token (_cpp_buff
*);
308 static void replace_args (cpp_reader
*, cpp_hashnode
*, cpp_macro
*,
309 macro_arg
*, location_t
);
310 static _cpp_buff
*funlike_invocation_p (cpp_reader
*, cpp_hashnode
*,
311 _cpp_buff
**, unsigned *);
312 static cpp_macro
*create_iso_definition (cpp_reader
*);
314 /* #define directive parsing and handling. */
316 static cpp_macro
*lex_expansion_token (cpp_reader
*, cpp_macro
*);
317 static bool warn_of_redefinition (cpp_reader
*, cpp_hashnode
*,
319 static bool parse_params (cpp_reader
*, unsigned *, bool *);
320 static void check_trad_stringification (cpp_reader
*, const cpp_macro
*,
322 static bool reached_end_of_context (cpp_context
*);
323 static void consume_next_token_from_context (cpp_reader
*pfile
,
326 static const cpp_token
* cpp_get_token_1 (cpp_reader
*, location_t
*);
328 static cpp_hashnode
* macro_of_context (cpp_context
*context
);
330 static bool in_macro_expansion_p (cpp_reader
*pfile
);
332 /* Statistical counter tracking the number of macros that got
334 unsigned num_expanded_macros_counter
= 0;
335 /* Statistical counter tracking the total number tokens resulting
336 from macro expansion. */
337 unsigned num_macro_tokens_counter
= 0;
339 /* Emits a warning if NODE is a macro defined in the main file that
340 has not been used. */
342 _cpp_warn_if_unused_macro (cpp_reader
*pfile
, cpp_hashnode
*node
,
343 void *v ATTRIBUTE_UNUSED
)
345 if (cpp_user_macro_p (node
))
347 cpp_macro
*macro
= node
->value
.macro
;
350 && MAIN_FILE_P (linemap_check_ordinary
351 (linemap_lookup (pfile
->line_table
,
353 cpp_warning_with_line (pfile
, CPP_W_UNUSED_MACROS
, macro
->line
, 0,
354 "macro \"%s\" is not used", NODE_NAME (node
));
360 /* Allocates and returns a CPP_STRING token, containing TEXT of length
361 LEN, after null-terminating it. TEXT must be in permanent storage. */
362 static const cpp_token
*
363 new_string_token (cpp_reader
*pfile
, unsigned char *text
, unsigned int len
)
365 cpp_token
*token
= _cpp_temp_token (pfile
);
368 token
->type
= CPP_STRING
;
369 token
->val
.str
.len
= len
;
370 token
->val
.str
.text
= text
;
375 static const char * const monthnames
[] =
377 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
378 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
381 /* Helper function for builtin_macro. Returns the text generated by
384 _cpp_builtin_macro_text (cpp_reader
*pfile
, cpp_hashnode
*node
,
387 const uchar
*result
= NULL
;
388 linenum_type number
= 1;
390 switch (node
->value
.builtin
)
393 cpp_error (pfile
, CPP_DL_ICE
, "invalid built-in macro \"%s\"",
399 if (CPP_OPTION (pfile
, warn_date_time
))
400 cpp_warning (pfile
, CPP_W_DATE_TIME
, "macro \"%s\" might prevent "
401 "reproducible builds", NODE_NAME (node
));
403 cpp_buffer
*pbuffer
= cpp_get_buffer (pfile
);
404 if (pbuffer
->timestamp
== NULL
)
406 /* Initialize timestamp value of the assotiated file. */
407 struct _cpp_file
*file
= cpp_get_file (pbuffer
);
410 /* Generate __TIMESTAMP__ string, that represents
411 the date and time of the last modification
412 of the current source file. The string constant
413 looks like "Sun Sep 16 01:03:52 1973". */
414 struct tm
*tb
= NULL
;
415 struct stat
*st
= _cpp_get_file_stat (file
);
417 tb
= localtime (&st
->st_mtime
);
420 char *str
= asctime (tb
);
421 size_t len
= strlen (str
);
422 unsigned char *buf
= _cpp_unaligned_alloc (pfile
, len
+ 2);
424 strcpy ((char *) buf
+ 1, str
);
426 pbuffer
->timestamp
= buf
;
430 cpp_errno (pfile
, CPP_DL_WARNING
,
431 "could not determine file timestamp");
432 pbuffer
->timestamp
= UC
"\"??? ??? ?? ??:??:?? ????\"";
436 result
= pbuffer
->timestamp
;
446 if (node
->value
.builtin
== BT_FILE
)
447 name
= linemap_get_expansion_filename (pfile
->line_table
,
448 pfile
->line_table
->highest_line
);
451 name
= _cpp_get_file_name (pfile
->main_file
);
455 if (pfile
->cb
.remap_filename
)
456 name
= pfile
->cb
.remap_filename (name
);
458 buf
= _cpp_unaligned_alloc (pfile
, len
* 2 + 3);
461 buf
= cpp_quote_string (buf
+ 1, (const unsigned char *) name
, len
);
467 case BT_INCLUDE_LEVEL
:
468 /* The line map depth counts the primary source as level 1, but
469 historically __INCLUDE_DEPTH__ has called the primary source
471 number
= pfile
->line_table
->depth
- 1;
475 /* If __LINE__ is embedded in a macro, it must expand to the
476 line of the macro's invocation, not its definition.
477 Otherwise things like assert() will not work properly.
478 See WG14 N1911, WG21 N4220 sec 6.5, and PR 61861. */
479 if (CPP_OPTION (pfile
, traditional
))
480 loc
= pfile
->line_table
->highest_line
;
482 loc
= linemap_resolve_location (pfile
->line_table
, loc
,
483 LRK_MACRO_EXPANSION_POINT
, NULL
);
484 number
= linemap_get_expansion_line (pfile
->line_table
, loc
);
487 /* __STDC__ has the value 1 under normal circumstances.
488 However, if (a) we are in a system header, (b) the option
489 stdc_0_in_system_headers is true (set by target config), and
490 (c) we are not in strictly conforming mode, then it has the
491 value 0. (b) and (c) are already checked in cpp_init_builtins. */
493 if (cpp_in_system_header (pfile
))
501 if (CPP_OPTION (pfile
, warn_date_time
))
502 cpp_warning (pfile
, CPP_W_DATE_TIME
, "macro \"%s\" might prevent "
503 "reproducible builds", NODE_NAME (node
));
504 if (pfile
->date
== NULL
)
506 /* Allocate __DATE__ and __TIME__ strings from permanent
507 storage. We only do this once, and don't generate them
508 at init time, because time() and localtime() are very
509 slow on some systems. */
511 struct tm
*tb
= NULL
;
513 /* Set a reproducible timestamp for __DATE__ and __TIME__ macro
514 if SOURCE_DATE_EPOCH is defined. */
515 if (pfile
->source_date_epoch
== (time_t) -2
516 && pfile
->cb
.get_source_date_epoch
!= NULL
)
517 pfile
->source_date_epoch
= pfile
->cb
.get_source_date_epoch (pfile
);
519 if (pfile
->source_date_epoch
>= (time_t) 0)
520 tb
= gmtime (&pfile
->source_date_epoch
);
523 /* (time_t) -1 is a legitimate value for "number of seconds
524 since the Epoch", so we have to do a little dance to
525 distinguish that from a genuine error. */
528 if (tt
!= (time_t)-1 || errno
== 0)
529 tb
= localtime (&tt
);
534 pfile
->date
= _cpp_unaligned_alloc (pfile
,
535 sizeof ("\"Oct 11 1347\""));
536 sprintf ((char *) pfile
->date
, "\"%s %2d %4d\"",
537 monthnames
[tb
->tm_mon
], tb
->tm_mday
,
540 pfile
->time
= _cpp_unaligned_alloc (pfile
,
541 sizeof ("\"12:34:56\""));
542 sprintf ((char *) pfile
->time
, "\"%02d:%02d:%02d\"",
543 tb
->tm_hour
, tb
->tm_min
, tb
->tm_sec
);
547 cpp_errno (pfile
, CPP_DL_WARNING
,
548 "could not determine date and time");
550 pfile
->date
= UC
"\"??? ?? ????\"";
551 pfile
->time
= UC
"\"??:??:??\"";
555 if (node
->value
.builtin
== BT_DATE
)
556 result
= pfile
->date
;
558 result
= pfile
->time
;
562 if (CPP_OPTION (pfile
, directives_only
) && pfile
->state
.in_directive
)
563 cpp_error (pfile
, CPP_DL_ERROR
,
564 "__COUNTER__ expanded inside directive with -fdirectives-only");
565 number
= pfile
->counter
++;
568 case BT_HAS_ATTRIBUTE
:
569 number
= pfile
->cb
.has_attribute (pfile
);
575 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
576 result
= _cpp_unaligned_alloc (pfile
, 21);
577 sprintf ((char *) result
, "%u", number
);
583 /* Convert builtin macros like __FILE__ to a token and push it on the
584 context stack. Also handles _Pragma, for which a new token may not
585 be created. Returns 1 if it generates a new token context, 0 to
586 return the token to the caller. LOC is the location of the expansion
587 point of the macro. */
589 builtin_macro (cpp_reader
*pfile
, cpp_hashnode
*node
,
590 location_t loc
, location_t expand_loc
)
596 if (node
->value
.builtin
== BT_PRAGMA
)
598 /* Don't interpret _Pragma within directives. The standard is
599 not clear on this, but to me this makes most sense. */
600 if (pfile
->state
.in_directive
)
603 return _cpp_do__Pragma (pfile
, loc
);
606 buf
= _cpp_builtin_macro_text (pfile
, node
, expand_loc
);
608 nbuf
= (char *) alloca (len
+ 1);
609 memcpy (nbuf
, buf
, len
);
612 cpp_push_buffer (pfile
, (uchar
*) nbuf
, len
, /* from_stage3 */ true);
613 _cpp_clean_line (pfile
);
615 /* Set pfile->cur_token as required by _cpp_lex_direct. */
616 pfile
->cur_token
= _cpp_temp_token (pfile
);
617 cpp_token
*token
= _cpp_lex_direct (pfile
);
618 /* We should point to the expansion point of the builtin macro. */
619 token
->src_loc
= loc
;
620 if (pfile
->context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
622 /* We are tracking tokens resulting from macro expansion.
623 Create a macro line map and generate a virtual location for
624 the token resulting from the expansion of the built-in
626 location_t
*virt_locs
= NULL
;
627 _cpp_buff
*token_buf
= tokens_buff_new (pfile
, 1, &virt_locs
);
628 const line_map_macro
* map
=
629 linemap_enter_macro (pfile
->line_table
, node
, loc
, 1);
630 tokens_buff_add_token (token_buf
, virt_locs
, token
,
631 pfile
->line_table
->builtin_location
,
632 pfile
->line_table
->builtin_location
,
633 map
, /*macro_token_index=*/0);
634 push_extended_tokens_context (pfile
, node
, token_buf
, virt_locs
,
635 (const cpp_token
**)token_buf
->base
,
639 _cpp_push_token_context (pfile
, NULL
, token
, 1);
640 if (pfile
->buffer
->cur
!= pfile
->buffer
->rlimit
)
641 cpp_error (pfile
, CPP_DL_ICE
, "invalid built-in macro \"%s\"",
643 _cpp_pop_buffer (pfile
);
648 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
649 backslashes and double quotes. DEST must be of sufficient size.
650 Returns a pointer to the end of the string. */
652 cpp_quote_string (uchar
*dest
, const uchar
*src
, unsigned int len
)
661 /* Naked LF can appear in raw string literals */
678 /* Convert a token sequence ARG to a single string token according to
679 the rules of the ISO C #-operator. */
680 static const cpp_token
*
681 stringify_arg (cpp_reader
*pfile
, macro_arg
*arg
)
684 unsigned int i
, escape_it
, backslash_count
= 0;
685 const cpp_token
*source
= NULL
;
688 if (BUFF_ROOM (pfile
->u_buff
) < 3)
689 _cpp_extend_buff (pfile
, &pfile
->u_buff
, 3);
690 dest
= BUFF_FRONT (pfile
->u_buff
);
693 /* Loop, reading in the argument's tokens. */
694 for (i
= 0; i
< arg
->count
; i
++)
696 const cpp_token
*token
= arg
->first
[i
];
698 if (token
->type
== CPP_PADDING
)
701 || (!(source
->flags
& PREV_WHITE
)
702 && token
->val
.source
== NULL
))
703 source
= token
->val
.source
;
707 escape_it
= (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
708 || token
->type
== CPP_WSTRING
|| token
->type
== CPP_WCHAR
709 || token
->type
== CPP_STRING32
|| token
->type
== CPP_CHAR32
710 || token
->type
== CPP_STRING16
|| token
->type
== CPP_CHAR16
711 || token
->type
== CPP_UTF8STRING
|| token
->type
== CPP_UTF8CHAR
712 || cpp_userdef_string_p (token
->type
)
713 || cpp_userdef_char_p (token
->type
));
715 /* Room for each char being written in octal, initial space and
716 final quote and NUL. */
717 len
= cpp_token_len (token
);
722 if ((size_t) (BUFF_LIMIT (pfile
->u_buff
) - dest
) < len
)
724 size_t len_so_far
= dest
- BUFF_FRONT (pfile
->u_buff
);
725 _cpp_extend_buff (pfile
, &pfile
->u_buff
, len
);
726 dest
= BUFF_FRONT (pfile
->u_buff
) + len_so_far
;
729 /* Leading white space? */
730 if (dest
- 1 != BUFF_FRONT (pfile
->u_buff
))
734 if (source
->flags
& PREV_WHITE
)
741 _cpp_buff
*buff
= _cpp_get_buff (pfile
, len
);
742 unsigned char *buf
= BUFF_FRONT (buff
);
743 len
= cpp_spell_token (pfile
, token
, buf
, true) - buf
;
744 dest
= cpp_quote_string (dest
, buf
, len
);
745 _cpp_release_buff (pfile
, buff
);
748 dest
= cpp_spell_token (pfile
, token
, dest
, true);
750 if (token
->type
== CPP_OTHER
&& token
->val
.str
.text
[0] == '\\')
756 /* Ignore the final \ of invalid string literals. */
757 if (backslash_count
& 1)
759 cpp_error (pfile
, CPP_DL_WARNING
,
760 "invalid string literal, ignoring final '\\'");
764 /* Commit the memory, including NUL, and return the token. */
766 len
= dest
- BUFF_FRONT (pfile
->u_buff
);
767 BUFF_FRONT (pfile
->u_buff
) = dest
+ 1;
768 return new_string_token (pfile
, dest
- len
, len
);
771 /* Try to paste two tokens. On success, return nonzero. In any
772 case, PLHS is updated to point to the pasted token, which is
773 guaranteed to not have the PASTE_LEFT flag set. LOCATION is
774 the virtual location used for error reporting. */
776 paste_tokens (cpp_reader
*pfile
, location_t location
,
777 const cpp_token
**plhs
, const cpp_token
*rhs
)
779 unsigned char *buf
, *end
, *lhsend
;
783 len
= cpp_token_len (*plhs
) + cpp_token_len (rhs
) + 1;
784 buf
= (unsigned char *) alloca (len
);
785 end
= lhsend
= cpp_spell_token (pfile
, *plhs
, buf
, true);
787 /* Avoid comment headers, since they are still processed in stage 3.
788 It is simpler to insert a space here, rather than modifying the
789 lexer to ignore comments in some circumstances. Simply returning
790 false doesn't work, since we want to clear the PASTE_LEFT flag. */
791 if ((*plhs
)->type
== CPP_DIV
&& rhs
->type
!= CPP_EQ
)
793 /* In one obscure case we might see padding here. */
794 if (rhs
->type
!= CPP_PADDING
)
795 end
= cpp_spell_token (pfile
, rhs
, end
, true);
798 cpp_push_buffer (pfile
, buf
, end
- buf
, /* from_stage3 */ true);
799 _cpp_clean_line (pfile
);
801 /* Set pfile->cur_token as required by _cpp_lex_direct. */
802 pfile
->cur_token
= _cpp_temp_token (pfile
);
803 lhs
= _cpp_lex_direct (pfile
);
804 if (pfile
->buffer
->cur
!= pfile
->buffer
->rlimit
)
806 location_t saved_loc
= lhs
->src_loc
;
808 _cpp_pop_buffer (pfile
);
809 _cpp_backup_tokens (pfile
, 1);
812 /* We have to remove the PASTE_LEFT flag from the old lhs, but
813 we want to keep the new location. */
816 lhs
->src_loc
= saved_loc
;
817 lhs
->flags
&= ~PASTE_LEFT
;
819 /* Mandatory error for all apart from assembler. */
820 if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
821 cpp_error_with_line (pfile
, CPP_DL_ERROR
, location
, 0,
822 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
823 buf
, cpp_token_as_text (pfile
, rhs
));
828 _cpp_pop_buffer (pfile
);
832 /* Handles an arbitrarily long sequence of ## operators, with initial
833 operand LHS. This implementation is left-associative,
834 non-recursive, and finishes a paste before handling succeeding
835 ones. If a paste fails, we back up to the RHS of the failing ##
836 operator before pushing the context containing the result of prior
837 successful pastes, with the effect that the RHS appears in the
838 output stream after the pasted LHS normally. */
840 paste_all_tokens (cpp_reader
*pfile
, const cpp_token
*lhs
)
842 const cpp_token
*rhs
= NULL
;
843 cpp_context
*context
= pfile
->context
;
844 location_t virt_loc
= 0;
846 /* We are expanding a macro and we must have been called on a token
847 that appears at the left hand side of a ## operator. */
848 if (macro_of_context (pfile
->context
) == NULL
849 || (!(lhs
->flags
& PASTE_LEFT
)))
852 if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
853 /* The caller must have called consume_next_token_from_context
854 right before calling us. That has incremented the pointer to
855 the current virtual location. So it now points to the location
856 of the token that comes right after *LHS. We want the
857 resulting pasted token to have the location of the current
859 virt_loc
= context
->c
.mc
->cur_virt_loc
[-1];
861 /* We are not tracking macro expansion. So the best virtual
862 location we can get here is the expansion point of the macro we
863 are currently expanding. */
864 virt_loc
= pfile
->invocation_location
;
868 /* Take the token directly from the current context. We can do
869 this, because we are in the replacement list of either an
870 object-like macro, or a function-like macro with arguments
871 inserted. In either case, the constraints to #define
872 guarantee we have at least one more token. */
873 if (context
->tokens_kind
== TOKENS_KIND_DIRECT
)
874 rhs
= FIRST (context
).token
++;
875 else if (context
->tokens_kind
== TOKENS_KIND_INDIRECT
)
876 rhs
= *FIRST (context
).ptoken
++;
877 else if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
879 /* So we are in presence of an extended token context, which
880 means that each token in this context has a virtual
881 location attached to it. So let's not forget to update
882 the pointer to the current virtual location of the
883 current token when we update the pointer to the current
886 rhs
= *FIRST (context
).ptoken
++;
887 /* context->c.mc must be non-null, as if we were not in a
888 macro context, context->tokens_kind could not be equal to
889 TOKENS_KIND_EXTENDED. */
890 context
->c
.mc
->cur_virt_loc
++;
893 if (rhs
->type
== CPP_PADDING
)
895 if (rhs
->flags
& PASTE_LEFT
)
898 if (!paste_tokens (pfile
, virt_loc
, &lhs
, rhs
))
901 while (rhs
->flags
& PASTE_LEFT
);
903 /* Put the resulting token in its own context. */
904 if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
906 location_t
*virt_locs
= NULL
;
907 _cpp_buff
*token_buf
= tokens_buff_new (pfile
, 1, &virt_locs
);
908 tokens_buff_add_token (token_buf
, virt_locs
, lhs
,
909 virt_loc
, 0, NULL
, 0);
910 push_extended_tokens_context (pfile
, context
->c
.mc
->macro_node
,
911 token_buf
, virt_locs
,
912 (const cpp_token
**)token_buf
->base
, 1);
915 _cpp_push_token_context (pfile
, NULL
, lhs
, 1);
918 /* Returns TRUE if the number of arguments ARGC supplied in an
919 invocation of the MACRO referenced by NODE is valid. An empty
920 invocation to a macro with no parameters should pass ARGC as zero.
922 Note that MACRO cannot necessarily be deduced from NODE, in case
923 NODE was redefined whilst collecting arguments. */
925 _cpp_arguments_ok (cpp_reader
*pfile
, cpp_macro
*macro
, const cpp_hashnode
*node
, unsigned int argc
)
927 if (argc
== macro
->paramc
)
930 if (argc
< macro
->paramc
)
932 /* In C++2a (here the va_opt flag is used), and also as a GNU
933 extension, variadic arguments are allowed to not appear in
934 the invocation at all.
935 e.g. #define debug(format, args...) something
938 This is exactly the same as if an empty variadic list had been
939 supplied - debug("string", ). */
941 if (argc
+ 1 == macro
->paramc
&& macro
->variadic
)
943 if (CPP_PEDANTIC (pfile
) && ! macro
->syshdr
944 && ! CPP_OPTION (pfile
, va_opt
))
946 if (CPP_OPTION (pfile
, cplusplus
))
947 cpp_error (pfile
, CPP_DL_PEDWARN
,
948 "ISO C++11 requires at least one argument "
949 "for the \"...\" in a variadic macro");
951 cpp_error (pfile
, CPP_DL_PEDWARN
,
952 "ISO C99 requires at least one argument "
953 "for the \"...\" in a variadic macro");
958 cpp_error (pfile
, CPP_DL_ERROR
,
959 "macro \"%s\" requires %u arguments, but only %u given",
960 NODE_NAME (node
), macro
->paramc
, argc
);
963 cpp_error (pfile
, CPP_DL_ERROR
,
964 "macro \"%s\" passed %u arguments, but takes just %u",
965 NODE_NAME (node
), argc
, macro
->paramc
);
967 if (macro
->line
> RESERVED_LOCATION_COUNT
)
968 cpp_error_at (pfile
, CPP_DL_NOTE
, macro
->line
, "macro \"%s\" defined here",
974 /* Reads and returns the arguments to a function-like macro
975 invocation. Assumes the opening parenthesis has been processed.
976 If there is an error, emits an appropriate diagnostic and returns
977 NULL. Each argument is terminated by a CPP_EOF token, for the
978 future benefit of expand_arg(). If there are any deferred
979 #pragma directives among macro arguments, store pointers to the
980 CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.
982 What is returned is the buffer that contains the memory allocated
983 to hold the macro arguments. NODE is the name of the macro this
984 function is dealing with. If NUM_ARGS is non-NULL, *NUM_ARGS is
985 set to the actual number of macro arguments allocated in the
988 collect_args (cpp_reader
*pfile
, const cpp_hashnode
*node
,
989 _cpp_buff
**pragma_buff
, unsigned *num_args
)
991 _cpp_buff
*buff
, *base_buff
;
993 macro_arg
*args
, *arg
;
994 const cpp_token
*token
;
997 bool track_macro_expansion_p
= CPP_OPTION (pfile
, track_macro_expansion
);
998 unsigned num_args_alloced
= 0;
1000 macro
= node
->value
.macro
;
1002 argc
= macro
->paramc
;
1006 #define DEFAULT_NUM_TOKENS_PER_MACRO_ARG 50
1007 #define ARG_TOKENS_EXTENT 1000
1009 buff
= _cpp_get_buff (pfile
, argc
* (DEFAULT_NUM_TOKENS_PER_MACRO_ARG
1010 * sizeof (cpp_token
*)
1011 + sizeof (macro_arg
)));
1013 args
= (macro_arg
*) buff
->base
;
1014 memset (args
, 0, argc
* sizeof (macro_arg
));
1015 buff
->cur
= (unsigned char *) &args
[argc
];
1016 arg
= args
, argc
= 0;
1018 /* Collect the tokens making up each argument. We don't yet know
1019 how many arguments have been supplied, whether too many or too
1020 few. Hence the slightly bizarre usage of "argc" and "arg". */
1023 unsigned int paren_depth
= 0;
1024 unsigned int ntokens
= 0;
1025 unsigned virt_locs_capacity
= DEFAULT_NUM_TOKENS_PER_MACRO_ARG
;
1029 arg
->first
= (const cpp_token
**) buff
->cur
;
1030 if (track_macro_expansion_p
)
1032 virt_locs_capacity
= DEFAULT_NUM_TOKENS_PER_MACRO_ARG
;
1033 arg
->virt_locs
= XNEWVEC (location_t
,
1034 virt_locs_capacity
);
1039 /* Require space for 2 new tokens (including a CPP_EOF). */
1040 if ((unsigned char *) &arg
->first
[ntokens
+ 2] > buff
->limit
)
1042 buff
= _cpp_append_extend_buff (pfile
, buff
,
1044 * sizeof (cpp_token
*));
1045 arg
->first
= (const cpp_token
**) buff
->cur
;
1047 if (track_macro_expansion_p
1048 && (ntokens
+ 2 > virt_locs_capacity
))
1050 virt_locs_capacity
+= ARG_TOKENS_EXTENT
;
1051 arg
->virt_locs
= XRESIZEVEC (location_t
,
1053 virt_locs_capacity
);
1056 token
= cpp_get_token_1 (pfile
, &virt_loc
);
1058 if (token
->type
== CPP_PADDING
)
1060 /* Drop leading padding. */
1064 else if (token
->type
== CPP_OPEN_PAREN
)
1066 else if (token
->type
== CPP_CLOSE_PAREN
)
1068 if (paren_depth
-- == 0)
1071 else if (token
->type
== CPP_COMMA
)
1073 /* A comma does not terminate an argument within
1074 parentheses or as part of a variable argument. */
1075 if (paren_depth
== 0
1076 && ! (macro
->variadic
&& argc
== macro
->paramc
))
1079 else if (token
->type
== CPP_EOF
1080 || (token
->type
== CPP_HASH
&& token
->flags
& BOL
))
1082 else if (token
->type
== CPP_PRAGMA
)
1084 cpp_token
*newtok
= _cpp_temp_token (pfile
);
1086 /* CPP_PRAGMA token lives in directive_result, which will
1087 be overwritten on the next directive. */
1092 if (*pragma_buff
== NULL
1093 || BUFF_ROOM (*pragma_buff
) < sizeof (cpp_token
*))
1096 if (*pragma_buff
== NULL
)
1098 = _cpp_get_buff (pfile
, 32 * sizeof (cpp_token
*));
1101 next
= *pragma_buff
;
1103 = _cpp_get_buff (pfile
,
1104 (BUFF_FRONT (*pragma_buff
)
1105 - (*pragma_buff
)->base
) * 2);
1106 (*pragma_buff
)->next
= next
;
1109 *(const cpp_token
**) BUFF_FRONT (*pragma_buff
) = token
;
1110 BUFF_FRONT (*pragma_buff
) += sizeof (cpp_token
*);
1111 if (token
->type
== CPP_PRAGMA_EOL
)
1113 token
= cpp_get_token_1 (pfile
, &virt_loc
);
1115 while (token
->type
!= CPP_EOF
);
1117 /* In deferred pragmas parsing_args and prevent_expansion
1118 had been changed, reset it. */
1119 pfile
->state
.parsing_args
= 2;
1120 pfile
->state
.prevent_expansion
= 1;
1122 if (token
->type
== CPP_EOF
)
1127 set_arg_token (arg
, token
, virt_loc
,
1128 ntokens
, MACRO_ARG_TOKEN_NORMAL
,
1129 CPP_OPTION (pfile
, track_macro_expansion
));
1133 /* Drop trailing padding. */
1134 while (ntokens
> 0 && arg
->first
[ntokens
- 1]->type
== CPP_PADDING
)
1137 arg
->count
= ntokens
;
1138 set_arg_token (arg
, &pfile
->eof
, pfile
->eof
.src_loc
,
1139 ntokens
, MACRO_ARG_TOKEN_NORMAL
,
1140 CPP_OPTION (pfile
, track_macro_expansion
));
1142 /* Terminate the argument. Excess arguments loop back and
1143 overwrite the final legitimate argument, before failing. */
1144 if (argc
<= macro
->paramc
)
1146 buff
->cur
= (unsigned char *) &arg
->first
[ntokens
+ 1];
1147 if (argc
!= macro
->paramc
)
1151 while (token
->type
!= CPP_CLOSE_PAREN
&& token
->type
!= CPP_EOF
);
1153 if (token
->type
== CPP_EOF
)
1155 /* We still need the CPP_EOF to end directives, and to end
1156 pre-expansion of a macro argument. Step back is not
1157 unconditional, since we don't want to return a CPP_EOF to our
1158 callers at the end of an -include-d file. */
1159 if (pfile
->context
->prev
|| pfile
->state
.in_directive
)
1160 _cpp_backup_tokens (pfile
, 1);
1161 cpp_error (pfile
, CPP_DL_ERROR
,
1162 "unterminated argument list invoking macro \"%s\"",
1167 /* A single empty argument is counted as no argument. */
1168 if (argc
== 1 && macro
->paramc
== 0 && args
[0].count
== 0)
1170 if (_cpp_arguments_ok (pfile
, macro
, node
, argc
))
1172 /* GCC has special semantics for , ## b where b is a varargs
1173 parameter: we remove the comma if b was omitted entirely.
1174 If b was merely an empty argument, the comma is retained.
1175 If the macro takes just one (varargs) parameter, then we
1176 retain the comma only if we are standards conforming.
1178 If FIRST is NULL replace_args () swallows the comma. */
1179 if (macro
->variadic
&& (argc
< macro
->paramc
1180 || (argc
== 1 && args
[0].count
== 0
1181 && !CPP_OPTION (pfile
, std
))))
1182 args
[macro
->paramc
- 1].first
= NULL
;
1184 *num_args
= num_args_alloced
;
1189 /* An error occurred. */
1190 _cpp_release_buff (pfile
, base_buff
);
1194 /* Search for an opening parenthesis to the macro of NODE, in such a
1195 way that, if none is found, we don't lose the information in any
1196 intervening padding tokens. If we find the parenthesis, collect
1197 the arguments and return the buffer containing them. PRAGMA_BUFF
1198 argument is the same as in collect_args. If NUM_ARGS is non-NULL,
1199 *NUM_ARGS is set to the number of arguments contained in the
1202 funlike_invocation_p (cpp_reader
*pfile
, cpp_hashnode
*node
,
1203 _cpp_buff
**pragma_buff
, unsigned *num_args
)
1205 const cpp_token
*token
, *padding
= NULL
;
1209 token
= cpp_get_token (pfile
);
1210 if (token
->type
!= CPP_PADDING
)
1213 || (!(padding
->flags
& PREV_WHITE
) && token
->val
.source
== NULL
))
1217 if (token
->type
== CPP_OPEN_PAREN
)
1219 pfile
->state
.parsing_args
= 2;
1220 return collect_args (pfile
, node
, pragma_buff
, num_args
);
1223 /* CPP_EOF can be the end of macro arguments, or the end of the
1224 file. We mustn't back up over the latter. Ugh. */
1225 if (token
->type
!= CPP_EOF
|| token
== &pfile
->eof
)
1227 /* Back up. We may have skipped padding, in which case backing
1228 up more than one token when expanding macros is in general
1229 too difficult. We re-insert it in its own context. */
1230 _cpp_backup_tokens (pfile
, 1);
1232 _cpp_push_token_context (pfile
, NULL
, padding
, 1);
1238 /* Return the real number of tokens in the expansion of MACRO. */
1239 static inline unsigned int
1240 macro_real_token_count (const cpp_macro
*macro
)
1242 if (__builtin_expect (!macro
->extra_tokens
, true))
1243 return macro
->count
;
1245 for (unsigned i
= macro
->count
; i
--;)
1246 if (macro
->exp
.tokens
[i
].type
!= CPP_PASTE
)
1252 /* Push the context of a macro with hash entry NODE onto the context
1253 stack. If we can successfully expand the macro, we push a context
1254 containing its yet-to-be-rescanned replacement list and return one.
1255 If there were additionally any unexpanded deferred #pragma
1256 directives among macro arguments, push another context containing
1257 the pragma tokens before the yet-to-be-rescanned replacement list
1258 and return two. Otherwise, we don't push a context and return
1259 zero. LOCATION is the location of the expansion point of the
1262 enter_macro_context (cpp_reader
*pfile
, cpp_hashnode
*node
,
1263 const cpp_token
*result
, location_t location
)
1265 /* The presence of a macro invalidates a file's controlling macro. */
1266 pfile
->mi_valid
= false;
1268 pfile
->state
.angled_headers
= false;
1270 /* From here to when we push the context for the macro later down
1271 this function, we need to flag the fact that we are about to
1272 expand a macro. This is useful when -ftrack-macro-expansion is
1273 turned off. In that case, we need to record the location of the
1274 expansion point of the top-most macro we are about to to expand,
1275 into pfile->invocation_location. But we must not record any such
1276 location once the process of expanding the macro starts; that is,
1277 we must not do that recording between now and later down this
1278 function where set this flag to FALSE. */
1279 pfile
->about_to_expand_macro_p
= true;
1281 if (cpp_user_macro_p (node
))
1283 cpp_macro
*macro
= node
->value
.macro
;
1284 _cpp_buff
*pragma_buff
= NULL
;
1286 if (macro
->fun_like
)
1289 unsigned num_args
= 0;
1291 pfile
->state
.prevent_expansion
++;
1292 pfile
->keep_tokens
++;
1293 pfile
->state
.parsing_args
= 1;
1294 buff
= funlike_invocation_p (pfile
, node
, &pragma_buff
,
1296 pfile
->state
.parsing_args
= 0;
1297 pfile
->keep_tokens
--;
1298 pfile
->state
.prevent_expansion
--;
1302 if (CPP_WTRADITIONAL (pfile
) && ! node
->value
.macro
->syshdr
)
1303 cpp_warning (pfile
, CPP_W_TRADITIONAL
,
1304 "function-like macro \"%s\" must be used with arguments in traditional C",
1308 _cpp_release_buff (pfile
, pragma_buff
);
1310 pfile
->about_to_expand_macro_p
= false;
1314 if (macro
->paramc
> 0)
1315 replace_args (pfile
, node
, macro
,
1316 (macro_arg
*) buff
->base
,
1318 /* Free the memory used by the arguments of this
1319 function-like macro. This memory has been allocated by
1320 funlike_invocation_p and by replace_args. */
1321 delete_macro_args (buff
, num_args
);
1324 /* Disable the macro within its expansion. */
1325 node
->flags
|= NODE_DISABLED
;
1327 /* Laziness can only affect the expansion tokens of the macro,
1328 not its fun-likeness or parameters. */
1329 _cpp_maybe_notify_macro_use (pfile
, node
);
1331 pfile
->cb
.used (pfile
, location
, node
);
1335 if (macro
->paramc
== 0)
1337 unsigned tokens_count
= macro_real_token_count (macro
);
1338 if (CPP_OPTION (pfile
, track_macro_expansion
))
1341 const cpp_token
*src
= macro
->exp
.tokens
;
1342 const line_map_macro
*map
;
1343 location_t
*virt_locs
= NULL
;
1344 _cpp_buff
*macro_tokens
1345 = tokens_buff_new (pfile
, tokens_count
, &virt_locs
);
1347 /* Create a macro map to record the locations of the
1348 tokens that are involved in the expansion. LOCATION
1349 is the location of the macro expansion point. */
1350 map
= linemap_enter_macro (pfile
->line_table
,
1351 node
, location
, tokens_count
);
1352 for (i
= 0; i
< tokens_count
; ++i
)
1354 tokens_buff_add_token (macro_tokens
, virt_locs
,
1356 src
->src_loc
, map
, i
);
1359 push_extended_tokens_context (pfile
, node
,
1362 (const cpp_token
**)
1367 _cpp_push_token_context (pfile
, node
, macro
->exp
.tokens
,
1369 num_macro_tokens_counter
+= tokens_count
;
1374 if (!pfile
->state
.in_directive
)
1375 _cpp_push_token_context (pfile
, NULL
,
1376 padding_token (pfile
, result
), 1);
1379 unsigned tokens_count
;
1380 _cpp_buff
*tail
= pragma_buff
->next
;
1381 pragma_buff
->next
= NULL
;
1382 tokens_count
= ((const cpp_token
**) BUFF_FRONT (pragma_buff
)
1383 - (const cpp_token
**) pragma_buff
->base
);
1384 push_ptoken_context (pfile
, NULL
, pragma_buff
,
1385 (const cpp_token
**) pragma_buff
->base
,
1388 if (!CPP_OPTION (pfile
, track_macro_expansion
))
1389 num_macro_tokens_counter
+= tokens_count
;
1392 while (pragma_buff
!= NULL
);
1393 pfile
->about_to_expand_macro_p
= false;
1397 pfile
->about_to_expand_macro_p
= false;
1401 pfile
->about_to_expand_macro_p
= false;
1402 /* Handle built-in macros and the _Pragma operator. */
1404 location_t expand_loc
;
1406 if (/* The top-level macro invocation that triggered the expansion
1407 we are looking at is with a function-like user macro ... */
1408 cpp_fun_like_macro_p (pfile
->top_most_macro_node
)
1409 /* ... and we are tracking the macro expansion. */
1410 && CPP_OPTION (pfile
, track_macro_expansion
))
1411 /* Then the location of the end of the macro invocation is the
1412 location of the expansion point of this macro. */
1413 expand_loc
= location
;
1415 /* Otherwise, the location of the end of the macro invocation is
1416 the location of the expansion point of that top-level macro
1418 expand_loc
= pfile
->invocation_location
;
1420 return builtin_macro (pfile
, node
, location
, expand_loc
);
1424 /* De-allocate the memory used by BUFF which is an array of instances
1425 of macro_arg. NUM_ARGS is the number of instances of macro_arg
1428 delete_macro_args (_cpp_buff
*buff
, unsigned num_args
)
1430 macro_arg
*macro_args
;
1436 macro_args
= (macro_arg
*) buff
->base
;
1438 /* Walk instances of macro_arg to free their expanded tokens as well
1439 as their macro_arg::virt_locs members. */
1440 for (i
= 0; i
< num_args
; ++i
)
1442 if (macro_args
[i
].expanded
)
1444 free (macro_args
[i
].expanded
);
1445 macro_args
[i
].expanded
= NULL
;
1447 if (macro_args
[i
].virt_locs
)
1449 free (macro_args
[i
].virt_locs
);
1450 macro_args
[i
].virt_locs
= NULL
;
1452 if (macro_args
[i
].expanded_virt_locs
)
1454 free (macro_args
[i
].expanded_virt_locs
);
1455 macro_args
[i
].expanded_virt_locs
= NULL
;
1458 _cpp_free_buff (buff
);
1461 /* Set the INDEXth token of the macro argument ARG. TOKEN is the token
1462 to set, LOCATION is its virtual location. "Virtual" location means
1463 the location that encodes loci across macro expansion. Otherwise
1464 it has to be TOKEN->SRC_LOC. KIND is the kind of tokens the
1465 argument ARG is supposed to contain. Note that ARG must be
1466 tailored so that it has enough room to contain INDEX + 1 numbers of
1467 tokens, at least. */
1469 set_arg_token (macro_arg
*arg
, const cpp_token
*token
,
1470 location_t location
, size_t index
,
1471 enum macro_arg_token_kind kind
,
1472 bool track_macro_exp_p
)
1474 const cpp_token
**token_ptr
;
1475 location_t
*loc
= NULL
;
1478 arg_token_ptr_at (arg
, index
, kind
,
1479 track_macro_exp_p
? &loc
: NULL
);
1484 /* We can't set the location of a stringified argument
1485 token and we can't set any location if we aren't tracking
1486 macro expansion locations. */
1487 gcc_checking_assert (kind
!= MACRO_ARG_TOKEN_STRINGIFIED
1488 && track_macro_exp_p
);
1493 /* Get the pointer to the location of the argument token of the
1494 function-like macro argument ARG. This function must be called
1495 only when we -ftrack-macro-expansion is on. */
1496 static const location_t
*
1497 get_arg_token_location (const macro_arg
*arg
,
1498 enum macro_arg_token_kind kind
)
1500 const location_t
*loc
= NULL
;
1501 const cpp_token
**token_ptr
=
1502 arg_token_ptr_at (arg
, 0, kind
, (location_t
**) &loc
);
1504 if (token_ptr
== NULL
)
1510 /* Return the pointer to the INDEXth token of the macro argument ARG.
1511 KIND specifies the kind of token the macro argument ARG contains.
1512 If VIRT_LOCATION is non NULL, *VIRT_LOCATION is set to the address
1513 of the virtual location of the returned token if the
1514 -ftrack-macro-expansion flag is on; otherwise, it's set to the
1515 spelling location of the returned token. */
1516 static const cpp_token
**
1517 arg_token_ptr_at (const macro_arg
*arg
, size_t index
,
1518 enum macro_arg_token_kind kind
,
1519 location_t
**virt_location
)
1521 const cpp_token
**tokens_ptr
= NULL
;
1525 case MACRO_ARG_TOKEN_NORMAL
:
1526 tokens_ptr
= arg
->first
;
1528 case MACRO_ARG_TOKEN_STRINGIFIED
:
1529 tokens_ptr
= (const cpp_token
**) &arg
->stringified
;
1531 case MACRO_ARG_TOKEN_EXPANDED
:
1532 tokens_ptr
= arg
->expanded
;
1536 if (tokens_ptr
== NULL
)
1537 /* This can happen for e.g, an empty token argument to a
1538 funtion-like macro. */
1543 if (kind
== MACRO_ARG_TOKEN_NORMAL
)
1544 *virt_location
= &arg
->virt_locs
[index
];
1545 else if (kind
== MACRO_ARG_TOKEN_EXPANDED
)
1546 *virt_location
= &arg
->expanded_virt_locs
[index
];
1547 else if (kind
== MACRO_ARG_TOKEN_STRINGIFIED
)
1549 (location_t
*) &tokens_ptr
[index
]->src_loc
;
1551 return &tokens_ptr
[index
];
1554 /* Initialize an iterator so that it iterates over the tokens of a
1555 function-like macro argument. KIND is the kind of tokens we want
1556 ITER to iterate over. TOKEN_PTR points the first token ITER will
1559 macro_arg_token_iter_init (macro_arg_token_iter
*iter
,
1560 bool track_macro_exp_p
,
1561 enum macro_arg_token_kind kind
,
1562 const macro_arg
*arg
,
1563 const cpp_token
**token_ptr
)
1565 iter
->track_macro_exp_p
= track_macro_exp_p
;
1567 iter
->token_ptr
= token_ptr
;
1568 /* Unconditionally initialize this so that the compiler doesn't warn
1569 about iter->location_ptr being possibly uninitialized later after
1570 this code has been inlined somewhere. */
1571 iter
->location_ptr
= NULL
;
1572 if (track_macro_exp_p
)
1573 iter
->location_ptr
= get_arg_token_location (arg
, kind
);
1575 iter
->num_forwards
= 0;
1576 if (track_macro_exp_p
1577 && token_ptr
!= NULL
1578 && iter
->location_ptr
== NULL
)
1583 /* Move the iterator one token forward. Note that if IT was
1584 initialized on an argument that has a stringified token, moving it
1585 forward doesn't make sense as a stringified token is essentially one
1588 macro_arg_token_iter_forward (macro_arg_token_iter
*it
)
1592 case MACRO_ARG_TOKEN_NORMAL
:
1593 case MACRO_ARG_TOKEN_EXPANDED
:
1595 if (it
->track_macro_exp_p
)
1598 case MACRO_ARG_TOKEN_STRINGIFIED
:
1600 if (it
->num_forwards
> 0)
1611 /* Return the token pointed to by the iterator. */
1612 static const cpp_token
*
1613 macro_arg_token_iter_get_token (const macro_arg_token_iter
*it
)
1616 if (it
->kind
== MACRO_ARG_TOKEN_STRINGIFIED
1617 && it
->num_forwards
> 0)
1620 if (it
->token_ptr
== NULL
)
1622 return *it
->token_ptr
;
1625 /* Return the location of the token pointed to by the iterator.*/
1627 macro_arg_token_iter_get_location (const macro_arg_token_iter
*it
)
1630 if (it
->kind
== MACRO_ARG_TOKEN_STRINGIFIED
1631 && it
->num_forwards
> 0)
1634 if (it
->track_macro_exp_p
)
1635 return *it
->location_ptr
;
1637 return (*it
->token_ptr
)->src_loc
;
1640 /* Return the index of a token [resulting from macro expansion] inside
1641 the total list of tokens resulting from a given macro
1642 expansion. The index can be different depending on whether if we
1643 want each tokens resulting from function-like macro arguments
1644 expansion to have a different location or not.
1646 E.g, consider this function-like macro:
1650 Then consider us "calling" it (and thus expanding it) like:
1654 It will be expanded into:
1658 Let's consider the case of the token '4'.
1660 Its index can be 2 (it's the third token of the set of tokens
1661 resulting from the expansion) or it can be 0 if we consider that
1662 all tokens resulting from the expansion of the argument "1+2" have
1663 the same index, which is 0. In this later case, the index of token
1664 '-' would then be 1 and the index of token '3' would be 2.
1666 The later case is useful to use less memory e.g, for the case of
1667 the user using the option -ftrack-macro-expansion=1.
1669 ABSOLUTE_TOKEN_INDEX is the index of the macro argument token we
1670 are interested in. CUR_REPLACEMENT_TOKEN is the token of the macro
1671 parameter (inside the macro replacement list) that corresponds to
1672 the macro argument for which ABSOLUTE_TOKEN_INDEX is a token index
1675 If we refer to the example above, for the '4' argument token,
1676 ABSOLUTE_TOKEN_INDEX would be set to 2, and CUR_REPLACEMENT_TOKEN
1677 would be set to the token 'x', in the replacement list "x - 3" of
1680 This is a subroutine of replace_args. */
1681 inline static unsigned
1682 expanded_token_index (cpp_reader
*pfile
, cpp_macro
*macro
,
1683 const cpp_token
*cur_replacement_token
,
1684 unsigned absolute_token_index
)
1686 if (CPP_OPTION (pfile
, track_macro_expansion
) > 1)
1687 return absolute_token_index
;
1688 return cur_replacement_token
- macro
->exp
.tokens
;
1691 /* Copy whether PASTE_LEFT is set from SRC to *PASTE_FLAG. */
1694 copy_paste_flag (cpp_reader
*pfile
, const cpp_token
**paste_flag
,
1695 const cpp_token
*src
)
1697 cpp_token
*token
= _cpp_temp_token (pfile
);
1698 token
->type
= (*paste_flag
)->type
;
1699 token
->val
= (*paste_flag
)->val
;
1700 if (src
->flags
& PASTE_LEFT
)
1701 token
->flags
= (*paste_flag
)->flags
| PASTE_LEFT
;
1703 token
->flags
= (*paste_flag
)->flags
& ~PASTE_LEFT
;
1704 *paste_flag
= token
;
1707 /* True IFF the last token emitted into BUFF (if any) is PTR. */
1710 last_token_is (_cpp_buff
*buff
, const cpp_token
**ptr
)
1712 return (ptr
&& tokens_buff_last_token_ptr (buff
) == ptr
);
1715 /* Replace the parameters in a function-like macro of NODE with the
1716 actual ARGS, and place the result in a newly pushed token context.
1717 Expand each argument before replacing, unless it is operated upon
1718 by the # or ## operators. EXPANSION_POINT_LOC is the location of
1719 the expansion point of the macro. E.g, the location of the
1720 function-like macro invocation. */
1722 replace_args (cpp_reader
*pfile
, cpp_hashnode
*node
, cpp_macro
*macro
,
1723 macro_arg
*args
, location_t expansion_point_loc
)
1725 unsigned int i
, total
;
1726 const cpp_token
*src
, *limit
;
1727 const cpp_token
**first
= NULL
;
1729 _cpp_buff
*buff
= NULL
;
1730 location_t
*virt_locs
= NULL
;
1731 unsigned int exp_count
;
1732 const line_map_macro
*map
= NULL
;
1733 int track_macro_exp
;
1735 /* First, fully macro-expand arguments, calculating the number of
1736 tokens in the final expansion as we go. The ordering of the if
1737 statements below is subtle; we must handle stringification before
1740 /* EXP_COUNT is the number of tokens in the macro replacement
1741 list. TOTAL is the number of tokens /after/ macro parameters
1742 have been replaced by their arguments. */
1743 exp_count
= macro_real_token_count (macro
);
1745 limit
= macro
->exp
.tokens
+ exp_count
;
1747 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
1748 if (src
->type
== CPP_MACRO_ARG
)
1750 /* Leading and trailing padding tokens. */
1752 /* Account for leading and padding tokens in exp_count too.
1753 This is going to be important later down this function,
1754 when we want to handle the case of (track_macro_exp <
1758 /* We have an argument. If it is not being stringified or
1759 pasted it is macro-replaced before insertion. */
1760 arg
= &args
[src
->val
.macro_arg
.arg_no
- 1];
1762 if (src
->flags
& STRINGIFY_ARG
)
1764 if (!arg
->stringified
)
1765 arg
->stringified
= stringify_arg (pfile
, arg
);
1767 else if ((src
->flags
& PASTE_LEFT
)
1768 || (src
!= macro
->exp
.tokens
&& (src
[-1].flags
& PASTE_LEFT
)))
1769 total
+= arg
->count
- 1;
1773 expand_arg (pfile
, arg
);
1774 total
+= arg
->expanded_count
- 1;
1778 /* When the compiler is called with the -ftrack-macro-expansion
1779 flag, we need to keep track of the location of each token that
1780 results from macro expansion.
1782 A token resulting from macro expansion is not a new token. It is
1783 simply the same token as the token coming from the macro
1784 definition. The new things that are allocated are the buffer
1785 that holds the tokens resulting from macro expansion and a new
1786 location that records many things like the locus of the expansion
1787 point as well as the original locus inside the definition of the
1788 macro. This location is called a virtual location.
1790 So the buffer BUFF holds a set of cpp_token*, and the buffer
1791 VIRT_LOCS holds the virtual locations of the tokens held by BUFF.
1793 Both of these two buffers are going to be hung off of the macro
1794 context, when the latter is pushed. The memory allocated to
1795 store the tokens and their locations is going to be freed once
1796 the context of macro expansion is popped.
1798 As far as tokens are concerned, the memory overhead of
1799 -ftrack-macro-expansion is proportional to the number of
1800 macros that get expanded multiplied by sizeof (location_t).
1801 The good news is that extra memory gets freed when the macro
1802 context is freed, i.e shortly after the macro got expanded. */
1804 /* Is the -ftrack-macro-expansion flag in effect? */
1805 track_macro_exp
= CPP_OPTION (pfile
, track_macro_expansion
);
1807 /* Now allocate memory space for tokens and locations resulting from
1808 the macro expansion, copy the tokens and replace the arguments.
1809 This memory must be freed when the context of the macro MACRO is
1811 buff
= tokens_buff_new (pfile
, total
, track_macro_exp
? &virt_locs
: NULL
);
1813 first
= (const cpp_token
**) buff
->base
;
1815 /* Create a macro map to record the locations of the tokens that are
1816 involved in the expansion. Note that the expansion point is set
1817 to the location of the closing parenthesis. Otherwise, the
1818 subsequent map created for the first token that comes after the
1819 macro map might have a wrong line number. That would lead to
1820 tokens with wrong line numbers after the macro expansion. This
1821 adds up to the memory overhead of the -ftrack-macro-expansion
1822 flag; for every macro that is expanded, a "macro map" is
1824 if (track_macro_exp
)
1826 int num_macro_tokens
= total
;
1827 if (track_macro_exp
< 2)
1828 /* Then the number of macro tokens won't take in account the
1829 fact that function-like macro arguments can expand to
1830 multiple tokens. This is to save memory at the expense of
1833 Suppose we have #define SQUARE(A) A * A
1835 And then we do SQUARE(2+3)
1837 Then the tokens 2, +, 3, will have the same location,
1838 saying they come from the expansion of the argument A. */
1839 num_macro_tokens
= exp_count
;
1840 map
= linemap_enter_macro (pfile
->line_table
, node
,
1841 expansion_point_loc
,
1845 vaopt_state
vaopt_tracker (pfile
, macro
->variadic
,
1846 args
[macro
->paramc
- 1].count
> 0);
1847 const cpp_token
**vaopt_start
= NULL
;
1848 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
1850 unsigned int arg_tokens_count
;
1851 macro_arg_token_iter from
;
1852 const cpp_token
**paste_flag
= NULL
;
1853 const cpp_token
**tmp_token_ptr
;
1855 /* __VA_OPT__ handling. */
1856 vaopt_state::update_type vostate
= vaopt_tracker
.update (src
);
1857 if (vostate
!= vaopt_state::INCLUDE
)
1859 if (vostate
== vaopt_state::BEGIN
)
1861 /* Padding on the left of __VA_OPT__ (unless RHS of ##). */
1862 if (src
!= macro
->exp
.tokens
&& !(src
[-1].flags
& PASTE_LEFT
))
1864 const cpp_token
*t
= padding_token (pfile
, src
);
1865 unsigned index
= expanded_token_index (pfile
, macro
, src
, i
);
1866 /* Allocate a virtual location for the padding token and
1867 append the token and its location to BUFF and
1869 tokens_buff_add_token (buff
, virt_locs
, t
,
1870 t
->src_loc
, t
->src_loc
,
1873 vaopt_start
= tokens_buff_last_token_ptr (buff
);
1875 else if (vostate
== vaopt_state::END
)
1877 const cpp_token
**start
= vaopt_start
;
1880 /* Remove any tail padding from inside the __VA_OPT__. */
1881 paste_flag
= tokens_buff_last_token_ptr (buff
);
1882 while (paste_flag
&& paste_flag
!= start
1883 && (*paste_flag
)->type
== CPP_PADDING
)
1885 tokens_buff_remove_last_token (buff
);
1886 paste_flag
= tokens_buff_last_token_ptr (buff
);
1889 if (src
->flags
& PASTE_LEFT
)
1891 /* With a non-empty __VA_OPT__ on the LHS of ##, the last
1892 token should be flagged PASTE_LEFT. */
1893 if (paste_flag
&& (*paste_flag
)->type
!= CPP_PADDING
)
1894 copy_paste_flag (pfile
, paste_flag
, src
);
1898 /* Otherwise, avoid paste on RHS, __VA_OPT__(c)d or
1899 __VA_OPT__(c)__VA_OPT__(d). */
1900 const cpp_token
*t
= &pfile
->avoid_paste
;
1901 tokens_buff_add_token (buff
, virt_locs
,
1902 t
, t
->src_loc
, t
->src_loc
,
1909 if (src
->type
!= CPP_MACRO_ARG
)
1911 /* Allocate a virtual location for token SRC, and add that
1912 token and its virtual location into the buffers BUFF and
1914 unsigned index
= expanded_token_index (pfile
, macro
, src
, i
);
1915 tokens_buff_add_token (buff
, virt_locs
, src
,
1916 src
->src_loc
, src
->src_loc
,
1923 arg
= &args
[src
->val
.macro_arg
.arg_no
- 1];
1924 /* SRC is a macro parameter that we need to replace with its
1925 corresponding argument. So at some point we'll need to
1926 iterate over the tokens of the macro argument and copy them
1927 into the "place" now holding the correspondig macro
1928 parameter. We are going to use the iterator type
1929 macro_argo_token_iter to handle that iterating. The 'if'
1930 below is to initialize the iterator depending on the type of
1931 tokens the macro argument has. It also does some adjustment
1932 related to padding tokens and some pasting corner cases. */
1933 if (src
->flags
& STRINGIFY_ARG
)
1935 arg_tokens_count
= 1;
1936 macro_arg_token_iter_init (&from
,
1938 track_macro_expansion
),
1939 MACRO_ARG_TOKEN_STRINGIFIED
,
1940 arg
, &arg
->stringified
);
1942 else if (src
->flags
& PASTE_LEFT
)
1944 arg_tokens_count
= arg
->count
;
1945 macro_arg_token_iter_init (&from
,
1947 track_macro_expansion
),
1948 MACRO_ARG_TOKEN_NORMAL
,
1951 else if (src
!= macro
->exp
.tokens
&& (src
[-1].flags
& PASTE_LEFT
))
1954 arg_tokens_count
= arg
->count
;
1955 macro_arg_token_iter_init (&from
,
1957 track_macro_expansion
),
1958 MACRO_ARG_TOKEN_NORMAL
,
1961 num_toks
= tokens_buff_count (buff
);
1965 /* So the current parameter token is pasted to the previous
1966 token in the replacement list. Let's look at what
1967 we have as previous and current arguments. */
1969 /* This is the previous argument's token ... */
1970 tmp_token_ptr
= tokens_buff_last_token_ptr (buff
);
1972 if ((*tmp_token_ptr
)->type
== CPP_COMMA
1974 && src
->val
.macro_arg
.arg_no
== macro
->paramc
)
1976 /* ... which is a comma; and the current parameter
1977 is the last parameter of a variadic function-like
1978 macro. If the argument to the current last
1979 parameter is NULL, then swallow the comma,
1980 otherwise drop the paste flag. */
1981 if (macro_arg_token_iter_get_token (&from
) == NULL
)
1982 tokens_buff_remove_last_token (buff
);
1984 paste_flag
= tmp_token_ptr
;
1986 /* Remove the paste flag if the RHS is a placemarker, unless the
1987 previous emitted token is at the beginning of __VA_OPT__;
1988 placemarkers within __VA_OPT__ are ignored in that case. */
1989 else if (arg_tokens_count
== 0
1990 && tmp_token_ptr
!= vaopt_start
)
1991 paste_flag
= tmp_token_ptr
;
1996 arg_tokens_count
= arg
->expanded_count
;
1997 macro_arg_token_iter_init (&from
,
1999 track_macro_expansion
),
2000 MACRO_ARG_TOKEN_EXPANDED
,
2001 arg
, arg
->expanded
);
2003 if (last_token_is (buff
, vaopt_start
))
2005 /* We're expanding an arg at the beginning of __VA_OPT__.
2007 while (arg_tokens_count
)
2009 const cpp_token
*t
= macro_arg_token_iter_get_token (&from
);
2010 if (t
->type
!= CPP_PADDING
)
2012 macro_arg_token_iter_forward (&from
);
2018 /* Padding on the left of an argument (unless RHS of ##). */
2019 if ((!pfile
->state
.in_directive
|| pfile
->state
.directive_wants_padding
)
2020 && src
!= macro
->exp
.tokens
&& !(src
[-1].flags
& PASTE_LEFT
)
2021 && !last_token_is (buff
, vaopt_start
))
2023 const cpp_token
*t
= padding_token (pfile
, src
);
2024 unsigned index
= expanded_token_index (pfile
, macro
, src
, i
);
2025 /* Allocate a virtual location for the padding token and
2026 append the token and its location to BUFF and
2028 tokens_buff_add_token (buff
, virt_locs
, t
,
2029 t
->src_loc
, t
->src_loc
,
2033 if (arg_tokens_count
)
2035 /* So now we've got the number of tokens that make up the
2036 argument that is going to replace the current parameter
2037 in the macro's replacement list. */
2039 for (j
= 0; j
< arg_tokens_count
; ++j
)
2041 /* So if track_macro_exp is < 2, the user wants to
2042 save extra memory while tracking macro expansion
2043 locations. So in that case here is what we do:
2045 Suppose we have #define SQUARE(A) A * A
2047 And then we do SQUARE(2+3)
2049 Then the tokens 2, +, 3, will have the same location,
2050 saying they come from the expansion of the argument
2053 So that means we are going to ignore the COUNT tokens
2054 resulting from the expansion of the current macro
2055 argument. In other words all the ARG_TOKENS_COUNT tokens
2056 resulting from the expansion of the macro argument will
2057 have the index I. Normally, each of those tokens should
2059 unsigned token_index
= i
;
2061 if (track_macro_exp
> 1)
2064 index
= expanded_token_index (pfile
, macro
, src
, token_index
);
2065 tokens_buff_add_token (buff
, virt_locs
,
2066 macro_arg_token_iter_get_token (&from
),
2067 macro_arg_token_iter_get_location (&from
),
2068 src
->src_loc
, map
, index
);
2069 macro_arg_token_iter_forward (&from
);
2072 /* With a non-empty argument on the LHS of ##, the last
2073 token should be flagged PASTE_LEFT. */
2074 if (src
->flags
& PASTE_LEFT
)
2076 = (const cpp_token
**) tokens_buff_last_token_ptr (buff
);
2078 else if (CPP_PEDANTIC (pfile
) && ! CPP_OPTION (pfile
, c99
)
2079 && ! macro
->syshdr
&& ! cpp_in_system_header (pfile
))
2081 if (CPP_OPTION (pfile
, cplusplus
))
2082 cpp_pedwarning (pfile
, CPP_W_PEDANTIC
,
2083 "invoking macro %s argument %d: "
2084 "empty macro arguments are undefined"
2086 NODE_NAME (node
), src
->val
.macro_arg
.arg_no
);
2087 else if (CPP_OPTION (pfile
, cpp_warn_c90_c99_compat
))
2088 cpp_pedwarning (pfile
,
2089 CPP_OPTION (pfile
, cpp_warn_c90_c99_compat
) > 0
2090 ? CPP_W_C90_C99_COMPAT
: CPP_W_PEDANTIC
,
2091 "invoking macro %s argument %d: "
2092 "empty macro arguments are undefined"
2094 NODE_NAME (node
), src
->val
.macro_arg
.arg_no
);
2096 else if (CPP_OPTION (pfile
, cpp_warn_c90_c99_compat
) > 0
2097 && ! CPP_OPTION (pfile
, cplusplus
)
2098 && ! macro
->syshdr
&& ! cpp_in_system_header (pfile
))
2099 cpp_warning (pfile
, CPP_W_C90_C99_COMPAT
,
2100 "invoking macro %s argument %d: "
2101 "empty macro arguments are undefined"
2103 NODE_NAME (node
), src
->val
.macro_arg
.arg_no
);
2105 /* Avoid paste on RHS (even case count == 0). */
2106 if (!pfile
->state
.in_directive
&& !(src
->flags
& PASTE_LEFT
)
2107 && !last_token_is (buff
, vaopt_start
))
2109 const cpp_token
*t
= &pfile
->avoid_paste
;
2110 tokens_buff_add_token (buff
, virt_locs
,
2111 t
, t
->src_loc
, t
->src_loc
,
2115 /* Add a new paste flag, or remove an unwanted one. */
2117 copy_paste_flag (pfile
, paste_flag
, src
);
2119 i
+= arg_tokens_count
;
2122 if (track_macro_exp
)
2123 push_extended_tokens_context (pfile
, node
, buff
, virt_locs
, first
,
2124 tokens_buff_count (buff
));
2126 push_ptoken_context (pfile
, node
, buff
, first
,
2127 tokens_buff_count (buff
));
2129 num_macro_tokens_counter
+= tokens_buff_count (buff
);
2132 /* Return a special padding token, with padding inherited from SOURCE. */
2133 static const cpp_token
*
2134 padding_token (cpp_reader
*pfile
, const cpp_token
*source
)
2136 cpp_token
*result
= _cpp_temp_token (pfile
);
2138 result
->type
= CPP_PADDING
;
2140 /* Data in GCed data structures cannot be made const so far, so we
2141 need a cast here. */
2142 result
->val
.source
= (cpp_token
*) source
;
2147 /* Get a new uninitialized context. Create a new one if we cannot
2148 re-use an old one. */
2149 static cpp_context
*
2150 next_context (cpp_reader
*pfile
)
2152 cpp_context
*result
= pfile
->context
->next
;
2156 result
= XNEW (cpp_context
);
2157 memset (result
, 0, sizeof (cpp_context
));
2158 result
->prev
= pfile
->context
;
2160 pfile
->context
->next
= result
;
2163 pfile
->context
= result
;
2167 /* Push a list of pointers to tokens. */
2169 push_ptoken_context (cpp_reader
*pfile
, cpp_hashnode
*macro
, _cpp_buff
*buff
,
2170 const cpp_token
**first
, unsigned int count
)
2172 cpp_context
*context
= next_context (pfile
);
2174 context
->tokens_kind
= TOKENS_KIND_INDIRECT
;
2175 context
->c
.macro
= macro
;
2176 context
->buff
= buff
;
2177 FIRST (context
).ptoken
= first
;
2178 LAST (context
).ptoken
= first
+ count
;
2181 /* Push a list of tokens.
2183 A NULL macro means that we should continue the current macro
2184 expansion, in essence. That means that if we are currently in a
2185 macro expansion context, we'll make the new pfile->context refer to
2186 the current macro. */
2188 _cpp_push_token_context (cpp_reader
*pfile
, cpp_hashnode
*macro
,
2189 const cpp_token
*first
, unsigned int count
)
2191 cpp_context
*context
;
2194 macro
= macro_of_context (pfile
->context
);
2196 context
= next_context (pfile
);
2197 context
->tokens_kind
= TOKENS_KIND_DIRECT
;
2198 context
->c
.macro
= macro
;
2199 context
->buff
= NULL
;
2200 FIRST (context
).token
= first
;
2201 LAST (context
).token
= first
+ count
;
2204 /* Build a context containing a list of tokens as well as their
2205 virtual locations and push it. TOKENS_BUFF is the buffer that
2206 contains the tokens pointed to by FIRST. If TOKENS_BUFF is
2207 non-NULL, it means that the context owns it, meaning that
2208 _cpp_pop_context will free it as well as VIRT_LOCS_BUFF that
2209 contains the virtual locations.
2211 A NULL macro means that we should continue the current macro
2212 expansion, in essence. That means that if we are currently in a
2213 macro expansion context, we'll make the new pfile->context refer to
2214 the current macro. */
2216 push_extended_tokens_context (cpp_reader
*pfile
,
2217 cpp_hashnode
*macro
,
2218 _cpp_buff
*token_buff
,
2219 location_t
*virt_locs
,
2220 const cpp_token
**first
,
2223 cpp_context
*context
;
2227 macro
= macro_of_context (pfile
->context
);
2229 context
= next_context (pfile
);
2230 context
->tokens_kind
= TOKENS_KIND_EXTENDED
;
2231 context
->buff
= token_buff
;
2233 m
= XNEW (macro_context
);
2234 m
->macro_node
= macro
;
2235 m
->virt_locs
= virt_locs
;
2236 m
->cur_virt_loc
= virt_locs
;
2238 FIRST (context
).ptoken
= first
;
2239 LAST (context
).ptoken
= first
+ count
;
2242 /* Push a traditional macro's replacement text. */
2244 _cpp_push_text_context (cpp_reader
*pfile
, cpp_hashnode
*macro
,
2245 const uchar
*start
, size_t len
)
2247 cpp_context
*context
= next_context (pfile
);
2249 context
->tokens_kind
= TOKENS_KIND_DIRECT
;
2250 context
->c
.macro
= macro
;
2251 context
->buff
= NULL
;
2252 CUR (context
) = start
;
2253 RLIMIT (context
) = start
+ len
;
2254 macro
->flags
|= NODE_DISABLED
;
2257 /* Creates a buffer that holds tokens a.k.a "token buffer", usually
2258 for the purpose of storing them on a cpp_context. If VIRT_LOCS is
2259 non-null (which means that -ftrack-macro-expansion is on),
2260 *VIRT_LOCS is set to a newly allocated buffer that is supposed to
2261 hold the virtual locations of the tokens resulting from macro
2264 tokens_buff_new (cpp_reader
*pfile
, size_t len
,
2265 location_t
**virt_locs
)
2267 size_t tokens_size
= len
* sizeof (cpp_token
*);
2268 size_t locs_size
= len
* sizeof (location_t
);
2270 if (virt_locs
!= NULL
)
2271 *virt_locs
= XNEWVEC (location_t
, locs_size
);
2272 return _cpp_get_buff (pfile
, tokens_size
);
2275 /* Returns the number of tokens contained in a token buffer. The
2276 buffer holds a set of cpp_token*. */
2278 tokens_buff_count (_cpp_buff
*buff
)
2280 return (BUFF_FRONT (buff
) - buff
->base
) / sizeof (cpp_token
*);
2283 /* Return a pointer to the last token contained in the token buffer
2285 static const cpp_token
**
2286 tokens_buff_last_token_ptr (_cpp_buff
*buff
)
2288 if (BUFF_FRONT (buff
) == buff
->base
)
2290 return &((const cpp_token
**) BUFF_FRONT (buff
))[-1];
2293 /* Remove the last token contained in the token buffer TOKENS_BUFF.
2294 If VIRT_LOCS_BUFF is non-NULL, it should point at the buffer
2295 containing the virtual locations of the tokens in TOKENS_BUFF; in
2296 which case the function updates that buffer as well. */
2298 tokens_buff_remove_last_token (_cpp_buff
*tokens_buff
)
2301 if (BUFF_FRONT (tokens_buff
) > tokens_buff
->base
)
2302 BUFF_FRONT (tokens_buff
) =
2303 (unsigned char *) &((cpp_token
**) BUFF_FRONT (tokens_buff
))[-1];
2306 /* Insert a token into the token buffer at the position pointed to by
2307 DEST. Note that the buffer is not enlarged so the previous token
2308 that was at *DEST is overwritten. VIRT_LOC_DEST, if non-null,
2309 means -ftrack-macro-expansion is effect; it then points to where to
2310 insert the virtual location of TOKEN. TOKEN is the token to
2311 insert. VIRT_LOC is the virtual location of the token, i.e, the
2312 location possibly encoding its locus across macro expansion. If
2313 TOKEN is an argument of a function-like macro (inside a macro
2314 replacement list), PARM_DEF_LOC is the spelling location of the
2315 macro parameter that TOKEN is replacing, in the replacement list of
2316 the macro. If TOKEN is not an argument of a function-like macro or
2317 if it doesn't come from a macro expansion, then VIRT_LOC can just
2318 be set to the same value as PARM_DEF_LOC. If MAP is non null, it
2319 means TOKEN comes from a macro expansion and MAP is the macro map
2320 associated to the macro. MACRO_TOKEN_INDEX points to the index of
2321 the token in the macro map; it is not considered if MAP is NULL.
2323 Upon successful completion this function returns the a pointer to
2324 the position of the token coming right after the insertion
2326 static inline const cpp_token
**
2327 tokens_buff_put_token_to (const cpp_token
**dest
,
2328 location_t
*virt_loc_dest
,
2329 const cpp_token
*token
,
2330 location_t virt_loc
,
2331 location_t parm_def_loc
,
2332 const line_map_macro
*map
,
2333 unsigned int macro_token_index
)
2335 location_t macro_loc
= virt_loc
;
2336 const cpp_token
**result
;
2340 /* -ftrack-macro-expansion is on. */
2342 macro_loc
= linemap_add_macro_token (map
, macro_token_index
,
2343 virt_loc
, parm_def_loc
);
2344 *virt_loc_dest
= macro_loc
;
2352 /* Adds a token at the end of the tokens contained in BUFFER. Note
2353 that this function doesn't enlarge BUFFER when the number of tokens
2354 reaches BUFFER's size; it aborts in that situation.
2356 TOKEN is the token to append. VIRT_LOC is the virtual location of
2357 the token, i.e, the location possibly encoding its locus across
2358 macro expansion. If TOKEN is an argument of a function-like macro
2359 (inside a macro replacement list), PARM_DEF_LOC is the location of
2360 the macro parameter that TOKEN is replacing. If TOKEN doesn't come
2361 from a macro expansion, then VIRT_LOC can just be set to the same
2362 value as PARM_DEF_LOC. If MAP is non null, it means TOKEN comes
2363 from a macro expansion and MAP is the macro map associated to the
2364 macro. MACRO_TOKEN_INDEX points to the index of the token in the
2365 macro map; It is not considered if MAP is NULL. If VIRT_LOCS is
2366 non-null, it means -ftrack-macro-expansion is on; in which case
2367 this function adds the virtual location DEF_LOC to the VIRT_LOCS
2368 array, at the same index as the one of TOKEN in BUFFER. Upon
2369 successful completion this function returns the a pointer to the
2370 position of the token coming right after the insertion point. */
2371 static const cpp_token
**
2372 tokens_buff_add_token (_cpp_buff
*buffer
,
2373 location_t
*virt_locs
,
2374 const cpp_token
*token
,
2375 location_t virt_loc
,
2376 location_t parm_def_loc
,
2377 const line_map_macro
*map
,
2378 unsigned int macro_token_index
)
2380 const cpp_token
**result
;
2381 location_t
*virt_loc_dest
= NULL
;
2382 unsigned token_index
=
2383 (BUFF_FRONT (buffer
) - buffer
->base
) / sizeof (cpp_token
*);
2385 /* Abort if we pass the end the buffer. */
2386 if (BUFF_FRONT (buffer
) > BUFF_LIMIT (buffer
))
2389 if (virt_locs
!= NULL
)
2390 virt_loc_dest
= &virt_locs
[token_index
];
2393 tokens_buff_put_token_to ((const cpp_token
**) BUFF_FRONT (buffer
),
2394 virt_loc_dest
, token
, virt_loc
, parm_def_loc
,
2395 map
, macro_token_index
);
2397 BUFF_FRONT (buffer
) = (unsigned char *) result
;
2401 /* Allocate space for the function-like macro argument ARG to store
2402 the tokens resulting from the macro-expansion of the tokens that
2403 make up ARG itself. That space is allocated in ARG->expanded and
2404 needs to be freed using free. */
2406 alloc_expanded_arg_mem (cpp_reader
*pfile
, macro_arg
*arg
, size_t capacity
)
2408 gcc_checking_assert (arg
->expanded
== NULL
2409 && arg
->expanded_virt_locs
== NULL
);
2411 arg
->expanded
= XNEWVEC (const cpp_token
*, capacity
);
2412 if (CPP_OPTION (pfile
, track_macro_expansion
))
2413 arg
->expanded_virt_locs
= XNEWVEC (location_t
, capacity
);
2417 /* If necessary, enlarge ARG->expanded to so that it can contain SIZE
2420 ensure_expanded_arg_room (cpp_reader
*pfile
, macro_arg
*arg
,
2421 size_t size
, size_t *expanded_capacity
)
2423 if (size
<= *expanded_capacity
)
2429 XRESIZEVEC (const cpp_token
*, arg
->expanded
, size
);
2430 *expanded_capacity
= size
;
2432 if (CPP_OPTION (pfile
, track_macro_expansion
))
2434 if (arg
->expanded_virt_locs
== NULL
)
2435 arg
->expanded_virt_locs
= XNEWVEC (location_t
, size
);
2437 arg
->expanded_virt_locs
= XRESIZEVEC (location_t
,
2438 arg
->expanded_virt_locs
,
2443 /* Expand an argument ARG before replacing parameters in a
2444 function-like macro. This works by pushing a context with the
2445 argument's tokens, and then expanding that into a temporary buffer
2446 as if it were a normal part of the token stream. collect_args()
2447 has terminated the argument's tokens with a CPP_EOF so that we know
2448 when we have fully expanded the argument. */
2450 expand_arg (cpp_reader
*pfile
, macro_arg
*arg
)
2453 bool saved_warn_trad
;
2454 bool track_macro_exp_p
= CPP_OPTION (pfile
, track_macro_expansion
);
2457 || arg
->expanded
!= NULL
)
2460 /* Don't warn about funlike macros when pre-expanding. */
2461 saved_warn_trad
= CPP_WTRADITIONAL (pfile
);
2462 CPP_WTRADITIONAL (pfile
) = 0;
2464 /* Loop, reading in the tokens of the argument. */
2466 alloc_expanded_arg_mem (pfile
, arg
, capacity
);
2468 if (track_macro_exp_p
)
2469 push_extended_tokens_context (pfile
, NULL
, NULL
,
2474 push_ptoken_context (pfile
, NULL
, NULL
,
2475 arg
->first
, arg
->count
+ 1);
2479 const cpp_token
*token
;
2480 location_t location
;
2482 ensure_expanded_arg_room (pfile
, arg
, arg
->expanded_count
+ 1,
2485 token
= cpp_get_token_1 (pfile
, &location
);
2487 if (token
->type
== CPP_EOF
)
2490 set_arg_token (arg
, token
, location
,
2491 arg
->expanded_count
, MACRO_ARG_TOKEN_EXPANDED
,
2492 CPP_OPTION (pfile
, track_macro_expansion
));
2493 arg
->expanded_count
++;
2496 _cpp_pop_context (pfile
);
2498 CPP_WTRADITIONAL (pfile
) = saved_warn_trad
;
2501 /* Returns the macro associated to the current context if we are in
2502 the context a macro expansion, NULL otherwise. */
2503 static cpp_hashnode
*
2504 macro_of_context (cpp_context
*context
)
2506 if (context
== NULL
)
2509 return (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2510 ? context
->c
.mc
->macro_node
2514 /* Return TRUE iff we are expanding a macro or are about to start
2515 expanding one. If we are effectively expanding a macro, the
2516 function macro_of_context returns a pointer to the macro being
2519 in_macro_expansion_p (cpp_reader
*pfile
)
2524 return (pfile
->about_to_expand_macro_p
2525 || macro_of_context (pfile
->context
));
2528 /* Pop the current context off the stack, re-enabling the macro if the
2529 context represented a macro's replacement list. Initially the
2530 context structure was not freed so that we can re-use it later, but
2531 now we do free it to reduce peak memory consumption. */
2533 _cpp_pop_context (cpp_reader
*pfile
)
2535 cpp_context
*context
= pfile
->context
;
2537 /* We should not be popping the base context. */
2538 if (context
== &pfile
->base_context
)
2541 if (context
->c
.macro
)
2543 cpp_hashnode
*macro
;
2544 if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2546 macro_context
*mc
= context
->c
.mc
;
2547 macro
= mc
->macro_node
;
2548 /* If context->buff is set, it means the life time of tokens
2549 is bound to the life time of this context; so we must
2550 free the tokens; that means we must free the virtual
2551 locations of these tokens too. */
2552 if (context
->buff
&& mc
->virt_locs
)
2554 free (mc
->virt_locs
);
2555 mc
->virt_locs
= NULL
;
2558 context
->c
.mc
= NULL
;
2561 macro
= context
->c
.macro
;
2563 /* Beware that MACRO can be NULL in cases like when we are
2564 called from expand_arg. In those cases, a dummy context with
2565 tokens is pushed just for the purpose of walking them using
2566 cpp_get_token_1. In that case, no 'macro' field is set into
2567 the dummy context. */
2569 /* Several contiguous macro expansion contexts can be
2570 associated to the same macro; that means it's the same
2571 macro expansion that spans across all these (sub)
2572 contexts. So we should re-enable an expansion-disabled
2573 macro only when we are sure we are really out of that
2575 && macro_of_context (context
->prev
) != macro
)
2576 macro
->flags
&= ~NODE_DISABLED
;
2578 if (macro
== pfile
->top_most_macro_node
&& context
->prev
== NULL
)
2579 /* We are popping the context of the top-most macro node. */
2580 pfile
->top_most_macro_node
= NULL
;
2585 /* Decrease memory peak consumption by freeing the memory used
2587 _cpp_free_buff (context
->buff
);
2590 pfile
->context
= context
->prev
;
2591 /* decrease peak memory consumption by feeing the context. */
2592 pfile
->context
->next
= NULL
;
2596 /* Return TRUE if we reached the end of the set of tokens stored in
2597 CONTEXT, FALSE otherwise. */
2599 reached_end_of_context (cpp_context
*context
)
2601 if (context
->tokens_kind
== TOKENS_KIND_DIRECT
)
2602 return FIRST (context
).token
== LAST (context
).token
;
2603 else if (context
->tokens_kind
== TOKENS_KIND_INDIRECT
2604 || context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2605 return FIRST (context
).ptoken
== LAST (context
).ptoken
;
2610 /* Consume the next token contained in the current context of PFILE,
2611 and return it in *TOKEN. It's "full location" is returned in
2612 *LOCATION. If -ftrack-macro-location is in effeect, fFull location"
2613 means the location encoding the locus of the token across macro
2614 expansion; otherwise it's just is the "normal" location of the
2615 token which (*TOKEN)->src_loc. */
2617 consume_next_token_from_context (cpp_reader
*pfile
,
2618 const cpp_token
** token
,
2619 location_t
*location
)
2621 cpp_context
*c
= pfile
->context
;
2623 if ((c
)->tokens_kind
== TOKENS_KIND_DIRECT
)
2625 *token
= FIRST (c
).token
;
2626 *location
= (*token
)->src_loc
;
2629 else if ((c
)->tokens_kind
== TOKENS_KIND_INDIRECT
)
2631 *token
= *FIRST (c
).ptoken
;
2632 *location
= (*token
)->src_loc
;
2635 else if ((c
)->tokens_kind
== TOKENS_KIND_EXTENDED
)
2637 macro_context
*m
= c
->c
.mc
;
2638 *token
= *FIRST (c
).ptoken
;
2641 *location
= *m
->cur_virt_loc
;
2645 *location
= (*token
)->src_loc
;
2652 /* In the traditional mode of the preprocessor, if we are currently in
2653 a directive, the location of a token must be the location of the
2654 start of the directive line. This function returns the proper
2655 location if we are in the traditional mode, and just returns
2656 LOCATION otherwise. */
2658 static inline location_t
2659 maybe_adjust_loc_for_trad_cpp (cpp_reader
*pfile
, location_t location
)
2661 if (CPP_OPTION (pfile
, traditional
))
2663 if (pfile
->state
.in_directive
)
2664 return pfile
->directive_line
;
2669 /* Routine to get a token as well as its location.
2671 Macro expansions and directives are transparently handled,
2672 including entering included files. Thus tokens are post-macro
2673 expansion, and after any intervening directives. External callers
2674 see CPP_EOF only at EOF. Internal callers also see it when meeting
2675 a directive inside a macro call, when at the end of a directive and
2676 state.in_directive is still 1, and at the end of argument
2679 LOC is an out parameter; *LOC is set to the location "as expected
2680 by the user". Please read the comment of
2681 cpp_get_token_with_location to learn more about the meaning of this
2683 static const cpp_token
*
2684 cpp_get_token_1 (cpp_reader
*pfile
, location_t
*location
)
2686 const cpp_token
*result
;
2687 /* This token is a virtual token that either encodes a location
2688 related to macro expansion or a spelling location. */
2689 location_t virt_loc
= 0;
2690 /* pfile->about_to_expand_macro_p can be overriden by indirect calls
2691 to functions that push macro contexts. So let's save it so that
2692 we can restore it when we are about to leave this routine. */
2693 bool saved_about_to_expand_macro
= pfile
->about_to_expand_macro_p
;
2698 cpp_context
*context
= pfile
->context
;
2700 /* Context->prev == 0 <=> base context. */
2703 result
= _cpp_lex_token (pfile
);
2704 virt_loc
= result
->src_loc
;
2706 else if (!reached_end_of_context (context
))
2708 consume_next_token_from_context (pfile
, &result
,
2710 if (result
->flags
& PASTE_LEFT
)
2712 paste_all_tokens (pfile
, result
);
2713 if (pfile
->state
.in_directive
)
2715 result
= padding_token (pfile
, result
);
2721 if (pfile
->context
->c
.macro
)
2722 ++num_expanded_macros_counter
;
2723 _cpp_pop_context (pfile
);
2724 if (pfile
->state
.in_directive
)
2726 result
= &pfile
->avoid_paste
;
2730 if (pfile
->state
.in_directive
&& result
->type
== CPP_COMMENT
)
2733 if (result
->type
!= CPP_NAME
)
2736 node
= result
->val
.node
.node
;
2738 if (node
->type
== NT_VOID
|| (result
->flags
& NO_EXPAND
))
2741 if (!(node
->flags
& NODE_DISABLED
))
2744 /* If not in a macro context, and we're going to start an
2745 expansion, record the location and the top level macro
2746 about to be expanded. */
2747 if (!in_macro_expansion_p (pfile
))
2749 pfile
->invocation_location
= result
->src_loc
;
2750 pfile
->top_most_macro_node
= node
;
2752 if (pfile
->state
.prevent_expansion
)
2755 /* Conditional macros require that a predicate be evaluated
2757 if ((node
->flags
& NODE_CONDITIONAL
) != 0)
2759 if (pfile
->cb
.macro_to_expand
)
2761 bool whitespace_after
;
2762 const cpp_token
*peek_tok
= cpp_peek_token (pfile
, 0);
2764 whitespace_after
= (peek_tok
->type
== CPP_PADDING
2765 || (peek_tok
->flags
& PREV_WHITE
));
2766 node
= pfile
->cb
.macro_to_expand (pfile
, result
);
2768 ret
= enter_macro_context (pfile
, node
, result
,
2770 else if (whitespace_after
)
2772 /* If macro_to_expand hook returned NULL and it
2773 ate some tokens, see if we don't need to add
2774 a padding token in between this and the
2776 peek_tok
= cpp_peek_token (pfile
, 0);
2777 if (peek_tok
->type
!= CPP_PADDING
2778 && (peek_tok
->flags
& PREV_WHITE
) == 0)
2779 _cpp_push_token_context (pfile
, NULL
,
2780 padding_token (pfile
,
2786 ret
= enter_macro_context (pfile
, node
, result
,
2790 if (pfile
->state
.in_directive
|| ret
== 2)
2792 result
= padding_token (pfile
, result
);
2798 /* Flag this token as always unexpandable. FIXME: move this
2799 to collect_args()?. */
2800 cpp_token
*t
= _cpp_temp_token (pfile
);
2801 t
->type
= result
->type
;
2802 t
->flags
= result
->flags
| NO_EXPAND
;
2803 t
->val
= result
->val
;
2811 if (location
!= NULL
)
2814 virt_loc
= result
->src_loc
;
2815 *location
= virt_loc
;
2817 if (!CPP_OPTION (pfile
, track_macro_expansion
)
2818 && macro_of_context (pfile
->context
) != NULL
)
2819 /* We are in a macro expansion context, are not tracking
2820 virtual location, but were asked to report the location
2821 of the expansion point of the macro being expanded. */
2822 *location
= pfile
->invocation_location
;
2824 *location
= maybe_adjust_loc_for_trad_cpp (pfile
, *location
);
2827 pfile
->about_to_expand_macro_p
= saved_about_to_expand_macro
;
2831 /* External routine to get a token. Also used nearly everywhere
2832 internally, except for places where we know we can safely call
2833 _cpp_lex_token directly, such as lexing a directive name.
2835 Macro expansions and directives are transparently handled,
2836 including entering included files. Thus tokens are post-macro
2837 expansion, and after any intervening directives. External callers
2838 see CPP_EOF only at EOF. Internal callers also see it when meeting
2839 a directive inside a macro call, when at the end of a directive and
2840 state.in_directive is still 1, and at the end of argument
2843 cpp_get_token (cpp_reader
*pfile
)
2845 return cpp_get_token_1 (pfile
, NULL
);
2848 /* Like cpp_get_token, but also returns a virtual token location
2849 separate from the spelling location carried by the returned token.
2851 LOC is an out parameter; *LOC is set to the location "as expected
2852 by the user". This matters when a token results from macro
2853 expansion; in that case the token's spelling location indicates the
2854 locus of the token in the definition of the macro but *LOC
2855 virtually encodes all the other meaningful locuses associated to
2858 What? virtual location? Yes, virtual location.
2860 If the token results from macro expansion and if macro expansion
2861 location tracking is enabled its virtual location encodes (at the
2864 - the spelling location of the token
2866 - the locus of the macro expansion point
2868 - the locus of the point where the token got instantiated as part
2869 of the macro expansion process.
2871 You have to use the linemap API to get the locus you are interested
2872 in from a given virtual location.
2874 Note however that virtual locations are not necessarily ordered for
2875 relations '<' and '>'. One must use the function
2876 linemap_location_before_p instead of using the relational operator
2879 If macro expansion tracking is off and if the token results from
2880 macro expansion the virtual location is the expansion point of the
2881 macro that got expanded.
2883 When the token doesn't result from macro expansion, the virtual
2884 location is just the same thing as its spelling location. */
2887 cpp_get_token_with_location (cpp_reader
*pfile
, location_t
*loc
)
2889 return cpp_get_token_1 (pfile
, loc
);
2892 /* Returns true if we're expanding an object-like macro that was
2893 defined in a system header. Just checks the macro at the top of
2894 the stack. Used for diagnostic suppression. */
2896 cpp_sys_macro_p (cpp_reader
*pfile
)
2898 cpp_hashnode
*node
= NULL
;
2900 if (pfile
->context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2901 node
= pfile
->context
->c
.mc
->macro_node
;
2903 node
= pfile
->context
->c
.macro
;
2905 return node
&& node
->value
.macro
&& node
->value
.macro
->syshdr
;
2908 /* Read each token in, until end of the current file. Directives are
2909 transparently processed. */
2911 cpp_scan_nooutput (cpp_reader
*pfile
)
2913 /* Request a CPP_EOF token at the end of this file, rather than
2914 transparently continuing with the including file. */
2915 pfile
->buffer
->return_at_eof
= true;
2917 pfile
->state
.discarding_output
++;
2918 pfile
->state
.prevent_expansion
++;
2920 if (CPP_OPTION (pfile
, traditional
))
2921 while (_cpp_read_logical_line_trad (pfile
))
2924 while (cpp_get_token (pfile
)->type
!= CPP_EOF
)
2927 pfile
->state
.discarding_output
--;
2928 pfile
->state
.prevent_expansion
--;
2931 /* Step back one or more tokens obtained from the lexer. */
2933 _cpp_backup_tokens_direct (cpp_reader
*pfile
, unsigned int count
)
2935 pfile
->lookaheads
+= count
;
2939 if (pfile
->cur_token
== pfile
->cur_run
->base
2940 /* Possible with -fpreprocessed and no leading #line. */
2941 && pfile
->cur_run
->prev
!= NULL
)
2943 pfile
->cur_run
= pfile
->cur_run
->prev
;
2944 pfile
->cur_token
= pfile
->cur_run
->limit
;
2949 /* Step back one (or more) tokens. Can only step back more than 1 if
2950 they are from the lexer, and not from macro expansion. */
2952 _cpp_backup_tokens (cpp_reader
*pfile
, unsigned int count
)
2954 if (pfile
->context
->prev
== NULL
)
2955 _cpp_backup_tokens_direct (pfile
, count
);
2960 if (pfile
->context
->tokens_kind
== TOKENS_KIND_DIRECT
)
2961 FIRST (pfile
->context
).token
--;
2962 else if (pfile
->context
->tokens_kind
== TOKENS_KIND_INDIRECT
)
2963 FIRST (pfile
->context
).ptoken
--;
2964 else if (pfile
->context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2966 FIRST (pfile
->context
).ptoken
--;
2967 if (pfile
->context
->c
.macro
)
2969 macro_context
*m
= pfile
->context
->c
.mc
;
2971 gcc_checking_assert (m
->cur_virt_loc
>= m
->virt_locs
);
2981 /* #define directive parsing and handling. */
2983 /* Returns true if a macro redefinition warning is required. */
2985 warn_of_redefinition (cpp_reader
*pfile
, cpp_hashnode
*node
,
2986 const cpp_macro
*macro2
)
2988 /* Some redefinitions need to be warned about regardless. */
2989 if (node
->flags
& NODE_WARN
)
2992 /* Suppress warnings for builtins that lack the NODE_WARN flag,
2993 unless Wbuiltin-macro-redefined. */
2994 if (cpp_builtin_macro_p (node
))
2995 return CPP_OPTION (pfile
, warn_builtin_macro_redefined
);
2997 /* Redefinitions of conditional (context-sensitive) macros, on
2998 the other hand, must be allowed silently. */
2999 if (node
->flags
& NODE_CONDITIONAL
)
3002 cpp_macro
*macro1
= node
->value
.macro
;
3005 /* We don't want to mark MACRO as used, but do need to finalize
3007 pfile
->cb
.user_lazy_macro (pfile
, macro1
, macro1
->lazy
- 1);
3011 /* Redefinition of a macro is allowed if and only if the old and new
3012 definitions are the same. (6.10.3 paragraph 2). */
3014 /* Don't check count here as it can be different in valid
3015 traditional redefinitions with just whitespace differences. */
3016 if (macro1
->paramc
!= macro2
->paramc
3017 || macro1
->fun_like
!= macro2
->fun_like
3018 || macro1
->variadic
!= macro2
->variadic
)
3021 /* Check parameter spellings. */
3022 for (unsigned i
= macro1
->paramc
; i
--; )
3023 if (macro1
->parm
.params
[i
] != macro2
->parm
.params
[i
])
3026 /* Check the replacement text or tokens. */
3027 if (macro1
->kind
== cmk_traditional
)
3028 return _cpp_expansions_different_trad (macro1
, macro2
);
3030 if (macro1
->count
!= macro2
->count
)
3033 for (unsigned i
= macro1
->count
; i
--; )
3034 if (!_cpp_equiv_tokens (¯o1
->exp
.tokens
[i
], ¯o2
->exp
.tokens
[i
]))
3040 /* Free the definition of hashnode H. */
3042 _cpp_free_definition (cpp_hashnode
*h
)
3044 /* Macros and assertions no longer have anything to free. */
3046 h
->value
.answers
= NULL
;
3047 h
->flags
&= ~(NODE_DISABLED
| NODE_USED
);
3050 /* Save parameter NODE (spelling SPELLING) to the parameter list of
3051 macro MACRO. Returns true on success, false on failure. */
3053 _cpp_save_parameter (cpp_reader
*pfile
, unsigned n
, cpp_hashnode
*node
,
3054 cpp_hashnode
*spelling
)
3056 /* Constraint 6.10.3.6 - duplicate parameter names. */
3057 if (node
->type
== NT_MACRO_ARG
)
3059 cpp_error (pfile
, CPP_DL_ERROR
, "duplicate macro parameter \"%s\"",
3064 unsigned len
= (n
+ 1) * sizeof (struct macro_arg_saved_data
);
3065 if (len
> pfile
->macro_buffer_len
)
3068 = XRESIZEVEC (unsigned char, pfile
->macro_buffer
, len
);
3069 pfile
->macro_buffer_len
= len
;
3072 macro_arg_saved_data
*saved
= (macro_arg_saved_data
*)pfile
->macro_buffer
;
3073 saved
[n
].canonical_node
= node
;
3074 saved
[n
].value
= node
->value
;
3075 saved
[n
].type
= node
->type
;
3077 void *base
= _cpp_reserve_room (pfile
, n
* sizeof (cpp_hashnode
*),
3078 sizeof (cpp_hashnode
*));
3079 ((cpp_hashnode
**)base
)[n
] = spelling
;
3081 /* Morph into a macro arg. */
3082 node
->type
= NT_MACRO_ARG
;
3083 /* Index is 1 based. */
3084 node
->value
.arg_index
= n
+ 1;
3089 /* Restore the parameters to their previous state. */
3091 _cpp_unsave_parameters (cpp_reader
*pfile
, unsigned n
)
3093 /* Clear the fast argument lookup indices. */
3096 struct macro_arg_saved_data
*save
=
3097 &((struct macro_arg_saved_data
*) pfile
->macro_buffer
)[n
];
3099 struct cpp_hashnode
*node
= save
->canonical_node
;
3100 node
->type
= save
->type
;
3101 node
->value
= save
->value
;
3105 /* Check the syntax of the parameters in a MACRO definition. Return
3106 false on failure. Set *N_PTR and *VARADIC_PTR as appropriate.
3108 '(' parm-list ',' last-parm ')'
3118 parse_params (cpp_reader
*pfile
, unsigned *n_ptr
, bool *varadic_ptr
)
3120 unsigned nparms
= 0;
3123 for (bool prev_ident
= false;;)
3125 const cpp_token
*token
= _cpp_lex_token (pfile
);
3127 switch (token
->type
)
3130 /* Allow/ignore comments in parameter lists if we are
3131 preserving comments in macro expansions. */
3132 if (!CPP_OPTION (pfile
, discard_comments_in_macro_exp
))
3139 const char *const msgs
[5] =
3141 N_("expected parameter name, found \"%s\""),
3142 N_("expected ',' or ')', found \"%s\""),
3143 N_("expected parameter name before end of line"),
3144 N_("expected ')' before end of line"),
3145 N_("expected ')' after \"...\"")
3147 unsigned ix
= prev_ident
;
3148 const unsigned char *as_text
= NULL
;
3151 else if (token
->type
== CPP_EOF
)
3154 as_text
= cpp_token_as_text (pfile
, token
);
3155 cpp_error (pfile
, CPP_DL_ERROR
, msgs
[ix
], as_text
);
3160 if (prev_ident
|| *varadic_ptr
)
3164 if (!_cpp_save_parameter (pfile
, nparms
, token
->val
.node
.node
,
3165 token
->val
.node
.spelling
))
3170 case CPP_CLOSE_PAREN
:
3171 if (prev_ident
|| !nparms
|| *varadic_ptr
)
3179 if (!prev_ident
|| *varadic_ptr
)
3187 *varadic_ptr
= true;
3190 /* An ISO bare ellipsis. */
3191 _cpp_save_parameter (pfile
, nparms
,
3192 pfile
->spec_nodes
.n__VA_ARGS__
,
3193 pfile
->spec_nodes
.n__VA_ARGS__
);
3195 pfile
->state
.va_args_ok
= 1;
3196 if (! CPP_OPTION (pfile
, c99
)
3197 && CPP_OPTION (pfile
, cpp_pedantic
)
3198 && CPP_OPTION (pfile
, warn_variadic_macros
))
3200 (pfile
, CPP_W_VARIADIC_MACROS
,
3201 CPP_OPTION (pfile
, cplusplus
)
3202 ? N_("anonymous variadic macros were introduced in C++11")
3203 : N_("anonymous variadic macros were introduced in C99"));
3204 else if (CPP_OPTION (pfile
, cpp_warn_c90_c99_compat
) > 0
3205 && ! CPP_OPTION (pfile
, cplusplus
))
3206 cpp_error (pfile
, CPP_DL_WARNING
,
3207 "anonymous variadic macros were introduced in C99");
3209 else if (CPP_OPTION (pfile
, cpp_pedantic
)
3210 && CPP_OPTION (pfile
, warn_variadic_macros
))
3211 cpp_pedwarning (pfile
, CPP_W_VARIADIC_MACROS
,
3212 CPP_OPTION (pfile
, cplusplus
)
3213 ? N_("ISO C++ does not permit named variadic macros")
3214 : N_("ISO C does not permit named variadic macros"));
3225 /* Lex a token from the expansion of MACRO, but mark parameters as we
3226 find them and warn of traditional stringification. */
3228 lex_expansion_token (cpp_reader
*pfile
, cpp_macro
*macro
)
3230 macro
= (cpp_macro
*)_cpp_reserve_room (pfile
,
3231 sizeof (cpp_macro
) - sizeof (cpp_token
)
3232 + macro
->count
* sizeof (cpp_token
),
3233 sizeof (cpp_token
));
3234 cpp_token
*saved_cur_token
= pfile
->cur_token
;
3235 pfile
->cur_token
= ¯o
->exp
.tokens
[macro
->count
];
3236 cpp_token
*token
= _cpp_lex_direct (pfile
);
3237 pfile
->cur_token
= saved_cur_token
;
3239 /* Is this a parameter? */
3240 if (token
->type
== CPP_NAME
&& token
->val
.node
.node
->type
== NT_MACRO_ARG
)
3242 /* Morph into a parameter reference. */
3243 cpp_hashnode
*spelling
= token
->val
.node
.spelling
;
3244 token
->type
= CPP_MACRO_ARG
;
3245 token
->val
.macro_arg
.arg_no
= token
->val
.node
.node
->value
.arg_index
;
3246 token
->val
.macro_arg
.spelling
= spelling
;
3248 else if (CPP_WTRADITIONAL (pfile
) && macro
->paramc
> 0
3249 && (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
))
3250 check_trad_stringification (pfile
, macro
, &token
->val
.str
);
3256 create_iso_definition (cpp_reader
*pfile
)
3258 bool following_paste_op
= false;
3259 const char *paste_op_error_msg
=
3260 N_("'##' cannot appear at either end of a macro expansion");
3261 unsigned int num_extra_tokens
= 0;
3262 unsigned nparms
= 0;
3263 cpp_hashnode
**params
= NULL
;
3264 bool varadic
= false;
3266 cpp_macro
*macro
= NULL
;
3268 /* Look at the first token, to see if this is a function-like
3271 cpp_token
*saved_cur_token
= pfile
->cur_token
;
3272 pfile
->cur_token
= &first
;
3273 cpp_token
*token
= _cpp_lex_direct (pfile
);
3274 pfile
->cur_token
= saved_cur_token
;
3276 if (token
->flags
& PREV_WHITE
)
3277 /* Preceeded by space, must be part of expansion. */;
3278 else if (token
->type
== CPP_OPEN_PAREN
)
3280 /* An open-paren, get a parameter list. */
3281 if (!parse_params (pfile
, &nparms
, &varadic
))
3284 params
= (cpp_hashnode
**)_cpp_commit_buff
3285 (pfile
, sizeof (cpp_hashnode
*) * nparms
);
3288 else if (token
->type
!= CPP_EOF
3289 && !(token
->type
== CPP_COMMENT
3290 && ! CPP_OPTION (pfile
, discard_comments_in_macro_exp
)))
3292 /* While ISO C99 requires whitespace before replacement text
3293 in a macro definition, ISO C90 with TC1 allows characters
3294 from the basic source character set there. */
3295 if (CPP_OPTION (pfile
, c99
))
3296 cpp_error (pfile
, CPP_DL_PEDWARN
,
3297 CPP_OPTION (pfile
, cplusplus
)
3298 ? N_("ISO C++11 requires whitespace after the macro name")
3299 : N_("ISO C99 requires whitespace after the macro name"));
3302 enum cpp_diagnostic_level warntype
= CPP_DL_WARNING
;
3303 switch (token
->type
)
3307 case CPP_OBJC_STRING
:
3308 /* '@' is not in basic character set. */
3309 warntype
= CPP_DL_PEDWARN
;
3312 /* Basic character set sans letters, digits and _. */
3313 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
3314 token
->val
.str
.text
[0]) == NULL
)
3315 warntype
= CPP_DL_PEDWARN
;
3318 /* All other tokens start with a character from basic
3322 cpp_error (pfile
, warntype
,
3323 "missing whitespace after the macro name");
3327 macro
= _cpp_new_macro (pfile
, cmk_macro
,
3328 _cpp_reserve_room (pfile
, 0, sizeof (cpp_macro
)));
3332 macro
->variadic
= varadic
;
3333 macro
->paramc
= nparms
;
3334 macro
->parm
.params
= params
;
3335 macro
->fun_like
= true;
3339 /* Preserve the token we peeked, there is already a single slot for it. */
3340 macro
->exp
.tokens
[0] = *token
;
3341 token
= ¯o
->exp
.tokens
[0];
3345 for (vaopt_state
vaopt_tracker (pfile
, macro
->variadic
, true);; token
= NULL
)
3349 macro
= lex_expansion_token (pfile
, macro
);
3350 token
= ¯o
->exp
.tokens
[macro
->count
++];
3353 /* Check the stringifying # constraint 6.10.3.2.1 of
3354 function-like macros when lexing the subsequent token. */
3355 if (macro
->count
> 1 && token
[-1].type
== CPP_HASH
&& macro
->fun_like
)
3357 if (token
->type
== CPP_MACRO_ARG
)
3359 if (token
->flags
& PREV_WHITE
)
3360 token
->flags
|= SP_PREV_WHITE
;
3361 if (token
[-1].flags
& DIGRAPH
)
3362 token
->flags
|= SP_DIGRAPH
;
3363 token
->flags
&= ~PREV_WHITE
;
3364 token
->flags
|= STRINGIFY_ARG
;
3365 token
->flags
|= token
[-1].flags
& PREV_WHITE
;
3366 token
[-1] = token
[0];
3369 /* Let assembler get away with murder. */
3370 else if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
3372 cpp_error (pfile
, CPP_DL_ERROR
,
3373 "'#' is not followed by a macro parameter");
3378 if (token
->type
== CPP_EOF
)
3380 /* Paste operator constraint 6.10.3.3.1:
3381 Token-paste ##, can appear in both object-like and
3382 function-like macros, but not at the end. */
3383 if (following_paste_op
)
3385 cpp_error (pfile
, CPP_DL_ERROR
, paste_op_error_msg
);
3388 if (!vaopt_tracker
.completed ())
3393 /* Paste operator constraint 6.10.3.3.1. */
3394 if (token
->type
== CPP_PASTE
)
3396 /* Token-paste ##, can appear in both object-like and
3397 function-like macros, but not at the beginning. */
3398 if (macro
->count
== 1)
3400 cpp_error (pfile
, CPP_DL_ERROR
, paste_op_error_msg
);
3404 if (following_paste_op
)
3406 /* Consecutive paste operators. This one will be moved
3409 token
->val
.token_no
= macro
->count
- 1;
3413 /* Drop the paste operator. */
3415 token
[-1].flags
|= PASTE_LEFT
;
3416 if (token
->flags
& DIGRAPH
)
3417 token
[-1].flags
|= SP_DIGRAPH
;
3418 if (token
->flags
& PREV_WHITE
)
3419 token
[-1].flags
|= SP_PREV_WHITE
;
3421 following_paste_op
= true;
3424 following_paste_op
= false;
3426 if (vaopt_tracker
.update (token
) == vaopt_state::ERROR
)
3430 /* We're committed to winning now. */
3433 /* Don't count the CPP_EOF. */
3436 macro
= (cpp_macro
*)_cpp_commit_buff
3437 (pfile
, sizeof (cpp_macro
) - sizeof (cpp_token
)
3438 + sizeof (cpp_token
) * macro
->count
);
3440 /* Clear whitespace on first token. */
3442 macro
->exp
.tokens
[0].flags
&= ~PREV_WHITE
;
3444 if (num_extra_tokens
)
3446 /* Place second and subsequent ## or %:%: tokens in sequences of
3447 consecutive such tokens at the end of the list to preserve
3448 information about where they appear, how they are spelt and
3449 whether they are preceded by whitespace without otherwise
3450 interfering with macro expansion. Remember, this is
3451 extremely rare, so efficiency is not a priority. */
3452 cpp_token
*temp
= (cpp_token
*)_cpp_reserve_room
3453 (pfile
, 0, num_extra_tokens
* sizeof (cpp_token
));
3454 unsigned extra_ix
= 0, norm_ix
= 0;
3455 cpp_token
*exp
= macro
->exp
.tokens
;
3456 for (unsigned ix
= 0; ix
!= macro
->count
; ix
++)
3457 if (exp
[ix
].type
== CPP_PASTE
)
3458 temp
[extra_ix
++] = exp
[ix
];
3460 exp
[norm_ix
++] = exp
[ix
];
3461 memcpy (&exp
[norm_ix
], temp
, num_extra_tokens
* sizeof (cpp_token
));
3463 /* Record there are extra tokens. */
3464 macro
->extra_tokens
= 1;
3468 pfile
->state
.va_args_ok
= 0;
3469 _cpp_unsave_parameters (pfile
, nparms
);
3471 return ok
? macro
: NULL
;
3475 _cpp_new_macro (cpp_reader
*pfile
, cpp_macro_kind kind
, void *placement
)
3477 cpp_macro
*macro
= (cpp_macro
*) placement
;
3479 macro
->line
= pfile
->directive_line
;
3480 macro
->parm
.params
= 0;
3483 macro
->variadic
= 0;
3484 macro
->used
= !CPP_OPTION (pfile
, warn_unused_macros
);
3486 macro
->fun_like
= 0;
3487 macro
->extra_tokens
= 0;
3488 /* To suppress some diagnostics. */
3489 macro
->syshdr
= pfile
->buffer
&& pfile
->buffer
->sysp
!= 0;
3496 /* Parse a macro and save its expansion. Returns nonzero on success. */
3498 _cpp_create_definition (cpp_reader
*pfile
, cpp_hashnode
*node
)
3502 if (CPP_OPTION (pfile
, traditional
))
3503 macro
= _cpp_create_trad_definition (pfile
);
3505 macro
= create_iso_definition (pfile
);
3510 if (cpp_macro_p (node
))
3512 if (CPP_OPTION (pfile
, warn_unused_macros
))
3513 _cpp_warn_if_unused_macro (pfile
, node
, NULL
);
3515 if (warn_of_redefinition (pfile
, node
, macro
))
3517 const enum cpp_warning_reason reason
3518 = (cpp_builtin_macro_p (node
) && !(node
->flags
& NODE_WARN
))
3519 ? CPP_W_BUILTIN_MACRO_REDEFINED
: CPP_W_NONE
;
3522 cpp_pedwarning_with_line (pfile
, reason
,
3523 pfile
->directive_line
, 0,
3524 "\"%s\" redefined", NODE_NAME (node
));
3526 if (warned
&& cpp_user_macro_p (node
))
3527 cpp_error_with_line (pfile
, CPP_DL_NOTE
,
3528 node
->value
.macro
->line
, 0,
3529 "this is the location of the previous definition");
3531 _cpp_free_definition (node
);
3534 /* Enter definition in hash table. */
3535 node
->type
= NT_USER_MACRO
;
3536 node
->value
.macro
= macro
;
3537 if (! ustrncmp (NODE_NAME (node
), DSC ("__STDC_"))
3538 && ustrcmp (NODE_NAME (node
), (const uchar
*) "__STDC_FORMAT_MACROS")
3539 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
3540 in the C standard, as something that one must use in C++.
3541 However DR#593 and C++11 indicate that they play no role in C++.
3542 We special-case them anyway. */
3543 && ustrcmp (NODE_NAME (node
), (const uchar
*) "__STDC_LIMIT_MACROS")
3544 && ustrcmp (NODE_NAME (node
), (const uchar
*) "__STDC_CONSTANT_MACROS"))
3545 node
->flags
|= NODE_WARN
;
3547 /* If user defines one of the conditional macros, remove the
3549 node
->flags
&= ~NODE_CONDITIONAL
;
3555 cpp_define_lazily (cpp_reader
*pfile
, cpp_hashnode
*node
, unsigned num
)
3557 cpp_macro
*macro
= node
->value
.macro
;
3559 gcc_checking_assert (pfile
->cb
.user_lazy_macro
&& macro
&& num
< UCHAR_MAX
);
3561 macro
->lazy
= num
+ 1;
3564 /* Notify the use of NODE in a macro-aware context (i.e. expanding it,
3565 or testing its existance). Also applies any lazy definition. */
3568 _cpp_notify_macro_use (cpp_reader
*pfile
, cpp_hashnode
*node
)
3570 node
->flags
|= NODE_USED
;
3575 cpp_macro
*macro
= node
->value
.macro
;
3578 pfile
->cb
.user_lazy_macro (pfile
, macro
, macro
->lazy
- 1);
3584 case NT_BUILTIN_MACRO
:
3585 if (pfile
->cb
.used_define
)
3586 pfile
->cb
.used_define (pfile
, pfile
->directive_line
, node
);
3590 if (pfile
->cb
.used_undef
)
3591 pfile
->cb
.used_undef (pfile
, pfile
->directive_line
, node
);
3599 /* Warn if a token in STRING matches one of a function-like MACRO's
3602 check_trad_stringification (cpp_reader
*pfile
, const cpp_macro
*macro
,
3603 const cpp_string
*string
)
3605 unsigned int i
, len
;
3606 const uchar
*p
, *q
, *limit
;
3608 /* Loop over the string. */
3609 limit
= string
->text
+ string
->len
- 1;
3610 for (p
= string
->text
+ 1; p
< limit
; p
= q
)
3612 /* Find the start of an identifier. */
3613 while (p
< limit
&& !is_idstart (*p
))
3616 /* Find the end of the identifier. */
3618 while (q
< limit
&& is_idchar (*q
))
3623 /* Loop over the function macro arguments to see if the
3624 identifier inside the string matches one of them. */
3625 for (i
= 0; i
< macro
->paramc
; i
++)
3627 const cpp_hashnode
*node
= macro
->parm
.params
[i
];
3629 if (NODE_LEN (node
) == len
3630 && !memcmp (p
, NODE_NAME (node
), len
))
3632 cpp_warning (pfile
, CPP_W_TRADITIONAL
,
3633 "macro argument \"%s\" would be stringified in traditional C",
3641 /* Returns the name, arguments and expansion of a macro, in a format
3642 suitable to be read back in again, and therefore also for DWARF 2
3643 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
3644 Caller is expected to generate the "#define" bit if needed. The
3645 returned text is temporary, and automatically freed later. */
3646 const unsigned char *
3647 cpp_macro_definition (cpp_reader
*pfile
, cpp_hashnode
*node
)
3649 unsigned int i
, len
;
3650 unsigned char *buffer
;
3652 gcc_checking_assert (cpp_user_macro_p (node
));
3654 const cpp_macro
*macro
= node
->value
.macro
;
3656 /* Calculate length. */
3657 len
= NODE_LEN (node
) * 10 + 2; /* ' ' and NUL. */
3658 if (macro
->fun_like
)
3660 len
+= 4; /* "()" plus possible final ".." of named
3661 varargs (we have + 1 below). */
3662 for (i
= 0; i
< macro
->paramc
; i
++)
3663 len
+= NODE_LEN (macro
->parm
.params
[i
]) + 1; /* "," */
3666 /* This should match below where we fill in the buffer. */
3667 if (CPP_OPTION (pfile
, traditional
))
3668 len
+= _cpp_replacement_text_len (macro
);
3671 unsigned int count
= macro_real_token_count (macro
);
3672 for (i
= 0; i
< count
; i
++)
3674 const cpp_token
*token
= ¯o
->exp
.tokens
[i
];
3676 if (token
->type
== CPP_MACRO_ARG
)
3677 len
+= NODE_LEN (token
->val
.macro_arg
.spelling
);
3679 len
+= cpp_token_len (token
);
3681 if (token
->flags
& STRINGIFY_ARG
)
3683 if (token
->flags
& PASTE_LEFT
)
3684 len
+= 3; /* " ##" */
3685 if (token
->flags
& PREV_WHITE
)
3690 if (len
> pfile
->macro_buffer_len
)
3692 pfile
->macro_buffer
= XRESIZEVEC (unsigned char,
3693 pfile
->macro_buffer
, len
);
3694 pfile
->macro_buffer_len
= len
;
3697 /* Fill in the buffer. Start with the macro name. */
3698 buffer
= pfile
->macro_buffer
;
3699 buffer
= _cpp_spell_ident_ucns (buffer
, node
);
3701 /* Parameter names. */
3702 if (macro
->fun_like
)
3705 for (i
= 0; i
< macro
->paramc
; i
++)
3707 cpp_hashnode
*param
= macro
->parm
.params
[i
];
3709 if (param
!= pfile
->spec_nodes
.n__VA_ARGS__
)
3711 memcpy (buffer
, NODE_NAME (param
), NODE_LEN (param
));
3712 buffer
+= NODE_LEN (param
);
3715 if (i
+ 1 < macro
->paramc
)
3716 /* Don't emit a space after the comma here; we're trying
3717 to emit a Dwarf-friendly definition, and the Dwarf spec
3718 forbids spaces in the argument list. */
3720 else if (macro
->variadic
)
3721 *buffer
++ = '.', *buffer
++ = '.', *buffer
++ = '.';
3726 /* The Dwarf spec requires a space after the macro name, even if the
3727 definition is the empty string. */
3730 if (CPP_OPTION (pfile
, traditional
))
3731 buffer
= _cpp_copy_replacement_text (macro
, buffer
);
3732 else if (macro
->count
)
3733 /* Expansion tokens. */
3735 unsigned int count
= macro_real_token_count (macro
);
3736 for (i
= 0; i
< count
; i
++)
3738 const cpp_token
*token
= ¯o
->exp
.tokens
[i
];
3740 if (token
->flags
& PREV_WHITE
)
3742 if (token
->flags
& STRINGIFY_ARG
)
3745 if (token
->type
== CPP_MACRO_ARG
)
3748 NODE_NAME (token
->val
.macro_arg
.spelling
),
3749 NODE_LEN (token
->val
.macro_arg
.spelling
));
3750 buffer
+= NODE_LEN (token
->val
.macro_arg
.spelling
);
3753 buffer
= cpp_spell_token (pfile
, token
, buffer
, true);
3755 if (token
->flags
& PASTE_LEFT
)
3760 /* Next has PREV_WHITE; see _cpp_create_definition. */
3766 return pfile
->macro_buffer
;