2013-11-15 Paolo Carlini <paolo.carlini@oracle.com>
[official-gcc.git] / libcpp / macro.c
blobe359d158c0359b737aca16d51763fc4b19ec3b7f
1 /* Part of CPP library. (Macro and #define handling.)
2 Copyright (C) 1986-2013 Free Software Foundation, Inc.
3 Written by Per Bothner, 1994.
4 Based on CCCP program by Paul Rubin, June 1986
5 Adapted to ANSI C, Richard Stallman, Jan 1987
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3, or (at your option) any
10 later version.
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! */
25 #include "config.h"
26 #include "system.h"
27 #include "cpplib.h"
28 #include "internal.h"
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. */
35 struct macro_arg
37 const cpp_token **first; /* First token in unexpanded argument. */
38 const cpp_token **expanded; /* Macro-expanded argument. */
39 const cpp_token *stringified; /* Stringified argument. */
40 unsigned int count; /* # of tokens in argument. */
41 unsigned int expanded_count; /* # of tokens in expanded argument. */
42 source_location *virt_locs; /* Where virtual locations for
43 unexpanded tokens are stored. */
44 source_location *expanded_virt_locs; /* Where virtual locations for
45 expanded tokens are
46 stored. */
49 /* The kind of macro tokens which the instance of
50 macro_arg_token_iter is supposed to iterate over. */
51 enum macro_arg_token_kind {
52 MACRO_ARG_TOKEN_NORMAL,
53 /* This is a macro argument token that got transformed into a string
54 litteral, e.g. #foo. */
55 MACRO_ARG_TOKEN_STRINGIFIED,
56 /* This is a token resulting from the expansion of a macro
57 argument that was itself a macro. */
58 MACRO_ARG_TOKEN_EXPANDED
61 /* An iterator over tokens coming from a function-like macro
62 argument. */
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
74 macro expansion. */
75 const source_location *location_ptr;
76 #ifdef ENABLE_CHECKING
77 /* The number of times the iterator went forward. This useful only
78 when checking is enabled. */
79 size_t num_forwards;
80 #endif
83 /* Macro expansion. */
85 static int enter_macro_context (cpp_reader *, cpp_hashnode *,
86 const cpp_token *, source_location);
87 static int builtin_macro (cpp_reader *, cpp_hashnode *);
88 static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
89 const cpp_token **, unsigned int);
90 static void push_extended_tokens_context (cpp_reader *, cpp_hashnode *,
91 _cpp_buff *, source_location *,
92 const cpp_token **, unsigned int);
93 static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *,
94 _cpp_buff **, unsigned *);
95 static cpp_context *next_context (cpp_reader *);
96 static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
97 static void expand_arg (cpp_reader *, macro_arg *);
98 static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
99 static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
100 static void paste_all_tokens (cpp_reader *, const cpp_token *);
101 static bool paste_tokens (cpp_reader *, source_location,
102 const cpp_token **, const cpp_token *);
103 static void alloc_expanded_arg_mem (cpp_reader *, macro_arg *, size_t);
104 static void ensure_expanded_arg_room (cpp_reader *, macro_arg *, size_t, size_t *);
105 static void delete_macro_args (_cpp_buff*, unsigned num_args);
106 static void set_arg_token (macro_arg *, const cpp_token *,
107 source_location, size_t,
108 enum macro_arg_token_kind,
109 bool);
110 static const source_location *get_arg_token_location (const macro_arg *,
111 enum macro_arg_token_kind);
112 static const cpp_token **arg_token_ptr_at (const macro_arg *,
113 size_t,
114 enum macro_arg_token_kind,
115 source_location **virt_location);
117 static void macro_arg_token_iter_init (macro_arg_token_iter *, bool,
118 enum macro_arg_token_kind,
119 const macro_arg *,
120 const cpp_token **);
121 static const cpp_token *macro_arg_token_iter_get_token
122 (const macro_arg_token_iter *it);
123 static source_location macro_arg_token_iter_get_location
124 (const macro_arg_token_iter *);
125 static void macro_arg_token_iter_forward (macro_arg_token_iter *);
126 static _cpp_buff *tokens_buff_new (cpp_reader *, size_t,
127 source_location **);
128 static size_t tokens_buff_count (_cpp_buff *);
129 static const cpp_token **tokens_buff_last_token_ptr (_cpp_buff *);
130 static inline const cpp_token **tokens_buff_put_token_to (const cpp_token **,
131 source_location *,
132 const cpp_token *,
133 source_location,
134 source_location,
135 const struct line_map *,
136 unsigned int);
138 static const cpp_token **tokens_buff_add_token (_cpp_buff *,
139 source_location *,
140 const cpp_token *,
141 source_location,
142 source_location,
143 const struct line_map *,
144 unsigned int);
145 static inline void tokens_buff_remove_last_token (_cpp_buff *);
146 static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
147 macro_arg *, source_location);
148 static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *,
149 _cpp_buff **, unsigned *);
150 static bool create_iso_definition (cpp_reader *, cpp_macro *);
152 /* #define directive parsing and handling. */
154 static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
155 static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
156 static bool warn_of_redefinition (cpp_reader *, cpp_hashnode *,
157 const cpp_macro *);
158 static bool parse_params (cpp_reader *, cpp_macro *);
159 static void check_trad_stringification (cpp_reader *, const cpp_macro *,
160 const cpp_string *);
161 static bool reached_end_of_context (cpp_context *);
162 static void consume_next_token_from_context (cpp_reader *pfile,
163 const cpp_token **,
164 source_location *);
165 static const cpp_token* cpp_get_token_1 (cpp_reader *, source_location *);
167 static cpp_hashnode* macro_of_context (cpp_context *context);
169 static bool in_macro_expansion_p (cpp_reader *pfile);
171 /* Statistical counter tracking the number of macros that got
172 expanded. */
173 unsigned num_expanded_macros_counter = 0;
174 /* Statistical counter tracking the total number tokens resulting
175 from macro expansion. */
176 unsigned num_macro_tokens_counter = 0;
178 /* Emits a warning if NODE is a macro defined in the main file that
179 has not been used. */
181 _cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
182 void *v ATTRIBUTE_UNUSED)
184 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
186 cpp_macro *macro = node->value.macro;
188 if (!macro->used
189 && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
190 cpp_warning_with_line (pfile, CPP_W_UNUSED_MACROS, macro->line, 0,
191 "macro \"%s\" is not used", NODE_NAME (node));
194 return 1;
197 /* Allocates and returns a CPP_STRING token, containing TEXT of length
198 LEN, after null-terminating it. TEXT must be in permanent storage. */
199 static const cpp_token *
200 new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
202 cpp_token *token = _cpp_temp_token (pfile);
204 text[len] = '\0';
205 token->type = CPP_STRING;
206 token->val.str.len = len;
207 token->val.str.text = text;
208 token->flags = 0;
209 return token;
212 static const char * const monthnames[] =
214 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
215 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
218 /* Helper function for builtin_macro. Returns the text generated by
219 a builtin macro. */
220 const uchar *
221 _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
223 const uchar *result = NULL;
224 linenum_type number = 1;
226 switch (node->value.builtin)
228 default:
229 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
230 NODE_NAME (node));
231 break;
233 case BT_TIMESTAMP:
235 if (CPP_OPTION (pfile, warn_date_time))
236 cpp_warning (pfile, CPP_W_DATE_TIME, "macro \"%s\" might prevent "
237 "reproducible builds", NODE_NAME (node));
239 cpp_buffer *pbuffer = cpp_get_buffer (pfile);
240 if (pbuffer->timestamp == NULL)
242 /* Initialize timestamp value of the assotiated file. */
243 struct _cpp_file *file = cpp_get_file (pbuffer);
244 if (file)
246 /* Generate __TIMESTAMP__ string, that represents
247 the date and time of the last modification
248 of the current source file. The string constant
249 looks like "Sun Sep 16 01:03:52 1973". */
250 struct tm *tb = NULL;
251 struct stat *st = _cpp_get_file_stat (file);
252 if (st)
253 tb = localtime (&st->st_mtime);
254 if (tb)
256 char *str = asctime (tb);
257 size_t len = strlen (str);
258 unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
259 buf[0] = '"';
260 strcpy ((char *) buf + 1, str);
261 buf[len] = '"';
262 pbuffer->timestamp = buf;
264 else
266 cpp_errno (pfile, CPP_DL_WARNING,
267 "could not determine file timestamp");
268 pbuffer->timestamp = UC"\"??? ??? ?? ??:??:?? ????\"";
272 result = pbuffer->timestamp;
274 break;
275 case BT_FILE:
276 case BT_BASE_FILE:
278 unsigned int len;
279 const char *name;
280 uchar *buf;
282 if (node->value.builtin == BT_FILE)
283 name = linemap_get_expansion_filename (pfile->line_table,
284 pfile->line_table->highest_line);
285 else
287 name = _cpp_get_file_name (pfile->main_file);
288 if (!name)
289 abort ();
291 len = strlen (name);
292 buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
293 result = buf;
294 *buf = '"';
295 buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
296 *buf++ = '"';
297 *buf = '\0';
299 break;
301 case BT_INCLUDE_LEVEL:
302 /* The line map depth counts the primary source as level 1, but
303 historically __INCLUDE_DEPTH__ has called the primary source
304 level 0. */
305 number = pfile->line_table->depth - 1;
306 break;
308 case BT_SPECLINE:
309 /* If __LINE__ is embedded in a macro, it must expand to the
310 line of the macro's invocation, not its definition.
311 Otherwise things like assert() will not work properly. */
312 number = linemap_get_expansion_line (pfile->line_table,
313 CPP_OPTION (pfile, traditional)
314 ? pfile->line_table->highest_line
315 : pfile->cur_token[-1].src_loc);
316 break;
318 /* __STDC__ has the value 1 under normal circumstances.
319 However, if (a) we are in a system header, (b) the option
320 stdc_0_in_system_headers is true (set by target config), and
321 (c) we are not in strictly conforming mode, then it has the
322 value 0. (b) and (c) are already checked in cpp_init_builtins. */
323 case BT_STDC:
324 if (cpp_in_system_header (pfile))
325 number = 0;
326 else
327 number = 1;
328 break;
330 case BT_DATE:
331 case BT_TIME:
332 if (CPP_OPTION (pfile, warn_date_time))
333 cpp_warning (pfile, CPP_W_DATE_TIME, "macro \"%s\" might prevent "
334 "reproducible builds", NODE_NAME (node));
335 if (pfile->date == NULL)
337 /* Allocate __DATE__ and __TIME__ strings from permanent
338 storage. We only do this once, and don't generate them
339 at init time, because time() and localtime() are very
340 slow on some systems. */
341 time_t tt;
342 struct tm *tb = NULL;
344 /* (time_t) -1 is a legitimate value for "number of seconds
345 since the Epoch", so we have to do a little dance to
346 distinguish that from a genuine error. */
347 errno = 0;
348 tt = time(NULL);
349 if (tt != (time_t)-1 || errno == 0)
350 tb = localtime (&tt);
352 if (tb)
354 pfile->date = _cpp_unaligned_alloc (pfile,
355 sizeof ("\"Oct 11 1347\""));
356 sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
357 monthnames[tb->tm_mon], tb->tm_mday,
358 tb->tm_year + 1900);
360 pfile->time = _cpp_unaligned_alloc (pfile,
361 sizeof ("\"12:34:56\""));
362 sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
363 tb->tm_hour, tb->tm_min, tb->tm_sec);
365 else
367 cpp_errno (pfile, CPP_DL_WARNING,
368 "could not determine date and time");
370 pfile->date = UC"\"??? ?? ????\"";
371 pfile->time = UC"\"??:??:??\"";
375 if (node->value.builtin == BT_DATE)
376 result = pfile->date;
377 else
378 result = pfile->time;
379 break;
381 case BT_COUNTER:
382 if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
383 cpp_error (pfile, CPP_DL_ERROR,
384 "__COUNTER__ expanded inside directive with -fdirectives-only");
385 number = pfile->counter++;
386 break;
389 if (result == NULL)
391 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
392 result = _cpp_unaligned_alloc (pfile, 21);
393 sprintf ((char *) result, "%u", number);
396 return result;
399 /* Convert builtin macros like __FILE__ to a token and push it on the
400 context stack. Also handles _Pragma, for which a new token may not
401 be created. Returns 1 if it generates a new token context, 0 to
402 return the token to the caller. */
403 static int
404 builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
406 const uchar *buf;
407 size_t len;
408 char *nbuf;
410 if (node->value.builtin == BT_PRAGMA)
412 /* Don't interpret _Pragma within directives. The standard is
413 not clear on this, but to me this makes most sense. */
414 if (pfile->state.in_directive)
415 return 0;
417 return _cpp_do__Pragma (pfile);
420 buf = _cpp_builtin_macro_text (pfile, node);
421 len = ustrlen (buf);
422 nbuf = (char *) alloca (len + 1);
423 memcpy (nbuf, buf, len);
424 nbuf[len]='\n';
426 cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
427 _cpp_clean_line (pfile);
429 /* Set pfile->cur_token as required by _cpp_lex_direct. */
430 pfile->cur_token = _cpp_temp_token (pfile);
431 _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
432 if (pfile->buffer->cur != pfile->buffer->rlimit)
433 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
434 NODE_NAME (node));
435 _cpp_pop_buffer (pfile);
437 return 1;
440 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
441 backslashes and double quotes. DEST must be of sufficient size.
442 Returns a pointer to the end of the string. */
443 uchar *
444 cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
446 while (len--)
448 uchar c = *src++;
450 if (c == '\\' || c == '"')
452 *dest++ = '\\';
453 *dest++ = c;
455 else
456 *dest++ = c;
459 return dest;
462 /* Convert a token sequence ARG to a single string token according to
463 the rules of the ISO C #-operator. */
464 static const cpp_token *
465 stringify_arg (cpp_reader *pfile, macro_arg *arg)
467 unsigned char *dest;
468 unsigned int i, escape_it, backslash_count = 0;
469 const cpp_token *source = NULL;
470 size_t len;
472 if (BUFF_ROOM (pfile->u_buff) < 3)
473 _cpp_extend_buff (pfile, &pfile->u_buff, 3);
474 dest = BUFF_FRONT (pfile->u_buff);
475 *dest++ = '"';
477 /* Loop, reading in the argument's tokens. */
478 for (i = 0; i < arg->count; i++)
480 const cpp_token *token = arg->first[i];
482 if (token->type == CPP_PADDING)
484 if (source == NULL
485 || (!(source->flags & PREV_WHITE)
486 && token->val.source == NULL))
487 source = token->val.source;
488 continue;
491 escape_it = (token->type == CPP_STRING || token->type == CPP_CHAR
492 || token->type == CPP_WSTRING || token->type == CPP_WCHAR
493 || token->type == CPP_STRING32 || token->type == CPP_CHAR32
494 || token->type == CPP_STRING16 || token->type == CPP_CHAR16
495 || token->type == CPP_UTF8STRING);
497 /* Room for each char being written in octal, initial space and
498 final quote and NUL. */
499 len = cpp_token_len (token);
500 if (escape_it)
501 len *= 4;
502 len += 3;
504 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
506 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
507 _cpp_extend_buff (pfile, &pfile->u_buff, len);
508 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
511 /* Leading white space? */
512 if (dest - 1 != BUFF_FRONT (pfile->u_buff))
514 if (source == NULL)
515 source = token;
516 if (source->flags & PREV_WHITE)
517 *dest++ = ' ';
519 source = NULL;
521 if (escape_it)
523 _cpp_buff *buff = _cpp_get_buff (pfile, len);
524 unsigned char *buf = BUFF_FRONT (buff);
525 len = cpp_spell_token (pfile, token, buf, true) - buf;
526 dest = cpp_quote_string (dest, buf, len);
527 _cpp_release_buff (pfile, buff);
529 else
530 dest = cpp_spell_token (pfile, token, dest, true);
532 if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
533 backslash_count++;
534 else
535 backslash_count = 0;
538 /* Ignore the final \ of invalid string literals. */
539 if (backslash_count & 1)
541 cpp_error (pfile, CPP_DL_WARNING,
542 "invalid string literal, ignoring final '\\'");
543 dest--;
546 /* Commit the memory, including NUL, and return the token. */
547 *dest++ = '"';
548 len = dest - BUFF_FRONT (pfile->u_buff);
549 BUFF_FRONT (pfile->u_buff) = dest + 1;
550 return new_string_token (pfile, dest - len, len);
553 /* Try to paste two tokens. On success, return nonzero. In any
554 case, PLHS is updated to point to the pasted token, which is
555 guaranteed to not have the PASTE_LEFT flag set. LOCATION is
556 the virtual location used for error reporting. */
557 static bool
558 paste_tokens (cpp_reader *pfile, source_location location,
559 const cpp_token **plhs, const cpp_token *rhs)
561 unsigned char *buf, *end, *lhsend;
562 cpp_token *lhs;
563 unsigned int len;
565 len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
566 buf = (unsigned char *) alloca (len);
567 end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
569 /* Avoid comment headers, since they are still processed in stage 3.
570 It is simpler to insert a space here, rather than modifying the
571 lexer to ignore comments in some circumstances. Simply returning
572 false doesn't work, since we want to clear the PASTE_LEFT flag. */
573 if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
574 *end++ = ' ';
575 /* In one obscure case we might see padding here. */
576 if (rhs->type != CPP_PADDING)
577 end = cpp_spell_token (pfile, rhs, end, false);
578 *end = '\n';
580 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
581 _cpp_clean_line (pfile);
583 /* Set pfile->cur_token as required by _cpp_lex_direct. */
584 pfile->cur_token = _cpp_temp_token (pfile);
585 lhs = _cpp_lex_direct (pfile);
586 if (pfile->buffer->cur != pfile->buffer->rlimit)
588 source_location saved_loc = lhs->src_loc;
590 _cpp_pop_buffer (pfile);
591 _cpp_backup_tokens (pfile, 1);
592 *lhsend = '\0';
594 /* We have to remove the PASTE_LEFT flag from the old lhs, but
595 we want to keep the new location. */
596 *lhs = **plhs;
597 *plhs = lhs;
598 lhs->src_loc = saved_loc;
599 lhs->flags &= ~PASTE_LEFT;
601 /* Mandatory error for all apart from assembler. */
602 if (CPP_OPTION (pfile, lang) != CLK_ASM)
603 cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
604 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
605 buf, cpp_token_as_text (pfile, rhs));
606 return false;
609 *plhs = lhs;
610 _cpp_pop_buffer (pfile);
611 return true;
614 /* Handles an arbitrarily long sequence of ## operators, with initial
615 operand LHS. This implementation is left-associative,
616 non-recursive, and finishes a paste before handling succeeding
617 ones. If a paste fails, we back up to the RHS of the failing ##
618 operator before pushing the context containing the result of prior
619 successful pastes, with the effect that the RHS appears in the
620 output stream after the pasted LHS normally. */
621 static void
622 paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
624 const cpp_token *rhs = NULL;
625 cpp_context *context = pfile->context;
626 source_location virt_loc = 0;
628 /* We are expanding a macro and we must have been called on a token
629 that appears at the left hand side of a ## operator. */
630 if (macro_of_context (pfile->context) == NULL
631 || (!(lhs->flags & PASTE_LEFT)))
632 abort ();
634 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
635 /* The caller must have called consume_next_token_from_context
636 right before calling us. That has incremented the pointer to
637 the current virtual location. So it now points to the location
638 of the token that comes right after *LHS. We want the
639 resulting pasted token to have the location of the current
640 *LHS, though. */
641 virt_loc = context->c.mc->cur_virt_loc[-1];
642 else
643 /* We are not tracking macro expansion. So the best virtual
644 location we can get here is the expansion point of the macro we
645 are currently expanding. */
646 virt_loc = pfile->invocation_location;
650 /* Take the token directly from the current context. We can do
651 this, because we are in the replacement list of either an
652 object-like macro, or a function-like macro with arguments
653 inserted. In either case, the constraints to #define
654 guarantee we have at least one more token. */
655 if (context->tokens_kind == TOKENS_KIND_DIRECT)
656 rhs = FIRST (context).token++;
657 else if (context->tokens_kind == TOKENS_KIND_INDIRECT)
658 rhs = *FIRST (context).ptoken++;
659 else if (context->tokens_kind == TOKENS_KIND_EXTENDED)
661 /* So we are in presence of an extended token context, which
662 means that each token in this context has a virtual
663 location attached to it. So let's not forget to update
664 the pointer to the current virtual location of the
665 current token when we update the pointer to the current
666 token */
668 rhs = *FIRST (context).ptoken++;
669 /* context->c.mc must be non-null, as if we were not in a
670 macro context, context->tokens_kind could not be equal to
671 TOKENS_KIND_EXTENDED. */
672 context->c.mc->cur_virt_loc++;
675 if (rhs->type == CPP_PADDING)
677 if (rhs->flags & PASTE_LEFT)
678 abort ();
680 if (!paste_tokens (pfile, virt_loc, &lhs, rhs))
681 break;
683 while (rhs->flags & PASTE_LEFT);
685 /* Put the resulting token in its own context. */
686 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
688 source_location *virt_locs = NULL;
689 _cpp_buff *token_buf = tokens_buff_new (pfile, 1, &virt_locs);
690 tokens_buff_add_token (token_buf, virt_locs, lhs,
691 virt_loc, 0, NULL, 0);
692 push_extended_tokens_context (pfile, context->c.mc->macro_node,
693 token_buf, virt_locs,
694 (const cpp_token **)token_buf->base, 1);
696 else
697 _cpp_push_token_context (pfile, NULL, lhs, 1);
700 /* Returns TRUE if the number of arguments ARGC supplied in an
701 invocation of the MACRO referenced by NODE is valid. An empty
702 invocation to a macro with no parameters should pass ARGC as zero.
704 Note that MACRO cannot necessarily be deduced from NODE, in case
705 NODE was redefined whilst collecting arguments. */
706 bool
707 _cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
709 if (argc == macro->paramc)
710 return true;
712 if (argc < macro->paramc)
714 /* As an extension, a rest argument is allowed to not appear in
715 the invocation at all.
716 e.g. #define debug(format, args...) something
717 debug("string");
719 This is exactly the same as if there had been an empty rest
720 argument - debug("string", ). */
722 if (argc + 1 == macro->paramc && macro->variadic)
724 if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
725 cpp_error (pfile, CPP_DL_PEDWARN,
726 "ISO C99 requires rest arguments to be used");
727 return true;
730 cpp_error (pfile, CPP_DL_ERROR,
731 "macro \"%s\" requires %u arguments, but only %u given",
732 NODE_NAME (node), macro->paramc, argc);
734 else
735 cpp_error (pfile, CPP_DL_ERROR,
736 "macro \"%s\" passed %u arguments, but takes just %u",
737 NODE_NAME (node), argc, macro->paramc);
739 return false;
742 /* Reads and returns the arguments to a function-like macro
743 invocation. Assumes the opening parenthesis has been processed.
744 If there is an error, emits an appropriate diagnostic and returns
745 NULL. Each argument is terminated by a CPP_EOF token, for the
746 future benefit of expand_arg(). If there are any deferred
747 #pragma directives among macro arguments, store pointers to the
748 CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.
750 What is returned is the buffer that contains the memory allocated
751 to hold the macro arguments. NODE is the name of the macro this
752 function is dealing with. If NUM_ARGS is non-NULL, *NUM_ARGS is
753 set to the actual number of macro arguments allocated in the
754 returned buffer. */
755 static _cpp_buff *
756 collect_args (cpp_reader *pfile, const cpp_hashnode *node,
757 _cpp_buff **pragma_buff, unsigned *num_args)
759 _cpp_buff *buff, *base_buff;
760 cpp_macro *macro;
761 macro_arg *args, *arg;
762 const cpp_token *token;
763 unsigned int argc;
764 source_location virt_loc;
765 bool track_macro_expansion_p = CPP_OPTION (pfile, track_macro_expansion);
766 unsigned num_args_alloced = 0;
768 macro = node->value.macro;
769 if (macro->paramc)
770 argc = macro->paramc;
771 else
772 argc = 1;
774 #define DEFAULT_NUM_TOKENS_PER_MACRO_ARG 50
775 #define ARG_TOKENS_EXTENT 1000
777 buff = _cpp_get_buff (pfile, argc * (DEFAULT_NUM_TOKENS_PER_MACRO_ARG
778 * sizeof (cpp_token *)
779 + sizeof (macro_arg)));
780 base_buff = buff;
781 args = (macro_arg *) buff->base;
782 memset (args, 0, argc * sizeof (macro_arg));
783 buff->cur = (unsigned char *) &args[argc];
784 arg = args, argc = 0;
786 /* Collect the tokens making up each argument. We don't yet know
787 how many arguments have been supplied, whether too many or too
788 few. Hence the slightly bizarre usage of "argc" and "arg". */
791 unsigned int paren_depth = 0;
792 unsigned int ntokens = 0;
793 unsigned virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
794 num_args_alloced++;
796 argc++;
797 arg->first = (const cpp_token **) buff->cur;
798 if (track_macro_expansion_p)
800 virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
801 arg->virt_locs = XNEWVEC (source_location,
802 virt_locs_capacity);
805 for (;;)
807 /* Require space for 2 new tokens (including a CPP_EOF). */
808 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
810 buff = _cpp_append_extend_buff (pfile, buff,
811 ARG_TOKENS_EXTENT
812 * sizeof (cpp_token *));
813 arg->first = (const cpp_token **) buff->cur;
815 if (track_macro_expansion_p
816 && (ntokens + 2 > virt_locs_capacity))
818 virt_locs_capacity += ARG_TOKENS_EXTENT;
819 arg->virt_locs = XRESIZEVEC (source_location,
820 arg->virt_locs,
821 virt_locs_capacity);
824 token = cpp_get_token_1 (pfile, &virt_loc);
826 if (token->type == CPP_PADDING)
828 /* Drop leading padding. */
829 if (ntokens == 0)
830 continue;
832 else if (token->type == CPP_OPEN_PAREN)
833 paren_depth++;
834 else if (token->type == CPP_CLOSE_PAREN)
836 if (paren_depth-- == 0)
837 break;
839 else if (token->type == CPP_COMMA)
841 /* A comma does not terminate an argument within
842 parentheses or as part of a variable argument. */
843 if (paren_depth == 0
844 && ! (macro->variadic && argc == macro->paramc))
845 break;
847 else if (token->type == CPP_EOF
848 || (token->type == CPP_HASH && token->flags & BOL))
849 break;
850 else if (token->type == CPP_PRAGMA)
852 cpp_token *newtok = _cpp_temp_token (pfile);
854 /* CPP_PRAGMA token lives in directive_result, which will
855 be overwritten on the next directive. */
856 *newtok = *token;
857 token = newtok;
860 if (*pragma_buff == NULL
861 || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
863 _cpp_buff *next;
864 if (*pragma_buff == NULL)
865 *pragma_buff
866 = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
867 else
869 next = *pragma_buff;
870 *pragma_buff
871 = _cpp_get_buff (pfile,
872 (BUFF_FRONT (*pragma_buff)
873 - (*pragma_buff)->base) * 2);
874 (*pragma_buff)->next = next;
877 *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
878 BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
879 if (token->type == CPP_PRAGMA_EOL)
880 break;
881 token = cpp_get_token_1 (pfile, &virt_loc);
883 while (token->type != CPP_EOF);
885 /* In deferred pragmas parsing_args and prevent_expansion
886 had been changed, reset it. */
887 pfile->state.parsing_args = 2;
888 pfile->state.prevent_expansion = 1;
890 if (token->type == CPP_EOF)
891 break;
892 else
893 continue;
895 set_arg_token (arg, token, virt_loc,
896 ntokens, MACRO_ARG_TOKEN_NORMAL,
897 CPP_OPTION (pfile, track_macro_expansion));
898 ntokens++;
901 /* Drop trailing padding. */
902 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
903 ntokens--;
905 arg->count = ntokens;
906 set_arg_token (arg, &pfile->eof, pfile->eof.src_loc,
907 ntokens, MACRO_ARG_TOKEN_NORMAL,
908 CPP_OPTION (pfile, track_macro_expansion));
910 /* Terminate the argument. Excess arguments loop back and
911 overwrite the final legitimate argument, before failing. */
912 if (argc <= macro->paramc)
914 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
915 if (argc != macro->paramc)
916 arg++;
919 while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
921 if (token->type == CPP_EOF)
923 /* We still need the CPP_EOF to end directives, and to end
924 pre-expansion of a macro argument. Step back is not
925 unconditional, since we don't want to return a CPP_EOF to our
926 callers at the end of an -include-d file. */
927 if (pfile->context->prev || pfile->state.in_directive)
928 _cpp_backup_tokens (pfile, 1);
929 cpp_error (pfile, CPP_DL_ERROR,
930 "unterminated argument list invoking macro \"%s\"",
931 NODE_NAME (node));
933 else
935 /* A single empty argument is counted as no argument. */
936 if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
937 argc = 0;
938 if (_cpp_arguments_ok (pfile, macro, node, argc))
940 /* GCC has special semantics for , ## b where b is a varargs
941 parameter: we remove the comma if b was omitted entirely.
942 If b was merely an empty argument, the comma is retained.
943 If the macro takes just one (varargs) parameter, then we
944 retain the comma only if we are standards conforming.
946 If FIRST is NULL replace_args () swallows the comma. */
947 if (macro->variadic && (argc < macro->paramc
948 || (argc == 1 && args[0].count == 0
949 && !CPP_OPTION (pfile, std))))
950 args[macro->paramc - 1].first = NULL;
951 if (num_args)
952 *num_args = num_args_alloced;
953 return base_buff;
957 /* An error occurred. */
958 _cpp_release_buff (pfile, base_buff);
959 return NULL;
962 /* Search for an opening parenthesis to the macro of NODE, in such a
963 way that, if none is found, we don't lose the information in any
964 intervening padding tokens. If we find the parenthesis, collect
965 the arguments and return the buffer containing them. PRAGMA_BUFF
966 argument is the same as in collect_args. If NUM_ARGS is non-NULL,
967 *NUM_ARGS is set to the number of arguments contained in the
968 returned buffer. */
969 static _cpp_buff *
970 funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
971 _cpp_buff **pragma_buff, unsigned *num_args)
973 const cpp_token *token, *padding = NULL;
975 for (;;)
977 token = cpp_get_token (pfile);
978 if (token->type != CPP_PADDING)
979 break;
980 if (padding == NULL
981 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
982 padding = token;
985 if (token->type == CPP_OPEN_PAREN)
987 pfile->state.parsing_args = 2;
988 return collect_args (pfile, node, pragma_buff, num_args);
991 /* CPP_EOF can be the end of macro arguments, or the end of the
992 file. We mustn't back up over the latter. Ugh. */
993 if (token->type != CPP_EOF || token == &pfile->eof)
995 /* Back up. We may have skipped padding, in which case backing
996 up more than one token when expanding macros is in general
997 too difficult. We re-insert it in its own context. */
998 _cpp_backup_tokens (pfile, 1);
999 if (padding)
1000 _cpp_push_token_context (pfile, NULL, padding, 1);
1003 return NULL;
1006 /* Return the real number of tokens in the expansion of MACRO. */
1007 static inline unsigned int
1008 macro_real_token_count (const cpp_macro *macro)
1010 unsigned int i;
1011 if (__builtin_expect (!macro->extra_tokens, true))
1012 return macro->count;
1013 for (i = 0; i < macro->count; i++)
1014 if (macro->exp.tokens[i].type == CPP_PASTE)
1015 return i;
1016 abort ();
1019 /* Push the context of a macro with hash entry NODE onto the context
1020 stack. If we can successfully expand the macro, we push a context
1021 containing its yet-to-be-rescanned replacement list and return one.
1022 If there were additionally any unexpanded deferred #pragma
1023 directives among macro arguments, push another context containing
1024 the pragma tokens before the yet-to-be-rescanned replacement list
1025 and return two. Otherwise, we don't push a context and return
1026 zero. LOCATION is the location of the expansion point of the
1027 macro. */
1028 static int
1029 enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
1030 const cpp_token *result, source_location location)
1032 /* The presence of a macro invalidates a file's controlling macro. */
1033 pfile->mi_valid = false;
1035 pfile->state.angled_headers = false;
1037 /* From here to when we push the context for the macro later down
1038 this function, we need to flag the fact that we are about to
1039 expand a macro. This is useful when -ftrack-macro-expansion is
1040 turned off. In that case, we need to record the location of the
1041 expansion point of the top-most macro we are about to to expand,
1042 into pfile->invocation_location. But we must not record any such
1043 location once the process of expanding the macro starts; that is,
1044 we must not do that recording between now and later down this
1045 function where set this flag to FALSE. */
1046 pfile->about_to_expand_macro_p = true;
1048 if ((node->flags & NODE_BUILTIN) && !(node->flags & NODE_USED))
1050 node->flags |= NODE_USED;
1051 if ((!pfile->cb.user_builtin_macro
1052 || !pfile->cb.user_builtin_macro (pfile, node))
1053 && pfile->cb.used_define)
1054 pfile->cb.used_define (pfile, pfile->directive_line, node);
1057 /* Handle standard macros. */
1058 if (! (node->flags & NODE_BUILTIN))
1060 cpp_macro *macro = node->value.macro;
1061 _cpp_buff *pragma_buff = NULL;
1063 if (macro->fun_like)
1065 _cpp_buff *buff;
1066 unsigned num_args = 0;
1068 pfile->state.prevent_expansion++;
1069 pfile->keep_tokens++;
1070 pfile->state.parsing_args = 1;
1071 buff = funlike_invocation_p (pfile, node, &pragma_buff,
1072 &num_args);
1073 pfile->state.parsing_args = 0;
1074 pfile->keep_tokens--;
1075 pfile->state.prevent_expansion--;
1077 if (buff == NULL)
1079 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
1080 cpp_warning (pfile, CPP_W_TRADITIONAL,
1081 "function-like macro \"%s\" must be used with arguments in traditional C",
1082 NODE_NAME (node));
1084 if (pragma_buff)
1085 _cpp_release_buff (pfile, pragma_buff);
1087 pfile->about_to_expand_macro_p = false;
1088 return 0;
1091 if (macro->paramc > 0)
1092 replace_args (pfile, node, macro,
1093 (macro_arg *) buff->base,
1094 location);
1095 /* Free the memory used by the arguments of this
1096 function-like macro. This memory has been allocated by
1097 funlike_invocation_p and by replace_args. */
1098 delete_macro_args (buff, num_args);
1101 /* Disable the macro within its expansion. */
1102 node->flags |= NODE_DISABLED;
1104 if (!(node->flags & NODE_USED))
1106 node->flags |= NODE_USED;
1107 if (pfile->cb.used_define)
1108 pfile->cb.used_define (pfile, pfile->directive_line, node);
1111 if (pfile->cb.used)
1112 pfile->cb.used (pfile, location, node);
1114 macro->used = 1;
1116 if (macro->paramc == 0)
1118 if (CPP_OPTION (pfile, track_macro_expansion))
1120 unsigned int i, count = macro->count;
1121 const cpp_token *src = macro->exp.tokens;
1122 const struct line_map *map;
1123 source_location *virt_locs = NULL;
1124 _cpp_buff *macro_tokens =
1125 tokens_buff_new (pfile, count, &virt_locs);
1127 /* Create a macro map to record the locations of the
1128 tokens that are involved in the expansion. LOCATION
1129 is the location of the macro expansion point. */
1130 map = linemap_enter_macro (pfile->line_table,
1131 node, location, count);
1132 for (i = 0; i < count; ++i)
1134 tokens_buff_add_token (macro_tokens, virt_locs,
1135 src, src->src_loc,
1136 src->src_loc, map, i);
1137 ++src;
1139 push_extended_tokens_context (pfile, node,
1140 macro_tokens,
1141 virt_locs,
1142 (const cpp_token **)
1143 macro_tokens->base,
1144 count);
1145 num_macro_tokens_counter += count;
1147 else
1149 unsigned tokens_count = macro_real_token_count (macro);
1150 _cpp_push_token_context (pfile, node, macro->exp.tokens,
1151 tokens_count);
1152 num_macro_tokens_counter += tokens_count;
1156 if (pragma_buff)
1158 if (!pfile->state.in_directive)
1159 _cpp_push_token_context (pfile, NULL,
1160 padding_token (pfile, result), 1);
1163 unsigned tokens_count;
1164 _cpp_buff *tail = pragma_buff->next;
1165 pragma_buff->next = NULL;
1166 tokens_count = ((const cpp_token **) BUFF_FRONT (pragma_buff)
1167 - (const cpp_token **) pragma_buff->base);
1168 push_ptoken_context (pfile, NULL, pragma_buff,
1169 (const cpp_token **) pragma_buff->base,
1170 tokens_count);
1171 pragma_buff = tail;
1172 if (!CPP_OPTION (pfile, track_macro_expansion))
1173 num_macro_tokens_counter += tokens_count;
1176 while (pragma_buff != NULL);
1177 pfile->about_to_expand_macro_p = false;
1178 return 2;
1181 pfile->about_to_expand_macro_p = false;
1182 return 1;
1185 pfile->about_to_expand_macro_p = false;
1186 /* Handle built-in macros and the _Pragma operator. */
1187 return builtin_macro (pfile, node);
1190 /* De-allocate the memory used by BUFF which is an array of instances
1191 of macro_arg. NUM_ARGS is the number of instances of macro_arg
1192 present in BUFF. */
1193 static void
1194 delete_macro_args (_cpp_buff *buff, unsigned num_args)
1196 macro_arg *macro_args;
1197 unsigned i;
1199 if (buff == NULL)
1200 return;
1202 macro_args = (macro_arg *) buff->base;
1204 /* Walk instances of macro_arg to free their expanded tokens as well
1205 as their macro_arg::virt_locs members. */
1206 for (i = 0; i < num_args; ++i)
1208 if (macro_args[i].expanded)
1210 free (macro_args[i].expanded);
1211 macro_args[i].expanded = NULL;
1213 if (macro_args[i].virt_locs)
1215 free (macro_args[i].virt_locs);
1216 macro_args[i].virt_locs = NULL;
1218 if (macro_args[i].expanded_virt_locs)
1220 free (macro_args[i].expanded_virt_locs);
1221 macro_args[i].expanded_virt_locs = NULL;
1224 _cpp_free_buff (buff);
1227 /* Set the INDEXth token of the macro argument ARG. TOKEN is the token
1228 to set, LOCATION is its virtual location. "Virtual" location means
1229 the location that encodes loci across macro expansion. Otherwise
1230 it has to be TOKEN->SRC_LOC. KIND is the kind of tokens the
1231 argument ARG is supposed to contain. Note that ARG must be
1232 tailored so that it has enough room to contain INDEX + 1 numbers of
1233 tokens, at least. */
1234 static void
1235 set_arg_token (macro_arg *arg, const cpp_token *token,
1236 source_location location, size_t index,
1237 enum macro_arg_token_kind kind,
1238 bool track_macro_exp_p)
1240 const cpp_token **token_ptr;
1241 source_location *loc = NULL;
1243 token_ptr =
1244 arg_token_ptr_at (arg, index, kind,
1245 track_macro_exp_p ? &loc : NULL);
1246 *token_ptr = token;
1248 if (loc != NULL)
1250 #ifdef ENABLE_CHECKING
1251 if (kind == MACRO_ARG_TOKEN_STRINGIFIED
1252 || !track_macro_exp_p)
1253 /* We can't set the location of a stringified argument
1254 token and we can't set any location if we aren't tracking
1255 macro expansion locations. */
1256 abort ();
1257 #endif
1258 *loc = location;
1262 /* Get the pointer to the location of the argument token of the
1263 function-like macro argument ARG. This function must be called
1264 only when we -ftrack-macro-expansion is on. */
1265 static const source_location *
1266 get_arg_token_location (const macro_arg *arg,
1267 enum macro_arg_token_kind kind)
1269 const source_location *loc = NULL;
1270 const cpp_token **token_ptr =
1271 arg_token_ptr_at (arg, 0, kind, (source_location **) &loc);
1273 if (token_ptr == NULL)
1274 return NULL;
1276 return loc;
1279 /* Return the pointer to the INDEXth token of the macro argument ARG.
1280 KIND specifies the kind of token the macro argument ARG contains.
1281 If VIRT_LOCATION is non NULL, *VIRT_LOCATION is set to the address
1282 of the virtual location of the returned token if the
1283 -ftrack-macro-expansion flag is on; otherwise, it's set to the
1284 spelling location of the returned token. */
1285 static const cpp_token **
1286 arg_token_ptr_at (const macro_arg *arg, size_t index,
1287 enum macro_arg_token_kind kind,
1288 source_location **virt_location)
1290 const cpp_token **tokens_ptr = NULL;
1292 switch (kind)
1294 case MACRO_ARG_TOKEN_NORMAL:
1295 tokens_ptr = arg->first;
1296 break;
1297 case MACRO_ARG_TOKEN_STRINGIFIED:
1298 tokens_ptr = (const cpp_token **) &arg->stringified;
1299 break;
1300 case MACRO_ARG_TOKEN_EXPANDED:
1301 tokens_ptr = arg->expanded;
1302 break;
1305 if (tokens_ptr == NULL)
1306 /* This can happen for e.g, an empty token argument to a
1307 funtion-like macro. */
1308 return tokens_ptr;
1310 if (virt_location)
1312 if (kind == MACRO_ARG_TOKEN_NORMAL)
1313 *virt_location = &arg->virt_locs[index];
1314 else if (kind == MACRO_ARG_TOKEN_EXPANDED)
1315 *virt_location = &arg->expanded_virt_locs[index];
1316 else if (kind == MACRO_ARG_TOKEN_STRINGIFIED)
1317 *virt_location =
1318 (source_location *) &tokens_ptr[index]->src_loc;
1320 return &tokens_ptr[index];
1323 /* Initialize an iterator so that it iterates over the tokens of a
1324 function-like macro argument. KIND is the kind of tokens we want
1325 ITER to iterate over. TOKEN_PTR points the first token ITER will
1326 iterate over. */
1327 static void
1328 macro_arg_token_iter_init (macro_arg_token_iter *iter,
1329 bool track_macro_exp_p,
1330 enum macro_arg_token_kind kind,
1331 const macro_arg *arg,
1332 const cpp_token **token_ptr)
1334 iter->track_macro_exp_p = track_macro_exp_p;
1335 iter->kind = kind;
1336 iter->token_ptr = token_ptr;
1337 /* Unconditionally initialize this so that the compiler doesn't warn
1338 about iter->location_ptr being possibly uninitialized later after
1339 this code has been inlined somewhere. */
1340 iter->location_ptr = NULL;
1341 if (track_macro_exp_p)
1342 iter->location_ptr = get_arg_token_location (arg, kind);
1343 #ifdef ENABLE_CHECKING
1344 iter->num_forwards = 0;
1345 if (track_macro_exp_p
1346 && token_ptr != NULL
1347 && iter->location_ptr == NULL)
1348 abort ();
1349 #endif
1352 /* Move the iterator one token forward. Note that if IT was
1353 initialized on an argument that has a stringified token, moving it
1354 forward doesn't make sense as a stringified token is essentially one
1355 string. */
1356 static void
1357 macro_arg_token_iter_forward (macro_arg_token_iter *it)
1359 switch (it->kind)
1361 case MACRO_ARG_TOKEN_NORMAL:
1362 case MACRO_ARG_TOKEN_EXPANDED:
1363 it->token_ptr++;
1364 if (it->track_macro_exp_p)
1365 it->location_ptr++;
1366 break;
1367 case MACRO_ARG_TOKEN_STRINGIFIED:
1368 #ifdef ENABLE_CHECKING
1369 if (it->num_forwards > 0)
1370 abort ();
1371 #endif
1372 break;
1375 #ifdef ENABLE_CHECKING
1376 it->num_forwards++;
1377 #endif
1380 /* Return the token pointed to by the iterator. */
1381 static const cpp_token *
1382 macro_arg_token_iter_get_token (const macro_arg_token_iter *it)
1384 #ifdef ENABLE_CHECKING
1385 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1386 && it->num_forwards > 0)
1387 abort ();
1388 #endif
1389 if (it->token_ptr == NULL)
1390 return NULL;
1391 return *it->token_ptr;
1394 /* Return the location of the token pointed to by the iterator.*/
1395 static source_location
1396 macro_arg_token_iter_get_location (const macro_arg_token_iter *it)
1398 #ifdef ENABLE_CHECKING
1399 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1400 && it->num_forwards > 0)
1401 abort ();
1402 #endif
1403 if (it->track_macro_exp_p)
1404 return *it->location_ptr;
1405 else
1406 return (*it->token_ptr)->src_loc;
1409 /* Return the index of a token [resulting from macro expansion] inside
1410 the total list of tokens resulting from a given macro
1411 expansion. The index can be different depending on whether if we
1412 want each tokens resulting from function-like macro arguments
1413 expansion to have a different location or not.
1415 E.g, consider this function-like macro:
1417 #define M(x) x - 3
1419 Then consider us "calling" it (and thus expanding it) like:
1421 M(1+4)
1423 It will be expanded into:
1425 1+4-3
1427 Let's consider the case of the token '4'.
1429 Its index can be 2 (it's the third token of the set of tokens
1430 resulting from the expansion) or it can be 0 if we consider that
1431 all tokens resulting from the expansion of the argument "1+2" have
1432 the same index, which is 0. In this later case, the index of token
1433 '-' would then be 1 and the index of token '3' would be 2.
1435 The later case is useful to use less memory e.g, for the case of
1436 the user using the option -ftrack-macro-expansion=1.
1438 ABSOLUTE_TOKEN_INDEX is the index of the macro argument token we
1439 are interested in. CUR_REPLACEMENT_TOKEN is the token of the macro
1440 parameter (inside the macro replacement list) that corresponds to
1441 the macro argument for which ABSOLUTE_TOKEN_INDEX is a token index
1444 If we refer to the example above, for the '4' argument token,
1445 ABSOLUTE_TOKEN_INDEX would be set to 2, and CUR_REPLACEMENT_TOKEN
1446 would be set to the token 'x', in the replacement list "x - 3" of
1447 macro M.
1449 This is a subroutine of replace_args. */
1450 inline static unsigned
1451 expanded_token_index (cpp_reader *pfile, cpp_macro *macro,
1452 const cpp_token *cur_replacement_token,
1453 unsigned absolute_token_index)
1455 if (CPP_OPTION (pfile, track_macro_expansion) > 1)
1456 return absolute_token_index;
1457 return cur_replacement_token - macro->exp.tokens;
1460 /* Replace the parameters in a function-like macro of NODE with the
1461 actual ARGS, and place the result in a newly pushed token context.
1462 Expand each argument before replacing, unless it is operated upon
1463 by the # or ## operators. EXPANSION_POINT_LOC is the location of
1464 the expansion point of the macro. E.g, the location of the
1465 function-like macro invocation. */
1466 static void
1467 replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
1468 macro_arg *args, source_location expansion_point_loc)
1470 unsigned int i, total;
1471 const cpp_token *src, *limit;
1472 const cpp_token **first = NULL;
1473 macro_arg *arg;
1474 _cpp_buff *buff = NULL;
1475 source_location *virt_locs = NULL;
1476 unsigned int exp_count;
1477 const struct line_map *map = NULL;
1478 int track_macro_exp;
1480 /* First, fully macro-expand arguments, calculating the number of
1481 tokens in the final expansion as we go. The ordering of the if
1482 statements below is subtle; we must handle stringification before
1483 pasting. */
1485 /* EXP_COUNT is the number of tokens in the macro replacement
1486 list. TOTAL is the number of tokens /after/ macro parameters
1487 have been replaced by their arguments. */
1488 exp_count = macro_real_token_count (macro);
1489 total = exp_count;
1490 limit = macro->exp.tokens + exp_count;
1492 for (src = macro->exp.tokens; src < limit; src++)
1493 if (src->type == CPP_MACRO_ARG)
1495 /* Leading and trailing padding tokens. */
1496 total += 2;
1497 /* Account for leading and padding tokens in exp_count too.
1498 This is going to be important later down this function,
1499 when we want to handle the case of (track_macro_exp <
1500 2). */
1501 exp_count += 2;
1503 /* We have an argument. If it is not being stringified or
1504 pasted it is macro-replaced before insertion. */
1505 arg = &args[src->val.macro_arg.arg_no - 1];
1507 if (src->flags & STRINGIFY_ARG)
1509 if (!arg->stringified)
1510 arg->stringified = stringify_arg (pfile, arg);
1512 else if ((src->flags & PASTE_LEFT)
1513 || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
1514 total += arg->count - 1;
1515 else
1517 if (!arg->expanded)
1518 expand_arg (pfile, arg);
1519 total += arg->expanded_count - 1;
1523 /* When the compiler is called with the -ftrack-macro-expansion
1524 flag, we need to keep track of the location of each token that
1525 results from macro expansion.
1527 A token resulting from macro expansion is not a new token. It is
1528 simply the same token as the token coming from the macro
1529 definition. The new things that are allocated are the buffer
1530 that holds the tokens resulting from macro expansion and a new
1531 location that records many things like the locus of the expansion
1532 point as well as the original locus inside the definition of the
1533 macro. This location is called a virtual location.
1535 So the buffer BUFF holds a set of cpp_token*, and the buffer
1536 VIRT_LOCS holds the virtual locations of the tokens held by BUFF.
1538 Both of these two buffers are going to be hung off of the macro
1539 context, when the latter is pushed. The memory allocated to
1540 store the tokens and their locations is going to be freed once
1541 the context of macro expansion is popped.
1543 As far as tokens are concerned, the memory overhead of
1544 -ftrack-macro-expansion is proportional to the number of
1545 macros that get expanded multiplied by sizeof (source_location).
1546 The good news is that extra memory gets freed when the macro
1547 context is freed, i.e shortly after the macro got expanded. */
1549 /* Is the -ftrack-macro-expansion flag in effect? */
1550 track_macro_exp = CPP_OPTION (pfile, track_macro_expansion);
1552 /* Now allocate memory space for tokens and locations resulting from
1553 the macro expansion, copy the tokens and replace the arguments.
1554 This memory must be freed when the context of the macro MACRO is
1555 popped. */
1556 buff = tokens_buff_new (pfile, total, track_macro_exp ? &virt_locs : NULL);
1558 first = (const cpp_token **) buff->base;
1560 /* Create a macro map to record the locations of the tokens that are
1561 involved in the expansion. Note that the expansion point is set
1562 to the location of the closing parenthesis. Otherwise, the
1563 subsequent map created for the first token that comes after the
1564 macro map might have a wrong line number. That would lead to
1565 tokens with wrong line numbers after the macro expansion. This
1566 adds up to the memory overhead of the -ftrack-macro-expansion
1567 flag; for every macro that is expanded, a "macro map" is
1568 created. */
1569 if (track_macro_exp)
1571 int num_macro_tokens = total;
1572 if (track_macro_exp < 2)
1573 /* Then the number of macro tokens won't take in account the
1574 fact that function-like macro arguments can expand to
1575 multiple tokens. This is to save memory at the expense of
1576 accuracy.
1578 Suppose we have #define SQARE(A) A * A
1580 And then we do SQARE(2+3)
1582 Then the tokens 2, +, 3, will have the same location,
1583 saying they come from the expansion of the argument A. */
1584 num_macro_tokens = exp_count;
1585 map = linemap_enter_macro (pfile->line_table, node,
1586 expansion_point_loc,
1587 num_macro_tokens);
1589 i = 0;
1590 for (src = macro->exp.tokens; src < limit; src++)
1592 unsigned int arg_tokens_count;
1593 macro_arg_token_iter from;
1594 const cpp_token **paste_flag = NULL;
1595 const cpp_token **tmp_token_ptr;
1597 if (src->type != CPP_MACRO_ARG)
1599 /* Allocate a virtual location for token SRC, and add that
1600 token and its virtual location into the buffers BUFF and
1601 VIRT_LOCS. */
1602 unsigned index = expanded_token_index (pfile, macro, src, i);
1603 tokens_buff_add_token (buff, virt_locs, src,
1604 src->src_loc, src->src_loc,
1605 map, index);
1606 i += 1;
1607 continue;
1610 paste_flag = 0;
1611 arg = &args[src->val.macro_arg.arg_no - 1];
1612 /* SRC is a macro parameter that we need to replace with its
1613 corresponding argument. So at some point we'll need to
1614 iterate over the tokens of the macro argument and copy them
1615 into the "place" now holding the correspondig macro
1616 parameter. We are going to use the iterator type
1617 macro_argo_token_iter to handle that iterating. The 'if'
1618 below is to initialize the iterator depending on the type of
1619 tokens the macro argument has. It also does some adjustment
1620 related to padding tokens and some pasting corner cases. */
1621 if (src->flags & STRINGIFY_ARG)
1623 arg_tokens_count = 1;
1624 macro_arg_token_iter_init (&from,
1625 CPP_OPTION (pfile,
1626 track_macro_expansion),
1627 MACRO_ARG_TOKEN_STRINGIFIED,
1628 arg, &arg->stringified);
1630 else if (src->flags & PASTE_LEFT)
1632 arg_tokens_count = arg->count;
1633 macro_arg_token_iter_init (&from,
1634 CPP_OPTION (pfile,
1635 track_macro_expansion),
1636 MACRO_ARG_TOKEN_NORMAL,
1637 arg, arg->first);
1639 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
1641 int num_toks;
1642 arg_tokens_count = arg->count;
1643 macro_arg_token_iter_init (&from,
1644 CPP_OPTION (pfile,
1645 track_macro_expansion),
1646 MACRO_ARG_TOKEN_NORMAL,
1647 arg, arg->first);
1649 num_toks = tokens_buff_count (buff);
1651 if (num_toks != 0)
1653 /* So the current parameter token is pasted to the previous
1654 token in the replacement list. Let's look at what
1655 we have as previous and current arguments. */
1657 /* This is the previous argument's token ... */
1658 tmp_token_ptr = tokens_buff_last_token_ptr (buff);
1660 if ((*tmp_token_ptr)->type == CPP_COMMA
1661 && macro->variadic
1662 && src->val.macro_arg.arg_no == macro->paramc)
1664 /* ... which is a comma; and the current parameter
1665 is the last parameter of a variadic function-like
1666 macro. If the argument to the current last
1667 parameter is NULL, then swallow the comma,
1668 otherwise drop the paste flag. */
1669 if (macro_arg_token_iter_get_token (&from) == NULL)
1670 tokens_buff_remove_last_token (buff);
1671 else
1672 paste_flag = tmp_token_ptr;
1674 /* Remove the paste flag if the RHS is a placemarker. */
1675 else if (arg_tokens_count == 0)
1676 paste_flag = tmp_token_ptr;
1679 else
1681 arg_tokens_count = arg->expanded_count;
1682 macro_arg_token_iter_init (&from,
1683 CPP_OPTION (pfile,
1684 track_macro_expansion),
1685 MACRO_ARG_TOKEN_EXPANDED,
1686 arg, arg->expanded);
1689 /* Padding on the left of an argument (unless RHS of ##). */
1690 if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
1691 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
1693 const cpp_token *t = padding_token (pfile, src);
1694 unsigned index = expanded_token_index (pfile, macro, src, i);
1695 /* Allocate a virtual location for the padding token and
1696 append the token and its location to BUFF and
1697 VIRT_LOCS. */
1698 tokens_buff_add_token (buff, virt_locs, t,
1699 t->src_loc, t->src_loc,
1700 map, index);
1703 if (arg_tokens_count)
1705 /* So now we've got the number of tokens that make up the
1706 argument that is going to replace the current parameter
1707 in the macro's replacement list. */
1708 unsigned int j;
1709 for (j = 0; j < arg_tokens_count; ++j)
1711 /* So if track_macro_exp is < 2, the user wants to
1712 save extra memory while tracking macro expansion
1713 locations. So in that case here is what we do:
1715 Suppose we have #define SQARE(A) A * A
1717 And then we do SQARE(2+3)
1719 Then the tokens 2, +, 3, will have the same location,
1720 saying they come from the expansion of the argument
1723 So that means we are going to ignore the COUNT tokens
1724 resulting from the expansion of the current macro
1725 arugment. In other words all the ARG_TOKENS_COUNT tokens
1726 resulting from the expansion of the macro argument will
1727 have the index I. Normally, each of those token should
1728 have index I+J. */
1729 unsigned token_index = i;
1730 unsigned index;
1731 if (track_macro_exp > 1)
1732 token_index += j;
1734 index = expanded_token_index (pfile, macro, src, token_index);
1735 tokens_buff_add_token (buff, virt_locs,
1736 macro_arg_token_iter_get_token (&from),
1737 macro_arg_token_iter_get_location (&from),
1738 src->src_loc, map, index);
1739 macro_arg_token_iter_forward (&from);
1742 /* With a non-empty argument on the LHS of ##, the last
1743 token should be flagged PASTE_LEFT. */
1744 if (src->flags & PASTE_LEFT)
1745 paste_flag =
1746 (const cpp_token **) tokens_buff_last_token_ptr (buff);
1748 else if (CPP_PEDANTIC (pfile) && ! macro->syshdr
1749 && ! CPP_OPTION (pfile, c99)
1750 && ! cpp_in_system_header (pfile))
1752 cpp_error (pfile, CPP_DL_PEDWARN,
1753 "invoking macro %s argument %d: "
1754 "empty macro arguments are undefined"
1755 " in ISO C90 and ISO C++98",
1756 NODE_NAME (node),
1757 src->val.macro_arg.arg_no);
1760 /* Avoid paste on RHS (even case count == 0). */
1761 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
1763 const cpp_token *t = &pfile->avoid_paste;
1764 tokens_buff_add_token (buff, virt_locs,
1765 t, t->src_loc, t->src_loc,
1766 NULL, 0);
1769 /* Add a new paste flag, or remove an unwanted one. */
1770 if (paste_flag)
1772 cpp_token *token = _cpp_temp_token (pfile);
1773 token->type = (*paste_flag)->type;
1774 token->val = (*paste_flag)->val;
1775 if (src->flags & PASTE_LEFT)
1776 token->flags = (*paste_flag)->flags | PASTE_LEFT;
1777 else
1778 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1779 *paste_flag = token;
1782 i += arg_tokens_count;
1785 if (track_macro_exp)
1786 push_extended_tokens_context (pfile, node, buff, virt_locs, first,
1787 tokens_buff_count (buff));
1788 else
1789 push_ptoken_context (pfile, node, buff, first,
1790 tokens_buff_count (buff));
1792 num_macro_tokens_counter += tokens_buff_count (buff);
1795 /* Return a special padding token, with padding inherited from SOURCE. */
1796 static const cpp_token *
1797 padding_token (cpp_reader *pfile, const cpp_token *source)
1799 cpp_token *result = _cpp_temp_token (pfile);
1801 result->type = CPP_PADDING;
1803 /* Data in GCed data structures cannot be made const so far, so we
1804 need a cast here. */
1805 result->val.source = (cpp_token *) source;
1806 result->flags = 0;
1807 return result;
1810 /* Get a new uninitialized context. Create a new one if we cannot
1811 re-use an old one. */
1812 static cpp_context *
1813 next_context (cpp_reader *pfile)
1815 cpp_context *result = pfile->context->next;
1817 if (result == 0)
1819 result = XNEW (cpp_context);
1820 memset (result, 0, sizeof (cpp_context));
1821 result->prev = pfile->context;
1822 result->next = 0;
1823 pfile->context->next = result;
1826 pfile->context = result;
1827 return result;
1830 /* Push a list of pointers to tokens. */
1831 static void
1832 push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
1833 const cpp_token **first, unsigned int count)
1835 cpp_context *context = next_context (pfile);
1837 context->tokens_kind = TOKENS_KIND_INDIRECT;
1838 context->c.macro = macro;
1839 context->buff = buff;
1840 FIRST (context).ptoken = first;
1841 LAST (context).ptoken = first + count;
1844 /* Push a list of tokens.
1846 A NULL macro means that we should continue the current macro
1847 expansion, in essence. That means that if we are currently in a
1848 macro expansion context, we'll make the new pfile->context refer to
1849 the current macro. */
1850 void
1851 _cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
1852 const cpp_token *first, unsigned int count)
1854 cpp_context *context;
1856 if (macro == NULL)
1857 macro = macro_of_context (pfile->context);
1859 context = next_context (pfile);
1860 context->tokens_kind = TOKENS_KIND_DIRECT;
1861 context->c.macro = macro;
1862 context->buff = NULL;
1863 FIRST (context).token = first;
1864 LAST (context).token = first + count;
1867 /* Build a context containing a list of tokens as well as their
1868 virtual locations and push it. TOKENS_BUFF is the buffer that
1869 contains the tokens pointed to by FIRST. If TOKENS_BUFF is
1870 non-NULL, it means that the context owns it, meaning that
1871 _cpp_pop_context will free it as well as VIRT_LOCS_BUFF that
1872 contains the virtual locations.
1874 A NULL macro means that we should continue the current macro
1875 expansion, in essence. That means that if we are currently in a
1876 macro expansion context, we'll make the new pfile->context refer to
1877 the current macro. */
1878 static void
1879 push_extended_tokens_context (cpp_reader *pfile,
1880 cpp_hashnode *macro,
1881 _cpp_buff *token_buff,
1882 source_location *virt_locs,
1883 const cpp_token **first,
1884 unsigned int count)
1886 cpp_context *context;
1887 macro_context *m;
1889 if (macro == NULL)
1890 macro = macro_of_context (pfile->context);
1892 context = next_context (pfile);
1893 context->tokens_kind = TOKENS_KIND_EXTENDED;
1894 context->buff = token_buff;
1896 m = XNEW (macro_context);
1897 m->macro_node = macro;
1898 m->virt_locs = virt_locs;
1899 m->cur_virt_loc = virt_locs;
1900 context->c.mc = m;
1901 FIRST (context).ptoken = first;
1902 LAST (context).ptoken = first + count;
1905 /* Push a traditional macro's replacement text. */
1906 void
1907 _cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
1908 const uchar *start, size_t len)
1910 cpp_context *context = next_context (pfile);
1912 context->tokens_kind = TOKENS_KIND_DIRECT;
1913 context->c.macro = macro;
1914 context->buff = NULL;
1915 CUR (context) = start;
1916 RLIMIT (context) = start + len;
1917 macro->flags |= NODE_DISABLED;
1920 /* Creates a buffer that holds tokens a.k.a "token buffer", usually
1921 for the purpose of storing them on a cpp_context. If VIRT_LOCS is
1922 non-null (which means that -ftrack-macro-expansion is on),
1923 *VIRT_LOCS is set to a newly allocated buffer that is supposed to
1924 hold the virtual locations of the tokens resulting from macro
1925 expansion. */
1926 static _cpp_buff*
1927 tokens_buff_new (cpp_reader *pfile, size_t len,
1928 source_location **virt_locs)
1930 size_t tokens_size = len * sizeof (cpp_token *);
1931 size_t locs_size = len * sizeof (source_location);
1933 if (virt_locs != NULL)
1934 *virt_locs = XNEWVEC (source_location, locs_size);
1935 return _cpp_get_buff (pfile, tokens_size);
1938 /* Returns the number of tokens contained in a token buffer. The
1939 buffer holds a set of cpp_token*. */
1940 static size_t
1941 tokens_buff_count (_cpp_buff *buff)
1943 return (BUFF_FRONT (buff) - buff->base) / sizeof (cpp_token *);
1946 /* Return a pointer to the last token contained in the token buffer
1947 BUFF. */
1948 static const cpp_token **
1949 tokens_buff_last_token_ptr (_cpp_buff *buff)
1951 return &((const cpp_token **) BUFF_FRONT (buff))[-1];
1954 /* Remove the last token contained in the token buffer TOKENS_BUFF.
1955 If VIRT_LOCS_BUFF is non-NULL, it should point at the buffer
1956 containing the virtual locations of the tokens in TOKENS_BUFF; in
1957 which case the function updates that buffer as well. */
1958 static inline void
1959 tokens_buff_remove_last_token (_cpp_buff *tokens_buff)
1962 if (BUFF_FRONT (tokens_buff) > tokens_buff->base)
1963 BUFF_FRONT (tokens_buff) =
1964 (unsigned char *) &((cpp_token **) BUFF_FRONT (tokens_buff))[-1];
1967 /* Insert a token into the token buffer at the position pointed to by
1968 DEST. Note that the buffer is not enlarged so the previous token
1969 that was at *DEST is overwritten. VIRT_LOC_DEST, if non-null,
1970 means -ftrack-macro-expansion is effect; it then points to where to
1971 insert the virtual location of TOKEN. TOKEN is the token to
1972 insert. VIRT_LOC is the virtual location of the token, i.e, the
1973 location possibly encoding its locus across macro expansion. If
1974 TOKEN is an argument of a function-like macro (inside a macro
1975 replacement list), PARM_DEF_LOC is the spelling location of the
1976 macro parameter that TOKEN is replacing, in the replacement list of
1977 the macro. If TOKEN is not an argument of a function-like macro or
1978 if it doesn't come from a macro expansion, then VIRT_LOC can just
1979 be set to the same value as PARM_DEF_LOC. If MAP is non null, it
1980 means TOKEN comes from a macro expansion and MAP is the macro map
1981 associated to the macro. MACRO_TOKEN_INDEX points to the index of
1982 the token in the macro map; it is not considered if MAP is NULL.
1984 Upon successful completion this function returns the a pointer to
1985 the position of the token coming right after the insertion
1986 point. */
1987 static inline const cpp_token **
1988 tokens_buff_put_token_to (const cpp_token **dest,
1989 source_location *virt_loc_dest,
1990 const cpp_token *token,
1991 source_location virt_loc,
1992 source_location parm_def_loc,
1993 const struct line_map *map,
1994 unsigned int macro_token_index)
1996 source_location macro_loc = virt_loc;
1997 const cpp_token **result;
1999 if (virt_loc_dest)
2001 /* -ftrack-macro-expansion is on. */
2002 if (map)
2003 macro_loc = linemap_add_macro_token (map, macro_token_index,
2004 virt_loc, parm_def_loc);
2005 *virt_loc_dest = macro_loc;
2007 *dest = token;
2008 result = &dest[1];
2010 return result;
2013 /* Adds a token at the end of the tokens contained in BUFFER. Note
2014 that this function doesn't enlarge BUFFER when the number of tokens
2015 reaches BUFFER's size; it aborts in that situation.
2017 TOKEN is the token to append. VIRT_LOC is the virtual location of
2018 the token, i.e, the location possibly encoding its locus across
2019 macro expansion. If TOKEN is an argument of a function-like macro
2020 (inside a macro replacement list), PARM_DEF_LOC is the location of
2021 the macro parameter that TOKEN is replacing. If TOKEN doesn't come
2022 from a macro expansion, then VIRT_LOC can just be set to the same
2023 value as PARM_DEF_LOC. If MAP is non null, it means TOKEN comes
2024 from a macro expansion and MAP is the macro map associated to the
2025 macro. MACRO_TOKEN_INDEX points to the index of the token in the
2026 macro map; It is not considered if MAP is NULL. If VIRT_LOCS is
2027 non-null, it means -ftrack-macro-expansion is on; in which case
2028 this function adds the virtual location DEF_LOC to the VIRT_LOCS
2029 array, at the same index as the one of TOKEN in BUFFER. Upon
2030 successful completion this function returns the a pointer to the
2031 position of the token coming right after the insertion point. */
2032 static const cpp_token **
2033 tokens_buff_add_token (_cpp_buff *buffer,
2034 source_location *virt_locs,
2035 const cpp_token *token,
2036 source_location virt_loc,
2037 source_location parm_def_loc,
2038 const struct line_map *map,
2039 unsigned int macro_token_index)
2041 const cpp_token **result;
2042 source_location *virt_loc_dest = NULL;
2043 unsigned token_index =
2044 (BUFF_FRONT (buffer) - buffer->base) / sizeof (cpp_token *);
2046 /* Abort if we pass the end the buffer. */
2047 if (BUFF_FRONT (buffer) > BUFF_LIMIT (buffer))
2048 abort ();
2050 if (virt_locs != NULL)
2051 virt_loc_dest = &virt_locs[token_index];
2053 result =
2054 tokens_buff_put_token_to ((const cpp_token **) BUFF_FRONT (buffer),
2055 virt_loc_dest, token, virt_loc, parm_def_loc,
2056 map, macro_token_index);
2058 BUFF_FRONT (buffer) = (unsigned char *) result;
2059 return result;
2062 /* Allocate space for the function-like macro argument ARG to store
2063 the tokens resulting from the macro-expansion of the tokens that
2064 make up ARG itself. That space is allocated in ARG->expanded and
2065 needs to be freed using free. */
2066 static void
2067 alloc_expanded_arg_mem (cpp_reader *pfile, macro_arg *arg, size_t capacity)
2069 #ifdef ENABLE_CHECKING
2070 if (arg->expanded != NULL
2071 || arg->expanded_virt_locs != NULL)
2072 abort ();
2073 #endif
2074 arg->expanded = XNEWVEC (const cpp_token *, capacity);
2075 if (CPP_OPTION (pfile, track_macro_expansion))
2076 arg->expanded_virt_locs = XNEWVEC (source_location, capacity);
2080 /* If necessary, enlarge ARG->expanded to so that it can contain SIZE
2081 tokens. */
2082 static void
2083 ensure_expanded_arg_room (cpp_reader *pfile, macro_arg *arg,
2084 size_t size, size_t *expanded_capacity)
2086 if (size <= *expanded_capacity)
2087 return;
2089 size *= 2;
2091 arg->expanded =
2092 XRESIZEVEC (const cpp_token *, arg->expanded, size);
2093 *expanded_capacity = size;
2095 if (CPP_OPTION (pfile, track_macro_expansion))
2097 if (arg->expanded_virt_locs == NULL)
2098 arg->expanded_virt_locs = XNEWVEC (source_location, size);
2099 else
2100 arg->expanded_virt_locs = XRESIZEVEC (source_location,
2101 arg->expanded_virt_locs,
2102 size);
2106 /* Expand an argument ARG before replacing parameters in a
2107 function-like macro. This works by pushing a context with the
2108 argument's tokens, and then expanding that into a temporary buffer
2109 as if it were a normal part of the token stream. collect_args()
2110 has terminated the argument's tokens with a CPP_EOF so that we know
2111 when we have fully expanded the argument. */
2112 static void
2113 expand_arg (cpp_reader *pfile, macro_arg *arg)
2115 size_t capacity;
2116 bool saved_warn_trad;
2117 bool track_macro_exp_p = CPP_OPTION (pfile, track_macro_expansion);
2119 if (arg->count == 0
2120 || arg->expanded != NULL)
2121 return;
2123 /* Don't warn about funlike macros when pre-expanding. */
2124 saved_warn_trad = CPP_WTRADITIONAL (pfile);
2125 CPP_WTRADITIONAL (pfile) = 0;
2127 /* Loop, reading in the tokens of the argument. */
2128 capacity = 256;
2129 alloc_expanded_arg_mem (pfile, arg, capacity);
2131 if (track_macro_exp_p)
2132 push_extended_tokens_context (pfile, NULL, NULL,
2133 arg->virt_locs,
2134 arg->first,
2135 arg->count + 1);
2136 else
2137 push_ptoken_context (pfile, NULL, NULL,
2138 arg->first, arg->count + 1);
2140 for (;;)
2142 const cpp_token *token;
2143 source_location location;
2145 ensure_expanded_arg_room (pfile, arg, arg->expanded_count + 1,
2146 &capacity);
2148 token = cpp_get_token_1 (pfile, &location);
2150 if (token->type == CPP_EOF)
2151 break;
2153 set_arg_token (arg, token, location,
2154 arg->expanded_count, MACRO_ARG_TOKEN_EXPANDED,
2155 CPP_OPTION (pfile, track_macro_expansion));
2156 arg->expanded_count++;
2159 _cpp_pop_context (pfile);
2161 CPP_WTRADITIONAL (pfile) = saved_warn_trad;
2164 /* Returns the macro associated to the current context if we are in
2165 the context a macro expansion, NULL otherwise. */
2166 static cpp_hashnode*
2167 macro_of_context (cpp_context *context)
2169 if (context == NULL)
2170 return NULL;
2172 return (context->tokens_kind == TOKENS_KIND_EXTENDED)
2173 ? context->c.mc->macro_node
2174 : context->c.macro;
2177 /* Return TRUE iff we are expanding a macro or are about to start
2178 expanding one. If we are effectively expanding a macro, the
2179 function macro_of_context returns a pointer to the macro being
2180 expanded. */
2181 static bool
2182 in_macro_expansion_p (cpp_reader *pfile)
2184 if (pfile == NULL)
2185 return false;
2187 return (pfile->about_to_expand_macro_p
2188 || macro_of_context (pfile->context));
2191 /* Pop the current context off the stack, re-enabling the macro if the
2192 context represented a macro's replacement list. Initially the
2193 context structure was not freed so that we can re-use it later, but
2194 now we do free it to reduce peak memory consumption. */
2195 void
2196 _cpp_pop_context (cpp_reader *pfile)
2198 cpp_context *context = pfile->context;
2200 /* We should not be popping the base context. */
2201 if (context == &pfile->base_context)
2202 abort ();
2204 if (context->c.macro)
2206 cpp_hashnode *macro;
2207 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
2209 macro_context *mc = context->c.mc;
2210 macro = mc->macro_node;
2211 /* If context->buff is set, it means the life time of tokens
2212 is bound to the life time of this context; so we must
2213 free the tokens; that means we must free the virtual
2214 locations of these tokens too. */
2215 if (context->buff && mc->virt_locs)
2217 free (mc->virt_locs);
2218 mc->virt_locs = NULL;
2220 free (mc);
2221 context->c.mc = NULL;
2223 else
2224 macro = context->c.macro;
2226 /* Beware that MACRO can be NULL in cases like when we are
2227 called from expand_arg. In those cases, a dummy context with
2228 tokens is pushed just for the purpose of walking them using
2229 cpp_get_token_1. In that case, no 'macro' field is set into
2230 the dummy context. */
2231 if (macro != NULL
2232 /* Several contiguous macro expansion contexts can be
2233 associated to the same macro; that means it's the same
2234 macro expansion that spans across all these (sub)
2235 contexts. So we should re-enable an expansion-disabled
2236 macro only when we are sure we are really out of that
2237 macro expansion. */
2238 && macro_of_context (context->prev) != macro)
2239 macro->flags &= ~NODE_DISABLED;
2242 if (context->buff)
2244 /* Decrease memory peak consumption by freeing the memory used
2245 by the context. */
2246 _cpp_free_buff (context->buff);
2249 pfile->context = context->prev;
2250 /* decrease peak memory consumption by feeing the context. */
2251 pfile->context->next = NULL;
2252 free (context);
2255 /* Return TRUE if we reached the end of the set of tokens stored in
2256 CONTEXT, FALSE otherwise. */
2257 static inline bool
2258 reached_end_of_context (cpp_context *context)
2260 if (context->tokens_kind == TOKENS_KIND_DIRECT)
2261 return FIRST (context).token == LAST (context).token;
2262 else if (context->tokens_kind == TOKENS_KIND_INDIRECT
2263 || context->tokens_kind == TOKENS_KIND_EXTENDED)
2264 return FIRST (context).ptoken == LAST (context).ptoken;
2265 else
2266 abort ();
2269 /* Consume the next token contained in the current context of PFILE,
2270 and return it in *TOKEN. It's "full location" is returned in
2271 *LOCATION. If -ftrack-macro-location is in effeect, fFull location"
2272 means the location encoding the locus of the token across macro
2273 expansion; otherwise it's just is the "normal" location of the
2274 token which (*TOKEN)->src_loc. */
2275 static inline void
2276 consume_next_token_from_context (cpp_reader *pfile,
2277 const cpp_token ** token,
2278 source_location *location)
2280 cpp_context *c = pfile->context;
2282 if ((c)->tokens_kind == TOKENS_KIND_DIRECT)
2284 *token = FIRST (c).token;
2285 *location = (*token)->src_loc;
2286 FIRST (c).token++;
2288 else if ((c)->tokens_kind == TOKENS_KIND_INDIRECT)
2290 *token = *FIRST (c).ptoken;
2291 *location = (*token)->src_loc;
2292 FIRST (c).ptoken++;
2294 else if ((c)->tokens_kind == TOKENS_KIND_EXTENDED)
2296 macro_context *m = c->c.mc;
2297 *token = *FIRST (c).ptoken;
2298 if (m->virt_locs)
2300 *location = *m->cur_virt_loc;
2301 m->cur_virt_loc++;
2303 else
2304 *location = (*token)->src_loc;
2305 FIRST (c).ptoken++;
2307 else
2308 abort ();
2311 /* In the traditional mode of the preprocessor, if we are currently in
2312 a directive, the location of a token must be the location of the
2313 start of the directive line. This function returns the proper
2314 location if we are in the traditional mode, and just returns
2315 LOCATION otherwise. */
2317 static inline source_location
2318 maybe_adjust_loc_for_trad_cpp (cpp_reader *pfile, source_location location)
2320 if (CPP_OPTION (pfile, traditional))
2322 if (pfile->state.in_directive)
2323 return pfile->directive_line;
2325 return location;
2328 /* Routine to get a token as well as its location.
2330 Macro expansions and directives are transparently handled,
2331 including entering included files. Thus tokens are post-macro
2332 expansion, and after any intervening directives. External callers
2333 see CPP_EOF only at EOF. Internal callers also see it when meeting
2334 a directive inside a macro call, when at the end of a directive and
2335 state.in_directive is still 1, and at the end of argument
2336 pre-expansion.
2338 LOC is an out parameter; *LOC is set to the location "as expected
2339 by the user". Please read the comment of
2340 cpp_get_token_with_location to learn more about the meaning of this
2341 location. */
2342 static const cpp_token*
2343 cpp_get_token_1 (cpp_reader *pfile, source_location *location)
2345 const cpp_token *result;
2346 /* This token is a virtual token that either encodes a location
2347 related to macro expansion or a spelling location. */
2348 source_location virt_loc = 0;
2349 /* pfile->about_to_expand_macro_p can be overriden by indirect calls
2350 to functions that push macro contexts. So let's save it so that
2351 we can restore it when we are about to leave this routine. */
2352 bool saved_about_to_expand_macro = pfile->about_to_expand_macro_p;
2354 for (;;)
2356 cpp_hashnode *node;
2357 cpp_context *context = pfile->context;
2359 /* Context->prev == 0 <=> base context. */
2360 if (!context->prev)
2362 result = _cpp_lex_token (pfile);
2363 virt_loc = result->src_loc;
2365 else if (!reached_end_of_context (context))
2367 consume_next_token_from_context (pfile, &result,
2368 &virt_loc);
2369 if (result->flags & PASTE_LEFT)
2371 paste_all_tokens (pfile, result);
2372 if (pfile->state.in_directive)
2373 continue;
2374 result = padding_token (pfile, result);
2375 goto out;
2378 else
2380 if (pfile->context->c.macro)
2381 ++num_expanded_macros_counter;
2382 _cpp_pop_context (pfile);
2383 if (pfile->state.in_directive)
2384 continue;
2385 result = &pfile->avoid_paste;
2386 goto out;
2389 if (pfile->state.in_directive && result->type == CPP_COMMENT)
2390 continue;
2392 if (result->type != CPP_NAME)
2393 break;
2395 node = result->val.node.node;
2397 if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
2398 break;
2400 if (!(node->flags & NODE_DISABLED))
2402 int ret = 0;
2403 /* If not in a macro context, and we're going to start an
2404 expansion, record the location. */
2405 if (!in_macro_expansion_p (pfile))
2406 pfile->invocation_location = result->src_loc;
2407 if (pfile->state.prevent_expansion)
2408 break;
2410 /* Conditional macros require that a predicate be evaluated
2411 first. */
2412 if ((node->flags & NODE_CONDITIONAL) != 0)
2414 if (pfile->cb.macro_to_expand)
2416 bool whitespace_after;
2417 const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
2419 whitespace_after = (peek_tok->type == CPP_PADDING
2420 || (peek_tok->flags & PREV_WHITE));
2421 node = pfile->cb.macro_to_expand (pfile, result);
2422 if (node)
2423 ret = enter_macro_context (pfile, node, result,
2424 virt_loc);
2425 else if (whitespace_after)
2427 /* If macro_to_expand hook returned NULL and it
2428 ate some tokens, see if we don't need to add
2429 a padding token in between this and the
2430 next token. */
2431 peek_tok = cpp_peek_token (pfile, 0);
2432 if (peek_tok->type != CPP_PADDING
2433 && (peek_tok->flags & PREV_WHITE) == 0)
2434 _cpp_push_token_context (pfile, NULL,
2435 padding_token (pfile,
2436 peek_tok), 1);
2440 else
2441 ret = enter_macro_context (pfile, node, result,
2442 virt_loc);
2443 if (ret)
2445 if (pfile->state.in_directive || ret == 2)
2446 continue;
2447 result = padding_token (pfile, result);
2448 goto out;
2451 else
2453 /* Flag this token as always unexpandable. FIXME: move this
2454 to collect_args()?. */
2455 cpp_token *t = _cpp_temp_token (pfile);
2456 t->type = result->type;
2457 t->flags = result->flags | NO_EXPAND;
2458 t->val = result->val;
2459 result = t;
2462 break;
2465 out:
2466 if (location != NULL)
2468 if (virt_loc == 0)
2469 virt_loc = result->src_loc;
2470 *location = virt_loc;
2472 if (!CPP_OPTION (pfile, track_macro_expansion)
2473 && macro_of_context (pfile->context) != NULL)
2474 /* We are in a macro expansion context, are not tracking
2475 virtual location, but were asked to report the location
2476 of the expansion point of the macro being expanded. */
2477 *location = pfile->invocation_location;
2479 *location = maybe_adjust_loc_for_trad_cpp (pfile, *location);
2482 pfile->about_to_expand_macro_p = saved_about_to_expand_macro;
2483 return result;
2486 /* External routine to get a token. Also used nearly everywhere
2487 internally, except for places where we know we can safely call
2488 _cpp_lex_token directly, such as lexing a directive name.
2490 Macro expansions and directives are transparently handled,
2491 including entering included files. Thus tokens are post-macro
2492 expansion, and after any intervening directives. External callers
2493 see CPP_EOF only at EOF. Internal callers also see it when meeting
2494 a directive inside a macro call, when at the end of a directive and
2495 state.in_directive is still 1, and at the end of argument
2496 pre-expansion. */
2497 const cpp_token *
2498 cpp_get_token (cpp_reader *pfile)
2500 return cpp_get_token_1 (pfile, NULL);
2503 /* Like cpp_get_token, but also returns a virtual token location
2504 separate from the spelling location carried by the returned token.
2506 LOC is an out parameter; *LOC is set to the location "as expected
2507 by the user". This matters when a token results from macro
2508 expansion; in that case the token's spelling location indicates the
2509 locus of the token in the definition of the macro but *LOC
2510 virtually encodes all the other meaningful locuses associated to
2511 the token.
2513 What? virtual location? Yes, virtual location.
2515 If the token results from macro expansion and if macro expansion
2516 location tracking is enabled its virtual location encodes (at the
2517 same time):
2519 - the spelling location of the token
2521 - the locus of the macro expansion point
2523 - the locus of the point where the token got instantiated as part
2524 of the macro expansion process.
2526 You have to use the linemap API to get the locus you are interested
2527 in from a given virtual location.
2529 Note however that virtual locations are not necessarily ordered for
2530 relations '<' and '>'. One must use the function
2531 linemap_location_before_p instead of using the relational operator
2532 '<'.
2534 If macro expansion tracking is off and if the token results from
2535 macro expansion the virtual location is the expansion point of the
2536 macro that got expanded.
2538 When the token doesn't result from macro expansion, the virtual
2539 location is just the same thing as its spelling location. */
2541 const cpp_token *
2542 cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
2544 return cpp_get_token_1 (pfile, loc);
2547 /* Returns true if we're expanding an object-like macro that was
2548 defined in a system header. Just checks the macro at the top of
2549 the stack. Used for diagnostic suppression. */
2551 cpp_sys_macro_p (cpp_reader *pfile)
2553 cpp_hashnode *node = NULL;
2555 if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2556 node = pfile->context->c.mc->macro_node;
2557 else
2558 node = pfile->context->c.macro;
2560 return node && node->value.macro && node->value.macro->syshdr;
2563 /* Read each token in, until end of the current file. Directives are
2564 transparently processed. */
2565 void
2566 cpp_scan_nooutput (cpp_reader *pfile)
2568 /* Request a CPP_EOF token at the end of this file, rather than
2569 transparently continuing with the including file. */
2570 pfile->buffer->return_at_eof = true;
2572 pfile->state.discarding_output++;
2573 pfile->state.prevent_expansion++;
2575 if (CPP_OPTION (pfile, traditional))
2576 while (_cpp_read_logical_line_trad (pfile))
2578 else
2579 while (cpp_get_token (pfile)->type != CPP_EOF)
2582 pfile->state.discarding_output--;
2583 pfile->state.prevent_expansion--;
2586 /* Step back one or more tokens obtained from the lexer. */
2587 void
2588 _cpp_backup_tokens_direct (cpp_reader *pfile, unsigned int count)
2590 pfile->lookaheads += count;
2591 while (count--)
2593 pfile->cur_token--;
2594 if (pfile->cur_token == pfile->cur_run->base
2595 /* Possible with -fpreprocessed and no leading #line. */
2596 && pfile->cur_run->prev != NULL)
2598 pfile->cur_run = pfile->cur_run->prev;
2599 pfile->cur_token = pfile->cur_run->limit;
2604 /* Step back one (or more) tokens. Can only step back more than 1 if
2605 they are from the lexer, and not from macro expansion. */
2606 void
2607 _cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
2609 if (pfile->context->prev == NULL)
2610 _cpp_backup_tokens_direct (pfile, count);
2611 else
2613 if (count != 1)
2614 abort ();
2615 if (pfile->context->tokens_kind == TOKENS_KIND_DIRECT)
2616 FIRST (pfile->context).token--;
2617 else if (pfile->context->tokens_kind == TOKENS_KIND_INDIRECT)
2618 FIRST (pfile->context).ptoken--;
2619 else if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2621 FIRST (pfile->context).ptoken--;
2622 if (pfile->context->c.macro)
2624 macro_context *m = pfile->context->c.mc;
2625 m->cur_virt_loc--;
2626 #ifdef ENABLE_CHECKING
2627 if (m->cur_virt_loc < m->virt_locs)
2628 abort ();
2629 #endif
2631 else
2632 abort ();
2634 else
2635 abort ();
2639 /* #define directive parsing and handling. */
2641 /* Returns nonzero if a macro redefinition warning is required. */
2642 static bool
2643 warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node,
2644 const cpp_macro *macro2)
2646 const cpp_macro *macro1;
2647 unsigned int i;
2649 /* Some redefinitions need to be warned about regardless. */
2650 if (node->flags & NODE_WARN)
2651 return true;
2653 /* Suppress warnings for builtins that lack the NODE_WARN flag. */
2654 if (node->flags & NODE_BUILTIN)
2656 if (!pfile->cb.user_builtin_macro
2657 || !pfile->cb.user_builtin_macro (pfile, node))
2658 return false;
2661 /* Redefinitions of conditional (context-sensitive) macros, on
2662 the other hand, must be allowed silently. */
2663 if (node->flags & NODE_CONDITIONAL)
2664 return false;
2666 /* Redefinition of a macro is allowed if and only if the old and new
2667 definitions are the same. (6.10.3 paragraph 2). */
2668 macro1 = node->value.macro;
2670 /* Don't check count here as it can be different in valid
2671 traditional redefinitions with just whitespace differences. */
2672 if (macro1->paramc != macro2->paramc
2673 || macro1->fun_like != macro2->fun_like
2674 || macro1->variadic != macro2->variadic)
2675 return true;
2677 /* Check parameter spellings. */
2678 for (i = 0; i < macro1->paramc; i++)
2679 if (macro1->params[i] != macro2->params[i])
2680 return true;
2682 /* Check the replacement text or tokens. */
2683 if (CPP_OPTION (pfile, traditional))
2684 return _cpp_expansions_different_trad (macro1, macro2);
2686 if (macro1->count != macro2->count)
2687 return true;
2689 for (i = 0; i < macro1->count; i++)
2690 if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
2691 return true;
2693 return false;
2696 /* Free the definition of hashnode H. */
2697 void
2698 _cpp_free_definition (cpp_hashnode *h)
2700 /* Macros and assertions no longer have anything to free. */
2701 h->type = NT_VOID;
2702 /* Clear builtin flag in case of redefinition. */
2703 h->flags &= ~(NODE_BUILTIN | NODE_DISABLED | NODE_USED);
2706 /* Save parameter NODE to the parameter list of macro MACRO. Returns
2707 zero on success, nonzero if the parameter is a duplicate. */
2708 bool
2709 _cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
2711 unsigned int len;
2712 /* Constraint 6.10.3.6 - duplicate parameter names. */
2713 if (node->flags & NODE_MACRO_ARG)
2715 cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
2716 NODE_NAME (node));
2717 return true;
2720 if (BUFF_ROOM (pfile->a_buff)
2721 < (macro->paramc + 1) * sizeof (cpp_hashnode *))
2722 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
2724 ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
2725 node->flags |= NODE_MACRO_ARG;
2726 len = macro->paramc * sizeof (union _cpp_hashnode_value);
2727 if (len > pfile->macro_buffer_len)
2729 pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
2730 len);
2731 pfile->macro_buffer_len = len;
2733 ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
2734 = node->value;
2736 node->value.arg_index = macro->paramc;
2737 return false;
2740 /* Check the syntax of the parameters in a MACRO definition. Returns
2741 false if an error occurs. */
2742 static bool
2743 parse_params (cpp_reader *pfile, cpp_macro *macro)
2745 unsigned int prev_ident = 0;
2747 for (;;)
2749 const cpp_token *token = _cpp_lex_token (pfile);
2751 switch (token->type)
2753 default:
2754 /* Allow/ignore comments in parameter lists if we are
2755 preserving comments in macro expansions. */
2756 if (token->type == CPP_COMMENT
2757 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
2758 continue;
2760 cpp_error (pfile, CPP_DL_ERROR,
2761 "\"%s\" may not appear in macro parameter list",
2762 cpp_token_as_text (pfile, token));
2763 return false;
2765 case CPP_NAME:
2766 if (prev_ident)
2768 cpp_error (pfile, CPP_DL_ERROR,
2769 "macro parameters must be comma-separated");
2770 return false;
2772 prev_ident = 1;
2774 if (_cpp_save_parameter (pfile, macro, token->val.node.node))
2775 return false;
2776 continue;
2778 case CPP_CLOSE_PAREN:
2779 if (prev_ident || macro->paramc == 0)
2780 return true;
2782 /* Fall through to pick up the error. */
2783 case CPP_COMMA:
2784 if (!prev_ident)
2786 cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
2787 return false;
2789 prev_ident = 0;
2790 continue;
2792 case CPP_ELLIPSIS:
2793 macro->variadic = 1;
2794 if (!prev_ident)
2796 _cpp_save_parameter (pfile, macro,
2797 pfile->spec_nodes.n__VA_ARGS__);
2798 pfile->state.va_args_ok = 1;
2799 if (! CPP_OPTION (pfile, c99)
2800 && CPP_OPTION (pfile, cpp_pedantic)
2801 && CPP_OPTION (pfile, warn_variadic_macros))
2802 cpp_pedwarning
2803 (pfile, CPP_W_VARIADIC_MACROS,
2804 "anonymous variadic macros were introduced in C99");
2806 else if (CPP_OPTION (pfile, cpp_pedantic)
2807 && CPP_OPTION (pfile, warn_variadic_macros))
2808 cpp_pedwarning (pfile, CPP_W_VARIADIC_MACROS,
2809 "ISO C does not permit named variadic macros");
2811 /* We're at the end, and just expect a closing parenthesis. */
2812 token = _cpp_lex_token (pfile);
2813 if (token->type == CPP_CLOSE_PAREN)
2814 return true;
2815 /* Fall through. */
2817 case CPP_EOF:
2818 cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
2819 return false;
2824 /* Allocate room for a token from a macro's replacement list. */
2825 static cpp_token *
2826 alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
2828 if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
2829 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
2831 return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
2834 /* Lex a token from the expansion of MACRO, but mark parameters as we
2835 find them and warn of traditional stringification. */
2836 static cpp_token *
2837 lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
2839 cpp_token *token, *saved_cur_token;
2841 saved_cur_token = pfile->cur_token;
2842 pfile->cur_token = alloc_expansion_token (pfile, macro);
2843 token = _cpp_lex_direct (pfile);
2844 pfile->cur_token = saved_cur_token;
2846 /* Is this a parameter? */
2847 if (token->type == CPP_NAME
2848 && (token->val.node.node->flags & NODE_MACRO_ARG) != 0)
2850 token->type = CPP_MACRO_ARG;
2851 token->val.macro_arg.arg_no = token->val.node.node->value.arg_index;
2853 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
2854 && (token->type == CPP_STRING || token->type == CPP_CHAR))
2855 check_trad_stringification (pfile, macro, &token->val.str);
2857 return token;
2860 static bool
2861 create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
2863 cpp_token *token;
2864 const cpp_token *ctoken;
2865 bool following_paste_op = false;
2866 const char *paste_op_error_msg =
2867 N_("'##' cannot appear at either end of a macro expansion");
2868 unsigned int num_extra_tokens = 0;
2870 /* Get the first token of the expansion (or the '(' of a
2871 function-like macro). */
2872 ctoken = _cpp_lex_token (pfile);
2874 if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
2876 bool ok = parse_params (pfile, macro);
2877 macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
2878 if (!ok)
2879 return false;
2881 /* Success. Commit or allocate the parameter array. */
2882 if (pfile->hash_table->alloc_subobject)
2884 cpp_hashnode **params =
2885 (cpp_hashnode **) pfile->hash_table->alloc_subobject
2886 (sizeof (cpp_hashnode *) * macro->paramc);
2887 memcpy (params, macro->params,
2888 sizeof (cpp_hashnode *) * macro->paramc);
2889 macro->params = params;
2891 else
2892 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
2893 macro->fun_like = 1;
2895 else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
2897 /* While ISO C99 requires whitespace before replacement text
2898 in a macro definition, ISO C90 with TC1 allows there characters
2899 from the basic source character set. */
2900 if (CPP_OPTION (pfile, c99))
2901 cpp_error (pfile, CPP_DL_PEDWARN,
2902 "ISO C99 requires whitespace after the macro name");
2903 else
2905 int warntype = CPP_DL_WARNING;
2906 switch (ctoken->type)
2908 case CPP_ATSIGN:
2909 case CPP_AT_NAME:
2910 case CPP_OBJC_STRING:
2911 /* '@' is not in basic character set. */
2912 warntype = CPP_DL_PEDWARN;
2913 break;
2914 case CPP_OTHER:
2915 /* Basic character set sans letters, digits and _. */
2916 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
2917 ctoken->val.str.text[0]) == NULL)
2918 warntype = CPP_DL_PEDWARN;
2919 break;
2920 default:
2921 /* All other tokens start with a character from basic
2922 character set. */
2923 break;
2925 cpp_error (pfile, warntype,
2926 "missing whitespace after the macro name");
2930 if (macro->fun_like)
2931 token = lex_expansion_token (pfile, macro);
2932 else
2934 token = alloc_expansion_token (pfile, macro);
2935 *token = *ctoken;
2938 for (;;)
2940 /* Check the stringifying # constraint 6.10.3.2.1 of
2941 function-like macros when lexing the subsequent token. */
2942 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
2944 if (token->type == CPP_MACRO_ARG)
2946 if (token->flags & PREV_WHITE)
2947 token->flags |= SP_PREV_WHITE;
2948 if (token[-1].flags & DIGRAPH)
2949 token->flags |= SP_DIGRAPH;
2950 token->flags &= ~PREV_WHITE;
2951 token->flags |= STRINGIFY_ARG;
2952 token->flags |= token[-1].flags & PREV_WHITE;
2953 token[-1] = token[0];
2954 macro->count--;
2956 /* Let assembler get away with murder. */
2957 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
2959 cpp_error (pfile, CPP_DL_ERROR,
2960 "'#' is not followed by a macro parameter");
2961 return false;
2965 if (token->type == CPP_EOF)
2967 /* Paste operator constraint 6.10.3.3.1:
2968 Token-paste ##, can appear in both object-like and
2969 function-like macros, but not at the end. */
2970 if (following_paste_op)
2972 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
2973 return false;
2975 break;
2978 /* Paste operator constraint 6.10.3.3.1. */
2979 if (token->type == CPP_PASTE)
2981 /* Token-paste ##, can appear in both object-like and
2982 function-like macros, but not at the beginning. */
2983 if (macro->count == 1)
2985 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
2986 return false;
2989 if (token[-1].flags & PASTE_LEFT)
2991 macro->extra_tokens = 1;
2992 num_extra_tokens++;
2993 token->val.token_no = macro->count - 1;
2995 else
2997 --macro->count;
2998 token[-1].flags |= PASTE_LEFT;
2999 if (token->flags & DIGRAPH)
3000 token[-1].flags |= SP_DIGRAPH;
3001 if (token->flags & PREV_WHITE)
3002 token[-1].flags |= SP_PREV_WHITE;
3006 following_paste_op = (token->type == CPP_PASTE);
3007 token = lex_expansion_token (pfile, macro);
3010 macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
3011 macro->traditional = 0;
3013 /* Don't count the CPP_EOF. */
3014 macro->count--;
3016 /* Clear whitespace on first token for warn_of_redefinition(). */
3017 if (macro->count)
3018 macro->exp.tokens[0].flags &= ~PREV_WHITE;
3020 /* Commit or allocate the memory. */
3021 if (pfile->hash_table->alloc_subobject)
3023 cpp_token *tokns =
3024 (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
3025 * macro->count);
3026 if (num_extra_tokens)
3028 /* Place second and subsequent ## or %:%: tokens in
3029 sequences of consecutive such tokens at the end of the
3030 list to preserve information about where they appear, how
3031 they are spelt and whether they are preceded by
3032 whitespace without otherwise interfering with macro
3033 expansion. */
3034 cpp_token *normal_dest = tokns;
3035 cpp_token *extra_dest = tokns + macro->count - num_extra_tokens;
3036 unsigned int i;
3037 for (i = 0; i < macro->count; i++)
3039 if (macro->exp.tokens[i].type == CPP_PASTE)
3040 *extra_dest++ = macro->exp.tokens[i];
3041 else
3042 *normal_dest++ = macro->exp.tokens[i];
3045 else
3046 memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
3047 macro->exp.tokens = tokns;
3049 else
3050 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
3052 return true;
3055 /* Parse a macro and save its expansion. Returns nonzero on success. */
3056 bool
3057 _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
3059 cpp_macro *macro;
3060 unsigned int i;
3061 bool ok;
3063 if (pfile->hash_table->alloc_subobject)
3064 macro = (cpp_macro *) pfile->hash_table->alloc_subobject
3065 (sizeof (cpp_macro));
3066 else
3067 macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
3068 macro->line = pfile->directive_line;
3069 macro->params = 0;
3070 macro->paramc = 0;
3071 macro->variadic = 0;
3072 macro->used = !CPP_OPTION (pfile, warn_unused_macros);
3073 macro->count = 0;
3074 macro->fun_like = 0;
3075 macro->extra_tokens = 0;
3076 /* To suppress some diagnostics. */
3077 macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
3079 if (CPP_OPTION (pfile, traditional))
3080 ok = _cpp_create_trad_definition (pfile, macro);
3081 else
3083 ok = create_iso_definition (pfile, macro);
3085 /* We set the type for SEEN_EOL() in directives.c.
3087 Longer term we should lex the whole line before coming here,
3088 and just copy the expansion. */
3090 /* Stop the lexer accepting __VA_ARGS__. */
3091 pfile->state.va_args_ok = 0;
3094 /* Clear the fast argument lookup indices. */
3095 for (i = macro->paramc; i-- > 0; )
3097 struct cpp_hashnode *node = macro->params[i];
3098 node->flags &= ~ NODE_MACRO_ARG;
3099 node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
3102 if (!ok)
3103 return ok;
3105 if (node->type == NT_MACRO)
3107 if (CPP_OPTION (pfile, warn_unused_macros))
3108 _cpp_warn_if_unused_macro (pfile, node, NULL);
3110 if (warn_of_redefinition (pfile, node, macro))
3112 const int reason = (node->flags & NODE_BUILTIN)
3113 ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
3114 bool warned;
3116 warned = cpp_pedwarning_with_line (pfile, reason,
3117 pfile->directive_line, 0,
3118 "\"%s\" redefined",
3119 NODE_NAME (node));
3121 if (warned && node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
3122 cpp_error_with_line (pfile, CPP_DL_NOTE,
3123 node->value.macro->line, 0,
3124 "this is the location of the previous definition");
3128 if (node->type != NT_VOID)
3129 _cpp_free_definition (node);
3131 /* Enter definition in hash table. */
3132 node->type = NT_MACRO;
3133 node->value.macro = macro;
3134 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
3135 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
3136 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
3137 in the C standard, as something that one must use in C++.
3138 However DR#593 indicates that these aren't actually mentioned
3139 in the C++ standard. We special-case them anyway. */
3140 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
3141 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
3142 node->flags |= NODE_WARN;
3144 /* If user defines one of the conditional macros, remove the
3145 conditional flag */
3146 node->flags &= ~NODE_CONDITIONAL;
3148 return ok;
3151 /* Warn if a token in STRING matches one of a function-like MACRO's
3152 parameters. */
3153 static void
3154 check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
3155 const cpp_string *string)
3157 unsigned int i, len;
3158 const uchar *p, *q, *limit;
3160 /* Loop over the string. */
3161 limit = string->text + string->len - 1;
3162 for (p = string->text + 1; p < limit; p = q)
3164 /* Find the start of an identifier. */
3165 while (p < limit && !is_idstart (*p))
3166 p++;
3168 /* Find the end of the identifier. */
3169 q = p;
3170 while (q < limit && is_idchar (*q))
3171 q++;
3173 len = q - p;
3175 /* Loop over the function macro arguments to see if the
3176 identifier inside the string matches one of them. */
3177 for (i = 0; i < macro->paramc; i++)
3179 const cpp_hashnode *node = macro->params[i];
3181 if (NODE_LEN (node) == len
3182 && !memcmp (p, NODE_NAME (node), len))
3184 cpp_error (pfile, CPP_DL_WARNING,
3185 "macro argument \"%s\" would be stringified in traditional C",
3186 NODE_NAME (node));
3187 break;
3193 /* Returns the name, arguments and expansion of a macro, in a format
3194 suitable to be read back in again, and therefore also for DWARF 2
3195 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
3196 Caller is expected to generate the "#define" bit if needed. The
3197 returned text is temporary, and automatically freed later. */
3198 const unsigned char *
3199 cpp_macro_definition (cpp_reader *pfile, cpp_hashnode *node)
3201 unsigned int i, len;
3202 const cpp_macro *macro;
3203 unsigned char *buffer;
3205 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
3207 if (node->type != NT_MACRO
3208 || !pfile->cb.user_builtin_macro
3209 || !pfile->cb.user_builtin_macro (pfile, node))
3211 cpp_error (pfile, CPP_DL_ICE,
3212 "invalid hash type %d in cpp_macro_definition",
3213 node->type);
3214 return 0;
3218 macro = node->value.macro;
3219 /* Calculate length. */
3220 len = NODE_LEN (node) + 2; /* ' ' and NUL. */
3221 if (macro->fun_like)
3223 len += 4; /* "()" plus possible final ".." of named
3224 varargs (we have + 1 below). */
3225 for (i = 0; i < macro->paramc; i++)
3226 len += NODE_LEN (macro->params[i]) + 1; /* "," */
3229 /* This should match below where we fill in the buffer. */
3230 if (CPP_OPTION (pfile, traditional))
3231 len += _cpp_replacement_text_len (macro);
3232 else
3234 unsigned int count = macro_real_token_count (macro);
3235 for (i = 0; i < count; i++)
3237 cpp_token *token = &macro->exp.tokens[i];
3239 if (token->type == CPP_MACRO_ARG)
3240 len += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
3241 else
3242 len += cpp_token_len (token);
3244 if (token->flags & STRINGIFY_ARG)
3245 len++; /* "#" */
3246 if (token->flags & PASTE_LEFT)
3247 len += 3; /* " ##" */
3248 if (token->flags & PREV_WHITE)
3249 len++; /* " " */
3253 if (len > pfile->macro_buffer_len)
3255 pfile->macro_buffer = XRESIZEVEC (unsigned char,
3256 pfile->macro_buffer, len);
3257 pfile->macro_buffer_len = len;
3260 /* Fill in the buffer. Start with the macro name. */
3261 buffer = pfile->macro_buffer;
3262 memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
3263 buffer += NODE_LEN (node);
3265 /* Parameter names. */
3266 if (macro->fun_like)
3268 *buffer++ = '(';
3269 for (i = 0; i < macro->paramc; i++)
3271 cpp_hashnode *param = macro->params[i];
3273 if (param != pfile->spec_nodes.n__VA_ARGS__)
3275 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
3276 buffer += NODE_LEN (param);
3279 if (i + 1 < macro->paramc)
3280 /* Don't emit a space after the comma here; we're trying
3281 to emit a Dwarf-friendly definition, and the Dwarf spec
3282 forbids spaces in the argument list. */
3283 *buffer++ = ',';
3284 else if (macro->variadic)
3285 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
3287 *buffer++ = ')';
3290 /* The Dwarf spec requires a space after the macro name, even if the
3291 definition is the empty string. */
3292 *buffer++ = ' ';
3294 if (CPP_OPTION (pfile, traditional))
3295 buffer = _cpp_copy_replacement_text (macro, buffer);
3296 else if (macro->count)
3297 /* Expansion tokens. */
3299 unsigned int count = macro_real_token_count (macro);
3300 for (i = 0; i < count; i++)
3302 cpp_token *token = &macro->exp.tokens[i];
3304 if (token->flags & PREV_WHITE)
3305 *buffer++ = ' ';
3306 if (token->flags & STRINGIFY_ARG)
3307 *buffer++ = '#';
3309 if (token->type == CPP_MACRO_ARG)
3311 memcpy (buffer,
3312 NODE_NAME (macro->params[token->val.macro_arg.arg_no - 1]),
3313 NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]));
3314 buffer += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
3316 else
3317 buffer = cpp_spell_token (pfile, token, buffer, false);
3319 if (token->flags & PASTE_LEFT)
3321 *buffer++ = ' ';
3322 *buffer++ = '#';
3323 *buffer++ = '#';
3324 /* Next has PREV_WHITE; see _cpp_create_definition. */
3329 *buffer = '\0';
3330 return pfile->macro_buffer;