PR fortran/29383
[official-gcc.git] / libcpp / macro.c
blob407eb8c7767611c8bb14da7cd7bf6c65aedd1250
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
496 || cpp_userdef_string_p (token->type)
497 || cpp_userdef_char_p (token->type));
499 /* Room for each char being written in octal, initial space and
500 final quote and NUL. */
501 len = cpp_token_len (token);
502 if (escape_it)
503 len *= 4;
504 len += 3;
506 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
508 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
509 _cpp_extend_buff (pfile, &pfile->u_buff, len);
510 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
513 /* Leading white space? */
514 if (dest - 1 != BUFF_FRONT (pfile->u_buff))
516 if (source == NULL)
517 source = token;
518 if (source->flags & PREV_WHITE)
519 *dest++ = ' ';
521 source = NULL;
523 if (escape_it)
525 _cpp_buff *buff = _cpp_get_buff (pfile, len);
526 unsigned char *buf = BUFF_FRONT (buff);
527 len = cpp_spell_token (pfile, token, buf, true) - buf;
528 dest = cpp_quote_string (dest, buf, len);
529 _cpp_release_buff (pfile, buff);
531 else
532 dest = cpp_spell_token (pfile, token, dest, true);
534 if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
535 backslash_count++;
536 else
537 backslash_count = 0;
540 /* Ignore the final \ of invalid string literals. */
541 if (backslash_count & 1)
543 cpp_error (pfile, CPP_DL_WARNING,
544 "invalid string literal, ignoring final '\\'");
545 dest--;
548 /* Commit the memory, including NUL, and return the token. */
549 *dest++ = '"';
550 len = dest - BUFF_FRONT (pfile->u_buff);
551 BUFF_FRONT (pfile->u_buff) = dest + 1;
552 return new_string_token (pfile, dest - len, len);
555 /* Try to paste two tokens. On success, return nonzero. In any
556 case, PLHS is updated to point to the pasted token, which is
557 guaranteed to not have the PASTE_LEFT flag set. LOCATION is
558 the virtual location used for error reporting. */
559 static bool
560 paste_tokens (cpp_reader *pfile, source_location location,
561 const cpp_token **plhs, const cpp_token *rhs)
563 unsigned char *buf, *end, *lhsend;
564 cpp_token *lhs;
565 unsigned int len;
567 len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
568 buf = (unsigned char *) alloca (len);
569 end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
571 /* Avoid comment headers, since they are still processed in stage 3.
572 It is simpler to insert a space here, rather than modifying the
573 lexer to ignore comments in some circumstances. Simply returning
574 false doesn't work, since we want to clear the PASTE_LEFT flag. */
575 if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
576 *end++ = ' ';
577 /* In one obscure case we might see padding here. */
578 if (rhs->type != CPP_PADDING)
579 end = cpp_spell_token (pfile, rhs, end, false);
580 *end = '\n';
582 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
583 _cpp_clean_line (pfile);
585 /* Set pfile->cur_token as required by _cpp_lex_direct. */
586 pfile->cur_token = _cpp_temp_token (pfile);
587 lhs = _cpp_lex_direct (pfile);
588 if (pfile->buffer->cur != pfile->buffer->rlimit)
590 source_location saved_loc = lhs->src_loc;
592 _cpp_pop_buffer (pfile);
593 _cpp_backup_tokens (pfile, 1);
594 *lhsend = '\0';
596 /* We have to remove the PASTE_LEFT flag from the old lhs, but
597 we want to keep the new location. */
598 *lhs = **plhs;
599 *plhs = lhs;
600 lhs->src_loc = saved_loc;
601 lhs->flags &= ~PASTE_LEFT;
603 /* Mandatory error for all apart from assembler. */
604 if (CPP_OPTION (pfile, lang) != CLK_ASM)
605 cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
606 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
607 buf, cpp_token_as_text (pfile, rhs));
608 return false;
611 *plhs = lhs;
612 _cpp_pop_buffer (pfile);
613 return true;
616 /* Handles an arbitrarily long sequence of ## operators, with initial
617 operand LHS. This implementation is left-associative,
618 non-recursive, and finishes a paste before handling succeeding
619 ones. If a paste fails, we back up to the RHS of the failing ##
620 operator before pushing the context containing the result of prior
621 successful pastes, with the effect that the RHS appears in the
622 output stream after the pasted LHS normally. */
623 static void
624 paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
626 const cpp_token *rhs = NULL;
627 cpp_context *context = pfile->context;
628 source_location virt_loc = 0;
630 /* We are expanding a macro and we must have been called on a token
631 that appears at the left hand side of a ## operator. */
632 if (macro_of_context (pfile->context) == NULL
633 || (!(lhs->flags & PASTE_LEFT)))
634 abort ();
636 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
637 /* The caller must have called consume_next_token_from_context
638 right before calling us. That has incremented the pointer to
639 the current virtual location. So it now points to the location
640 of the token that comes right after *LHS. We want the
641 resulting pasted token to have the location of the current
642 *LHS, though. */
643 virt_loc = context->c.mc->cur_virt_loc[-1];
644 else
645 /* We are not tracking macro expansion. So the best virtual
646 location we can get here is the expansion point of the macro we
647 are currently expanding. */
648 virt_loc = pfile->invocation_location;
652 /* Take the token directly from the current context. We can do
653 this, because we are in the replacement list of either an
654 object-like macro, or a function-like macro with arguments
655 inserted. In either case, the constraints to #define
656 guarantee we have at least one more token. */
657 if (context->tokens_kind == TOKENS_KIND_DIRECT)
658 rhs = FIRST (context).token++;
659 else if (context->tokens_kind == TOKENS_KIND_INDIRECT)
660 rhs = *FIRST (context).ptoken++;
661 else if (context->tokens_kind == TOKENS_KIND_EXTENDED)
663 /* So we are in presence of an extended token context, which
664 means that each token in this context has a virtual
665 location attached to it. So let's not forget to update
666 the pointer to the current virtual location of the
667 current token when we update the pointer to the current
668 token */
670 rhs = *FIRST (context).ptoken++;
671 /* context->c.mc must be non-null, as if we were not in a
672 macro context, context->tokens_kind could not be equal to
673 TOKENS_KIND_EXTENDED. */
674 context->c.mc->cur_virt_loc++;
677 if (rhs->type == CPP_PADDING)
679 if (rhs->flags & PASTE_LEFT)
680 abort ();
682 if (!paste_tokens (pfile, virt_loc, &lhs, rhs))
683 break;
685 while (rhs->flags & PASTE_LEFT);
687 /* Put the resulting token in its own context. */
688 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
690 source_location *virt_locs = NULL;
691 _cpp_buff *token_buf = tokens_buff_new (pfile, 1, &virt_locs);
692 tokens_buff_add_token (token_buf, virt_locs, lhs,
693 virt_loc, 0, NULL, 0);
694 push_extended_tokens_context (pfile, context->c.mc->macro_node,
695 token_buf, virt_locs,
696 (const cpp_token **)token_buf->base, 1);
698 else
699 _cpp_push_token_context (pfile, NULL, lhs, 1);
702 /* Returns TRUE if the number of arguments ARGC supplied in an
703 invocation of the MACRO referenced by NODE is valid. An empty
704 invocation to a macro with no parameters should pass ARGC as zero.
706 Note that MACRO cannot necessarily be deduced from NODE, in case
707 NODE was redefined whilst collecting arguments. */
708 bool
709 _cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
711 if (argc == macro->paramc)
712 return true;
714 if (argc < macro->paramc)
716 /* As an extension, a rest argument is allowed to not appear in
717 the invocation at all.
718 e.g. #define debug(format, args...) something
719 debug("string");
721 This is exactly the same as if there had been an empty rest
722 argument - debug("string", ). */
724 if (argc + 1 == macro->paramc && macro->variadic)
726 if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
727 cpp_error (pfile, CPP_DL_PEDWARN,
728 "ISO C99 requires rest arguments to be used");
729 return true;
732 cpp_error (pfile, CPP_DL_ERROR,
733 "macro \"%s\" requires %u arguments, but only %u given",
734 NODE_NAME (node), macro->paramc, argc);
736 else
737 cpp_error (pfile, CPP_DL_ERROR,
738 "macro \"%s\" passed %u arguments, but takes just %u",
739 NODE_NAME (node), argc, macro->paramc);
741 return false;
744 /* Reads and returns the arguments to a function-like macro
745 invocation. Assumes the opening parenthesis has been processed.
746 If there is an error, emits an appropriate diagnostic and returns
747 NULL. Each argument is terminated by a CPP_EOF token, for the
748 future benefit of expand_arg(). If there are any deferred
749 #pragma directives among macro arguments, store pointers to the
750 CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.
752 What is returned is the buffer that contains the memory allocated
753 to hold the macro arguments. NODE is the name of the macro this
754 function is dealing with. If NUM_ARGS is non-NULL, *NUM_ARGS is
755 set to the actual number of macro arguments allocated in the
756 returned buffer. */
757 static _cpp_buff *
758 collect_args (cpp_reader *pfile, const cpp_hashnode *node,
759 _cpp_buff **pragma_buff, unsigned *num_args)
761 _cpp_buff *buff, *base_buff;
762 cpp_macro *macro;
763 macro_arg *args, *arg;
764 const cpp_token *token;
765 unsigned int argc;
766 source_location virt_loc;
767 bool track_macro_expansion_p = CPP_OPTION (pfile, track_macro_expansion);
768 unsigned num_args_alloced = 0;
770 macro = node->value.macro;
771 if (macro->paramc)
772 argc = macro->paramc;
773 else
774 argc = 1;
776 #define DEFAULT_NUM_TOKENS_PER_MACRO_ARG 50
777 #define ARG_TOKENS_EXTENT 1000
779 buff = _cpp_get_buff (pfile, argc * (DEFAULT_NUM_TOKENS_PER_MACRO_ARG
780 * sizeof (cpp_token *)
781 + sizeof (macro_arg)));
782 base_buff = buff;
783 args = (macro_arg *) buff->base;
784 memset (args, 0, argc * sizeof (macro_arg));
785 buff->cur = (unsigned char *) &args[argc];
786 arg = args, argc = 0;
788 /* Collect the tokens making up each argument. We don't yet know
789 how many arguments have been supplied, whether too many or too
790 few. Hence the slightly bizarre usage of "argc" and "arg". */
793 unsigned int paren_depth = 0;
794 unsigned int ntokens = 0;
795 unsigned virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
796 num_args_alloced++;
798 argc++;
799 arg->first = (const cpp_token **) buff->cur;
800 if (track_macro_expansion_p)
802 virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
803 arg->virt_locs = XNEWVEC (source_location,
804 virt_locs_capacity);
807 for (;;)
809 /* Require space for 2 new tokens (including a CPP_EOF). */
810 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
812 buff = _cpp_append_extend_buff (pfile, buff,
813 ARG_TOKENS_EXTENT
814 * sizeof (cpp_token *));
815 arg->first = (const cpp_token **) buff->cur;
817 if (track_macro_expansion_p
818 && (ntokens + 2 > virt_locs_capacity))
820 virt_locs_capacity += ARG_TOKENS_EXTENT;
821 arg->virt_locs = XRESIZEVEC (source_location,
822 arg->virt_locs,
823 virt_locs_capacity);
826 token = cpp_get_token_1 (pfile, &virt_loc);
828 if (token->type == CPP_PADDING)
830 /* Drop leading padding. */
831 if (ntokens == 0)
832 continue;
834 else if (token->type == CPP_OPEN_PAREN)
835 paren_depth++;
836 else if (token->type == CPP_CLOSE_PAREN)
838 if (paren_depth-- == 0)
839 break;
841 else if (token->type == CPP_COMMA)
843 /* A comma does not terminate an argument within
844 parentheses or as part of a variable argument. */
845 if (paren_depth == 0
846 && ! (macro->variadic && argc == macro->paramc))
847 break;
849 else if (token->type == CPP_EOF
850 || (token->type == CPP_HASH && token->flags & BOL))
851 break;
852 else if (token->type == CPP_PRAGMA)
854 cpp_token *newtok = _cpp_temp_token (pfile);
856 /* CPP_PRAGMA token lives in directive_result, which will
857 be overwritten on the next directive. */
858 *newtok = *token;
859 token = newtok;
862 if (*pragma_buff == NULL
863 || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
865 _cpp_buff *next;
866 if (*pragma_buff == NULL)
867 *pragma_buff
868 = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
869 else
871 next = *pragma_buff;
872 *pragma_buff
873 = _cpp_get_buff (pfile,
874 (BUFF_FRONT (*pragma_buff)
875 - (*pragma_buff)->base) * 2);
876 (*pragma_buff)->next = next;
879 *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
880 BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
881 if (token->type == CPP_PRAGMA_EOL)
882 break;
883 token = cpp_get_token_1 (pfile, &virt_loc);
885 while (token->type != CPP_EOF);
887 /* In deferred pragmas parsing_args and prevent_expansion
888 had been changed, reset it. */
889 pfile->state.parsing_args = 2;
890 pfile->state.prevent_expansion = 1;
892 if (token->type == CPP_EOF)
893 break;
894 else
895 continue;
897 set_arg_token (arg, token, virt_loc,
898 ntokens, MACRO_ARG_TOKEN_NORMAL,
899 CPP_OPTION (pfile, track_macro_expansion));
900 ntokens++;
903 /* Drop trailing padding. */
904 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
905 ntokens--;
907 arg->count = ntokens;
908 set_arg_token (arg, &pfile->eof, pfile->eof.src_loc,
909 ntokens, MACRO_ARG_TOKEN_NORMAL,
910 CPP_OPTION (pfile, track_macro_expansion));
912 /* Terminate the argument. Excess arguments loop back and
913 overwrite the final legitimate argument, before failing. */
914 if (argc <= macro->paramc)
916 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
917 if (argc != macro->paramc)
918 arg++;
921 while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
923 if (token->type == CPP_EOF)
925 /* We still need the CPP_EOF to end directives, and to end
926 pre-expansion of a macro argument. Step back is not
927 unconditional, since we don't want to return a CPP_EOF to our
928 callers at the end of an -include-d file. */
929 if (pfile->context->prev || pfile->state.in_directive)
930 _cpp_backup_tokens (pfile, 1);
931 cpp_error (pfile, CPP_DL_ERROR,
932 "unterminated argument list invoking macro \"%s\"",
933 NODE_NAME (node));
935 else
937 /* A single empty argument is counted as no argument. */
938 if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
939 argc = 0;
940 if (_cpp_arguments_ok (pfile, macro, node, argc))
942 /* GCC has special semantics for , ## b where b is a varargs
943 parameter: we remove the comma if b was omitted entirely.
944 If b was merely an empty argument, the comma is retained.
945 If the macro takes just one (varargs) parameter, then we
946 retain the comma only if we are standards conforming.
948 If FIRST is NULL replace_args () swallows the comma. */
949 if (macro->variadic && (argc < macro->paramc
950 || (argc == 1 && args[0].count == 0
951 && !CPP_OPTION (pfile, std))))
952 args[macro->paramc - 1].first = NULL;
953 if (num_args)
954 *num_args = num_args_alloced;
955 return base_buff;
959 /* An error occurred. */
960 _cpp_release_buff (pfile, base_buff);
961 return NULL;
964 /* Search for an opening parenthesis to the macro of NODE, in such a
965 way that, if none is found, we don't lose the information in any
966 intervening padding tokens. If we find the parenthesis, collect
967 the arguments and return the buffer containing them. PRAGMA_BUFF
968 argument is the same as in collect_args. If NUM_ARGS is non-NULL,
969 *NUM_ARGS is set to the number of arguments contained in the
970 returned buffer. */
971 static _cpp_buff *
972 funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
973 _cpp_buff **pragma_buff, unsigned *num_args)
975 const cpp_token *token, *padding = NULL;
977 for (;;)
979 token = cpp_get_token (pfile);
980 if (token->type != CPP_PADDING)
981 break;
982 if (padding == NULL
983 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
984 padding = token;
987 if (token->type == CPP_OPEN_PAREN)
989 pfile->state.parsing_args = 2;
990 return collect_args (pfile, node, pragma_buff, num_args);
993 /* CPP_EOF can be the end of macro arguments, or the end of the
994 file. We mustn't back up over the latter. Ugh. */
995 if (token->type != CPP_EOF || token == &pfile->eof)
997 /* Back up. We may have skipped padding, in which case backing
998 up more than one token when expanding macros is in general
999 too difficult. We re-insert it in its own context. */
1000 _cpp_backup_tokens (pfile, 1);
1001 if (padding)
1002 _cpp_push_token_context (pfile, NULL, padding, 1);
1005 return NULL;
1008 /* Return the real number of tokens in the expansion of MACRO. */
1009 static inline unsigned int
1010 macro_real_token_count (const cpp_macro *macro)
1012 unsigned int i;
1013 if (__builtin_expect (!macro->extra_tokens, true))
1014 return macro->count;
1015 for (i = 0; i < macro->count; i++)
1016 if (macro->exp.tokens[i].type == CPP_PASTE)
1017 return i;
1018 abort ();
1021 /* Push the context of a macro with hash entry NODE onto the context
1022 stack. If we can successfully expand the macro, we push a context
1023 containing its yet-to-be-rescanned replacement list and return one.
1024 If there were additionally any unexpanded deferred #pragma
1025 directives among macro arguments, push another context containing
1026 the pragma tokens before the yet-to-be-rescanned replacement list
1027 and return two. Otherwise, we don't push a context and return
1028 zero. LOCATION is the location of the expansion point of the
1029 macro. */
1030 static int
1031 enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
1032 const cpp_token *result, source_location location)
1034 /* The presence of a macro invalidates a file's controlling macro. */
1035 pfile->mi_valid = false;
1037 pfile->state.angled_headers = false;
1039 /* From here to when we push the context for the macro later down
1040 this function, we need to flag the fact that we are about to
1041 expand a macro. This is useful when -ftrack-macro-expansion is
1042 turned off. In that case, we need to record the location of the
1043 expansion point of the top-most macro we are about to to expand,
1044 into pfile->invocation_location. But we must not record any such
1045 location once the process of expanding the macro starts; that is,
1046 we must not do that recording between now and later down this
1047 function where set this flag to FALSE. */
1048 pfile->about_to_expand_macro_p = true;
1050 if ((node->flags & NODE_BUILTIN) && !(node->flags & NODE_USED))
1052 node->flags |= NODE_USED;
1053 if ((!pfile->cb.user_builtin_macro
1054 || !pfile->cb.user_builtin_macro (pfile, node))
1055 && pfile->cb.used_define)
1056 pfile->cb.used_define (pfile, pfile->directive_line, node);
1059 /* Handle standard macros. */
1060 if (! (node->flags & NODE_BUILTIN))
1062 cpp_macro *macro = node->value.macro;
1063 _cpp_buff *pragma_buff = NULL;
1065 if (macro->fun_like)
1067 _cpp_buff *buff;
1068 unsigned num_args = 0;
1070 pfile->state.prevent_expansion++;
1071 pfile->keep_tokens++;
1072 pfile->state.parsing_args = 1;
1073 buff = funlike_invocation_p (pfile, node, &pragma_buff,
1074 &num_args);
1075 pfile->state.parsing_args = 0;
1076 pfile->keep_tokens--;
1077 pfile->state.prevent_expansion--;
1079 if (buff == NULL)
1081 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
1082 cpp_warning (pfile, CPP_W_TRADITIONAL,
1083 "function-like macro \"%s\" must be used with arguments in traditional C",
1084 NODE_NAME (node));
1086 if (pragma_buff)
1087 _cpp_release_buff (pfile, pragma_buff);
1089 pfile->about_to_expand_macro_p = false;
1090 return 0;
1093 if (macro->paramc > 0)
1094 replace_args (pfile, node, macro,
1095 (macro_arg *) buff->base,
1096 location);
1097 /* Free the memory used by the arguments of this
1098 function-like macro. This memory has been allocated by
1099 funlike_invocation_p and by replace_args. */
1100 delete_macro_args (buff, num_args);
1103 /* Disable the macro within its expansion. */
1104 node->flags |= NODE_DISABLED;
1106 if (!(node->flags & NODE_USED))
1108 node->flags |= NODE_USED;
1109 if (pfile->cb.used_define)
1110 pfile->cb.used_define (pfile, pfile->directive_line, node);
1113 if (pfile->cb.used)
1114 pfile->cb.used (pfile, location, node);
1116 macro->used = 1;
1118 if (macro->paramc == 0)
1120 unsigned tokens_count = macro_real_token_count (macro);
1121 if (CPP_OPTION (pfile, track_macro_expansion))
1123 unsigned int i;
1124 const cpp_token *src = macro->exp.tokens;
1125 const struct line_map *map;
1126 source_location *virt_locs = NULL;
1127 _cpp_buff *macro_tokens
1128 = tokens_buff_new (pfile, tokens_count, &virt_locs);
1130 /* Create a macro map to record the locations of the
1131 tokens that are involved in the expansion. LOCATION
1132 is the location of the macro expansion point. */
1133 map = linemap_enter_macro (pfile->line_table,
1134 node, location, tokens_count);
1135 for (i = 0; i < tokens_count; ++i)
1137 tokens_buff_add_token (macro_tokens, virt_locs,
1138 src, src->src_loc,
1139 src->src_loc, map, i);
1140 ++src;
1142 push_extended_tokens_context (pfile, node,
1143 macro_tokens,
1144 virt_locs,
1145 (const cpp_token **)
1146 macro_tokens->base,
1147 tokens_count);
1149 else
1150 _cpp_push_token_context (pfile, node, macro->exp.tokens,
1151 tokens_count);
1152 num_macro_tokens_counter += tokens_count;
1155 if (pragma_buff)
1157 if (!pfile->state.in_directive)
1158 _cpp_push_token_context (pfile, NULL,
1159 padding_token (pfile, result), 1);
1162 unsigned tokens_count;
1163 _cpp_buff *tail = pragma_buff->next;
1164 pragma_buff->next = NULL;
1165 tokens_count = ((const cpp_token **) BUFF_FRONT (pragma_buff)
1166 - (const cpp_token **) pragma_buff->base);
1167 push_ptoken_context (pfile, NULL, pragma_buff,
1168 (const cpp_token **) pragma_buff->base,
1169 tokens_count);
1170 pragma_buff = tail;
1171 if (!CPP_OPTION (pfile, track_macro_expansion))
1172 num_macro_tokens_counter += tokens_count;
1175 while (pragma_buff != NULL);
1176 pfile->about_to_expand_macro_p = false;
1177 return 2;
1180 pfile->about_to_expand_macro_p = false;
1181 return 1;
1184 pfile->about_to_expand_macro_p = false;
1185 /* Handle built-in macros and the _Pragma operator. */
1186 return builtin_macro (pfile, node);
1189 /* De-allocate the memory used by BUFF which is an array of instances
1190 of macro_arg. NUM_ARGS is the number of instances of macro_arg
1191 present in BUFF. */
1192 static void
1193 delete_macro_args (_cpp_buff *buff, unsigned num_args)
1195 macro_arg *macro_args;
1196 unsigned i;
1198 if (buff == NULL)
1199 return;
1201 macro_args = (macro_arg *) buff->base;
1203 /* Walk instances of macro_arg to free their expanded tokens as well
1204 as their macro_arg::virt_locs members. */
1205 for (i = 0; i < num_args; ++i)
1207 if (macro_args[i].expanded)
1209 free (macro_args[i].expanded);
1210 macro_args[i].expanded = NULL;
1212 if (macro_args[i].virt_locs)
1214 free (macro_args[i].virt_locs);
1215 macro_args[i].virt_locs = NULL;
1217 if (macro_args[i].expanded_virt_locs)
1219 free (macro_args[i].expanded_virt_locs);
1220 macro_args[i].expanded_virt_locs = NULL;
1223 _cpp_free_buff (buff);
1226 /* Set the INDEXth token of the macro argument ARG. TOKEN is the token
1227 to set, LOCATION is its virtual location. "Virtual" location means
1228 the location that encodes loci across macro expansion. Otherwise
1229 it has to be TOKEN->SRC_LOC. KIND is the kind of tokens the
1230 argument ARG is supposed to contain. Note that ARG must be
1231 tailored so that it has enough room to contain INDEX + 1 numbers of
1232 tokens, at least. */
1233 static void
1234 set_arg_token (macro_arg *arg, const cpp_token *token,
1235 source_location location, size_t index,
1236 enum macro_arg_token_kind kind,
1237 bool track_macro_exp_p)
1239 const cpp_token **token_ptr;
1240 source_location *loc = NULL;
1242 token_ptr =
1243 arg_token_ptr_at (arg, index, kind,
1244 track_macro_exp_p ? &loc : NULL);
1245 *token_ptr = token;
1247 if (loc != NULL)
1249 #ifdef ENABLE_CHECKING
1250 if (kind == MACRO_ARG_TOKEN_STRINGIFIED
1251 || !track_macro_exp_p)
1252 /* We can't set the location of a stringified argument
1253 token and we can't set any location if we aren't tracking
1254 macro expansion locations. */
1255 abort ();
1256 #endif
1257 *loc = location;
1261 /* Get the pointer to the location of the argument token of the
1262 function-like macro argument ARG. This function must be called
1263 only when we -ftrack-macro-expansion is on. */
1264 static const source_location *
1265 get_arg_token_location (const macro_arg *arg,
1266 enum macro_arg_token_kind kind)
1268 const source_location *loc = NULL;
1269 const cpp_token **token_ptr =
1270 arg_token_ptr_at (arg, 0, kind, (source_location **) &loc);
1272 if (token_ptr == NULL)
1273 return NULL;
1275 return loc;
1278 /* Return the pointer to the INDEXth token of the macro argument ARG.
1279 KIND specifies the kind of token the macro argument ARG contains.
1280 If VIRT_LOCATION is non NULL, *VIRT_LOCATION is set to the address
1281 of the virtual location of the returned token if the
1282 -ftrack-macro-expansion flag is on; otherwise, it's set to the
1283 spelling location of the returned token. */
1284 static const cpp_token **
1285 arg_token_ptr_at (const macro_arg *arg, size_t index,
1286 enum macro_arg_token_kind kind,
1287 source_location **virt_location)
1289 const cpp_token **tokens_ptr = NULL;
1291 switch (kind)
1293 case MACRO_ARG_TOKEN_NORMAL:
1294 tokens_ptr = arg->first;
1295 break;
1296 case MACRO_ARG_TOKEN_STRINGIFIED:
1297 tokens_ptr = (const cpp_token **) &arg->stringified;
1298 break;
1299 case MACRO_ARG_TOKEN_EXPANDED:
1300 tokens_ptr = arg->expanded;
1301 break;
1304 if (tokens_ptr == NULL)
1305 /* This can happen for e.g, an empty token argument to a
1306 funtion-like macro. */
1307 return tokens_ptr;
1309 if (virt_location)
1311 if (kind == MACRO_ARG_TOKEN_NORMAL)
1312 *virt_location = &arg->virt_locs[index];
1313 else if (kind == MACRO_ARG_TOKEN_EXPANDED)
1314 *virt_location = &arg->expanded_virt_locs[index];
1315 else if (kind == MACRO_ARG_TOKEN_STRINGIFIED)
1316 *virt_location =
1317 (source_location *) &tokens_ptr[index]->src_loc;
1319 return &tokens_ptr[index];
1322 /* Initialize an iterator so that it iterates over the tokens of a
1323 function-like macro argument. KIND is the kind of tokens we want
1324 ITER to iterate over. TOKEN_PTR points the first token ITER will
1325 iterate over. */
1326 static void
1327 macro_arg_token_iter_init (macro_arg_token_iter *iter,
1328 bool track_macro_exp_p,
1329 enum macro_arg_token_kind kind,
1330 const macro_arg *arg,
1331 const cpp_token **token_ptr)
1333 iter->track_macro_exp_p = track_macro_exp_p;
1334 iter->kind = kind;
1335 iter->token_ptr = token_ptr;
1336 /* Unconditionally initialize this so that the compiler doesn't warn
1337 about iter->location_ptr being possibly uninitialized later after
1338 this code has been inlined somewhere. */
1339 iter->location_ptr = NULL;
1340 if (track_macro_exp_p)
1341 iter->location_ptr = get_arg_token_location (arg, kind);
1342 #ifdef ENABLE_CHECKING
1343 iter->num_forwards = 0;
1344 if (track_macro_exp_p
1345 && token_ptr != NULL
1346 && iter->location_ptr == NULL)
1347 abort ();
1348 #endif
1351 /* Move the iterator one token forward. Note that if IT was
1352 initialized on an argument that has a stringified token, moving it
1353 forward doesn't make sense as a stringified token is essentially one
1354 string. */
1355 static void
1356 macro_arg_token_iter_forward (macro_arg_token_iter *it)
1358 switch (it->kind)
1360 case MACRO_ARG_TOKEN_NORMAL:
1361 case MACRO_ARG_TOKEN_EXPANDED:
1362 it->token_ptr++;
1363 if (it->track_macro_exp_p)
1364 it->location_ptr++;
1365 break;
1366 case MACRO_ARG_TOKEN_STRINGIFIED:
1367 #ifdef ENABLE_CHECKING
1368 if (it->num_forwards > 0)
1369 abort ();
1370 #endif
1371 break;
1374 #ifdef ENABLE_CHECKING
1375 it->num_forwards++;
1376 #endif
1379 /* Return the token pointed to by the iterator. */
1380 static const cpp_token *
1381 macro_arg_token_iter_get_token (const macro_arg_token_iter *it)
1383 #ifdef ENABLE_CHECKING
1384 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1385 && it->num_forwards > 0)
1386 abort ();
1387 #endif
1388 if (it->token_ptr == NULL)
1389 return NULL;
1390 return *it->token_ptr;
1393 /* Return the location of the token pointed to by the iterator.*/
1394 static source_location
1395 macro_arg_token_iter_get_location (const macro_arg_token_iter *it)
1397 #ifdef ENABLE_CHECKING
1398 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1399 && it->num_forwards > 0)
1400 abort ();
1401 #endif
1402 if (it->track_macro_exp_p)
1403 return *it->location_ptr;
1404 else
1405 return (*it->token_ptr)->src_loc;
1408 /* Return the index of a token [resulting from macro expansion] inside
1409 the total list of tokens resulting from a given macro
1410 expansion. The index can be different depending on whether if we
1411 want each tokens resulting from function-like macro arguments
1412 expansion to have a different location or not.
1414 E.g, consider this function-like macro:
1416 #define M(x) x - 3
1418 Then consider us "calling" it (and thus expanding it) like:
1420 M(1+4)
1422 It will be expanded into:
1424 1+4-3
1426 Let's consider the case of the token '4'.
1428 Its index can be 2 (it's the third token of the set of tokens
1429 resulting from the expansion) or it can be 0 if we consider that
1430 all tokens resulting from the expansion of the argument "1+2" have
1431 the same index, which is 0. In this later case, the index of token
1432 '-' would then be 1 and the index of token '3' would be 2.
1434 The later case is useful to use less memory e.g, for the case of
1435 the user using the option -ftrack-macro-expansion=1.
1437 ABSOLUTE_TOKEN_INDEX is the index of the macro argument token we
1438 are interested in. CUR_REPLACEMENT_TOKEN is the token of the macro
1439 parameter (inside the macro replacement list) that corresponds to
1440 the macro argument for which ABSOLUTE_TOKEN_INDEX is a token index
1443 If we refer to the example above, for the '4' argument token,
1444 ABSOLUTE_TOKEN_INDEX would be set to 2, and CUR_REPLACEMENT_TOKEN
1445 would be set to the token 'x', in the replacement list "x - 3" of
1446 macro M.
1448 This is a subroutine of replace_args. */
1449 inline static unsigned
1450 expanded_token_index (cpp_reader *pfile, cpp_macro *macro,
1451 const cpp_token *cur_replacement_token,
1452 unsigned absolute_token_index)
1454 if (CPP_OPTION (pfile, track_macro_expansion) > 1)
1455 return absolute_token_index;
1456 return cur_replacement_token - macro->exp.tokens;
1459 /* Replace the parameters in a function-like macro of NODE with the
1460 actual ARGS, and place the result in a newly pushed token context.
1461 Expand each argument before replacing, unless it is operated upon
1462 by the # or ## operators. EXPANSION_POINT_LOC is the location of
1463 the expansion point of the macro. E.g, the location of the
1464 function-like macro invocation. */
1465 static void
1466 replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
1467 macro_arg *args, source_location expansion_point_loc)
1469 unsigned int i, total;
1470 const cpp_token *src, *limit;
1471 const cpp_token **first = NULL;
1472 macro_arg *arg;
1473 _cpp_buff *buff = NULL;
1474 source_location *virt_locs = NULL;
1475 unsigned int exp_count;
1476 const struct line_map *map = NULL;
1477 int track_macro_exp;
1479 /* First, fully macro-expand arguments, calculating the number of
1480 tokens in the final expansion as we go. The ordering of the if
1481 statements below is subtle; we must handle stringification before
1482 pasting. */
1484 /* EXP_COUNT is the number of tokens in the macro replacement
1485 list. TOTAL is the number of tokens /after/ macro parameters
1486 have been replaced by their arguments. */
1487 exp_count = macro_real_token_count (macro);
1488 total = exp_count;
1489 limit = macro->exp.tokens + exp_count;
1491 for (src = macro->exp.tokens; src < limit; src++)
1492 if (src->type == CPP_MACRO_ARG)
1494 /* Leading and trailing padding tokens. */
1495 total += 2;
1496 /* Account for leading and padding tokens in exp_count too.
1497 This is going to be important later down this function,
1498 when we want to handle the case of (track_macro_exp <
1499 2). */
1500 exp_count += 2;
1502 /* We have an argument. If it is not being stringified or
1503 pasted it is macro-replaced before insertion. */
1504 arg = &args[src->val.macro_arg.arg_no - 1];
1506 if (src->flags & STRINGIFY_ARG)
1508 if (!arg->stringified)
1509 arg->stringified = stringify_arg (pfile, arg);
1511 else if ((src->flags & PASTE_LEFT)
1512 || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
1513 total += arg->count - 1;
1514 else
1516 if (!arg->expanded)
1517 expand_arg (pfile, arg);
1518 total += arg->expanded_count - 1;
1522 /* When the compiler is called with the -ftrack-macro-expansion
1523 flag, we need to keep track of the location of each token that
1524 results from macro expansion.
1526 A token resulting from macro expansion is not a new token. It is
1527 simply the same token as the token coming from the macro
1528 definition. The new things that are allocated are the buffer
1529 that holds the tokens resulting from macro expansion and a new
1530 location that records many things like the locus of the expansion
1531 point as well as the original locus inside the definition of the
1532 macro. This location is called a virtual location.
1534 So the buffer BUFF holds a set of cpp_token*, and the buffer
1535 VIRT_LOCS holds the virtual locations of the tokens held by BUFF.
1537 Both of these two buffers are going to be hung off of the macro
1538 context, when the latter is pushed. The memory allocated to
1539 store the tokens and their locations is going to be freed once
1540 the context of macro expansion is popped.
1542 As far as tokens are concerned, the memory overhead of
1543 -ftrack-macro-expansion is proportional to the number of
1544 macros that get expanded multiplied by sizeof (source_location).
1545 The good news is that extra memory gets freed when the macro
1546 context is freed, i.e shortly after the macro got expanded. */
1548 /* Is the -ftrack-macro-expansion flag in effect? */
1549 track_macro_exp = CPP_OPTION (pfile, track_macro_expansion);
1551 /* Now allocate memory space for tokens and locations resulting from
1552 the macro expansion, copy the tokens and replace the arguments.
1553 This memory must be freed when the context of the macro MACRO is
1554 popped. */
1555 buff = tokens_buff_new (pfile, total, track_macro_exp ? &virt_locs : NULL);
1557 first = (const cpp_token **) buff->base;
1559 /* Create a macro map to record the locations of the tokens that are
1560 involved in the expansion. Note that the expansion point is set
1561 to the location of the closing parenthesis. Otherwise, the
1562 subsequent map created for the first token that comes after the
1563 macro map might have a wrong line number. That would lead to
1564 tokens with wrong line numbers after the macro expansion. This
1565 adds up to the memory overhead of the -ftrack-macro-expansion
1566 flag; for every macro that is expanded, a "macro map" is
1567 created. */
1568 if (track_macro_exp)
1570 int num_macro_tokens = total;
1571 if (track_macro_exp < 2)
1572 /* Then the number of macro tokens won't take in account the
1573 fact that function-like macro arguments can expand to
1574 multiple tokens. This is to save memory at the expense of
1575 accuracy.
1577 Suppose we have #define SQARE(A) A * A
1579 And then we do SQARE(2+3)
1581 Then the tokens 2, +, 3, will have the same location,
1582 saying they come from the expansion of the argument A. */
1583 num_macro_tokens = exp_count;
1584 map = linemap_enter_macro (pfile->line_table, node,
1585 expansion_point_loc,
1586 num_macro_tokens);
1588 i = 0;
1589 for (src = macro->exp.tokens; src < limit; src++)
1591 unsigned int arg_tokens_count;
1592 macro_arg_token_iter from;
1593 const cpp_token **paste_flag = NULL;
1594 const cpp_token **tmp_token_ptr;
1596 if (src->type != CPP_MACRO_ARG)
1598 /* Allocate a virtual location for token SRC, and add that
1599 token and its virtual location into the buffers BUFF and
1600 VIRT_LOCS. */
1601 unsigned index = expanded_token_index (pfile, macro, src, i);
1602 tokens_buff_add_token (buff, virt_locs, src,
1603 src->src_loc, src->src_loc,
1604 map, index);
1605 i += 1;
1606 continue;
1609 paste_flag = 0;
1610 arg = &args[src->val.macro_arg.arg_no - 1];
1611 /* SRC is a macro parameter that we need to replace with its
1612 corresponding argument. So at some point we'll need to
1613 iterate over the tokens of the macro argument and copy them
1614 into the "place" now holding the correspondig macro
1615 parameter. We are going to use the iterator type
1616 macro_argo_token_iter to handle that iterating. The 'if'
1617 below is to initialize the iterator depending on the type of
1618 tokens the macro argument has. It also does some adjustment
1619 related to padding tokens and some pasting corner cases. */
1620 if (src->flags & STRINGIFY_ARG)
1622 arg_tokens_count = 1;
1623 macro_arg_token_iter_init (&from,
1624 CPP_OPTION (pfile,
1625 track_macro_expansion),
1626 MACRO_ARG_TOKEN_STRINGIFIED,
1627 arg, &arg->stringified);
1629 else if (src->flags & PASTE_LEFT)
1631 arg_tokens_count = arg->count;
1632 macro_arg_token_iter_init (&from,
1633 CPP_OPTION (pfile,
1634 track_macro_expansion),
1635 MACRO_ARG_TOKEN_NORMAL,
1636 arg, arg->first);
1638 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
1640 int num_toks;
1641 arg_tokens_count = arg->count;
1642 macro_arg_token_iter_init (&from,
1643 CPP_OPTION (pfile,
1644 track_macro_expansion),
1645 MACRO_ARG_TOKEN_NORMAL,
1646 arg, arg->first);
1648 num_toks = tokens_buff_count (buff);
1650 if (num_toks != 0)
1652 /* So the current parameter token is pasted to the previous
1653 token in the replacement list. Let's look at what
1654 we have as previous and current arguments. */
1656 /* This is the previous argument's token ... */
1657 tmp_token_ptr = tokens_buff_last_token_ptr (buff);
1659 if ((*tmp_token_ptr)->type == CPP_COMMA
1660 && macro->variadic
1661 && src->val.macro_arg.arg_no == macro->paramc)
1663 /* ... which is a comma; and the current parameter
1664 is the last parameter of a variadic function-like
1665 macro. If the argument to the current last
1666 parameter is NULL, then swallow the comma,
1667 otherwise drop the paste flag. */
1668 if (macro_arg_token_iter_get_token (&from) == NULL)
1669 tokens_buff_remove_last_token (buff);
1670 else
1671 paste_flag = tmp_token_ptr;
1673 /* Remove the paste flag if the RHS is a placemarker. */
1674 else if (arg_tokens_count == 0)
1675 paste_flag = tmp_token_ptr;
1678 else
1680 arg_tokens_count = arg->expanded_count;
1681 macro_arg_token_iter_init (&from,
1682 CPP_OPTION (pfile,
1683 track_macro_expansion),
1684 MACRO_ARG_TOKEN_EXPANDED,
1685 arg, arg->expanded);
1688 /* Padding on the left of an argument (unless RHS of ##). */
1689 if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
1690 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
1692 const cpp_token *t = padding_token (pfile, src);
1693 unsigned index = expanded_token_index (pfile, macro, src, i);
1694 /* Allocate a virtual location for the padding token and
1695 append the token and its location to BUFF and
1696 VIRT_LOCS. */
1697 tokens_buff_add_token (buff, virt_locs, t,
1698 t->src_loc, t->src_loc,
1699 map, index);
1702 if (arg_tokens_count)
1704 /* So now we've got the number of tokens that make up the
1705 argument that is going to replace the current parameter
1706 in the macro's replacement list. */
1707 unsigned int j;
1708 for (j = 0; j < arg_tokens_count; ++j)
1710 /* So if track_macro_exp is < 2, the user wants to
1711 save extra memory while tracking macro expansion
1712 locations. So in that case here is what we do:
1714 Suppose we have #define SQARE(A) A * A
1716 And then we do SQARE(2+3)
1718 Then the tokens 2, +, 3, will have the same location,
1719 saying they come from the expansion of the argument
1722 So that means we are going to ignore the COUNT tokens
1723 resulting from the expansion of the current macro
1724 arugment. In other words all the ARG_TOKENS_COUNT tokens
1725 resulting from the expansion of the macro argument will
1726 have the index I. Normally, each of those token should
1727 have index I+J. */
1728 unsigned token_index = i;
1729 unsigned index;
1730 if (track_macro_exp > 1)
1731 token_index += j;
1733 index = expanded_token_index (pfile, macro, src, token_index);
1734 tokens_buff_add_token (buff, virt_locs,
1735 macro_arg_token_iter_get_token (&from),
1736 macro_arg_token_iter_get_location (&from),
1737 src->src_loc, map, index);
1738 macro_arg_token_iter_forward (&from);
1741 /* With a non-empty argument on the LHS of ##, the last
1742 token should be flagged PASTE_LEFT. */
1743 if (src->flags & PASTE_LEFT)
1744 paste_flag =
1745 (const cpp_token **) tokens_buff_last_token_ptr (buff);
1747 else if (CPP_PEDANTIC (pfile) && ! macro->syshdr
1748 && ! CPP_OPTION (pfile, c99)
1749 && ! cpp_in_system_header (pfile))
1751 cpp_error (pfile, CPP_DL_PEDWARN,
1752 "invoking macro %s argument %d: "
1753 "empty macro arguments are undefined"
1754 " in ISO C90 and ISO C++98",
1755 NODE_NAME (node),
1756 src->val.macro_arg.arg_no);
1759 /* Avoid paste on RHS (even case count == 0). */
1760 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
1762 const cpp_token *t = &pfile->avoid_paste;
1763 tokens_buff_add_token (buff, virt_locs,
1764 t, t->src_loc, t->src_loc,
1765 NULL, 0);
1768 /* Add a new paste flag, or remove an unwanted one. */
1769 if (paste_flag)
1771 cpp_token *token = _cpp_temp_token (pfile);
1772 token->type = (*paste_flag)->type;
1773 token->val = (*paste_flag)->val;
1774 if (src->flags & PASTE_LEFT)
1775 token->flags = (*paste_flag)->flags | PASTE_LEFT;
1776 else
1777 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1778 *paste_flag = token;
1781 i += arg_tokens_count;
1784 if (track_macro_exp)
1785 push_extended_tokens_context (pfile, node, buff, virt_locs, first,
1786 tokens_buff_count (buff));
1787 else
1788 push_ptoken_context (pfile, node, buff, first,
1789 tokens_buff_count (buff));
1791 num_macro_tokens_counter += tokens_buff_count (buff);
1794 /* Return a special padding token, with padding inherited from SOURCE. */
1795 static const cpp_token *
1796 padding_token (cpp_reader *pfile, const cpp_token *source)
1798 cpp_token *result = _cpp_temp_token (pfile);
1800 result->type = CPP_PADDING;
1802 /* Data in GCed data structures cannot be made const so far, so we
1803 need a cast here. */
1804 result->val.source = (cpp_token *) source;
1805 result->flags = 0;
1806 return result;
1809 /* Get a new uninitialized context. Create a new one if we cannot
1810 re-use an old one. */
1811 static cpp_context *
1812 next_context (cpp_reader *pfile)
1814 cpp_context *result = pfile->context->next;
1816 if (result == 0)
1818 result = XNEW (cpp_context);
1819 memset (result, 0, sizeof (cpp_context));
1820 result->prev = pfile->context;
1821 result->next = 0;
1822 pfile->context->next = result;
1825 pfile->context = result;
1826 return result;
1829 /* Push a list of pointers to tokens. */
1830 static void
1831 push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
1832 const cpp_token **first, unsigned int count)
1834 cpp_context *context = next_context (pfile);
1836 context->tokens_kind = TOKENS_KIND_INDIRECT;
1837 context->c.macro = macro;
1838 context->buff = buff;
1839 FIRST (context).ptoken = first;
1840 LAST (context).ptoken = first + count;
1843 /* Push a list of tokens.
1845 A NULL macro means that we should continue the current macro
1846 expansion, in essence. That means that if we are currently in a
1847 macro expansion context, we'll make the new pfile->context refer to
1848 the current macro. */
1849 void
1850 _cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
1851 const cpp_token *first, unsigned int count)
1853 cpp_context *context;
1855 if (macro == NULL)
1856 macro = macro_of_context (pfile->context);
1858 context = next_context (pfile);
1859 context->tokens_kind = TOKENS_KIND_DIRECT;
1860 context->c.macro = macro;
1861 context->buff = NULL;
1862 FIRST (context).token = first;
1863 LAST (context).token = first + count;
1866 /* Build a context containing a list of tokens as well as their
1867 virtual locations and push it. TOKENS_BUFF is the buffer that
1868 contains the tokens pointed to by FIRST. If TOKENS_BUFF is
1869 non-NULL, it means that the context owns it, meaning that
1870 _cpp_pop_context will free it as well as VIRT_LOCS_BUFF that
1871 contains the virtual locations.
1873 A NULL macro means that we should continue the current macro
1874 expansion, in essence. That means that if we are currently in a
1875 macro expansion context, we'll make the new pfile->context refer to
1876 the current macro. */
1877 static void
1878 push_extended_tokens_context (cpp_reader *pfile,
1879 cpp_hashnode *macro,
1880 _cpp_buff *token_buff,
1881 source_location *virt_locs,
1882 const cpp_token **first,
1883 unsigned int count)
1885 cpp_context *context;
1886 macro_context *m;
1888 if (macro == NULL)
1889 macro = macro_of_context (pfile->context);
1891 context = next_context (pfile);
1892 context->tokens_kind = TOKENS_KIND_EXTENDED;
1893 context->buff = token_buff;
1895 m = XNEW (macro_context);
1896 m->macro_node = macro;
1897 m->virt_locs = virt_locs;
1898 m->cur_virt_loc = virt_locs;
1899 context->c.mc = m;
1900 FIRST (context).ptoken = first;
1901 LAST (context).ptoken = first + count;
1904 /* Push a traditional macro's replacement text. */
1905 void
1906 _cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
1907 const uchar *start, size_t len)
1909 cpp_context *context = next_context (pfile);
1911 context->tokens_kind = TOKENS_KIND_DIRECT;
1912 context->c.macro = macro;
1913 context->buff = NULL;
1914 CUR (context) = start;
1915 RLIMIT (context) = start + len;
1916 macro->flags |= NODE_DISABLED;
1919 /* Creates a buffer that holds tokens a.k.a "token buffer", usually
1920 for the purpose of storing them on a cpp_context. If VIRT_LOCS is
1921 non-null (which means that -ftrack-macro-expansion is on),
1922 *VIRT_LOCS is set to a newly allocated buffer that is supposed to
1923 hold the virtual locations of the tokens resulting from macro
1924 expansion. */
1925 static _cpp_buff*
1926 tokens_buff_new (cpp_reader *pfile, size_t len,
1927 source_location **virt_locs)
1929 size_t tokens_size = len * sizeof (cpp_token *);
1930 size_t locs_size = len * sizeof (source_location);
1932 if (virt_locs != NULL)
1933 *virt_locs = XNEWVEC (source_location, locs_size);
1934 return _cpp_get_buff (pfile, tokens_size);
1937 /* Returns the number of tokens contained in a token buffer. The
1938 buffer holds a set of cpp_token*. */
1939 static size_t
1940 tokens_buff_count (_cpp_buff *buff)
1942 return (BUFF_FRONT (buff) - buff->base) / sizeof (cpp_token *);
1945 /* Return a pointer to the last token contained in the token buffer
1946 BUFF. */
1947 static const cpp_token **
1948 tokens_buff_last_token_ptr (_cpp_buff *buff)
1950 return &((const cpp_token **) BUFF_FRONT (buff))[-1];
1953 /* Remove the last token contained in the token buffer TOKENS_BUFF.
1954 If VIRT_LOCS_BUFF is non-NULL, it should point at the buffer
1955 containing the virtual locations of the tokens in TOKENS_BUFF; in
1956 which case the function updates that buffer as well. */
1957 static inline void
1958 tokens_buff_remove_last_token (_cpp_buff *tokens_buff)
1961 if (BUFF_FRONT (tokens_buff) > tokens_buff->base)
1962 BUFF_FRONT (tokens_buff) =
1963 (unsigned char *) &((cpp_token **) BUFF_FRONT (tokens_buff))[-1];
1966 /* Insert a token into the token buffer at the position pointed to by
1967 DEST. Note that the buffer is not enlarged so the previous token
1968 that was at *DEST is overwritten. VIRT_LOC_DEST, if non-null,
1969 means -ftrack-macro-expansion is effect; it then points to where to
1970 insert the virtual location of TOKEN. TOKEN is the token to
1971 insert. VIRT_LOC is the virtual location of the token, i.e, the
1972 location possibly encoding its locus across macro expansion. If
1973 TOKEN is an argument of a function-like macro (inside a macro
1974 replacement list), PARM_DEF_LOC is the spelling location of the
1975 macro parameter that TOKEN is replacing, in the replacement list of
1976 the macro. If TOKEN is not an argument of a function-like macro or
1977 if it doesn't come from a macro expansion, then VIRT_LOC can just
1978 be set to the same value as PARM_DEF_LOC. If MAP is non null, it
1979 means TOKEN comes from a macro expansion and MAP is the macro map
1980 associated to the macro. MACRO_TOKEN_INDEX points to the index of
1981 the token in the macro map; it is not considered if MAP is NULL.
1983 Upon successful completion this function returns the a pointer to
1984 the position of the token coming right after the insertion
1985 point. */
1986 static inline const cpp_token **
1987 tokens_buff_put_token_to (const cpp_token **dest,
1988 source_location *virt_loc_dest,
1989 const cpp_token *token,
1990 source_location virt_loc,
1991 source_location parm_def_loc,
1992 const struct line_map *map,
1993 unsigned int macro_token_index)
1995 source_location macro_loc = virt_loc;
1996 const cpp_token **result;
1998 if (virt_loc_dest)
2000 /* -ftrack-macro-expansion is on. */
2001 if (map)
2002 macro_loc = linemap_add_macro_token (map, macro_token_index,
2003 virt_loc, parm_def_loc);
2004 *virt_loc_dest = macro_loc;
2006 *dest = token;
2007 result = &dest[1];
2009 return result;
2012 /* Adds a token at the end of the tokens contained in BUFFER. Note
2013 that this function doesn't enlarge BUFFER when the number of tokens
2014 reaches BUFFER's size; it aborts in that situation.
2016 TOKEN is the token to append. VIRT_LOC is the virtual location of
2017 the token, i.e, the location possibly encoding its locus across
2018 macro expansion. If TOKEN is an argument of a function-like macro
2019 (inside a macro replacement list), PARM_DEF_LOC is the location of
2020 the macro parameter that TOKEN is replacing. If TOKEN doesn't come
2021 from a macro expansion, then VIRT_LOC can just be set to the same
2022 value as PARM_DEF_LOC. If MAP is non null, it means TOKEN comes
2023 from a macro expansion and MAP is the macro map associated to the
2024 macro. MACRO_TOKEN_INDEX points to the index of the token in the
2025 macro map; It is not considered if MAP is NULL. If VIRT_LOCS is
2026 non-null, it means -ftrack-macro-expansion is on; in which case
2027 this function adds the virtual location DEF_LOC to the VIRT_LOCS
2028 array, at the same index as the one of TOKEN in BUFFER. Upon
2029 successful completion this function returns the a pointer to the
2030 position of the token coming right after the insertion point. */
2031 static const cpp_token **
2032 tokens_buff_add_token (_cpp_buff *buffer,
2033 source_location *virt_locs,
2034 const cpp_token *token,
2035 source_location virt_loc,
2036 source_location parm_def_loc,
2037 const struct line_map *map,
2038 unsigned int macro_token_index)
2040 const cpp_token **result;
2041 source_location *virt_loc_dest = NULL;
2042 unsigned token_index =
2043 (BUFF_FRONT (buffer) - buffer->base) / sizeof (cpp_token *);
2045 /* Abort if we pass the end the buffer. */
2046 if (BUFF_FRONT (buffer) > BUFF_LIMIT (buffer))
2047 abort ();
2049 if (virt_locs != NULL)
2050 virt_loc_dest = &virt_locs[token_index];
2052 result =
2053 tokens_buff_put_token_to ((const cpp_token **) BUFF_FRONT (buffer),
2054 virt_loc_dest, token, virt_loc, parm_def_loc,
2055 map, macro_token_index);
2057 BUFF_FRONT (buffer) = (unsigned char *) result;
2058 return result;
2061 /* Allocate space for the function-like macro argument ARG to store
2062 the tokens resulting from the macro-expansion of the tokens that
2063 make up ARG itself. That space is allocated in ARG->expanded and
2064 needs to be freed using free. */
2065 static void
2066 alloc_expanded_arg_mem (cpp_reader *pfile, macro_arg *arg, size_t capacity)
2068 #ifdef ENABLE_CHECKING
2069 if (arg->expanded != NULL
2070 || arg->expanded_virt_locs != NULL)
2071 abort ();
2072 #endif
2073 arg->expanded = XNEWVEC (const cpp_token *, capacity);
2074 if (CPP_OPTION (pfile, track_macro_expansion))
2075 arg->expanded_virt_locs = XNEWVEC (source_location, capacity);
2079 /* If necessary, enlarge ARG->expanded to so that it can contain SIZE
2080 tokens. */
2081 static void
2082 ensure_expanded_arg_room (cpp_reader *pfile, macro_arg *arg,
2083 size_t size, size_t *expanded_capacity)
2085 if (size <= *expanded_capacity)
2086 return;
2088 size *= 2;
2090 arg->expanded =
2091 XRESIZEVEC (const cpp_token *, arg->expanded, size);
2092 *expanded_capacity = size;
2094 if (CPP_OPTION (pfile, track_macro_expansion))
2096 if (arg->expanded_virt_locs == NULL)
2097 arg->expanded_virt_locs = XNEWVEC (source_location, size);
2098 else
2099 arg->expanded_virt_locs = XRESIZEVEC (source_location,
2100 arg->expanded_virt_locs,
2101 size);
2105 /* Expand an argument ARG before replacing parameters in a
2106 function-like macro. This works by pushing a context with the
2107 argument's tokens, and then expanding that into a temporary buffer
2108 as if it were a normal part of the token stream. collect_args()
2109 has terminated the argument's tokens with a CPP_EOF so that we know
2110 when we have fully expanded the argument. */
2111 static void
2112 expand_arg (cpp_reader *pfile, macro_arg *arg)
2114 size_t capacity;
2115 bool saved_warn_trad;
2116 bool track_macro_exp_p = CPP_OPTION (pfile, track_macro_expansion);
2118 if (arg->count == 0
2119 || arg->expanded != NULL)
2120 return;
2122 /* Don't warn about funlike macros when pre-expanding. */
2123 saved_warn_trad = CPP_WTRADITIONAL (pfile);
2124 CPP_WTRADITIONAL (pfile) = 0;
2126 /* Loop, reading in the tokens of the argument. */
2127 capacity = 256;
2128 alloc_expanded_arg_mem (pfile, arg, capacity);
2130 if (track_macro_exp_p)
2131 push_extended_tokens_context (pfile, NULL, NULL,
2132 arg->virt_locs,
2133 arg->first,
2134 arg->count + 1);
2135 else
2136 push_ptoken_context (pfile, NULL, NULL,
2137 arg->first, arg->count + 1);
2139 for (;;)
2141 const cpp_token *token;
2142 source_location location;
2144 ensure_expanded_arg_room (pfile, arg, arg->expanded_count + 1,
2145 &capacity);
2147 token = cpp_get_token_1 (pfile, &location);
2149 if (token->type == CPP_EOF)
2150 break;
2152 set_arg_token (arg, token, location,
2153 arg->expanded_count, MACRO_ARG_TOKEN_EXPANDED,
2154 CPP_OPTION (pfile, track_macro_expansion));
2155 arg->expanded_count++;
2158 _cpp_pop_context (pfile);
2160 CPP_WTRADITIONAL (pfile) = saved_warn_trad;
2163 /* Returns the macro associated to the current context if we are in
2164 the context a macro expansion, NULL otherwise. */
2165 static cpp_hashnode*
2166 macro_of_context (cpp_context *context)
2168 if (context == NULL)
2169 return NULL;
2171 return (context->tokens_kind == TOKENS_KIND_EXTENDED)
2172 ? context->c.mc->macro_node
2173 : context->c.macro;
2176 /* Return TRUE iff we are expanding a macro or are about to start
2177 expanding one. If we are effectively expanding a macro, the
2178 function macro_of_context returns a pointer to the macro being
2179 expanded. */
2180 static bool
2181 in_macro_expansion_p (cpp_reader *pfile)
2183 if (pfile == NULL)
2184 return false;
2186 return (pfile->about_to_expand_macro_p
2187 || macro_of_context (pfile->context));
2190 /* Pop the current context off the stack, re-enabling the macro if the
2191 context represented a macro's replacement list. Initially the
2192 context structure was not freed so that we can re-use it later, but
2193 now we do free it to reduce peak memory consumption. */
2194 void
2195 _cpp_pop_context (cpp_reader *pfile)
2197 cpp_context *context = pfile->context;
2199 /* We should not be popping the base context. */
2200 if (context == &pfile->base_context)
2201 abort ();
2203 if (context->c.macro)
2205 cpp_hashnode *macro;
2206 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
2208 macro_context *mc = context->c.mc;
2209 macro = mc->macro_node;
2210 /* If context->buff is set, it means the life time of tokens
2211 is bound to the life time of this context; so we must
2212 free the tokens; that means we must free the virtual
2213 locations of these tokens too. */
2214 if (context->buff && mc->virt_locs)
2216 free (mc->virt_locs);
2217 mc->virt_locs = NULL;
2219 free (mc);
2220 context->c.mc = NULL;
2222 else
2223 macro = context->c.macro;
2225 /* Beware that MACRO can be NULL in cases like when we are
2226 called from expand_arg. In those cases, a dummy context with
2227 tokens is pushed just for the purpose of walking them using
2228 cpp_get_token_1. In that case, no 'macro' field is set into
2229 the dummy context. */
2230 if (macro != NULL
2231 /* Several contiguous macro expansion contexts can be
2232 associated to the same macro; that means it's the same
2233 macro expansion that spans across all these (sub)
2234 contexts. So we should re-enable an expansion-disabled
2235 macro only when we are sure we are really out of that
2236 macro expansion. */
2237 && macro_of_context (context->prev) != macro)
2238 macro->flags &= ~NODE_DISABLED;
2241 if (context->buff)
2243 /* Decrease memory peak consumption by freeing the memory used
2244 by the context. */
2245 _cpp_free_buff (context->buff);
2248 pfile->context = context->prev;
2249 /* decrease peak memory consumption by feeing the context. */
2250 pfile->context->next = NULL;
2251 free (context);
2254 /* Return TRUE if we reached the end of the set of tokens stored in
2255 CONTEXT, FALSE otherwise. */
2256 static inline bool
2257 reached_end_of_context (cpp_context *context)
2259 if (context->tokens_kind == TOKENS_KIND_DIRECT)
2260 return FIRST (context).token == LAST (context).token;
2261 else if (context->tokens_kind == TOKENS_KIND_INDIRECT
2262 || context->tokens_kind == TOKENS_KIND_EXTENDED)
2263 return FIRST (context).ptoken == LAST (context).ptoken;
2264 else
2265 abort ();
2268 /* Consume the next token contained in the current context of PFILE,
2269 and return it in *TOKEN. It's "full location" is returned in
2270 *LOCATION. If -ftrack-macro-location is in effeect, fFull location"
2271 means the location encoding the locus of the token across macro
2272 expansion; otherwise it's just is the "normal" location of the
2273 token which (*TOKEN)->src_loc. */
2274 static inline void
2275 consume_next_token_from_context (cpp_reader *pfile,
2276 const cpp_token ** token,
2277 source_location *location)
2279 cpp_context *c = pfile->context;
2281 if ((c)->tokens_kind == TOKENS_KIND_DIRECT)
2283 *token = FIRST (c).token;
2284 *location = (*token)->src_loc;
2285 FIRST (c).token++;
2287 else if ((c)->tokens_kind == TOKENS_KIND_INDIRECT)
2289 *token = *FIRST (c).ptoken;
2290 *location = (*token)->src_loc;
2291 FIRST (c).ptoken++;
2293 else if ((c)->tokens_kind == TOKENS_KIND_EXTENDED)
2295 macro_context *m = c->c.mc;
2296 *token = *FIRST (c).ptoken;
2297 if (m->virt_locs)
2299 *location = *m->cur_virt_loc;
2300 m->cur_virt_loc++;
2302 else
2303 *location = (*token)->src_loc;
2304 FIRST (c).ptoken++;
2306 else
2307 abort ();
2310 /* In the traditional mode of the preprocessor, if we are currently in
2311 a directive, the location of a token must be the location of the
2312 start of the directive line. This function returns the proper
2313 location if we are in the traditional mode, and just returns
2314 LOCATION otherwise. */
2316 static inline source_location
2317 maybe_adjust_loc_for_trad_cpp (cpp_reader *pfile, source_location location)
2319 if (CPP_OPTION (pfile, traditional))
2321 if (pfile->state.in_directive)
2322 return pfile->directive_line;
2324 return location;
2327 /* Routine to get a token as well as its location.
2329 Macro expansions and directives are transparently handled,
2330 including entering included files. Thus tokens are post-macro
2331 expansion, and after any intervening directives. External callers
2332 see CPP_EOF only at EOF. Internal callers also see it when meeting
2333 a directive inside a macro call, when at the end of a directive and
2334 state.in_directive is still 1, and at the end of argument
2335 pre-expansion.
2337 LOC is an out parameter; *LOC is set to the location "as expected
2338 by the user". Please read the comment of
2339 cpp_get_token_with_location to learn more about the meaning of this
2340 location. */
2341 static const cpp_token*
2342 cpp_get_token_1 (cpp_reader *pfile, source_location *location)
2344 const cpp_token *result;
2345 /* This token is a virtual token that either encodes a location
2346 related to macro expansion or a spelling location. */
2347 source_location virt_loc = 0;
2348 /* pfile->about_to_expand_macro_p can be overriden by indirect calls
2349 to functions that push macro contexts. So let's save it so that
2350 we can restore it when we are about to leave this routine. */
2351 bool saved_about_to_expand_macro = pfile->about_to_expand_macro_p;
2353 for (;;)
2355 cpp_hashnode *node;
2356 cpp_context *context = pfile->context;
2358 /* Context->prev == 0 <=> base context. */
2359 if (!context->prev)
2361 result = _cpp_lex_token (pfile);
2362 virt_loc = result->src_loc;
2364 else if (!reached_end_of_context (context))
2366 consume_next_token_from_context (pfile, &result,
2367 &virt_loc);
2368 if (result->flags & PASTE_LEFT)
2370 paste_all_tokens (pfile, result);
2371 if (pfile->state.in_directive)
2372 continue;
2373 result = padding_token (pfile, result);
2374 goto out;
2377 else
2379 if (pfile->context->c.macro)
2380 ++num_expanded_macros_counter;
2381 _cpp_pop_context (pfile);
2382 if (pfile->state.in_directive)
2383 continue;
2384 result = &pfile->avoid_paste;
2385 goto out;
2388 if (pfile->state.in_directive && result->type == CPP_COMMENT)
2389 continue;
2391 if (result->type != CPP_NAME)
2392 break;
2394 node = result->val.node.node;
2396 if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
2397 break;
2399 if (!(node->flags & NODE_DISABLED))
2401 int ret = 0;
2402 /* If not in a macro context, and we're going to start an
2403 expansion, record the location. */
2404 if (!in_macro_expansion_p (pfile))
2405 pfile->invocation_location = result->src_loc;
2406 if (pfile->state.prevent_expansion)
2407 break;
2409 /* Conditional macros require that a predicate be evaluated
2410 first. */
2411 if ((node->flags & NODE_CONDITIONAL) != 0)
2413 if (pfile->cb.macro_to_expand)
2415 bool whitespace_after;
2416 const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
2418 whitespace_after = (peek_tok->type == CPP_PADDING
2419 || (peek_tok->flags & PREV_WHITE));
2420 node = pfile->cb.macro_to_expand (pfile, result);
2421 if (node)
2422 ret = enter_macro_context (pfile, node, result,
2423 virt_loc);
2424 else if (whitespace_after)
2426 /* If macro_to_expand hook returned NULL and it
2427 ate some tokens, see if we don't need to add
2428 a padding token in between this and the
2429 next token. */
2430 peek_tok = cpp_peek_token (pfile, 0);
2431 if (peek_tok->type != CPP_PADDING
2432 && (peek_tok->flags & PREV_WHITE) == 0)
2433 _cpp_push_token_context (pfile, NULL,
2434 padding_token (pfile,
2435 peek_tok), 1);
2439 else
2440 ret = enter_macro_context (pfile, node, result,
2441 virt_loc);
2442 if (ret)
2444 if (pfile->state.in_directive || ret == 2)
2445 continue;
2446 result = padding_token (pfile, result);
2447 goto out;
2450 else
2452 /* Flag this token as always unexpandable. FIXME: move this
2453 to collect_args()?. */
2454 cpp_token *t = _cpp_temp_token (pfile);
2455 t->type = result->type;
2456 t->flags = result->flags | NO_EXPAND;
2457 t->val = result->val;
2458 result = t;
2461 break;
2464 out:
2465 if (location != NULL)
2467 if (virt_loc == 0)
2468 virt_loc = result->src_loc;
2469 *location = virt_loc;
2471 if (!CPP_OPTION (pfile, track_macro_expansion)
2472 && macro_of_context (pfile->context) != NULL)
2473 /* We are in a macro expansion context, are not tracking
2474 virtual location, but were asked to report the location
2475 of the expansion point of the macro being expanded. */
2476 *location = pfile->invocation_location;
2478 *location = maybe_adjust_loc_for_trad_cpp (pfile, *location);
2481 pfile->about_to_expand_macro_p = saved_about_to_expand_macro;
2482 return result;
2485 /* External routine to get a token. Also used nearly everywhere
2486 internally, except for places where we know we can safely call
2487 _cpp_lex_token directly, such as lexing a directive name.
2489 Macro expansions and directives are transparently handled,
2490 including entering included files. Thus tokens are post-macro
2491 expansion, and after any intervening directives. External callers
2492 see CPP_EOF only at EOF. Internal callers also see it when meeting
2493 a directive inside a macro call, when at the end of a directive and
2494 state.in_directive is still 1, and at the end of argument
2495 pre-expansion. */
2496 const cpp_token *
2497 cpp_get_token (cpp_reader *pfile)
2499 return cpp_get_token_1 (pfile, NULL);
2502 /* Like cpp_get_token, but also returns a virtual token location
2503 separate from the spelling location carried by the returned token.
2505 LOC is an out parameter; *LOC is set to the location "as expected
2506 by the user". This matters when a token results from macro
2507 expansion; in that case the token's spelling location indicates the
2508 locus of the token in the definition of the macro but *LOC
2509 virtually encodes all the other meaningful locuses associated to
2510 the token.
2512 What? virtual location? Yes, virtual location.
2514 If the token results from macro expansion and if macro expansion
2515 location tracking is enabled its virtual location encodes (at the
2516 same time):
2518 - the spelling location of the token
2520 - the locus of the macro expansion point
2522 - the locus of the point where the token got instantiated as part
2523 of the macro expansion process.
2525 You have to use the linemap API to get the locus you are interested
2526 in from a given virtual location.
2528 Note however that virtual locations are not necessarily ordered for
2529 relations '<' and '>'. One must use the function
2530 linemap_location_before_p instead of using the relational operator
2531 '<'.
2533 If macro expansion tracking is off and if the token results from
2534 macro expansion the virtual location is the expansion point of the
2535 macro that got expanded.
2537 When the token doesn't result from macro expansion, the virtual
2538 location is just the same thing as its spelling location. */
2540 const cpp_token *
2541 cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
2543 return cpp_get_token_1 (pfile, loc);
2546 /* Returns true if we're expanding an object-like macro that was
2547 defined in a system header. Just checks the macro at the top of
2548 the stack. Used for diagnostic suppression. */
2550 cpp_sys_macro_p (cpp_reader *pfile)
2552 cpp_hashnode *node = NULL;
2554 if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2555 node = pfile->context->c.mc->macro_node;
2556 else
2557 node = pfile->context->c.macro;
2559 return node && node->value.macro && node->value.macro->syshdr;
2562 /* Read each token in, until end of the current file. Directives are
2563 transparently processed. */
2564 void
2565 cpp_scan_nooutput (cpp_reader *pfile)
2567 /* Request a CPP_EOF token at the end of this file, rather than
2568 transparently continuing with the including file. */
2569 pfile->buffer->return_at_eof = true;
2571 pfile->state.discarding_output++;
2572 pfile->state.prevent_expansion++;
2574 if (CPP_OPTION (pfile, traditional))
2575 while (_cpp_read_logical_line_trad (pfile))
2577 else
2578 while (cpp_get_token (pfile)->type != CPP_EOF)
2581 pfile->state.discarding_output--;
2582 pfile->state.prevent_expansion--;
2585 /* Step back one or more tokens obtained from the lexer. */
2586 void
2587 _cpp_backup_tokens_direct (cpp_reader *pfile, unsigned int count)
2589 pfile->lookaheads += count;
2590 while (count--)
2592 pfile->cur_token--;
2593 if (pfile->cur_token == pfile->cur_run->base
2594 /* Possible with -fpreprocessed and no leading #line. */
2595 && pfile->cur_run->prev != NULL)
2597 pfile->cur_run = pfile->cur_run->prev;
2598 pfile->cur_token = pfile->cur_run->limit;
2603 /* Step back one (or more) tokens. Can only step back more than 1 if
2604 they are from the lexer, and not from macro expansion. */
2605 void
2606 _cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
2608 if (pfile->context->prev == NULL)
2609 _cpp_backup_tokens_direct (pfile, count);
2610 else
2612 if (count != 1)
2613 abort ();
2614 if (pfile->context->tokens_kind == TOKENS_KIND_DIRECT)
2615 FIRST (pfile->context).token--;
2616 else if (pfile->context->tokens_kind == TOKENS_KIND_INDIRECT)
2617 FIRST (pfile->context).ptoken--;
2618 else if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2620 FIRST (pfile->context).ptoken--;
2621 if (pfile->context->c.macro)
2623 macro_context *m = pfile->context->c.mc;
2624 m->cur_virt_loc--;
2625 #ifdef ENABLE_CHECKING
2626 if (m->cur_virt_loc < m->virt_locs)
2627 abort ();
2628 #endif
2630 else
2631 abort ();
2633 else
2634 abort ();
2638 /* #define directive parsing and handling. */
2640 /* Returns nonzero if a macro redefinition warning is required. */
2641 static bool
2642 warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node,
2643 const cpp_macro *macro2)
2645 const cpp_macro *macro1;
2646 unsigned int i;
2648 /* Some redefinitions need to be warned about regardless. */
2649 if (node->flags & NODE_WARN)
2650 return true;
2652 /* Suppress warnings for builtins that lack the NODE_WARN flag. */
2653 if (node->flags & NODE_BUILTIN)
2655 if (!pfile->cb.user_builtin_macro
2656 || !pfile->cb.user_builtin_macro (pfile, node))
2657 return false;
2660 /* Redefinitions of conditional (context-sensitive) macros, on
2661 the other hand, must be allowed silently. */
2662 if (node->flags & NODE_CONDITIONAL)
2663 return false;
2665 /* Redefinition of a macro is allowed if and only if the old and new
2666 definitions are the same. (6.10.3 paragraph 2). */
2667 macro1 = node->value.macro;
2669 /* Don't check count here as it can be different in valid
2670 traditional redefinitions with just whitespace differences. */
2671 if (macro1->paramc != macro2->paramc
2672 || macro1->fun_like != macro2->fun_like
2673 || macro1->variadic != macro2->variadic)
2674 return true;
2676 /* Check parameter spellings. */
2677 for (i = 0; i < macro1->paramc; i++)
2678 if (macro1->params[i] != macro2->params[i])
2679 return true;
2681 /* Check the replacement text or tokens. */
2682 if (CPP_OPTION (pfile, traditional))
2683 return _cpp_expansions_different_trad (macro1, macro2);
2685 if (macro1->count != macro2->count)
2686 return true;
2688 for (i = 0; i < macro1->count; i++)
2689 if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
2690 return true;
2692 return false;
2695 /* Free the definition of hashnode H. */
2696 void
2697 _cpp_free_definition (cpp_hashnode *h)
2699 /* Macros and assertions no longer have anything to free. */
2700 h->type = NT_VOID;
2701 /* Clear builtin flag in case of redefinition. */
2702 h->flags &= ~(NODE_BUILTIN | NODE_DISABLED | NODE_USED);
2705 /* Save parameter NODE to the parameter list of macro MACRO. Returns
2706 zero on success, nonzero if the parameter is a duplicate. */
2707 bool
2708 _cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
2710 unsigned int len;
2711 /* Constraint 6.10.3.6 - duplicate parameter names. */
2712 if (node->flags & NODE_MACRO_ARG)
2714 cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
2715 NODE_NAME (node));
2716 return true;
2719 if (BUFF_ROOM (pfile->a_buff)
2720 < (macro->paramc + 1) * sizeof (cpp_hashnode *))
2721 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
2723 ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
2724 node->flags |= NODE_MACRO_ARG;
2725 len = macro->paramc * sizeof (union _cpp_hashnode_value);
2726 if (len > pfile->macro_buffer_len)
2728 pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
2729 len);
2730 pfile->macro_buffer_len = len;
2732 ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
2733 = node->value;
2735 node->value.arg_index = macro->paramc;
2736 return false;
2739 /* Check the syntax of the parameters in a MACRO definition. Returns
2740 false if an error occurs. */
2741 static bool
2742 parse_params (cpp_reader *pfile, cpp_macro *macro)
2744 unsigned int prev_ident = 0;
2746 for (;;)
2748 const cpp_token *token = _cpp_lex_token (pfile);
2750 switch (token->type)
2752 default:
2753 /* Allow/ignore comments in parameter lists if we are
2754 preserving comments in macro expansions. */
2755 if (token->type == CPP_COMMENT
2756 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
2757 continue;
2759 cpp_error (pfile, CPP_DL_ERROR,
2760 "\"%s\" may not appear in macro parameter list",
2761 cpp_token_as_text (pfile, token));
2762 return false;
2764 case CPP_NAME:
2765 if (prev_ident)
2767 cpp_error (pfile, CPP_DL_ERROR,
2768 "macro parameters must be comma-separated");
2769 return false;
2771 prev_ident = 1;
2773 if (_cpp_save_parameter (pfile, macro, token->val.node.node))
2774 return false;
2775 continue;
2777 case CPP_CLOSE_PAREN:
2778 if (prev_ident || macro->paramc == 0)
2779 return true;
2781 /* Fall through to pick up the error. */
2782 case CPP_COMMA:
2783 if (!prev_ident)
2785 cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
2786 return false;
2788 prev_ident = 0;
2789 continue;
2791 case CPP_ELLIPSIS:
2792 macro->variadic = 1;
2793 if (!prev_ident)
2795 _cpp_save_parameter (pfile, macro,
2796 pfile->spec_nodes.n__VA_ARGS__);
2797 pfile->state.va_args_ok = 1;
2798 if (! CPP_OPTION (pfile, c99)
2799 && CPP_OPTION (pfile, cpp_pedantic)
2800 && CPP_OPTION (pfile, warn_variadic_macros))
2801 cpp_pedwarning
2802 (pfile, CPP_W_VARIADIC_MACROS,
2803 "anonymous variadic macros were introduced in C99");
2805 else if (CPP_OPTION (pfile, cpp_pedantic)
2806 && CPP_OPTION (pfile, warn_variadic_macros))
2807 cpp_pedwarning (pfile, CPP_W_VARIADIC_MACROS,
2808 "ISO C does not permit named variadic macros");
2810 /* We're at the end, and just expect a closing parenthesis. */
2811 token = _cpp_lex_token (pfile);
2812 if (token->type == CPP_CLOSE_PAREN)
2813 return true;
2814 /* Fall through. */
2816 case CPP_EOF:
2817 cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
2818 return false;
2823 /* Allocate room for a token from a macro's replacement list. */
2824 static cpp_token *
2825 alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
2827 if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
2828 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
2830 return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
2833 /* Lex a token from the expansion of MACRO, but mark parameters as we
2834 find them and warn of traditional stringification. */
2835 static cpp_token *
2836 lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
2838 cpp_token *token, *saved_cur_token;
2840 saved_cur_token = pfile->cur_token;
2841 pfile->cur_token = alloc_expansion_token (pfile, macro);
2842 token = _cpp_lex_direct (pfile);
2843 pfile->cur_token = saved_cur_token;
2845 /* Is this a parameter? */
2846 if (token->type == CPP_NAME
2847 && (token->val.node.node->flags & NODE_MACRO_ARG) != 0)
2849 token->type = CPP_MACRO_ARG;
2850 token->val.macro_arg.arg_no = token->val.node.node->value.arg_index;
2852 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
2853 && (token->type == CPP_STRING || token->type == CPP_CHAR))
2854 check_trad_stringification (pfile, macro, &token->val.str);
2856 return token;
2859 static bool
2860 create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
2862 cpp_token *token;
2863 const cpp_token *ctoken;
2864 bool following_paste_op = false;
2865 const char *paste_op_error_msg =
2866 N_("'##' cannot appear at either end of a macro expansion");
2867 unsigned int num_extra_tokens = 0;
2869 /* Get the first token of the expansion (or the '(' of a
2870 function-like macro). */
2871 ctoken = _cpp_lex_token (pfile);
2873 if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
2875 bool ok = parse_params (pfile, macro);
2876 macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
2877 if (!ok)
2878 return false;
2880 /* Success. Commit or allocate the parameter array. */
2881 if (pfile->hash_table->alloc_subobject)
2883 cpp_hashnode **params =
2884 (cpp_hashnode **) pfile->hash_table->alloc_subobject
2885 (sizeof (cpp_hashnode *) * macro->paramc);
2886 memcpy (params, macro->params,
2887 sizeof (cpp_hashnode *) * macro->paramc);
2888 macro->params = params;
2890 else
2891 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
2892 macro->fun_like = 1;
2894 else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
2896 /* While ISO C99 requires whitespace before replacement text
2897 in a macro definition, ISO C90 with TC1 allows there characters
2898 from the basic source character set. */
2899 if (CPP_OPTION (pfile, c99))
2900 cpp_error (pfile, CPP_DL_PEDWARN,
2901 "ISO C99 requires whitespace after the macro name");
2902 else
2904 int warntype = CPP_DL_WARNING;
2905 switch (ctoken->type)
2907 case CPP_ATSIGN:
2908 case CPP_AT_NAME:
2909 case CPP_OBJC_STRING:
2910 /* '@' is not in basic character set. */
2911 warntype = CPP_DL_PEDWARN;
2912 break;
2913 case CPP_OTHER:
2914 /* Basic character set sans letters, digits and _. */
2915 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
2916 ctoken->val.str.text[0]) == NULL)
2917 warntype = CPP_DL_PEDWARN;
2918 break;
2919 default:
2920 /* All other tokens start with a character from basic
2921 character set. */
2922 break;
2924 cpp_error (pfile, warntype,
2925 "missing whitespace after the macro name");
2929 if (macro->fun_like)
2930 token = lex_expansion_token (pfile, macro);
2931 else
2933 token = alloc_expansion_token (pfile, macro);
2934 *token = *ctoken;
2937 for (;;)
2939 /* Check the stringifying # constraint 6.10.3.2.1 of
2940 function-like macros when lexing the subsequent token. */
2941 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
2943 if (token->type == CPP_MACRO_ARG)
2945 if (token->flags & PREV_WHITE)
2946 token->flags |= SP_PREV_WHITE;
2947 if (token[-1].flags & DIGRAPH)
2948 token->flags |= SP_DIGRAPH;
2949 token->flags &= ~PREV_WHITE;
2950 token->flags |= STRINGIFY_ARG;
2951 token->flags |= token[-1].flags & PREV_WHITE;
2952 token[-1] = token[0];
2953 macro->count--;
2955 /* Let assembler get away with murder. */
2956 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
2958 cpp_error (pfile, CPP_DL_ERROR,
2959 "'#' is not followed by a macro parameter");
2960 return false;
2964 if (token->type == CPP_EOF)
2966 /* Paste operator constraint 6.10.3.3.1:
2967 Token-paste ##, can appear in both object-like and
2968 function-like macros, but not at the end. */
2969 if (following_paste_op)
2971 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
2972 return false;
2974 break;
2977 /* Paste operator constraint 6.10.3.3.1. */
2978 if (token->type == CPP_PASTE)
2980 /* Token-paste ##, can appear in both object-like and
2981 function-like macros, but not at the beginning. */
2982 if (macro->count == 1)
2984 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
2985 return false;
2988 if (token[-1].flags & PASTE_LEFT)
2990 macro->extra_tokens = 1;
2991 num_extra_tokens++;
2992 token->val.token_no = macro->count - 1;
2994 else
2996 --macro->count;
2997 token[-1].flags |= PASTE_LEFT;
2998 if (token->flags & DIGRAPH)
2999 token[-1].flags |= SP_DIGRAPH;
3000 if (token->flags & PREV_WHITE)
3001 token[-1].flags |= SP_PREV_WHITE;
3005 following_paste_op = (token->type == CPP_PASTE);
3006 token = lex_expansion_token (pfile, macro);
3009 macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
3010 macro->traditional = 0;
3012 /* Don't count the CPP_EOF. */
3013 macro->count--;
3015 /* Clear whitespace on first token for warn_of_redefinition(). */
3016 if (macro->count)
3017 macro->exp.tokens[0].flags &= ~PREV_WHITE;
3019 /* Commit or allocate the memory. */
3020 if (pfile->hash_table->alloc_subobject)
3022 cpp_token *tokns =
3023 (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
3024 * macro->count);
3025 if (num_extra_tokens)
3027 /* Place second and subsequent ## or %:%: tokens in
3028 sequences of consecutive such tokens at the end of the
3029 list to preserve information about where they appear, how
3030 they are spelt and whether they are preceded by
3031 whitespace without otherwise interfering with macro
3032 expansion. */
3033 cpp_token *normal_dest = tokns;
3034 cpp_token *extra_dest = tokns + macro->count - num_extra_tokens;
3035 unsigned int i;
3036 for (i = 0; i < macro->count; i++)
3038 if (macro->exp.tokens[i].type == CPP_PASTE)
3039 *extra_dest++ = macro->exp.tokens[i];
3040 else
3041 *normal_dest++ = macro->exp.tokens[i];
3044 else
3045 memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
3046 macro->exp.tokens = tokns;
3048 else
3049 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
3051 return true;
3054 /* Parse a macro and save its expansion. Returns nonzero on success. */
3055 bool
3056 _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
3058 cpp_macro *macro;
3059 unsigned int i;
3060 bool ok;
3062 if (pfile->hash_table->alloc_subobject)
3063 macro = (cpp_macro *) pfile->hash_table->alloc_subobject
3064 (sizeof (cpp_macro));
3065 else
3066 macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
3067 macro->line = pfile->directive_line;
3068 macro->params = 0;
3069 macro->paramc = 0;
3070 macro->variadic = 0;
3071 macro->used = !CPP_OPTION (pfile, warn_unused_macros);
3072 macro->count = 0;
3073 macro->fun_like = 0;
3074 macro->extra_tokens = 0;
3075 /* To suppress some diagnostics. */
3076 macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
3078 if (CPP_OPTION (pfile, traditional))
3079 ok = _cpp_create_trad_definition (pfile, macro);
3080 else
3082 ok = create_iso_definition (pfile, macro);
3084 /* We set the type for SEEN_EOL() in directives.c.
3086 Longer term we should lex the whole line before coming here,
3087 and just copy the expansion. */
3089 /* Stop the lexer accepting __VA_ARGS__. */
3090 pfile->state.va_args_ok = 0;
3093 /* Clear the fast argument lookup indices. */
3094 for (i = macro->paramc; i-- > 0; )
3096 struct cpp_hashnode *node = macro->params[i];
3097 node->flags &= ~ NODE_MACRO_ARG;
3098 node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
3101 if (!ok)
3102 return ok;
3104 if (node->type == NT_MACRO)
3106 if (CPP_OPTION (pfile, warn_unused_macros))
3107 _cpp_warn_if_unused_macro (pfile, node, NULL);
3109 if (warn_of_redefinition (pfile, node, macro))
3111 const int reason = (node->flags & NODE_BUILTIN)
3112 ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
3113 bool warned;
3115 warned = cpp_pedwarning_with_line (pfile, reason,
3116 pfile->directive_line, 0,
3117 "\"%s\" redefined",
3118 NODE_NAME (node));
3120 if (warned && node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
3121 cpp_error_with_line (pfile, CPP_DL_NOTE,
3122 node->value.macro->line, 0,
3123 "this is the location of the previous definition");
3127 if (node->type != NT_VOID)
3128 _cpp_free_definition (node);
3130 /* Enter definition in hash table. */
3131 node->type = NT_MACRO;
3132 node->value.macro = macro;
3133 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
3134 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
3135 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
3136 in the C standard, as something that one must use in C++.
3137 However DR#593 indicates that these aren't actually mentioned
3138 in the C++ standard. We special-case them anyway. */
3139 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
3140 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
3141 node->flags |= NODE_WARN;
3143 /* If user defines one of the conditional macros, remove the
3144 conditional flag */
3145 node->flags &= ~NODE_CONDITIONAL;
3147 return ok;
3150 /* Warn if a token in STRING matches one of a function-like MACRO's
3151 parameters. */
3152 static void
3153 check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
3154 const cpp_string *string)
3156 unsigned int i, len;
3157 const uchar *p, *q, *limit;
3159 /* Loop over the string. */
3160 limit = string->text + string->len - 1;
3161 for (p = string->text + 1; p < limit; p = q)
3163 /* Find the start of an identifier. */
3164 while (p < limit && !is_idstart (*p))
3165 p++;
3167 /* Find the end of the identifier. */
3168 q = p;
3169 while (q < limit && is_idchar (*q))
3170 q++;
3172 len = q - p;
3174 /* Loop over the function macro arguments to see if the
3175 identifier inside the string matches one of them. */
3176 for (i = 0; i < macro->paramc; i++)
3178 const cpp_hashnode *node = macro->params[i];
3180 if (NODE_LEN (node) == len
3181 && !memcmp (p, NODE_NAME (node), len))
3183 cpp_error (pfile, CPP_DL_WARNING,
3184 "macro argument \"%s\" would be stringified in traditional C",
3185 NODE_NAME (node));
3186 break;
3192 /* Returns the name, arguments and expansion of a macro, in a format
3193 suitable to be read back in again, and therefore also for DWARF 2
3194 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
3195 Caller is expected to generate the "#define" bit if needed. The
3196 returned text is temporary, and automatically freed later. */
3197 const unsigned char *
3198 cpp_macro_definition (cpp_reader *pfile, cpp_hashnode *node)
3200 unsigned int i, len;
3201 const cpp_macro *macro;
3202 unsigned char *buffer;
3204 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
3206 if (node->type != NT_MACRO
3207 || !pfile->cb.user_builtin_macro
3208 || !pfile->cb.user_builtin_macro (pfile, node))
3210 cpp_error (pfile, CPP_DL_ICE,
3211 "invalid hash type %d in cpp_macro_definition",
3212 node->type);
3213 return 0;
3217 macro = node->value.macro;
3218 /* Calculate length. */
3219 len = NODE_LEN (node) + 2; /* ' ' and NUL. */
3220 if (macro->fun_like)
3222 len += 4; /* "()" plus possible final ".." of named
3223 varargs (we have + 1 below). */
3224 for (i = 0; i < macro->paramc; i++)
3225 len += NODE_LEN (macro->params[i]) + 1; /* "," */
3228 /* This should match below where we fill in the buffer. */
3229 if (CPP_OPTION (pfile, traditional))
3230 len += _cpp_replacement_text_len (macro);
3231 else
3233 unsigned int count = macro_real_token_count (macro);
3234 for (i = 0; i < count; i++)
3236 cpp_token *token = &macro->exp.tokens[i];
3238 if (token->type == CPP_MACRO_ARG)
3239 len += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
3240 else
3241 len += cpp_token_len (token);
3243 if (token->flags & STRINGIFY_ARG)
3244 len++; /* "#" */
3245 if (token->flags & PASTE_LEFT)
3246 len += 3; /* " ##" */
3247 if (token->flags & PREV_WHITE)
3248 len++; /* " " */
3252 if (len > pfile->macro_buffer_len)
3254 pfile->macro_buffer = XRESIZEVEC (unsigned char,
3255 pfile->macro_buffer, len);
3256 pfile->macro_buffer_len = len;
3259 /* Fill in the buffer. Start with the macro name. */
3260 buffer = pfile->macro_buffer;
3261 memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
3262 buffer += NODE_LEN (node);
3264 /* Parameter names. */
3265 if (macro->fun_like)
3267 *buffer++ = '(';
3268 for (i = 0; i < macro->paramc; i++)
3270 cpp_hashnode *param = macro->params[i];
3272 if (param != pfile->spec_nodes.n__VA_ARGS__)
3274 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
3275 buffer += NODE_LEN (param);
3278 if (i + 1 < macro->paramc)
3279 /* Don't emit a space after the comma here; we're trying
3280 to emit a Dwarf-friendly definition, and the Dwarf spec
3281 forbids spaces in the argument list. */
3282 *buffer++ = ',';
3283 else if (macro->variadic)
3284 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
3286 *buffer++ = ')';
3289 /* The Dwarf spec requires a space after the macro name, even if the
3290 definition is the empty string. */
3291 *buffer++ = ' ';
3293 if (CPP_OPTION (pfile, traditional))
3294 buffer = _cpp_copy_replacement_text (macro, buffer);
3295 else if (macro->count)
3296 /* Expansion tokens. */
3298 unsigned int count = macro_real_token_count (macro);
3299 for (i = 0; i < count; i++)
3301 cpp_token *token = &macro->exp.tokens[i];
3303 if (token->flags & PREV_WHITE)
3304 *buffer++ = ' ';
3305 if (token->flags & STRINGIFY_ARG)
3306 *buffer++ = '#';
3308 if (token->type == CPP_MACRO_ARG)
3310 memcpy (buffer,
3311 NODE_NAME (macro->params[token->val.macro_arg.arg_no - 1]),
3312 NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]));
3313 buffer += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
3315 else
3316 buffer = cpp_spell_token (pfile, token, buffer, false);
3318 if (token->flags & PASTE_LEFT)
3320 *buffer++ = ' ';
3321 *buffer++ = '#';
3322 *buffer++ = '#';
3323 /* Next has PREV_WHITE; see _cpp_create_definition. */
3328 *buffer = '\0';
3329 return pfile->macro_buffer;