2014-03-26 Richard Biener <rguenther@suse.de>
[official-gcc.git] / libcpp / macro.c
blob11e50f4849c1054ebfc071d610d6fd3e6e41930b
1 /* Part of CPP library. (Macro and #define handling.)
2 Copyright (C) 1986-2014 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 unsigned tokens_count = macro_real_token_count (macro);
1119 if (CPP_OPTION (pfile, track_macro_expansion))
1121 unsigned int i;
1122 const cpp_token *src = macro->exp.tokens;
1123 const struct line_map *map;
1124 source_location *virt_locs = NULL;
1125 _cpp_buff *macro_tokens
1126 = tokens_buff_new (pfile, tokens_count, &virt_locs);
1128 /* Create a macro map to record the locations of the
1129 tokens that are involved in the expansion. LOCATION
1130 is the location of the macro expansion point. */
1131 map = linemap_enter_macro (pfile->line_table,
1132 node, location, tokens_count);
1133 for (i = 0; i < tokens_count; ++i)
1135 tokens_buff_add_token (macro_tokens, virt_locs,
1136 src, src->src_loc,
1137 src->src_loc, map, i);
1138 ++src;
1140 push_extended_tokens_context (pfile, node,
1141 macro_tokens,
1142 virt_locs,
1143 (const cpp_token **)
1144 macro_tokens->base,
1145 tokens_count);
1147 else
1148 _cpp_push_token_context (pfile, node, macro->exp.tokens,
1149 tokens_count);
1150 num_macro_tokens_counter += tokens_count;
1153 if (pragma_buff)
1155 if (!pfile->state.in_directive)
1156 _cpp_push_token_context (pfile, NULL,
1157 padding_token (pfile, result), 1);
1160 unsigned tokens_count;
1161 _cpp_buff *tail = pragma_buff->next;
1162 pragma_buff->next = NULL;
1163 tokens_count = ((const cpp_token **) BUFF_FRONT (pragma_buff)
1164 - (const cpp_token **) pragma_buff->base);
1165 push_ptoken_context (pfile, NULL, pragma_buff,
1166 (const cpp_token **) pragma_buff->base,
1167 tokens_count);
1168 pragma_buff = tail;
1169 if (!CPP_OPTION (pfile, track_macro_expansion))
1170 num_macro_tokens_counter += tokens_count;
1173 while (pragma_buff != NULL);
1174 pfile->about_to_expand_macro_p = false;
1175 return 2;
1178 pfile->about_to_expand_macro_p = false;
1179 return 1;
1182 pfile->about_to_expand_macro_p = false;
1183 /* Handle built-in macros and the _Pragma operator. */
1184 return builtin_macro (pfile, node);
1187 /* De-allocate the memory used by BUFF which is an array of instances
1188 of macro_arg. NUM_ARGS is the number of instances of macro_arg
1189 present in BUFF. */
1190 static void
1191 delete_macro_args (_cpp_buff *buff, unsigned num_args)
1193 macro_arg *macro_args;
1194 unsigned i;
1196 if (buff == NULL)
1197 return;
1199 macro_args = (macro_arg *) buff->base;
1201 /* Walk instances of macro_arg to free their expanded tokens as well
1202 as their macro_arg::virt_locs members. */
1203 for (i = 0; i < num_args; ++i)
1205 if (macro_args[i].expanded)
1207 free (macro_args[i].expanded);
1208 macro_args[i].expanded = NULL;
1210 if (macro_args[i].virt_locs)
1212 free (macro_args[i].virt_locs);
1213 macro_args[i].virt_locs = NULL;
1215 if (macro_args[i].expanded_virt_locs)
1217 free (macro_args[i].expanded_virt_locs);
1218 macro_args[i].expanded_virt_locs = NULL;
1221 _cpp_free_buff (buff);
1224 /* Set the INDEXth token of the macro argument ARG. TOKEN is the token
1225 to set, LOCATION is its virtual location. "Virtual" location means
1226 the location that encodes loci across macro expansion. Otherwise
1227 it has to be TOKEN->SRC_LOC. KIND is the kind of tokens the
1228 argument ARG is supposed to contain. Note that ARG must be
1229 tailored so that it has enough room to contain INDEX + 1 numbers of
1230 tokens, at least. */
1231 static void
1232 set_arg_token (macro_arg *arg, const cpp_token *token,
1233 source_location location, size_t index,
1234 enum macro_arg_token_kind kind,
1235 bool track_macro_exp_p)
1237 const cpp_token **token_ptr;
1238 source_location *loc = NULL;
1240 token_ptr =
1241 arg_token_ptr_at (arg, index, kind,
1242 track_macro_exp_p ? &loc : NULL);
1243 *token_ptr = token;
1245 if (loc != NULL)
1247 #ifdef ENABLE_CHECKING
1248 if (kind == MACRO_ARG_TOKEN_STRINGIFIED
1249 || !track_macro_exp_p)
1250 /* We can't set the location of a stringified argument
1251 token and we can't set any location if we aren't tracking
1252 macro expansion locations. */
1253 abort ();
1254 #endif
1255 *loc = location;
1259 /* Get the pointer to the location of the argument token of the
1260 function-like macro argument ARG. This function must be called
1261 only when we -ftrack-macro-expansion is on. */
1262 static const source_location *
1263 get_arg_token_location (const macro_arg *arg,
1264 enum macro_arg_token_kind kind)
1266 const source_location *loc = NULL;
1267 const cpp_token **token_ptr =
1268 arg_token_ptr_at (arg, 0, kind, (source_location **) &loc);
1270 if (token_ptr == NULL)
1271 return NULL;
1273 return loc;
1276 /* Return the pointer to the INDEXth token of the macro argument ARG.
1277 KIND specifies the kind of token the macro argument ARG contains.
1278 If VIRT_LOCATION is non NULL, *VIRT_LOCATION is set to the address
1279 of the virtual location of the returned token if the
1280 -ftrack-macro-expansion flag is on; otherwise, it's set to the
1281 spelling location of the returned token. */
1282 static const cpp_token **
1283 arg_token_ptr_at (const macro_arg *arg, size_t index,
1284 enum macro_arg_token_kind kind,
1285 source_location **virt_location)
1287 const cpp_token **tokens_ptr = NULL;
1289 switch (kind)
1291 case MACRO_ARG_TOKEN_NORMAL:
1292 tokens_ptr = arg->first;
1293 break;
1294 case MACRO_ARG_TOKEN_STRINGIFIED:
1295 tokens_ptr = (const cpp_token **) &arg->stringified;
1296 break;
1297 case MACRO_ARG_TOKEN_EXPANDED:
1298 tokens_ptr = arg->expanded;
1299 break;
1302 if (tokens_ptr == NULL)
1303 /* This can happen for e.g, an empty token argument to a
1304 funtion-like macro. */
1305 return tokens_ptr;
1307 if (virt_location)
1309 if (kind == MACRO_ARG_TOKEN_NORMAL)
1310 *virt_location = &arg->virt_locs[index];
1311 else if (kind == MACRO_ARG_TOKEN_EXPANDED)
1312 *virt_location = &arg->expanded_virt_locs[index];
1313 else if (kind == MACRO_ARG_TOKEN_STRINGIFIED)
1314 *virt_location =
1315 (source_location *) &tokens_ptr[index]->src_loc;
1317 return &tokens_ptr[index];
1320 /* Initialize an iterator so that it iterates over the tokens of a
1321 function-like macro argument. KIND is the kind of tokens we want
1322 ITER to iterate over. TOKEN_PTR points the first token ITER will
1323 iterate over. */
1324 static void
1325 macro_arg_token_iter_init (macro_arg_token_iter *iter,
1326 bool track_macro_exp_p,
1327 enum macro_arg_token_kind kind,
1328 const macro_arg *arg,
1329 const cpp_token **token_ptr)
1331 iter->track_macro_exp_p = track_macro_exp_p;
1332 iter->kind = kind;
1333 iter->token_ptr = token_ptr;
1334 /* Unconditionally initialize this so that the compiler doesn't warn
1335 about iter->location_ptr being possibly uninitialized later after
1336 this code has been inlined somewhere. */
1337 iter->location_ptr = NULL;
1338 if (track_macro_exp_p)
1339 iter->location_ptr = get_arg_token_location (arg, kind);
1340 #ifdef ENABLE_CHECKING
1341 iter->num_forwards = 0;
1342 if (track_macro_exp_p
1343 && token_ptr != NULL
1344 && iter->location_ptr == NULL)
1345 abort ();
1346 #endif
1349 /* Move the iterator one token forward. Note that if IT was
1350 initialized on an argument that has a stringified token, moving it
1351 forward doesn't make sense as a stringified token is essentially one
1352 string. */
1353 static void
1354 macro_arg_token_iter_forward (macro_arg_token_iter *it)
1356 switch (it->kind)
1358 case MACRO_ARG_TOKEN_NORMAL:
1359 case MACRO_ARG_TOKEN_EXPANDED:
1360 it->token_ptr++;
1361 if (it->track_macro_exp_p)
1362 it->location_ptr++;
1363 break;
1364 case MACRO_ARG_TOKEN_STRINGIFIED:
1365 #ifdef ENABLE_CHECKING
1366 if (it->num_forwards > 0)
1367 abort ();
1368 #endif
1369 break;
1372 #ifdef ENABLE_CHECKING
1373 it->num_forwards++;
1374 #endif
1377 /* Return the token pointed to by the iterator. */
1378 static const cpp_token *
1379 macro_arg_token_iter_get_token (const macro_arg_token_iter *it)
1381 #ifdef ENABLE_CHECKING
1382 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1383 && it->num_forwards > 0)
1384 abort ();
1385 #endif
1386 if (it->token_ptr == NULL)
1387 return NULL;
1388 return *it->token_ptr;
1391 /* Return the location of the token pointed to by the iterator.*/
1392 static source_location
1393 macro_arg_token_iter_get_location (const macro_arg_token_iter *it)
1395 #ifdef ENABLE_CHECKING
1396 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1397 && it->num_forwards > 0)
1398 abort ();
1399 #endif
1400 if (it->track_macro_exp_p)
1401 return *it->location_ptr;
1402 else
1403 return (*it->token_ptr)->src_loc;
1406 /* Return the index of a token [resulting from macro expansion] inside
1407 the total list of tokens resulting from a given macro
1408 expansion. The index can be different depending on whether if we
1409 want each tokens resulting from function-like macro arguments
1410 expansion to have a different location or not.
1412 E.g, consider this function-like macro:
1414 #define M(x) x - 3
1416 Then consider us "calling" it (and thus expanding it) like:
1418 M(1+4)
1420 It will be expanded into:
1422 1+4-3
1424 Let's consider the case of the token '4'.
1426 Its index can be 2 (it's the third token of the set of tokens
1427 resulting from the expansion) or it can be 0 if we consider that
1428 all tokens resulting from the expansion of the argument "1+2" have
1429 the same index, which is 0. In this later case, the index of token
1430 '-' would then be 1 and the index of token '3' would be 2.
1432 The later case is useful to use less memory e.g, for the case of
1433 the user using the option -ftrack-macro-expansion=1.
1435 ABSOLUTE_TOKEN_INDEX is the index of the macro argument token we
1436 are interested in. CUR_REPLACEMENT_TOKEN is the token of the macro
1437 parameter (inside the macro replacement list) that corresponds to
1438 the macro argument for which ABSOLUTE_TOKEN_INDEX is a token index
1441 If we refer to the example above, for the '4' argument token,
1442 ABSOLUTE_TOKEN_INDEX would be set to 2, and CUR_REPLACEMENT_TOKEN
1443 would be set to the token 'x', in the replacement list "x - 3" of
1444 macro M.
1446 This is a subroutine of replace_args. */
1447 inline static unsigned
1448 expanded_token_index (cpp_reader *pfile, cpp_macro *macro,
1449 const cpp_token *cur_replacement_token,
1450 unsigned absolute_token_index)
1452 if (CPP_OPTION (pfile, track_macro_expansion) > 1)
1453 return absolute_token_index;
1454 return cur_replacement_token - macro->exp.tokens;
1457 /* Replace the parameters in a function-like macro of NODE with the
1458 actual ARGS, and place the result in a newly pushed token context.
1459 Expand each argument before replacing, unless it is operated upon
1460 by the # or ## operators. EXPANSION_POINT_LOC is the location of
1461 the expansion point of the macro. E.g, the location of the
1462 function-like macro invocation. */
1463 static void
1464 replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
1465 macro_arg *args, source_location expansion_point_loc)
1467 unsigned int i, total;
1468 const cpp_token *src, *limit;
1469 const cpp_token **first = NULL;
1470 macro_arg *arg;
1471 _cpp_buff *buff = NULL;
1472 source_location *virt_locs = NULL;
1473 unsigned int exp_count;
1474 const struct line_map *map = NULL;
1475 int track_macro_exp;
1477 /* First, fully macro-expand arguments, calculating the number of
1478 tokens in the final expansion as we go. The ordering of the if
1479 statements below is subtle; we must handle stringification before
1480 pasting. */
1482 /* EXP_COUNT is the number of tokens in the macro replacement
1483 list. TOTAL is the number of tokens /after/ macro parameters
1484 have been replaced by their arguments. */
1485 exp_count = macro_real_token_count (macro);
1486 total = exp_count;
1487 limit = macro->exp.tokens + exp_count;
1489 for (src = macro->exp.tokens; src < limit; src++)
1490 if (src->type == CPP_MACRO_ARG)
1492 /* Leading and trailing padding tokens. */
1493 total += 2;
1494 /* Account for leading and padding tokens in exp_count too.
1495 This is going to be important later down this function,
1496 when we want to handle the case of (track_macro_exp <
1497 2). */
1498 exp_count += 2;
1500 /* We have an argument. If it is not being stringified or
1501 pasted it is macro-replaced before insertion. */
1502 arg = &args[src->val.macro_arg.arg_no - 1];
1504 if (src->flags & STRINGIFY_ARG)
1506 if (!arg->stringified)
1507 arg->stringified = stringify_arg (pfile, arg);
1509 else if ((src->flags & PASTE_LEFT)
1510 || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
1511 total += arg->count - 1;
1512 else
1514 if (!arg->expanded)
1515 expand_arg (pfile, arg);
1516 total += arg->expanded_count - 1;
1520 /* When the compiler is called with the -ftrack-macro-expansion
1521 flag, we need to keep track of the location of each token that
1522 results from macro expansion.
1524 A token resulting from macro expansion is not a new token. It is
1525 simply the same token as the token coming from the macro
1526 definition. The new things that are allocated are the buffer
1527 that holds the tokens resulting from macro expansion and a new
1528 location that records many things like the locus of the expansion
1529 point as well as the original locus inside the definition of the
1530 macro. This location is called a virtual location.
1532 So the buffer BUFF holds a set of cpp_token*, and the buffer
1533 VIRT_LOCS holds the virtual locations of the tokens held by BUFF.
1535 Both of these two buffers are going to be hung off of the macro
1536 context, when the latter is pushed. The memory allocated to
1537 store the tokens and their locations is going to be freed once
1538 the context of macro expansion is popped.
1540 As far as tokens are concerned, the memory overhead of
1541 -ftrack-macro-expansion is proportional to the number of
1542 macros that get expanded multiplied by sizeof (source_location).
1543 The good news is that extra memory gets freed when the macro
1544 context is freed, i.e shortly after the macro got expanded. */
1546 /* Is the -ftrack-macro-expansion flag in effect? */
1547 track_macro_exp = CPP_OPTION (pfile, track_macro_expansion);
1549 /* Now allocate memory space for tokens and locations resulting from
1550 the macro expansion, copy the tokens and replace the arguments.
1551 This memory must be freed when the context of the macro MACRO is
1552 popped. */
1553 buff = tokens_buff_new (pfile, total, track_macro_exp ? &virt_locs : NULL);
1555 first = (const cpp_token **) buff->base;
1557 /* Create a macro map to record the locations of the tokens that are
1558 involved in the expansion. Note that the expansion point is set
1559 to the location of the closing parenthesis. Otherwise, the
1560 subsequent map created for the first token that comes after the
1561 macro map might have a wrong line number. That would lead to
1562 tokens with wrong line numbers after the macro expansion. This
1563 adds up to the memory overhead of the -ftrack-macro-expansion
1564 flag; for every macro that is expanded, a "macro map" is
1565 created. */
1566 if (track_macro_exp)
1568 int num_macro_tokens = total;
1569 if (track_macro_exp < 2)
1570 /* Then the number of macro tokens won't take in account the
1571 fact that function-like macro arguments can expand to
1572 multiple tokens. This is to save memory at the expense of
1573 accuracy.
1575 Suppose we have #define SQARE(A) A * A
1577 And then we do SQARE(2+3)
1579 Then the tokens 2, +, 3, will have the same location,
1580 saying they come from the expansion of the argument A. */
1581 num_macro_tokens = exp_count;
1582 map = linemap_enter_macro (pfile->line_table, node,
1583 expansion_point_loc,
1584 num_macro_tokens);
1586 i = 0;
1587 for (src = macro->exp.tokens; src < limit; src++)
1589 unsigned int arg_tokens_count;
1590 macro_arg_token_iter from;
1591 const cpp_token **paste_flag = NULL;
1592 const cpp_token **tmp_token_ptr;
1594 if (src->type != CPP_MACRO_ARG)
1596 /* Allocate a virtual location for token SRC, and add that
1597 token and its virtual location into the buffers BUFF and
1598 VIRT_LOCS. */
1599 unsigned index = expanded_token_index (pfile, macro, src, i);
1600 tokens_buff_add_token (buff, virt_locs, src,
1601 src->src_loc, src->src_loc,
1602 map, index);
1603 i += 1;
1604 continue;
1607 paste_flag = 0;
1608 arg = &args[src->val.macro_arg.arg_no - 1];
1609 /* SRC is a macro parameter that we need to replace with its
1610 corresponding argument. So at some point we'll need to
1611 iterate over the tokens of the macro argument and copy them
1612 into the "place" now holding the correspondig macro
1613 parameter. We are going to use the iterator type
1614 macro_argo_token_iter to handle that iterating. The 'if'
1615 below is to initialize the iterator depending on the type of
1616 tokens the macro argument has. It also does some adjustment
1617 related to padding tokens and some pasting corner cases. */
1618 if (src->flags & STRINGIFY_ARG)
1620 arg_tokens_count = 1;
1621 macro_arg_token_iter_init (&from,
1622 CPP_OPTION (pfile,
1623 track_macro_expansion),
1624 MACRO_ARG_TOKEN_STRINGIFIED,
1625 arg, &arg->stringified);
1627 else if (src->flags & PASTE_LEFT)
1629 arg_tokens_count = arg->count;
1630 macro_arg_token_iter_init (&from,
1631 CPP_OPTION (pfile,
1632 track_macro_expansion),
1633 MACRO_ARG_TOKEN_NORMAL,
1634 arg, arg->first);
1636 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
1638 int num_toks;
1639 arg_tokens_count = arg->count;
1640 macro_arg_token_iter_init (&from,
1641 CPP_OPTION (pfile,
1642 track_macro_expansion),
1643 MACRO_ARG_TOKEN_NORMAL,
1644 arg, arg->first);
1646 num_toks = tokens_buff_count (buff);
1648 if (num_toks != 0)
1650 /* So the current parameter token is pasted to the previous
1651 token in the replacement list. Let's look at what
1652 we have as previous and current arguments. */
1654 /* This is the previous argument's token ... */
1655 tmp_token_ptr = tokens_buff_last_token_ptr (buff);
1657 if ((*tmp_token_ptr)->type == CPP_COMMA
1658 && macro->variadic
1659 && src->val.macro_arg.arg_no == macro->paramc)
1661 /* ... which is a comma; and the current parameter
1662 is the last parameter of a variadic function-like
1663 macro. If the argument to the current last
1664 parameter is NULL, then swallow the comma,
1665 otherwise drop the paste flag. */
1666 if (macro_arg_token_iter_get_token (&from) == NULL)
1667 tokens_buff_remove_last_token (buff);
1668 else
1669 paste_flag = tmp_token_ptr;
1671 /* Remove the paste flag if the RHS is a placemarker. */
1672 else if (arg_tokens_count == 0)
1673 paste_flag = tmp_token_ptr;
1676 else
1678 arg_tokens_count = arg->expanded_count;
1679 macro_arg_token_iter_init (&from,
1680 CPP_OPTION (pfile,
1681 track_macro_expansion),
1682 MACRO_ARG_TOKEN_EXPANDED,
1683 arg, arg->expanded);
1686 /* Padding on the left of an argument (unless RHS of ##). */
1687 if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
1688 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
1690 const cpp_token *t = padding_token (pfile, src);
1691 unsigned index = expanded_token_index (pfile, macro, src, i);
1692 /* Allocate a virtual location for the padding token and
1693 append the token and its location to BUFF and
1694 VIRT_LOCS. */
1695 tokens_buff_add_token (buff, virt_locs, t,
1696 t->src_loc, t->src_loc,
1697 map, index);
1700 if (arg_tokens_count)
1702 /* So now we've got the number of tokens that make up the
1703 argument that is going to replace the current parameter
1704 in the macro's replacement list. */
1705 unsigned int j;
1706 for (j = 0; j < arg_tokens_count; ++j)
1708 /* So if track_macro_exp is < 2, the user wants to
1709 save extra memory while tracking macro expansion
1710 locations. So in that case here is what we do:
1712 Suppose we have #define SQARE(A) A * A
1714 And then we do SQARE(2+3)
1716 Then the tokens 2, +, 3, will have the same location,
1717 saying they come from the expansion of the argument
1720 So that means we are going to ignore the COUNT tokens
1721 resulting from the expansion of the current macro
1722 arugment. In other words all the ARG_TOKENS_COUNT tokens
1723 resulting from the expansion of the macro argument will
1724 have the index I. Normally, each of those token should
1725 have index I+J. */
1726 unsigned token_index = i;
1727 unsigned index;
1728 if (track_macro_exp > 1)
1729 token_index += j;
1731 index = expanded_token_index (pfile, macro, src, token_index);
1732 tokens_buff_add_token (buff, virt_locs,
1733 macro_arg_token_iter_get_token (&from),
1734 macro_arg_token_iter_get_location (&from),
1735 src->src_loc, map, index);
1736 macro_arg_token_iter_forward (&from);
1739 /* With a non-empty argument on the LHS of ##, the last
1740 token should be flagged PASTE_LEFT. */
1741 if (src->flags & PASTE_LEFT)
1742 paste_flag =
1743 (const cpp_token **) tokens_buff_last_token_ptr (buff);
1745 else if (CPP_PEDANTIC (pfile) && ! macro->syshdr
1746 && ! CPP_OPTION (pfile, c99)
1747 && ! cpp_in_system_header (pfile))
1749 cpp_error (pfile, CPP_DL_PEDWARN,
1750 "invoking macro %s argument %d: "
1751 "empty macro arguments are undefined"
1752 " in ISO C90 and ISO C++98",
1753 NODE_NAME (node),
1754 src->val.macro_arg.arg_no);
1757 /* Avoid paste on RHS (even case count == 0). */
1758 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
1760 const cpp_token *t = &pfile->avoid_paste;
1761 tokens_buff_add_token (buff, virt_locs,
1762 t, t->src_loc, t->src_loc,
1763 NULL, 0);
1766 /* Add a new paste flag, or remove an unwanted one. */
1767 if (paste_flag)
1769 cpp_token *token = _cpp_temp_token (pfile);
1770 token->type = (*paste_flag)->type;
1771 token->val = (*paste_flag)->val;
1772 if (src->flags & PASTE_LEFT)
1773 token->flags = (*paste_flag)->flags | PASTE_LEFT;
1774 else
1775 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1776 *paste_flag = token;
1779 i += arg_tokens_count;
1782 if (track_macro_exp)
1783 push_extended_tokens_context (pfile, node, buff, virt_locs, first,
1784 tokens_buff_count (buff));
1785 else
1786 push_ptoken_context (pfile, node, buff, first,
1787 tokens_buff_count (buff));
1789 num_macro_tokens_counter += tokens_buff_count (buff);
1792 /* Return a special padding token, with padding inherited from SOURCE. */
1793 static const cpp_token *
1794 padding_token (cpp_reader *pfile, const cpp_token *source)
1796 cpp_token *result = _cpp_temp_token (pfile);
1798 result->type = CPP_PADDING;
1800 /* Data in GCed data structures cannot be made const so far, so we
1801 need a cast here. */
1802 result->val.source = (cpp_token *) source;
1803 result->flags = 0;
1804 return result;
1807 /* Get a new uninitialized context. Create a new one if we cannot
1808 re-use an old one. */
1809 static cpp_context *
1810 next_context (cpp_reader *pfile)
1812 cpp_context *result = pfile->context->next;
1814 if (result == 0)
1816 result = XNEW (cpp_context);
1817 memset (result, 0, sizeof (cpp_context));
1818 result->prev = pfile->context;
1819 result->next = 0;
1820 pfile->context->next = result;
1823 pfile->context = result;
1824 return result;
1827 /* Push a list of pointers to tokens. */
1828 static void
1829 push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
1830 const cpp_token **first, unsigned int count)
1832 cpp_context *context = next_context (pfile);
1834 context->tokens_kind = TOKENS_KIND_INDIRECT;
1835 context->c.macro = macro;
1836 context->buff = buff;
1837 FIRST (context).ptoken = first;
1838 LAST (context).ptoken = first + count;
1841 /* Push a list of tokens.
1843 A NULL macro means that we should continue the current macro
1844 expansion, in essence. That means that if we are currently in a
1845 macro expansion context, we'll make the new pfile->context refer to
1846 the current macro. */
1847 void
1848 _cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
1849 const cpp_token *first, unsigned int count)
1851 cpp_context *context;
1853 if (macro == NULL)
1854 macro = macro_of_context (pfile->context);
1856 context = next_context (pfile);
1857 context->tokens_kind = TOKENS_KIND_DIRECT;
1858 context->c.macro = macro;
1859 context->buff = NULL;
1860 FIRST (context).token = first;
1861 LAST (context).token = first + count;
1864 /* Build a context containing a list of tokens as well as their
1865 virtual locations and push it. TOKENS_BUFF is the buffer that
1866 contains the tokens pointed to by FIRST. If TOKENS_BUFF is
1867 non-NULL, it means that the context owns it, meaning that
1868 _cpp_pop_context will free it as well as VIRT_LOCS_BUFF that
1869 contains the virtual locations.
1871 A NULL macro means that we should continue the current macro
1872 expansion, in essence. That means that if we are currently in a
1873 macro expansion context, we'll make the new pfile->context refer to
1874 the current macro. */
1875 static void
1876 push_extended_tokens_context (cpp_reader *pfile,
1877 cpp_hashnode *macro,
1878 _cpp_buff *token_buff,
1879 source_location *virt_locs,
1880 const cpp_token **first,
1881 unsigned int count)
1883 cpp_context *context;
1884 macro_context *m;
1886 if (macro == NULL)
1887 macro = macro_of_context (pfile->context);
1889 context = next_context (pfile);
1890 context->tokens_kind = TOKENS_KIND_EXTENDED;
1891 context->buff = token_buff;
1893 m = XNEW (macro_context);
1894 m->macro_node = macro;
1895 m->virt_locs = virt_locs;
1896 m->cur_virt_loc = virt_locs;
1897 context->c.mc = m;
1898 FIRST (context).ptoken = first;
1899 LAST (context).ptoken = first + count;
1902 /* Push a traditional macro's replacement text. */
1903 void
1904 _cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
1905 const uchar *start, size_t len)
1907 cpp_context *context = next_context (pfile);
1909 context->tokens_kind = TOKENS_KIND_DIRECT;
1910 context->c.macro = macro;
1911 context->buff = NULL;
1912 CUR (context) = start;
1913 RLIMIT (context) = start + len;
1914 macro->flags |= NODE_DISABLED;
1917 /* Creates a buffer that holds tokens a.k.a "token buffer", usually
1918 for the purpose of storing them on a cpp_context. If VIRT_LOCS is
1919 non-null (which means that -ftrack-macro-expansion is on),
1920 *VIRT_LOCS is set to a newly allocated buffer that is supposed to
1921 hold the virtual locations of the tokens resulting from macro
1922 expansion. */
1923 static _cpp_buff*
1924 tokens_buff_new (cpp_reader *pfile, size_t len,
1925 source_location **virt_locs)
1927 size_t tokens_size = len * sizeof (cpp_token *);
1928 size_t locs_size = len * sizeof (source_location);
1930 if (virt_locs != NULL)
1931 *virt_locs = XNEWVEC (source_location, locs_size);
1932 return _cpp_get_buff (pfile, tokens_size);
1935 /* Returns the number of tokens contained in a token buffer. The
1936 buffer holds a set of cpp_token*. */
1937 static size_t
1938 tokens_buff_count (_cpp_buff *buff)
1940 return (BUFF_FRONT (buff) - buff->base) / sizeof (cpp_token *);
1943 /* Return a pointer to the last token contained in the token buffer
1944 BUFF. */
1945 static const cpp_token **
1946 tokens_buff_last_token_ptr (_cpp_buff *buff)
1948 return &((const cpp_token **) BUFF_FRONT (buff))[-1];
1951 /* Remove the last token contained in the token buffer TOKENS_BUFF.
1952 If VIRT_LOCS_BUFF is non-NULL, it should point at the buffer
1953 containing the virtual locations of the tokens in TOKENS_BUFF; in
1954 which case the function updates that buffer as well. */
1955 static inline void
1956 tokens_buff_remove_last_token (_cpp_buff *tokens_buff)
1959 if (BUFF_FRONT (tokens_buff) > tokens_buff->base)
1960 BUFF_FRONT (tokens_buff) =
1961 (unsigned char *) &((cpp_token **) BUFF_FRONT (tokens_buff))[-1];
1964 /* Insert a token into the token buffer at the position pointed to by
1965 DEST. Note that the buffer is not enlarged so the previous token
1966 that was at *DEST is overwritten. VIRT_LOC_DEST, if non-null,
1967 means -ftrack-macro-expansion is effect; it then points to where to
1968 insert the virtual location of TOKEN. TOKEN is the token to
1969 insert. VIRT_LOC is the virtual location of the token, i.e, the
1970 location possibly encoding its locus across macro expansion. If
1971 TOKEN is an argument of a function-like macro (inside a macro
1972 replacement list), PARM_DEF_LOC is the spelling location of the
1973 macro parameter that TOKEN is replacing, in the replacement list of
1974 the macro. If TOKEN is not an argument of a function-like macro or
1975 if it doesn't come from a macro expansion, then VIRT_LOC can just
1976 be set to the same value as PARM_DEF_LOC. If MAP is non null, it
1977 means TOKEN comes from a macro expansion and MAP is the macro map
1978 associated to the macro. MACRO_TOKEN_INDEX points to the index of
1979 the token in the macro map; it is not considered if MAP is NULL.
1981 Upon successful completion this function returns the a pointer to
1982 the position of the token coming right after the insertion
1983 point. */
1984 static inline const cpp_token **
1985 tokens_buff_put_token_to (const cpp_token **dest,
1986 source_location *virt_loc_dest,
1987 const cpp_token *token,
1988 source_location virt_loc,
1989 source_location parm_def_loc,
1990 const struct line_map *map,
1991 unsigned int macro_token_index)
1993 source_location macro_loc = virt_loc;
1994 const cpp_token **result;
1996 if (virt_loc_dest)
1998 /* -ftrack-macro-expansion is on. */
1999 if (map)
2000 macro_loc = linemap_add_macro_token (map, macro_token_index,
2001 virt_loc, parm_def_loc);
2002 *virt_loc_dest = macro_loc;
2004 *dest = token;
2005 result = &dest[1];
2007 return result;
2010 /* Adds a token at the end of the tokens contained in BUFFER. Note
2011 that this function doesn't enlarge BUFFER when the number of tokens
2012 reaches BUFFER's size; it aborts in that situation.
2014 TOKEN is the token to append. VIRT_LOC is the virtual location of
2015 the token, i.e, the location possibly encoding its locus across
2016 macro expansion. If TOKEN is an argument of a function-like macro
2017 (inside a macro replacement list), PARM_DEF_LOC is the location of
2018 the macro parameter that TOKEN is replacing. If TOKEN doesn't come
2019 from a macro expansion, then VIRT_LOC can just be set to the same
2020 value as PARM_DEF_LOC. If MAP is non null, it means TOKEN comes
2021 from a macro expansion and MAP is the macro map associated to the
2022 macro. MACRO_TOKEN_INDEX points to the index of the token in the
2023 macro map; It is not considered if MAP is NULL. If VIRT_LOCS is
2024 non-null, it means -ftrack-macro-expansion is on; in which case
2025 this function adds the virtual location DEF_LOC to the VIRT_LOCS
2026 array, at the same index as the one of TOKEN in BUFFER. Upon
2027 successful completion this function returns the a pointer to the
2028 position of the token coming right after the insertion point. */
2029 static const cpp_token **
2030 tokens_buff_add_token (_cpp_buff *buffer,
2031 source_location *virt_locs,
2032 const cpp_token *token,
2033 source_location virt_loc,
2034 source_location parm_def_loc,
2035 const struct line_map *map,
2036 unsigned int macro_token_index)
2038 const cpp_token **result;
2039 source_location *virt_loc_dest = NULL;
2040 unsigned token_index =
2041 (BUFF_FRONT (buffer) - buffer->base) / sizeof (cpp_token *);
2043 /* Abort if we pass the end the buffer. */
2044 if (BUFF_FRONT (buffer) > BUFF_LIMIT (buffer))
2045 abort ();
2047 if (virt_locs != NULL)
2048 virt_loc_dest = &virt_locs[token_index];
2050 result =
2051 tokens_buff_put_token_to ((const cpp_token **) BUFF_FRONT (buffer),
2052 virt_loc_dest, token, virt_loc, parm_def_loc,
2053 map, macro_token_index);
2055 BUFF_FRONT (buffer) = (unsigned char *) result;
2056 return result;
2059 /* Allocate space for the function-like macro argument ARG to store
2060 the tokens resulting from the macro-expansion of the tokens that
2061 make up ARG itself. That space is allocated in ARG->expanded and
2062 needs to be freed using free. */
2063 static void
2064 alloc_expanded_arg_mem (cpp_reader *pfile, macro_arg *arg, size_t capacity)
2066 #ifdef ENABLE_CHECKING
2067 if (arg->expanded != NULL
2068 || arg->expanded_virt_locs != NULL)
2069 abort ();
2070 #endif
2071 arg->expanded = XNEWVEC (const cpp_token *, capacity);
2072 if (CPP_OPTION (pfile, track_macro_expansion))
2073 arg->expanded_virt_locs = XNEWVEC (source_location, capacity);
2077 /* If necessary, enlarge ARG->expanded to so that it can contain SIZE
2078 tokens. */
2079 static void
2080 ensure_expanded_arg_room (cpp_reader *pfile, macro_arg *arg,
2081 size_t size, size_t *expanded_capacity)
2083 if (size <= *expanded_capacity)
2084 return;
2086 size *= 2;
2088 arg->expanded =
2089 XRESIZEVEC (const cpp_token *, arg->expanded, size);
2090 *expanded_capacity = size;
2092 if (CPP_OPTION (pfile, track_macro_expansion))
2094 if (arg->expanded_virt_locs == NULL)
2095 arg->expanded_virt_locs = XNEWVEC (source_location, size);
2096 else
2097 arg->expanded_virt_locs = XRESIZEVEC (source_location,
2098 arg->expanded_virt_locs,
2099 size);
2103 /* Expand an argument ARG before replacing parameters in a
2104 function-like macro. This works by pushing a context with the
2105 argument's tokens, and then expanding that into a temporary buffer
2106 as if it were a normal part of the token stream. collect_args()
2107 has terminated the argument's tokens with a CPP_EOF so that we know
2108 when we have fully expanded the argument. */
2109 static void
2110 expand_arg (cpp_reader *pfile, macro_arg *arg)
2112 size_t capacity;
2113 bool saved_warn_trad;
2114 bool track_macro_exp_p = CPP_OPTION (pfile, track_macro_expansion);
2116 if (arg->count == 0
2117 || arg->expanded != NULL)
2118 return;
2120 /* Don't warn about funlike macros when pre-expanding. */
2121 saved_warn_trad = CPP_WTRADITIONAL (pfile);
2122 CPP_WTRADITIONAL (pfile) = 0;
2124 /* Loop, reading in the tokens of the argument. */
2125 capacity = 256;
2126 alloc_expanded_arg_mem (pfile, arg, capacity);
2128 if (track_macro_exp_p)
2129 push_extended_tokens_context (pfile, NULL, NULL,
2130 arg->virt_locs,
2131 arg->first,
2132 arg->count + 1);
2133 else
2134 push_ptoken_context (pfile, NULL, NULL,
2135 arg->first, arg->count + 1);
2137 for (;;)
2139 const cpp_token *token;
2140 source_location location;
2142 ensure_expanded_arg_room (pfile, arg, arg->expanded_count + 1,
2143 &capacity);
2145 token = cpp_get_token_1 (pfile, &location);
2147 if (token->type == CPP_EOF)
2148 break;
2150 set_arg_token (arg, token, location,
2151 arg->expanded_count, MACRO_ARG_TOKEN_EXPANDED,
2152 CPP_OPTION (pfile, track_macro_expansion));
2153 arg->expanded_count++;
2156 _cpp_pop_context (pfile);
2158 CPP_WTRADITIONAL (pfile) = saved_warn_trad;
2161 /* Returns the macro associated to the current context if we are in
2162 the context a macro expansion, NULL otherwise. */
2163 static cpp_hashnode*
2164 macro_of_context (cpp_context *context)
2166 if (context == NULL)
2167 return NULL;
2169 return (context->tokens_kind == TOKENS_KIND_EXTENDED)
2170 ? context->c.mc->macro_node
2171 : context->c.macro;
2174 /* Return TRUE iff we are expanding a macro or are about to start
2175 expanding one. If we are effectively expanding a macro, the
2176 function macro_of_context returns a pointer to the macro being
2177 expanded. */
2178 static bool
2179 in_macro_expansion_p (cpp_reader *pfile)
2181 if (pfile == NULL)
2182 return false;
2184 return (pfile->about_to_expand_macro_p
2185 || macro_of_context (pfile->context));
2188 /* Pop the current context off the stack, re-enabling the macro if the
2189 context represented a macro's replacement list. Initially the
2190 context structure was not freed so that we can re-use it later, but
2191 now we do free it to reduce peak memory consumption. */
2192 void
2193 _cpp_pop_context (cpp_reader *pfile)
2195 cpp_context *context = pfile->context;
2197 /* We should not be popping the base context. */
2198 if (context == &pfile->base_context)
2199 abort ();
2201 if (context->c.macro)
2203 cpp_hashnode *macro;
2204 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
2206 macro_context *mc = context->c.mc;
2207 macro = mc->macro_node;
2208 /* If context->buff is set, it means the life time of tokens
2209 is bound to the life time of this context; so we must
2210 free the tokens; that means we must free the virtual
2211 locations of these tokens too. */
2212 if (context->buff && mc->virt_locs)
2214 free (mc->virt_locs);
2215 mc->virt_locs = NULL;
2217 free (mc);
2218 context->c.mc = NULL;
2220 else
2221 macro = context->c.macro;
2223 /* Beware that MACRO can be NULL in cases like when we are
2224 called from expand_arg. In those cases, a dummy context with
2225 tokens is pushed just for the purpose of walking them using
2226 cpp_get_token_1. In that case, no 'macro' field is set into
2227 the dummy context. */
2228 if (macro != NULL
2229 /* Several contiguous macro expansion contexts can be
2230 associated to the same macro; that means it's the same
2231 macro expansion that spans across all these (sub)
2232 contexts. So we should re-enable an expansion-disabled
2233 macro only when we are sure we are really out of that
2234 macro expansion. */
2235 && macro_of_context (context->prev) != macro)
2236 macro->flags &= ~NODE_DISABLED;
2239 if (context->buff)
2241 /* Decrease memory peak consumption by freeing the memory used
2242 by the context. */
2243 _cpp_free_buff (context->buff);
2246 pfile->context = context->prev;
2247 /* decrease peak memory consumption by feeing the context. */
2248 pfile->context->next = NULL;
2249 free (context);
2252 /* Return TRUE if we reached the end of the set of tokens stored in
2253 CONTEXT, FALSE otherwise. */
2254 static inline bool
2255 reached_end_of_context (cpp_context *context)
2257 if (context->tokens_kind == TOKENS_KIND_DIRECT)
2258 return FIRST (context).token == LAST (context).token;
2259 else if (context->tokens_kind == TOKENS_KIND_INDIRECT
2260 || context->tokens_kind == TOKENS_KIND_EXTENDED)
2261 return FIRST (context).ptoken == LAST (context).ptoken;
2262 else
2263 abort ();
2266 /* Consume the next token contained in the current context of PFILE,
2267 and return it in *TOKEN. It's "full location" is returned in
2268 *LOCATION. If -ftrack-macro-location is in effeect, fFull location"
2269 means the location encoding the locus of the token across macro
2270 expansion; otherwise it's just is the "normal" location of the
2271 token which (*TOKEN)->src_loc. */
2272 static inline void
2273 consume_next_token_from_context (cpp_reader *pfile,
2274 const cpp_token ** token,
2275 source_location *location)
2277 cpp_context *c = pfile->context;
2279 if ((c)->tokens_kind == TOKENS_KIND_DIRECT)
2281 *token = FIRST (c).token;
2282 *location = (*token)->src_loc;
2283 FIRST (c).token++;
2285 else if ((c)->tokens_kind == TOKENS_KIND_INDIRECT)
2287 *token = *FIRST (c).ptoken;
2288 *location = (*token)->src_loc;
2289 FIRST (c).ptoken++;
2291 else if ((c)->tokens_kind == TOKENS_KIND_EXTENDED)
2293 macro_context *m = c->c.mc;
2294 *token = *FIRST (c).ptoken;
2295 if (m->virt_locs)
2297 *location = *m->cur_virt_loc;
2298 m->cur_virt_loc++;
2300 else
2301 *location = (*token)->src_loc;
2302 FIRST (c).ptoken++;
2304 else
2305 abort ();
2308 /* In the traditional mode of the preprocessor, if we are currently in
2309 a directive, the location of a token must be the location of the
2310 start of the directive line. This function returns the proper
2311 location if we are in the traditional mode, and just returns
2312 LOCATION otherwise. */
2314 static inline source_location
2315 maybe_adjust_loc_for_trad_cpp (cpp_reader *pfile, source_location location)
2317 if (CPP_OPTION (pfile, traditional))
2319 if (pfile->state.in_directive)
2320 return pfile->directive_line;
2322 return location;
2325 /* Routine to get a token as well as its location.
2327 Macro expansions and directives are transparently handled,
2328 including entering included files. Thus tokens are post-macro
2329 expansion, and after any intervening directives. External callers
2330 see CPP_EOF only at EOF. Internal callers also see it when meeting
2331 a directive inside a macro call, when at the end of a directive and
2332 state.in_directive is still 1, and at the end of argument
2333 pre-expansion.
2335 LOC is an out parameter; *LOC is set to the location "as expected
2336 by the user". Please read the comment of
2337 cpp_get_token_with_location to learn more about the meaning of this
2338 location. */
2339 static const cpp_token*
2340 cpp_get_token_1 (cpp_reader *pfile, source_location *location)
2342 const cpp_token *result;
2343 /* This token is a virtual token that either encodes a location
2344 related to macro expansion or a spelling location. */
2345 source_location virt_loc = 0;
2346 /* pfile->about_to_expand_macro_p can be overriden by indirect calls
2347 to functions that push macro contexts. So let's save it so that
2348 we can restore it when we are about to leave this routine. */
2349 bool saved_about_to_expand_macro = pfile->about_to_expand_macro_p;
2351 for (;;)
2353 cpp_hashnode *node;
2354 cpp_context *context = pfile->context;
2356 /* Context->prev == 0 <=> base context. */
2357 if (!context->prev)
2359 result = _cpp_lex_token (pfile);
2360 virt_loc = result->src_loc;
2362 else if (!reached_end_of_context (context))
2364 consume_next_token_from_context (pfile, &result,
2365 &virt_loc);
2366 if (result->flags & PASTE_LEFT)
2368 paste_all_tokens (pfile, result);
2369 if (pfile->state.in_directive)
2370 continue;
2371 result = padding_token (pfile, result);
2372 goto out;
2375 else
2377 if (pfile->context->c.macro)
2378 ++num_expanded_macros_counter;
2379 _cpp_pop_context (pfile);
2380 if (pfile->state.in_directive)
2381 continue;
2382 result = &pfile->avoid_paste;
2383 goto out;
2386 if (pfile->state.in_directive && result->type == CPP_COMMENT)
2387 continue;
2389 if (result->type != CPP_NAME)
2390 break;
2392 node = result->val.node.node;
2394 if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
2395 break;
2397 if (!(node->flags & NODE_DISABLED))
2399 int ret = 0;
2400 /* If not in a macro context, and we're going to start an
2401 expansion, record the location. */
2402 if (!in_macro_expansion_p (pfile))
2403 pfile->invocation_location = result->src_loc;
2404 if (pfile->state.prevent_expansion)
2405 break;
2407 /* Conditional macros require that a predicate be evaluated
2408 first. */
2409 if ((node->flags & NODE_CONDITIONAL) != 0)
2411 if (pfile->cb.macro_to_expand)
2413 bool whitespace_after;
2414 const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
2416 whitespace_after = (peek_tok->type == CPP_PADDING
2417 || (peek_tok->flags & PREV_WHITE));
2418 node = pfile->cb.macro_to_expand (pfile, result);
2419 if (node)
2420 ret = enter_macro_context (pfile, node, result,
2421 virt_loc);
2422 else if (whitespace_after)
2424 /* If macro_to_expand hook returned NULL and it
2425 ate some tokens, see if we don't need to add
2426 a padding token in between this and the
2427 next token. */
2428 peek_tok = cpp_peek_token (pfile, 0);
2429 if (peek_tok->type != CPP_PADDING
2430 && (peek_tok->flags & PREV_WHITE) == 0)
2431 _cpp_push_token_context (pfile, NULL,
2432 padding_token (pfile,
2433 peek_tok), 1);
2437 else
2438 ret = enter_macro_context (pfile, node, result,
2439 virt_loc);
2440 if (ret)
2442 if (pfile->state.in_directive || ret == 2)
2443 continue;
2444 result = padding_token (pfile, result);
2445 goto out;
2448 else
2450 /* Flag this token as always unexpandable. FIXME: move this
2451 to collect_args()?. */
2452 cpp_token *t = _cpp_temp_token (pfile);
2453 t->type = result->type;
2454 t->flags = result->flags | NO_EXPAND;
2455 t->val = result->val;
2456 result = t;
2459 break;
2462 out:
2463 if (location != NULL)
2465 if (virt_loc == 0)
2466 virt_loc = result->src_loc;
2467 *location = virt_loc;
2469 if (!CPP_OPTION (pfile, track_macro_expansion)
2470 && macro_of_context (pfile->context) != NULL)
2471 /* We are in a macro expansion context, are not tracking
2472 virtual location, but were asked to report the location
2473 of the expansion point of the macro being expanded. */
2474 *location = pfile->invocation_location;
2476 *location = maybe_adjust_loc_for_trad_cpp (pfile, *location);
2479 pfile->about_to_expand_macro_p = saved_about_to_expand_macro;
2480 return result;
2483 /* External routine to get a token. Also used nearly everywhere
2484 internally, except for places where we know we can safely call
2485 _cpp_lex_token directly, such as lexing a directive name.
2487 Macro expansions and directives are transparently handled,
2488 including entering included files. Thus tokens are post-macro
2489 expansion, and after any intervening directives. External callers
2490 see CPP_EOF only at EOF. Internal callers also see it when meeting
2491 a directive inside a macro call, when at the end of a directive and
2492 state.in_directive is still 1, and at the end of argument
2493 pre-expansion. */
2494 const cpp_token *
2495 cpp_get_token (cpp_reader *pfile)
2497 return cpp_get_token_1 (pfile, NULL);
2500 /* Like cpp_get_token, but also returns a virtual token location
2501 separate from the spelling location carried by the returned token.
2503 LOC is an out parameter; *LOC is set to the location "as expected
2504 by the user". This matters when a token results from macro
2505 expansion; in that case the token's spelling location indicates the
2506 locus of the token in the definition of the macro but *LOC
2507 virtually encodes all the other meaningful locuses associated to
2508 the token.
2510 What? virtual location? Yes, virtual location.
2512 If the token results from macro expansion and if macro expansion
2513 location tracking is enabled its virtual location encodes (at the
2514 same time):
2516 - the spelling location of the token
2518 - the locus of the macro expansion point
2520 - the locus of the point where the token got instantiated as part
2521 of the macro expansion process.
2523 You have to use the linemap API to get the locus you are interested
2524 in from a given virtual location.
2526 Note however that virtual locations are not necessarily ordered for
2527 relations '<' and '>'. One must use the function
2528 linemap_location_before_p instead of using the relational operator
2529 '<'.
2531 If macro expansion tracking is off and if the token results from
2532 macro expansion the virtual location is the expansion point of the
2533 macro that got expanded.
2535 When the token doesn't result from macro expansion, the virtual
2536 location is just the same thing as its spelling location. */
2538 const cpp_token *
2539 cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
2541 return cpp_get_token_1 (pfile, loc);
2544 /* Returns true if we're expanding an object-like macro that was
2545 defined in a system header. Just checks the macro at the top of
2546 the stack. Used for diagnostic suppression. */
2548 cpp_sys_macro_p (cpp_reader *pfile)
2550 cpp_hashnode *node = NULL;
2552 if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2553 node = pfile->context->c.mc->macro_node;
2554 else
2555 node = pfile->context->c.macro;
2557 return node && node->value.macro && node->value.macro->syshdr;
2560 /* Read each token in, until end of the current file. Directives are
2561 transparently processed. */
2562 void
2563 cpp_scan_nooutput (cpp_reader *pfile)
2565 /* Request a CPP_EOF token at the end of this file, rather than
2566 transparently continuing with the including file. */
2567 pfile->buffer->return_at_eof = true;
2569 pfile->state.discarding_output++;
2570 pfile->state.prevent_expansion++;
2572 if (CPP_OPTION (pfile, traditional))
2573 while (_cpp_read_logical_line_trad (pfile))
2575 else
2576 while (cpp_get_token (pfile)->type != CPP_EOF)
2579 pfile->state.discarding_output--;
2580 pfile->state.prevent_expansion--;
2583 /* Step back one or more tokens obtained from the lexer. */
2584 void
2585 _cpp_backup_tokens_direct (cpp_reader *pfile, unsigned int count)
2587 pfile->lookaheads += count;
2588 while (count--)
2590 pfile->cur_token--;
2591 if (pfile->cur_token == pfile->cur_run->base
2592 /* Possible with -fpreprocessed and no leading #line. */
2593 && pfile->cur_run->prev != NULL)
2595 pfile->cur_run = pfile->cur_run->prev;
2596 pfile->cur_token = pfile->cur_run->limit;
2601 /* Step back one (or more) tokens. Can only step back more than 1 if
2602 they are from the lexer, and not from macro expansion. */
2603 void
2604 _cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
2606 if (pfile->context->prev == NULL)
2607 _cpp_backup_tokens_direct (pfile, count);
2608 else
2610 if (count != 1)
2611 abort ();
2612 if (pfile->context->tokens_kind == TOKENS_KIND_DIRECT)
2613 FIRST (pfile->context).token--;
2614 else if (pfile->context->tokens_kind == TOKENS_KIND_INDIRECT)
2615 FIRST (pfile->context).ptoken--;
2616 else if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2618 FIRST (pfile->context).ptoken--;
2619 if (pfile->context->c.macro)
2621 macro_context *m = pfile->context->c.mc;
2622 m->cur_virt_loc--;
2623 #ifdef ENABLE_CHECKING
2624 if (m->cur_virt_loc < m->virt_locs)
2625 abort ();
2626 #endif
2628 else
2629 abort ();
2631 else
2632 abort ();
2636 /* #define directive parsing and handling. */
2638 /* Returns nonzero if a macro redefinition warning is required. */
2639 static bool
2640 warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node,
2641 const cpp_macro *macro2)
2643 const cpp_macro *macro1;
2644 unsigned int i;
2646 /* Some redefinitions need to be warned about regardless. */
2647 if (node->flags & NODE_WARN)
2648 return true;
2650 /* Suppress warnings for builtins that lack the NODE_WARN flag. */
2651 if (node->flags & NODE_BUILTIN)
2653 if (!pfile->cb.user_builtin_macro
2654 || !pfile->cb.user_builtin_macro (pfile, node))
2655 return false;
2658 /* Redefinitions of conditional (context-sensitive) macros, on
2659 the other hand, must be allowed silently. */
2660 if (node->flags & NODE_CONDITIONAL)
2661 return false;
2663 /* Redefinition of a macro is allowed if and only if the old and new
2664 definitions are the same. (6.10.3 paragraph 2). */
2665 macro1 = node->value.macro;
2667 /* Don't check count here as it can be different in valid
2668 traditional redefinitions with just whitespace differences. */
2669 if (macro1->paramc != macro2->paramc
2670 || macro1->fun_like != macro2->fun_like
2671 || macro1->variadic != macro2->variadic)
2672 return true;
2674 /* Check parameter spellings. */
2675 for (i = 0; i < macro1->paramc; i++)
2676 if (macro1->params[i] != macro2->params[i])
2677 return true;
2679 /* Check the replacement text or tokens. */
2680 if (CPP_OPTION (pfile, traditional))
2681 return _cpp_expansions_different_trad (macro1, macro2);
2683 if (macro1->count != macro2->count)
2684 return true;
2686 for (i = 0; i < macro1->count; i++)
2687 if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
2688 return true;
2690 return false;
2693 /* Free the definition of hashnode H. */
2694 void
2695 _cpp_free_definition (cpp_hashnode *h)
2697 /* Macros and assertions no longer have anything to free. */
2698 h->type = NT_VOID;
2699 /* Clear builtin flag in case of redefinition. */
2700 h->flags &= ~(NODE_BUILTIN | NODE_DISABLED | NODE_USED);
2703 /* Save parameter NODE to the parameter list of macro MACRO. Returns
2704 zero on success, nonzero if the parameter is a duplicate. */
2705 bool
2706 _cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
2708 unsigned int len;
2709 /* Constraint 6.10.3.6 - duplicate parameter names. */
2710 if (node->flags & NODE_MACRO_ARG)
2712 cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
2713 NODE_NAME (node));
2714 return true;
2717 if (BUFF_ROOM (pfile->a_buff)
2718 < (macro->paramc + 1) * sizeof (cpp_hashnode *))
2719 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
2721 ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
2722 node->flags |= NODE_MACRO_ARG;
2723 len = macro->paramc * sizeof (union _cpp_hashnode_value);
2724 if (len > pfile->macro_buffer_len)
2726 pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
2727 len);
2728 pfile->macro_buffer_len = len;
2730 ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
2731 = node->value;
2733 node->value.arg_index = macro->paramc;
2734 return false;
2737 /* Check the syntax of the parameters in a MACRO definition. Returns
2738 false if an error occurs. */
2739 static bool
2740 parse_params (cpp_reader *pfile, cpp_macro *macro)
2742 unsigned int prev_ident = 0;
2744 for (;;)
2746 const cpp_token *token = _cpp_lex_token (pfile);
2748 switch (token->type)
2750 default:
2751 /* Allow/ignore comments in parameter lists if we are
2752 preserving comments in macro expansions. */
2753 if (token->type == CPP_COMMENT
2754 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
2755 continue;
2757 cpp_error (pfile, CPP_DL_ERROR,
2758 "\"%s\" may not appear in macro parameter list",
2759 cpp_token_as_text (pfile, token));
2760 return false;
2762 case CPP_NAME:
2763 if (prev_ident)
2765 cpp_error (pfile, CPP_DL_ERROR,
2766 "macro parameters must be comma-separated");
2767 return false;
2769 prev_ident = 1;
2771 if (_cpp_save_parameter (pfile, macro, token->val.node.node))
2772 return false;
2773 continue;
2775 case CPP_CLOSE_PAREN:
2776 if (prev_ident || macro->paramc == 0)
2777 return true;
2779 /* Fall through to pick up the error. */
2780 case CPP_COMMA:
2781 if (!prev_ident)
2783 cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
2784 return false;
2786 prev_ident = 0;
2787 continue;
2789 case CPP_ELLIPSIS:
2790 macro->variadic = 1;
2791 if (!prev_ident)
2793 _cpp_save_parameter (pfile, macro,
2794 pfile->spec_nodes.n__VA_ARGS__);
2795 pfile->state.va_args_ok = 1;
2796 if (! CPP_OPTION (pfile, c99)
2797 && CPP_OPTION (pfile, cpp_pedantic)
2798 && CPP_OPTION (pfile, warn_variadic_macros))
2799 cpp_pedwarning
2800 (pfile, CPP_W_VARIADIC_MACROS,
2801 "anonymous variadic macros were introduced in C99");
2803 else if (CPP_OPTION (pfile, cpp_pedantic)
2804 && CPP_OPTION (pfile, warn_variadic_macros))
2805 cpp_pedwarning (pfile, CPP_W_VARIADIC_MACROS,
2806 "ISO C does not permit named variadic macros");
2808 /* We're at the end, and just expect a closing parenthesis. */
2809 token = _cpp_lex_token (pfile);
2810 if (token->type == CPP_CLOSE_PAREN)
2811 return true;
2812 /* Fall through. */
2814 case CPP_EOF:
2815 cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
2816 return false;
2821 /* Allocate room for a token from a macro's replacement list. */
2822 static cpp_token *
2823 alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
2825 if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
2826 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
2828 return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
2831 /* Lex a token from the expansion of MACRO, but mark parameters as we
2832 find them and warn of traditional stringification. */
2833 static cpp_token *
2834 lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
2836 cpp_token *token, *saved_cur_token;
2838 saved_cur_token = pfile->cur_token;
2839 pfile->cur_token = alloc_expansion_token (pfile, macro);
2840 token = _cpp_lex_direct (pfile);
2841 pfile->cur_token = saved_cur_token;
2843 /* Is this a parameter? */
2844 if (token->type == CPP_NAME
2845 && (token->val.node.node->flags & NODE_MACRO_ARG) != 0)
2847 token->type = CPP_MACRO_ARG;
2848 token->val.macro_arg.arg_no = token->val.node.node->value.arg_index;
2850 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
2851 && (token->type == CPP_STRING || token->type == CPP_CHAR))
2852 check_trad_stringification (pfile, macro, &token->val.str);
2854 return token;
2857 static bool
2858 create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
2860 cpp_token *token;
2861 const cpp_token *ctoken;
2862 bool following_paste_op = false;
2863 const char *paste_op_error_msg =
2864 N_("'##' cannot appear at either end of a macro expansion");
2865 unsigned int num_extra_tokens = 0;
2867 /* Get the first token of the expansion (or the '(' of a
2868 function-like macro). */
2869 ctoken = _cpp_lex_token (pfile);
2871 if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
2873 bool ok = parse_params (pfile, macro);
2874 macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
2875 if (!ok)
2876 return false;
2878 /* Success. Commit or allocate the parameter array. */
2879 if (pfile->hash_table->alloc_subobject)
2881 cpp_hashnode **params =
2882 (cpp_hashnode **) pfile->hash_table->alloc_subobject
2883 (sizeof (cpp_hashnode *) * macro->paramc);
2884 memcpy (params, macro->params,
2885 sizeof (cpp_hashnode *) * macro->paramc);
2886 macro->params = params;
2888 else
2889 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
2890 macro->fun_like = 1;
2892 else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
2894 /* While ISO C99 requires whitespace before replacement text
2895 in a macro definition, ISO C90 with TC1 allows there characters
2896 from the basic source character set. */
2897 if (CPP_OPTION (pfile, c99))
2898 cpp_error (pfile, CPP_DL_PEDWARN,
2899 "ISO C99 requires whitespace after the macro name");
2900 else
2902 int warntype = CPP_DL_WARNING;
2903 switch (ctoken->type)
2905 case CPP_ATSIGN:
2906 case CPP_AT_NAME:
2907 case CPP_OBJC_STRING:
2908 /* '@' is not in basic character set. */
2909 warntype = CPP_DL_PEDWARN;
2910 break;
2911 case CPP_OTHER:
2912 /* Basic character set sans letters, digits and _. */
2913 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
2914 ctoken->val.str.text[0]) == NULL)
2915 warntype = CPP_DL_PEDWARN;
2916 break;
2917 default:
2918 /* All other tokens start with a character from basic
2919 character set. */
2920 break;
2922 cpp_error (pfile, warntype,
2923 "missing whitespace after the macro name");
2927 if (macro->fun_like)
2928 token = lex_expansion_token (pfile, macro);
2929 else
2931 token = alloc_expansion_token (pfile, macro);
2932 *token = *ctoken;
2935 for (;;)
2937 /* Check the stringifying # constraint 6.10.3.2.1 of
2938 function-like macros when lexing the subsequent token. */
2939 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
2941 if (token->type == CPP_MACRO_ARG)
2943 if (token->flags & PREV_WHITE)
2944 token->flags |= SP_PREV_WHITE;
2945 if (token[-1].flags & DIGRAPH)
2946 token->flags |= SP_DIGRAPH;
2947 token->flags &= ~PREV_WHITE;
2948 token->flags |= STRINGIFY_ARG;
2949 token->flags |= token[-1].flags & PREV_WHITE;
2950 token[-1] = token[0];
2951 macro->count--;
2953 /* Let assembler get away with murder. */
2954 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
2956 cpp_error (pfile, CPP_DL_ERROR,
2957 "'#' is not followed by a macro parameter");
2958 return false;
2962 if (token->type == CPP_EOF)
2964 /* Paste operator constraint 6.10.3.3.1:
2965 Token-paste ##, can appear in both object-like and
2966 function-like macros, but not at the end. */
2967 if (following_paste_op)
2969 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
2970 return false;
2972 break;
2975 /* Paste operator constraint 6.10.3.3.1. */
2976 if (token->type == CPP_PASTE)
2978 /* Token-paste ##, can appear in both object-like and
2979 function-like macros, but not at the beginning. */
2980 if (macro->count == 1)
2982 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
2983 return false;
2986 if (token[-1].flags & PASTE_LEFT)
2988 macro->extra_tokens = 1;
2989 num_extra_tokens++;
2990 token->val.token_no = macro->count - 1;
2992 else
2994 --macro->count;
2995 token[-1].flags |= PASTE_LEFT;
2996 if (token->flags & DIGRAPH)
2997 token[-1].flags |= SP_DIGRAPH;
2998 if (token->flags & PREV_WHITE)
2999 token[-1].flags |= SP_PREV_WHITE;
3003 following_paste_op = (token->type == CPP_PASTE);
3004 token = lex_expansion_token (pfile, macro);
3007 macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
3008 macro->traditional = 0;
3010 /* Don't count the CPP_EOF. */
3011 macro->count--;
3013 /* Clear whitespace on first token for warn_of_redefinition(). */
3014 if (macro->count)
3015 macro->exp.tokens[0].flags &= ~PREV_WHITE;
3017 /* Commit or allocate the memory. */
3018 if (pfile->hash_table->alloc_subobject)
3020 cpp_token *tokns =
3021 (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
3022 * macro->count);
3023 if (num_extra_tokens)
3025 /* Place second and subsequent ## or %:%: tokens in
3026 sequences of consecutive such tokens at the end of the
3027 list to preserve information about where they appear, how
3028 they are spelt and whether they are preceded by
3029 whitespace without otherwise interfering with macro
3030 expansion. */
3031 cpp_token *normal_dest = tokns;
3032 cpp_token *extra_dest = tokns + macro->count - num_extra_tokens;
3033 unsigned int i;
3034 for (i = 0; i < macro->count; i++)
3036 if (macro->exp.tokens[i].type == CPP_PASTE)
3037 *extra_dest++ = macro->exp.tokens[i];
3038 else
3039 *normal_dest++ = macro->exp.tokens[i];
3042 else
3043 memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
3044 macro->exp.tokens = tokns;
3046 else
3047 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
3049 return true;
3052 /* Parse a macro and save its expansion. Returns nonzero on success. */
3053 bool
3054 _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
3056 cpp_macro *macro;
3057 unsigned int i;
3058 bool ok;
3060 if (pfile->hash_table->alloc_subobject)
3061 macro = (cpp_macro *) pfile->hash_table->alloc_subobject
3062 (sizeof (cpp_macro));
3063 else
3064 macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
3065 macro->line = pfile->directive_line;
3066 macro->params = 0;
3067 macro->paramc = 0;
3068 macro->variadic = 0;
3069 macro->used = !CPP_OPTION (pfile, warn_unused_macros);
3070 macro->count = 0;
3071 macro->fun_like = 0;
3072 macro->extra_tokens = 0;
3073 /* To suppress some diagnostics. */
3074 macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
3076 if (CPP_OPTION (pfile, traditional))
3077 ok = _cpp_create_trad_definition (pfile, macro);
3078 else
3080 ok = create_iso_definition (pfile, macro);
3082 /* We set the type for SEEN_EOL() in directives.c.
3084 Longer term we should lex the whole line before coming here,
3085 and just copy the expansion. */
3087 /* Stop the lexer accepting __VA_ARGS__. */
3088 pfile->state.va_args_ok = 0;
3091 /* Clear the fast argument lookup indices. */
3092 for (i = macro->paramc; i-- > 0; )
3094 struct cpp_hashnode *node = macro->params[i];
3095 node->flags &= ~ NODE_MACRO_ARG;
3096 node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
3099 if (!ok)
3100 return ok;
3102 if (node->type == NT_MACRO)
3104 if (CPP_OPTION (pfile, warn_unused_macros))
3105 _cpp_warn_if_unused_macro (pfile, node, NULL);
3107 if (warn_of_redefinition (pfile, node, macro))
3109 const int reason = (node->flags & NODE_BUILTIN)
3110 ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
3111 bool warned;
3113 warned = cpp_pedwarning_with_line (pfile, reason,
3114 pfile->directive_line, 0,
3115 "\"%s\" redefined",
3116 NODE_NAME (node));
3118 if (warned && node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
3119 cpp_error_with_line (pfile, CPP_DL_NOTE,
3120 node->value.macro->line, 0,
3121 "this is the location of the previous definition");
3125 if (node->type != NT_VOID)
3126 _cpp_free_definition (node);
3128 /* Enter definition in hash table. */
3129 node->type = NT_MACRO;
3130 node->value.macro = macro;
3131 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
3132 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
3133 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
3134 in the C standard, as something that one must use in C++.
3135 However DR#593 indicates that these aren't actually mentioned
3136 in the C++ standard. We special-case them anyway. */
3137 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
3138 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
3139 node->flags |= NODE_WARN;
3141 /* If user defines one of the conditional macros, remove the
3142 conditional flag */
3143 node->flags &= ~NODE_CONDITIONAL;
3145 return ok;
3148 /* Warn if a token in STRING matches one of a function-like MACRO's
3149 parameters. */
3150 static void
3151 check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
3152 const cpp_string *string)
3154 unsigned int i, len;
3155 const uchar *p, *q, *limit;
3157 /* Loop over the string. */
3158 limit = string->text + string->len - 1;
3159 for (p = string->text + 1; p < limit; p = q)
3161 /* Find the start of an identifier. */
3162 while (p < limit && !is_idstart (*p))
3163 p++;
3165 /* Find the end of the identifier. */
3166 q = p;
3167 while (q < limit && is_idchar (*q))
3168 q++;
3170 len = q - p;
3172 /* Loop over the function macro arguments to see if the
3173 identifier inside the string matches one of them. */
3174 for (i = 0; i < macro->paramc; i++)
3176 const cpp_hashnode *node = macro->params[i];
3178 if (NODE_LEN (node) == len
3179 && !memcmp (p, NODE_NAME (node), len))
3181 cpp_error (pfile, CPP_DL_WARNING,
3182 "macro argument \"%s\" would be stringified in traditional C",
3183 NODE_NAME (node));
3184 break;
3190 /* Returns the name, arguments and expansion of a macro, in a format
3191 suitable to be read back in again, and therefore also for DWARF 2
3192 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
3193 Caller is expected to generate the "#define" bit if needed. The
3194 returned text is temporary, and automatically freed later. */
3195 const unsigned char *
3196 cpp_macro_definition (cpp_reader *pfile, cpp_hashnode *node)
3198 unsigned int i, len;
3199 const cpp_macro *macro;
3200 unsigned char *buffer;
3202 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
3204 if (node->type != NT_MACRO
3205 || !pfile->cb.user_builtin_macro
3206 || !pfile->cb.user_builtin_macro (pfile, node))
3208 cpp_error (pfile, CPP_DL_ICE,
3209 "invalid hash type %d in cpp_macro_definition",
3210 node->type);
3211 return 0;
3215 macro = node->value.macro;
3216 /* Calculate length. */
3217 len = NODE_LEN (node) + 2; /* ' ' and NUL. */
3218 if (macro->fun_like)
3220 len += 4; /* "()" plus possible final ".." of named
3221 varargs (we have + 1 below). */
3222 for (i = 0; i < macro->paramc; i++)
3223 len += NODE_LEN (macro->params[i]) + 1; /* "," */
3226 /* This should match below where we fill in the buffer. */
3227 if (CPP_OPTION (pfile, traditional))
3228 len += _cpp_replacement_text_len (macro);
3229 else
3231 unsigned int count = macro_real_token_count (macro);
3232 for (i = 0; i < count; i++)
3234 cpp_token *token = &macro->exp.tokens[i];
3236 if (token->type == CPP_MACRO_ARG)
3237 len += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
3238 else
3239 len += cpp_token_len (token);
3241 if (token->flags & STRINGIFY_ARG)
3242 len++; /* "#" */
3243 if (token->flags & PASTE_LEFT)
3244 len += 3; /* " ##" */
3245 if (token->flags & PREV_WHITE)
3246 len++; /* " " */
3250 if (len > pfile->macro_buffer_len)
3252 pfile->macro_buffer = XRESIZEVEC (unsigned char,
3253 pfile->macro_buffer, len);
3254 pfile->macro_buffer_len = len;
3257 /* Fill in the buffer. Start with the macro name. */
3258 buffer = pfile->macro_buffer;
3259 memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
3260 buffer += NODE_LEN (node);
3262 /* Parameter names. */
3263 if (macro->fun_like)
3265 *buffer++ = '(';
3266 for (i = 0; i < macro->paramc; i++)
3268 cpp_hashnode *param = macro->params[i];
3270 if (param != pfile->spec_nodes.n__VA_ARGS__)
3272 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
3273 buffer += NODE_LEN (param);
3276 if (i + 1 < macro->paramc)
3277 /* Don't emit a space after the comma here; we're trying
3278 to emit a Dwarf-friendly definition, and the Dwarf spec
3279 forbids spaces in the argument list. */
3280 *buffer++ = ',';
3281 else if (macro->variadic)
3282 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
3284 *buffer++ = ')';
3287 /* The Dwarf spec requires a space after the macro name, even if the
3288 definition is the empty string. */
3289 *buffer++ = ' ';
3291 if (CPP_OPTION (pfile, traditional))
3292 buffer = _cpp_copy_replacement_text (macro, buffer);
3293 else if (macro->count)
3294 /* Expansion tokens. */
3296 unsigned int count = macro_real_token_count (macro);
3297 for (i = 0; i < count; i++)
3299 cpp_token *token = &macro->exp.tokens[i];
3301 if (token->flags & PREV_WHITE)
3302 *buffer++ = ' ';
3303 if (token->flags & STRINGIFY_ARG)
3304 *buffer++ = '#';
3306 if (token->type == CPP_MACRO_ARG)
3308 memcpy (buffer,
3309 NODE_NAME (macro->params[token->val.macro_arg.arg_no - 1]),
3310 NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]));
3311 buffer += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
3313 else
3314 buffer = cpp_spell_token (pfile, token, buffer, false);
3316 if (token->flags & PASTE_LEFT)
3318 *buffer++ = ' ';
3319 *buffer++ = '#';
3320 *buffer++ = '#';
3321 /* Next has PREV_WHITE; see _cpp_create_definition. */
3326 *buffer = '\0';
3327 return pfile->macro_buffer;