OSDN Git Service

* uk.po: Update.
[pf3gnuchains/gcc-fork.git] / libcpp / macro.c
1 /* Part of CPP library.  (Macro and #define handling.)
2    Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005,
4    2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
5    Written by Per Bothner, 1994.
6    Based on CCCP program by Paul Rubin, June 1986
7    Adapted to ANSI C, Richard Stallman, Jan 1987
8
9 This program is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by the
11 Free Software Foundation; either version 3, or (at your option) any
12 later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.
22
23  In other words, you are welcome to use, share and improve this program.
24  You are forbidden to forbid anyone else to use, share and improve
25  what you give them.   Help stamp out software-hoarding!  */
26
27 #include "config.h"
28 #include "system.h"
29 #include "cpplib.h"
30 #include "internal.h"
31
32 typedef struct macro_arg macro_arg;
33 /* This structure represents the tokens of a macro argument.  These
34    tokens can be macro themselves, in which case they can be either
35    expanded or unexpanded.  When they are expanded, this data
36    structure keeps both the expanded and unexpanded forms.  */
37 struct macro_arg
38 {
39   const cpp_token **first;      /* First token in unexpanded argument.  */
40   const cpp_token **expanded;   /* Macro-expanded argument.  */
41   const cpp_token *stringified; /* Stringified argument.  */
42   unsigned int count;           /* # of tokens in argument.  */
43   unsigned int expanded_count;  /* # of tokens in expanded argument.  */
44   source_location *virt_locs;   /* Where virtual locations for
45                                    unexpanded tokens are stored.  */
46   source_location *expanded_virt_locs; /* Where virtual locations for
47                                           expanded tokens are
48                                           stored.  */
49 };
50
51 /* The kind of macro tokens which the instance of
52    macro_arg_token_iter is supposed to iterate over.  */
53 enum macro_arg_token_kind {
54   MACRO_ARG_TOKEN_NORMAL,
55   /* This is a macro argument token that got transformed into a string
56      litteral, e.g. #foo.  */
57   MACRO_ARG_TOKEN_STRINGIFIED,
58   /* This is a token resulting from the expansion of a macro
59      argument that was itself a macro.  */
60   MACRO_ARG_TOKEN_EXPANDED
61 };
62
63 /* An iterator over tokens coming from a function-like macro
64    argument.  */
65 typedef struct macro_arg_token_iter macro_arg_token_iter;
66 struct macro_arg_token_iter
67 {
68   /* Whether or not -ftrack-macro-expansion is used.  */
69   bool track_macro_exp_p;
70   /* The kind of token over which we are supposed to iterate.  */
71   enum macro_arg_token_kind kind;
72   /* A pointer to the current token pointed to by the iterator.  */
73   const cpp_token **token_ptr;
74   /* A pointer to the "full" location of the current token.  If
75      -ftrack-macro-expansion is used this location tracks loci accross
76      macro expansion.  */
77   const source_location *location_ptr;
78 #ifdef ENABLE_CHECKING
79   /* The number of times the iterator went forward. This useful only
80      when checking is enabled.  */
81   size_t num_forwards;
82 #endif
83 };
84
85 /* Macro expansion.  */
86
87 static int enter_macro_context (cpp_reader *, cpp_hashnode *,
88                                 const cpp_token *, source_location);
89 static int builtin_macro (cpp_reader *, cpp_hashnode *);
90 static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
91                                  const cpp_token **, unsigned int);
92 static void push_extended_tokens_context (cpp_reader *, cpp_hashnode *,
93                                           _cpp_buff *, source_location *,
94                                           const cpp_token **, unsigned int);
95 static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *,
96                                 _cpp_buff **, unsigned *);
97 static cpp_context *next_context (cpp_reader *);
98 static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
99 static void expand_arg (cpp_reader *, macro_arg *);
100 static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
101 static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
102 static void paste_all_tokens (cpp_reader *, const cpp_token *);
103 static bool paste_tokens (cpp_reader *, const cpp_token **, const cpp_token *);
104 static void alloc_expanded_arg_mem (cpp_reader *, macro_arg *, size_t);
105 static void ensure_expanded_arg_room (cpp_reader *, macro_arg *, size_t, size_t *);
106 static void delete_macro_args (_cpp_buff*, unsigned num_args);
107 static void set_arg_token (macro_arg *, const cpp_token *,
108                            source_location, size_t,
109                            enum macro_arg_token_kind,
110                            bool);
111 static const source_location *get_arg_token_location (const macro_arg *,
112                                                       enum macro_arg_token_kind);
113 static const cpp_token **arg_token_ptr_at (const macro_arg *,
114                                            size_t,
115                                            enum macro_arg_token_kind,
116                                            source_location **virt_location);
117
118 static void macro_arg_token_iter_init (macro_arg_token_iter *, bool,
119                                        enum macro_arg_token_kind,
120                                        const macro_arg *,
121                                        const cpp_token **);
122 static const cpp_token *macro_arg_token_iter_get_token
123 (const macro_arg_token_iter *it);
124 static source_location macro_arg_token_iter_get_location
125 (const macro_arg_token_iter *);
126 static void macro_arg_token_iter_forward (macro_arg_token_iter *);
127 static _cpp_buff *tokens_buff_new (cpp_reader *, size_t,
128                                    source_location **);
129 static size_t tokens_buff_count (_cpp_buff *);
130 static const cpp_token **tokens_buff_last_token_ptr (_cpp_buff *);
131 static inline const cpp_token **tokens_buff_put_token_to (const cpp_token **,
132                                                           source_location *,
133                                                           const cpp_token *,
134                                                           source_location,
135                                                           source_location,
136                                                           const struct line_map *,
137                                                           unsigned int);
138
139 static const cpp_token **tokens_buff_add_token (_cpp_buff *,
140                                                 source_location *,
141                                                 const cpp_token *,
142                                                 source_location,
143                                                 source_location,
144                                                 const struct line_map *,
145                                                 unsigned int);
146 static inline void tokens_buff_remove_last_token (_cpp_buff *);
147 static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
148                           macro_arg *, source_location);
149 static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *,
150                                         _cpp_buff **, unsigned *);
151 static bool create_iso_definition (cpp_reader *, cpp_macro *);
152
153 /* #define directive parsing and handling.  */
154
155 static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
156 static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
157 static bool warn_of_redefinition (cpp_reader *, cpp_hashnode *,
158                                   const cpp_macro *);
159 static bool parse_params (cpp_reader *, cpp_macro *);
160 static void check_trad_stringification (cpp_reader *, const cpp_macro *,
161                                         const cpp_string *);
162 static bool reached_end_of_context (cpp_context *);
163 static void consume_next_token_from_context (cpp_reader *pfile,
164                                              const cpp_token **,
165                                              source_location *);
166 static const cpp_token* cpp_get_token_1 (cpp_reader *, source_location *);
167
168 /* Statistical counter tracking the number of macros that got
169    expanded.  */
170 unsigned num_expanded_macros_counter = 0;
171 /* Statistical counter tracking the total number tokens resulting
172    from macro expansion.  */
173 unsigned num_macro_tokens_counter = 0;
174
175 /* Emits a warning if NODE is a macro defined in the main file that
176    has not been used.  */
177 int
178 _cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
179                            void *v ATTRIBUTE_UNUSED)
180 {
181   if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
182     {
183       cpp_macro *macro = node->value.macro;
184
185       if (!macro->used
186           && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
187         cpp_warning_with_line (pfile, CPP_W_UNUSED_MACROS, macro->line, 0,
188                                "macro \"%s\" is not used", NODE_NAME (node));
189     }
190
191   return 1;
192 }
193
194 /* Allocates and returns a CPP_STRING token, containing TEXT of length
195    LEN, after null-terminating it.  TEXT must be in permanent storage.  */
196 static const cpp_token *
197 new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
198 {
199   cpp_token *token = _cpp_temp_token (pfile);
200
201   text[len] = '\0';
202   token->type = CPP_STRING;
203   token->val.str.len = len;
204   token->val.str.text = text;
205   token->flags = 0;
206   return token;
207 }
208
209 static const char * const monthnames[] =
210 {
211   "Jan", "Feb", "Mar", "Apr", "May", "Jun",
212   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
213 };
214
215 /* Helper function for builtin_macro.  Returns the text generated by
216    a builtin macro. */
217 const uchar *
218 _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
219 {
220   const uchar *result = NULL;
221   linenum_type number = 1;
222
223   switch (node->value.builtin)
224     {
225     default:
226       cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
227                  NODE_NAME (node));
228       break;
229
230     case BT_TIMESTAMP:
231       {
232         cpp_buffer *pbuffer = cpp_get_buffer (pfile);
233         if (pbuffer->timestamp == NULL)
234           {
235             /* Initialize timestamp value of the assotiated file. */
236             struct _cpp_file *file = cpp_get_file (pbuffer);
237             if (file)
238               {
239                 /* Generate __TIMESTAMP__ string, that represents 
240                    the date and time of the last modification 
241                    of the current source file. The string constant 
242                    looks like "Sun Sep 16 01:03:52 1973".  */
243                 struct tm *tb = NULL;
244                 struct stat *st = _cpp_get_file_stat (file);
245                 if (st)
246                   tb = localtime (&st->st_mtime);
247                 if (tb)
248                   {
249                     char *str = asctime (tb);
250                     size_t len = strlen (str);
251                     unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
252                     buf[0] = '"';
253                     strcpy ((char *) buf + 1, str);
254                     buf[len] = '"';
255                     pbuffer->timestamp = buf;
256                   }
257                 else
258                   {
259                     cpp_errno (pfile, CPP_DL_WARNING,
260                         "could not determine file timestamp");
261                     pbuffer->timestamp = UC"\"??? ??? ?? ??:??:?? ????\"";
262                   }
263               }
264           }
265         result = pbuffer->timestamp;
266       }
267       break;
268     case BT_FILE:
269     case BT_BASE_FILE:
270       {
271         unsigned int len;
272         const char *name;
273         uchar *buf;
274         
275         if (node->value.builtin == BT_FILE)
276           name = linemap_get_expansion_filename (pfile->line_table,
277                                                  pfile->line_table->highest_line);
278         else
279           {
280             name = _cpp_get_file_name (pfile->main_file);
281             if (!name)
282               abort ();
283           }
284         len = strlen (name);
285         buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
286         result = buf;
287         *buf = '"';
288         buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
289         *buf++ = '"';
290         *buf = '\0';
291       }
292       break;
293
294     case BT_INCLUDE_LEVEL:
295       /* The line map depth counts the primary source as level 1, but
296          historically __INCLUDE_DEPTH__ has called the primary source
297          level 0.  */
298       number = pfile->line_table->depth - 1;
299       break;
300
301     case BT_SPECLINE:
302       /* If __LINE__ is embedded in a macro, it must expand to the
303          line of the macro's invocation, not its definition.
304          Otherwise things like assert() will not work properly.  */
305       number = linemap_get_expansion_line (pfile->line_table,
306                                            CPP_OPTION (pfile, traditional)
307                                            ? pfile->line_table->highest_line
308                                            : pfile->cur_token[-1].src_loc);
309       break;
310
311       /* __STDC__ has the value 1 under normal circumstances.
312          However, if (a) we are in a system header, (b) the option
313          stdc_0_in_system_headers is true (set by target config), and
314          (c) we are not in strictly conforming mode, then it has the
315          value 0.  (b) and (c) are already checked in cpp_init_builtins.  */
316     case BT_STDC:
317       if (cpp_in_system_header (pfile))
318         number = 0;
319       else
320         number = 1;
321       break;
322
323     case BT_DATE:
324     case BT_TIME:
325       if (pfile->date == NULL)
326         {
327           /* Allocate __DATE__ and __TIME__ strings from permanent
328              storage.  We only do this once, and don't generate them
329              at init time, because time() and localtime() are very
330              slow on some systems.  */
331           time_t tt;
332           struct tm *tb = NULL;
333
334           /* (time_t) -1 is a legitimate value for "number of seconds
335              since the Epoch", so we have to do a little dance to
336              distinguish that from a genuine error.  */
337           errno = 0;
338           tt = time(NULL);
339           if (tt != (time_t)-1 || errno == 0)
340             tb = localtime (&tt);
341
342           if (tb)
343             {
344               pfile->date = _cpp_unaligned_alloc (pfile,
345                                                   sizeof ("\"Oct 11 1347\""));
346               sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
347                        monthnames[tb->tm_mon], tb->tm_mday,
348                        tb->tm_year + 1900);
349
350               pfile->time = _cpp_unaligned_alloc (pfile,
351                                                   sizeof ("\"12:34:56\""));
352               sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
353                        tb->tm_hour, tb->tm_min, tb->tm_sec);
354             }
355           else
356             {
357               cpp_errno (pfile, CPP_DL_WARNING,
358                          "could not determine date and time");
359                 
360               pfile->date = UC"\"??? ?? ????\"";
361               pfile->time = UC"\"??:??:??\"";
362             }
363         }
364
365       if (node->value.builtin == BT_DATE)
366         result = pfile->date;
367       else
368         result = pfile->time;
369       break;
370
371     case BT_COUNTER:
372       if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
373         cpp_error (pfile, CPP_DL_ERROR,
374             "__COUNTER__ expanded inside directive with -fdirectives-only");
375       number = pfile->counter++;
376       break;
377     }
378
379   if (result == NULL)
380     {
381       /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers.  */
382       result = _cpp_unaligned_alloc (pfile, 21);
383       sprintf ((char *) result, "%u", number);
384     }
385
386   return result;      
387 }
388
389 /* Convert builtin macros like __FILE__ to a token and push it on the
390    context stack.  Also handles _Pragma, for which a new token may not
391    be created.  Returns 1 if it generates a new token context, 0 to
392    return the token to the caller.  */
393 static int
394 builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
395 {
396   const uchar *buf;
397   size_t len;
398   char *nbuf;
399
400   if (node->value.builtin == BT_PRAGMA)
401     {
402       /* Don't interpret _Pragma within directives.  The standard is
403          not clear on this, but to me this makes most sense.  */
404       if (pfile->state.in_directive)
405         return 0;
406
407       return _cpp_do__Pragma (pfile);
408     }
409
410   buf = _cpp_builtin_macro_text (pfile, node);
411   len = ustrlen (buf);
412   nbuf = (char *) alloca (len + 1);
413   memcpy (nbuf, buf, len);
414   nbuf[len]='\n';
415
416   cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
417   _cpp_clean_line (pfile);
418
419   /* Set pfile->cur_token as required by _cpp_lex_direct.  */
420   pfile->cur_token = _cpp_temp_token (pfile);
421   _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
422   if (pfile->buffer->cur != pfile->buffer->rlimit)
423     cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
424                NODE_NAME (node));
425   _cpp_pop_buffer (pfile);
426
427   return 1;
428 }
429
430 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
431    backslashes and double quotes. DEST must be of sufficient size.
432    Returns a pointer to the end of the string.  */
433 uchar *
434 cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
435 {
436   while (len--)
437     {
438       uchar c = *src++;
439
440       if (c == '\\' || c == '"')
441         {
442           *dest++ = '\\';
443           *dest++ = c;
444         }
445       else
446           *dest++ = c;
447     }
448
449   return dest;
450 }
451
452 /* Convert a token sequence ARG to a single string token according to
453    the rules of the ISO C #-operator.  */
454 static const cpp_token *
455 stringify_arg (cpp_reader *pfile, macro_arg *arg)
456 {
457   unsigned char *dest;
458   unsigned int i, escape_it, backslash_count = 0;
459   const cpp_token *source = NULL;
460   size_t len;
461
462   if (BUFF_ROOM (pfile->u_buff) < 3)
463     _cpp_extend_buff (pfile, &pfile->u_buff, 3);
464   dest = BUFF_FRONT (pfile->u_buff);
465   *dest++ = '"';
466
467   /* Loop, reading in the argument's tokens.  */
468   for (i = 0; i < arg->count; i++)
469     {
470       const cpp_token *token = arg->first[i];
471
472       if (token->type == CPP_PADDING)
473         {
474           if (source == NULL
475               || (!(source->flags & PREV_WHITE)
476                   && token->val.source == NULL))
477             source = token->val.source;
478           continue;
479         }
480
481       escape_it = (token->type == CPP_STRING || token->type == CPP_CHAR
482                    || token->type == CPP_WSTRING || token->type == CPP_WCHAR
483                    || token->type == CPP_STRING32 || token->type == CPP_CHAR32
484                    || token->type == CPP_STRING16 || token->type == CPP_CHAR16
485                    || token->type == CPP_UTF8STRING);
486
487       /* Room for each char being written in octal, initial space and
488          final quote and NUL.  */
489       len = cpp_token_len (token);
490       if (escape_it)
491         len *= 4;
492       len += 3;
493
494       if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
495         {
496           size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
497           _cpp_extend_buff (pfile, &pfile->u_buff, len);
498           dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
499         }
500
501       /* Leading white space?  */
502       if (dest - 1 != BUFF_FRONT (pfile->u_buff))
503         {
504           if (source == NULL)
505             source = token;
506           if (source->flags & PREV_WHITE)
507             *dest++ = ' ';
508         }
509       source = NULL;
510
511       if (escape_it)
512         {
513           _cpp_buff *buff = _cpp_get_buff (pfile, len);
514           unsigned char *buf = BUFF_FRONT (buff);
515           len = cpp_spell_token (pfile, token, buf, true) - buf;
516           dest = cpp_quote_string (dest, buf, len);
517           _cpp_release_buff (pfile, buff);
518         }
519       else
520         dest = cpp_spell_token (pfile, token, dest, true);
521
522       if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
523         backslash_count++;
524       else
525         backslash_count = 0;
526     }
527
528   /* Ignore the final \ of invalid string literals.  */
529   if (backslash_count & 1)
530     {
531       cpp_error (pfile, CPP_DL_WARNING,
532                  "invalid string literal, ignoring final '\\'");
533       dest--;
534     }
535
536   /* Commit the memory, including NUL, and return the token.  */
537   *dest++ = '"';
538   len = dest - BUFF_FRONT (pfile->u_buff);
539   BUFF_FRONT (pfile->u_buff) = dest + 1;
540   return new_string_token (pfile, dest - len, len);
541 }
542
543 /* Try to paste two tokens.  On success, return nonzero.  In any
544    case, PLHS is updated to point to the pasted token, which is
545    guaranteed to not have the PASTE_LEFT flag set.  */
546 static bool
547 paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
548 {
549   unsigned char *buf, *end, *lhsend;
550   cpp_token *lhs;
551   unsigned int len;
552
553   len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
554   buf = (unsigned char *) alloca (len);
555   end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
556
557   /* Avoid comment headers, since they are still processed in stage 3.
558      It is simpler to insert a space here, rather than modifying the
559      lexer to ignore comments in some circumstances.  Simply returning
560      false doesn't work, since we want to clear the PASTE_LEFT flag.  */
561   if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
562     *end++ = ' ';
563   /* In one obscure case we might see padding here.  */
564   if (rhs->type != CPP_PADDING)
565     end = cpp_spell_token (pfile, rhs, end, false);
566   *end = '\n';
567
568   cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
569   _cpp_clean_line (pfile);
570
571   /* Set pfile->cur_token as required by _cpp_lex_direct.  */
572   pfile->cur_token = _cpp_temp_token (pfile);
573   lhs = _cpp_lex_direct (pfile);
574   if (pfile->buffer->cur != pfile->buffer->rlimit)
575     {
576       source_location saved_loc = lhs->src_loc;
577
578       _cpp_pop_buffer (pfile);
579       _cpp_backup_tokens (pfile, 1);
580       *lhsend = '\0';
581
582       /* We have to remove the PASTE_LEFT flag from the old lhs, but
583          we want to keep the new location.  */
584       *lhs = **plhs;
585       *plhs = lhs;
586       lhs->src_loc = saved_loc;
587       lhs->flags &= ~PASTE_LEFT;
588
589       /* Mandatory error for all apart from assembler.  */
590       if (CPP_OPTION (pfile, lang) != CLK_ASM)
591         cpp_error (pfile, CPP_DL_ERROR,
592          "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
593                    buf, cpp_token_as_text (pfile, rhs));
594       return false;
595     }
596
597   *plhs = lhs;
598   _cpp_pop_buffer (pfile);
599   return true;
600 }
601
602 /* Handles an arbitrarily long sequence of ## operators, with initial
603    operand LHS.  This implementation is left-associative,
604    non-recursive, and finishes a paste before handling succeeding
605    ones.  If a paste fails, we back up to the RHS of the failing ##
606    operator before pushing the context containing the result of prior
607    successful pastes, with the effect that the RHS appears in the
608    output stream after the pasted LHS normally.  */
609 static void
610 paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
611 {
612   const cpp_token *rhs = NULL;
613   cpp_context *context = pfile->context;
614
615   do
616     {
617       /* Take the token directly from the current context.  We can do
618          this, because we are in the replacement list of either an
619          object-like macro, or a function-like macro with arguments
620          inserted.  In either case, the constraints to #define
621          guarantee we have at least one more token.  */
622       if (context->tokens_kind == TOKENS_KIND_DIRECT)
623         rhs = FIRST (context).token++;
624       else if (context->tokens_kind == TOKENS_KIND_INDIRECT)
625         rhs = *FIRST (context).ptoken++;
626       else if (context->tokens_kind == TOKENS_KIND_EXTENDED)
627         {
628           /* So we are in presence of an extended token context, which
629              means that each token in this context has a virtual
630              location attached to it.  So let's not forget to update
631              the pointer to the current virtual location of the
632              current token when we update the pointer to the current
633              token */
634
635           rhs = *FIRST (context).ptoken++;
636           /* context->c.mc must be non-null, as if we were not in a
637              macro context, context->tokens_kind could not be equal to
638              TOKENS_KIND_EXTENDED.  */
639           context->c.mc->cur_virt_loc++;
640         }
641
642       if (rhs->type == CPP_PADDING)
643         {
644           if (rhs->flags & PASTE_LEFT)
645             abort ();
646         }
647       if (!paste_tokens (pfile, &lhs, rhs))
648         break;
649     }
650   while (rhs->flags & PASTE_LEFT);
651
652   /* Put the resulting token in its own context.  */
653   _cpp_push_token_context (pfile, NULL, lhs, 1);
654 }
655
656 /* Returns TRUE if the number of arguments ARGC supplied in an
657    invocation of the MACRO referenced by NODE is valid.  An empty
658    invocation to a macro with no parameters should pass ARGC as zero.
659
660    Note that MACRO cannot necessarily be deduced from NODE, in case
661    NODE was redefined whilst collecting arguments.  */
662 bool
663 _cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
664 {
665   if (argc == macro->paramc)
666     return true;
667
668   if (argc < macro->paramc)
669     {
670       /* As an extension, a rest argument is allowed to not appear in
671          the invocation at all.
672          e.g. #define debug(format, args...) something
673          debug("string");
674
675          This is exactly the same as if there had been an empty rest
676          argument - debug("string", ).  */
677
678       if (argc + 1 == macro->paramc && macro->variadic)
679         {
680           if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
681             cpp_error (pfile, CPP_DL_PEDWARN,
682                        "ISO C99 requires rest arguments to be used");
683           return true;
684         }
685
686       cpp_error (pfile, CPP_DL_ERROR,
687                  "macro \"%s\" requires %u arguments, but only %u given",
688                  NODE_NAME (node), macro->paramc, argc);
689     }
690   else
691     cpp_error (pfile, CPP_DL_ERROR,
692                "macro \"%s\" passed %u arguments, but takes just %u",
693                NODE_NAME (node), argc, macro->paramc);
694
695   return false;
696 }
697
698 /* Reads and returns the arguments to a function-like macro
699    invocation.  Assumes the opening parenthesis has been processed.
700    If there is an error, emits an appropriate diagnostic and returns
701    NULL.  Each argument is terminated by a CPP_EOF token, for the
702    future benefit of expand_arg().  If there are any deferred
703    #pragma directives among macro arguments, store pointers to the
704    CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.
705
706    What is returned is the buffer that contains the memory allocated
707    to hold the macro arguments.  NODE is the name of the macro this
708    function is dealing with.  If NUM_ARGS is non-NULL, *NUM_ARGS is
709    set to the actual number of macro arguments allocated in the
710    returned buffer.  */
711 static _cpp_buff *
712 collect_args (cpp_reader *pfile, const cpp_hashnode *node,
713               _cpp_buff **pragma_buff, unsigned *num_args)
714 {
715   _cpp_buff *buff, *base_buff;
716   cpp_macro *macro;
717   macro_arg *args, *arg;
718   const cpp_token *token;
719   unsigned int argc;
720   source_location virt_loc;
721   bool track_macro_expansion_p = CPP_OPTION (pfile, track_macro_expansion);
722   unsigned num_args_alloced = 0;
723
724   macro = node->value.macro;
725   if (macro->paramc)
726     argc = macro->paramc;
727   else
728     argc = 1;
729
730 #define DEFAULT_NUM_TOKENS_PER_MACRO_ARG 50
731 #define ARG_TOKENS_EXTENT 1000
732
733   buff = _cpp_get_buff (pfile, argc * (DEFAULT_NUM_TOKENS_PER_MACRO_ARG
734                                        * sizeof (cpp_token *)
735                                        + sizeof (macro_arg)));
736   base_buff = buff;
737   args = (macro_arg *) buff->base;
738   memset (args, 0, argc * sizeof (macro_arg));
739   buff->cur = (unsigned char *) &args[argc];
740   arg = args, argc = 0;
741
742   /* Collect the tokens making up each argument.  We don't yet know
743      how many arguments have been supplied, whether too many or too
744      few.  Hence the slightly bizarre usage of "argc" and "arg".  */
745   do
746     {
747       unsigned int paren_depth = 0;
748       unsigned int ntokens = 0;
749       unsigned virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
750       num_args_alloced++;
751
752       argc++;
753       arg->first = (const cpp_token **) buff->cur;
754       if (track_macro_expansion_p)
755         {
756           virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
757           arg->virt_locs = XNEWVEC (source_location,
758                                     virt_locs_capacity);
759         }
760
761       for (;;)
762         {
763           /* Require space for 2 new tokens (including a CPP_EOF).  */
764           if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
765             {
766               buff = _cpp_append_extend_buff (pfile, buff,
767                                               ARG_TOKENS_EXTENT
768                                               * sizeof (cpp_token *));
769               arg->first = (const cpp_token **) buff->cur;
770             }
771           if (track_macro_expansion_p
772               && (ntokens + 2 > virt_locs_capacity))
773             {
774               virt_locs_capacity += ARG_TOKENS_EXTENT;
775               arg->virt_locs = XRESIZEVEC (source_location,
776                                            arg->virt_locs,
777                                            virt_locs_capacity);
778             }
779
780           token = cpp_get_token_1 (pfile, &virt_loc);
781
782           if (token->type == CPP_PADDING)
783             {
784               /* Drop leading padding.  */
785               if (ntokens == 0)
786                 continue;
787             }
788           else if (token->type == CPP_OPEN_PAREN)
789             paren_depth++;
790           else if (token->type == CPP_CLOSE_PAREN)
791             {
792               if (paren_depth-- == 0)
793                 break;
794             }
795           else if (token->type == CPP_COMMA)
796             {
797               /* A comma does not terminate an argument within
798                  parentheses or as part of a variable argument.  */
799               if (paren_depth == 0
800                   && ! (macro->variadic && argc == macro->paramc))
801                 break;
802             }
803           else if (token->type == CPP_EOF
804                    || (token->type == CPP_HASH && token->flags & BOL))
805             break;
806           else if (token->type == CPP_PRAGMA)
807             {
808               cpp_token *newtok = _cpp_temp_token (pfile);
809
810               /* CPP_PRAGMA token lives in directive_result, which will
811                  be overwritten on the next directive.  */
812               *newtok = *token;
813               token = newtok;
814               do
815                 {
816                   if (*pragma_buff == NULL
817                       || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
818                     {
819                       _cpp_buff *next;
820                       if (*pragma_buff == NULL)
821                         *pragma_buff
822                           = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
823                       else
824                         {
825                           next = *pragma_buff;
826                           *pragma_buff
827                             = _cpp_get_buff (pfile,
828                                              (BUFF_FRONT (*pragma_buff)
829                                               - (*pragma_buff)->base) * 2);
830                           (*pragma_buff)->next = next;
831                         }
832                     }
833                   *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
834                   BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
835                   if (token->type == CPP_PRAGMA_EOL)
836                     break;
837                   token = cpp_get_token_1 (pfile, &virt_loc);
838                 }
839               while (token->type != CPP_EOF);
840
841               /* In deferred pragmas parsing_args and prevent_expansion
842                  had been changed, reset it.  */
843               pfile->state.parsing_args = 2;
844               pfile->state.prevent_expansion = 1;
845
846               if (token->type == CPP_EOF)
847                 break;
848               else
849                 continue;
850             }
851           set_arg_token (arg, token, virt_loc,
852                          ntokens, MACRO_ARG_TOKEN_NORMAL,
853                          CPP_OPTION (pfile, track_macro_expansion));
854           ntokens++;
855         }
856
857       /* Drop trailing padding.  */
858       while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
859         ntokens--;
860
861       arg->count = ntokens;
862       set_arg_token (arg, &pfile->eof, pfile->eof.src_loc,
863                      ntokens, MACRO_ARG_TOKEN_NORMAL,
864                      CPP_OPTION (pfile, track_macro_expansion));
865
866       /* Terminate the argument.  Excess arguments loop back and
867          overwrite the final legitimate argument, before failing.  */
868       if (argc <= macro->paramc)
869         {
870           buff->cur = (unsigned char *) &arg->first[ntokens + 1];
871           if (argc != macro->paramc)
872             arg++;
873         }
874     }
875   while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
876
877   if (token->type == CPP_EOF)
878     {
879       /* We still need the CPP_EOF to end directives, and to end
880          pre-expansion of a macro argument.  Step back is not
881          unconditional, since we don't want to return a CPP_EOF to our
882          callers at the end of an -include-d file.  */
883       if (pfile->context->prev || pfile->state.in_directive)
884         _cpp_backup_tokens (pfile, 1);
885       cpp_error (pfile, CPP_DL_ERROR,
886                  "unterminated argument list invoking macro \"%s\"",
887                  NODE_NAME (node));
888     }
889   else
890     {
891       /* A single empty argument is counted as no argument.  */
892       if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
893         argc = 0;
894       if (_cpp_arguments_ok (pfile, macro, node, argc))
895         {
896           /* GCC has special semantics for , ## b where b is a varargs
897              parameter: we remove the comma if b was omitted entirely.
898              If b was merely an empty argument, the comma is retained.
899              If the macro takes just one (varargs) parameter, then we
900              retain the comma only if we are standards conforming.
901
902              If FIRST is NULL replace_args () swallows the comma.  */
903           if (macro->variadic && (argc < macro->paramc
904                                   || (argc == 1 && args[0].count == 0
905                                       && !CPP_OPTION (pfile, std))))
906             args[macro->paramc - 1].first = NULL;
907           if (num_args)
908             *num_args = num_args_alloced;
909           return base_buff;
910         }
911     }
912
913   /* An error occurred.  */
914   _cpp_release_buff (pfile, base_buff);
915   return NULL;
916 }
917
918 /* Search for an opening parenthesis to the macro of NODE, in such a
919    way that, if none is found, we don't lose the information in any
920    intervening padding tokens.  If we find the parenthesis, collect
921    the arguments and return the buffer containing them.  PRAGMA_BUFF
922    argument is the same as in collect_args.  If NUM_ARGS is non-NULL,
923    *NUM_ARGS is set to the number of arguments contained in the
924    returned buffer.  */
925 static _cpp_buff *
926 funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
927                       _cpp_buff **pragma_buff, unsigned *num_args)
928 {
929   const cpp_token *token, *padding = NULL;
930
931   for (;;)
932     {
933       token = cpp_get_token (pfile);
934       if (token->type != CPP_PADDING)
935         break;
936       if (padding == NULL
937           || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
938         padding = token;
939     }
940
941   if (token->type == CPP_OPEN_PAREN)
942     {
943       pfile->state.parsing_args = 2;
944       return collect_args (pfile, node, pragma_buff, num_args);
945     }
946
947   /* CPP_EOF can be the end of macro arguments, or the end of the
948      file.  We mustn't back up over the latter.  Ugh.  */
949   if (token->type != CPP_EOF || token == &pfile->eof)
950     {
951       /* Back up.  We may have skipped padding, in which case backing
952          up more than one token when expanding macros is in general
953          too difficult.  We re-insert it in its own context.  */
954       _cpp_backup_tokens (pfile, 1);
955       if (padding)
956         _cpp_push_token_context (pfile, NULL, padding, 1);
957     }
958
959   return NULL;
960 }
961
962 /* Return the real number of tokens in the expansion of MACRO.  */
963 static inline unsigned int
964 macro_real_token_count (const cpp_macro *macro)
965 {
966   unsigned int i;
967   if (__builtin_expect (!macro->extra_tokens, true))
968     return macro->count;
969   for (i = 0; i < macro->count; i++)
970     if (macro->exp.tokens[i].type == CPP_PASTE)
971       return i;
972   abort ();
973 }
974
975 /* Push the context of a macro with hash entry NODE onto the context
976    stack.  If we can successfully expand the macro, we push a context
977    containing its yet-to-be-rescanned replacement list and return one.
978    If there were additionally any unexpanded deferred #pragma
979    directives among macro arguments, push another context containing
980    the pragma tokens before the yet-to-be-rescanned replacement list
981    and return two.  Otherwise, we don't push a context and return
982    zero. LOCATION is the location of the expansion point of the
983    macro.  */
984 static int
985 enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
986                      const cpp_token *result, source_location location)
987 {
988   /* The presence of a macro invalidates a file's controlling macro.  */
989   pfile->mi_valid = false;
990
991   pfile->state.angled_headers = false;
992
993   if ((node->flags & NODE_BUILTIN) && !(node->flags & NODE_USED))
994     {
995       node->flags |= NODE_USED;
996       if ((!pfile->cb.user_builtin_macro
997            || !pfile->cb.user_builtin_macro (pfile, node))
998           && pfile->cb.used_define)
999         pfile->cb.used_define (pfile, pfile->directive_line, node);
1000     }
1001
1002   /* Handle standard macros.  */
1003   if (! (node->flags & NODE_BUILTIN))
1004     {
1005       cpp_macro *macro = node->value.macro;
1006       _cpp_buff *pragma_buff = NULL;
1007
1008       if (macro->fun_like)
1009         {
1010           _cpp_buff *buff;
1011           unsigned num_args = 0;
1012
1013           pfile->state.prevent_expansion++;
1014           pfile->keep_tokens++;
1015           pfile->state.parsing_args = 1;
1016           buff = funlike_invocation_p (pfile, node, &pragma_buff,
1017                                        &num_args);
1018           pfile->state.parsing_args = 0;
1019           pfile->keep_tokens--;
1020           pfile->state.prevent_expansion--;
1021
1022           if (buff == NULL)
1023             {
1024               if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
1025                 cpp_warning (pfile, CPP_W_TRADITIONAL,
1026  "function-like macro \"%s\" must be used with arguments in traditional C",
1027                              NODE_NAME (node));
1028
1029               if (pragma_buff)
1030                 _cpp_release_buff (pfile, pragma_buff);
1031
1032               return 0;
1033             }
1034
1035           if (macro->paramc > 0)
1036             replace_args (pfile, node, macro,
1037                           (macro_arg *) buff->base,
1038                           location);
1039           /* Free the memory used by the arguments of this
1040              function-like macro.  This memory has been allocated by
1041              funlike_invocation_p and by replace_args.  */
1042           delete_macro_args (buff, num_args);
1043         }
1044
1045       /* Disable the macro within its expansion.  */
1046       node->flags |= NODE_DISABLED;
1047
1048       if (!(node->flags & NODE_USED))
1049         {
1050           node->flags |= NODE_USED;
1051           if (pfile->cb.used_define)
1052             pfile->cb.used_define (pfile, pfile->directive_line, node);
1053         }
1054
1055       if (pfile->cb.used)
1056         pfile->cb.used (pfile, location, node);
1057
1058       macro->used = 1;
1059
1060       if (macro->paramc == 0)
1061         {
1062           if (CPP_OPTION (pfile, track_macro_expansion))
1063             {
1064               unsigned int i, count = macro->count;
1065               const cpp_token *src = macro->exp.tokens;
1066               const struct line_map *map;
1067               source_location *virt_locs = NULL;
1068               _cpp_buff *macro_tokens =
1069                 tokens_buff_new (pfile, count, &virt_locs);
1070
1071               /* Create a macro map to record the locations of the
1072                  tokens that are involved in the expansion. LOCATION
1073                  is the location of the macro expansion point.  */
1074               map  = linemap_enter_macro (pfile->line_table,
1075                                           node, location, count);
1076               for (i = 0; i < count; ++i)
1077                 {
1078                   tokens_buff_add_token (macro_tokens, virt_locs,
1079                                          src, src->src_loc,
1080                                          src->src_loc, map, i);
1081                   ++src;
1082                 }
1083               push_extended_tokens_context (pfile, node,
1084                                             macro_tokens,
1085                                             virt_locs,
1086                                             (const cpp_token **)
1087                                             macro_tokens->base,
1088                                             count);
1089               num_macro_tokens_counter += count;
1090             }
1091           else
1092             {
1093               unsigned tokens_count = macro_real_token_count (macro);
1094               _cpp_push_token_context (pfile, node, macro->exp.tokens,
1095                                        tokens_count);
1096               num_macro_tokens_counter += tokens_count;
1097             }
1098         }
1099
1100       if (pragma_buff)
1101         {
1102           if (!pfile->state.in_directive)
1103             _cpp_push_token_context (pfile, NULL,
1104                                      padding_token (pfile, result), 1);
1105           do
1106             {
1107               unsigned tokens_count;
1108               _cpp_buff *tail = pragma_buff->next;
1109               pragma_buff->next = NULL;
1110               tokens_count = ((const cpp_token **) BUFF_FRONT (pragma_buff)
1111                               - (const cpp_token **) pragma_buff->base);
1112               push_ptoken_context (pfile, NULL, pragma_buff,
1113                                    (const cpp_token **) pragma_buff->base,
1114                                    tokens_count);
1115               pragma_buff = tail;
1116               if (!CPP_OPTION (pfile, track_macro_expansion))
1117                 num_macro_tokens_counter += tokens_count;
1118
1119             }
1120           while (pragma_buff != NULL);
1121           return 2;
1122         }
1123
1124       return 1;
1125     }
1126
1127   /* Handle built-in macros and the _Pragma operator.  */
1128   return builtin_macro (pfile, node);
1129 }
1130
1131 /* De-allocate the memory used by BUFF which is an array of instances
1132    of macro_arg.  NUM_ARGS is the number of instances of macro_arg
1133    present in BUFF.  */
1134 static void
1135 delete_macro_args (_cpp_buff *buff, unsigned num_args)
1136 {
1137   macro_arg *macro_args;
1138   unsigned i;
1139
1140   if (buff == NULL)
1141     return;
1142
1143   macro_args = (macro_arg *) buff->base;
1144
1145   /* Walk instances of macro_arg to free their expanded tokens as well
1146      as their macro_arg::virt_locs members.  */
1147   for (i = 0; i < num_args; ++i)
1148     {
1149       if (macro_args[i].expanded)
1150         {
1151           free (macro_args[i].expanded);
1152           macro_args[i].expanded = NULL;
1153         }
1154       if (macro_args[i].virt_locs)
1155         {
1156           free (macro_args[i].virt_locs);
1157           macro_args[i].virt_locs = NULL;
1158         }
1159       if (macro_args[i].expanded_virt_locs)
1160         {
1161           free (macro_args[i].expanded_virt_locs);
1162           macro_args[i].expanded_virt_locs = NULL;
1163         }
1164     }
1165   _cpp_free_buff (buff);
1166 }
1167
1168 /* Set the INDEXth token of the macro argument ARG. TOKEN is the token
1169    to set, LOCATION is its virtual location.  "Virtual" location means
1170    the location that encodes loci accross macro expansion. Otherwise
1171    it has to be TOKEN->SRC_LOC.  KIND is the kind of tokens the
1172    argument ARG is supposed to contain.  Note that ARG must be
1173    tailored so that it has enough room to contain INDEX + 1 numbers of
1174    tokens, at least.  */
1175 static void
1176 set_arg_token (macro_arg *arg, const cpp_token *token,
1177                source_location location, size_t index,
1178                enum macro_arg_token_kind kind,
1179                bool track_macro_exp_p)
1180 {
1181   const cpp_token **token_ptr;
1182   source_location *loc = NULL;
1183
1184   token_ptr =
1185     arg_token_ptr_at (arg, index, kind,
1186                       track_macro_exp_p ? &loc : NULL);
1187   *token_ptr = token;
1188
1189   if (loc != NULL)
1190     {
1191 #ifdef ENABLE_CHECKING
1192       if (kind == MACRO_ARG_TOKEN_STRINGIFIED
1193           || !track_macro_exp_p)
1194         /* We can't set the location of a stringified argument
1195            token and we can't set any location if we aren't tracking
1196            macro expansion locations.   */
1197         abort ();
1198 #endif
1199       *loc = location;
1200     }
1201 }
1202
1203 /* Get the pointer to the location of the argument token of the
1204    function-like macro argument ARG.  This function must be called
1205    only when we -ftrack-macro-expansion is on.  */
1206 static const source_location *
1207 get_arg_token_location (const macro_arg *arg,
1208                         enum macro_arg_token_kind kind)
1209 {
1210   const source_location *loc = NULL;
1211   const cpp_token **token_ptr =
1212     arg_token_ptr_at (arg, 0, kind, (source_location **) &loc);
1213
1214   if (token_ptr == NULL)
1215     return NULL;
1216
1217   return loc;
1218 }
1219
1220 /* Return the pointer to the INDEXth token of the macro argument ARG.
1221    KIND specifies the kind of token the macro argument ARG contains.
1222    If VIRT_LOCATION is non NULL, *VIRT_LOCATION is set to the address
1223    of the virtual location of the returned token if the
1224    -ftrack-macro-expansion flag is on; otherwise, it's set to the
1225    spelling location of the returned token.  */
1226 static const cpp_token **
1227 arg_token_ptr_at (const macro_arg *arg, size_t index,
1228                   enum macro_arg_token_kind kind,
1229                   source_location **virt_location)
1230 {
1231   const cpp_token **tokens_ptr = NULL;
1232
1233   switch (kind)
1234     {
1235     case MACRO_ARG_TOKEN_NORMAL:
1236       tokens_ptr = arg->first;
1237       break;
1238     case MACRO_ARG_TOKEN_STRINGIFIED:      
1239       tokens_ptr = (const cpp_token **) &arg->stringified;
1240       break;
1241     case MACRO_ARG_TOKEN_EXPANDED:
1242         tokens_ptr = arg->expanded;
1243       break;
1244     }
1245
1246   if (tokens_ptr == NULL)
1247     /* This can happen for e.g, an empty token argument to a
1248        funtion-like macro.  */
1249     return tokens_ptr;
1250
1251   if (virt_location)
1252     {
1253       if (kind == MACRO_ARG_TOKEN_NORMAL)
1254         *virt_location = &arg->virt_locs[index];
1255       else if (kind == MACRO_ARG_TOKEN_EXPANDED)
1256         *virt_location = &arg->expanded_virt_locs[index];
1257       else if (kind == MACRO_ARG_TOKEN_STRINGIFIED)
1258         *virt_location =
1259           (source_location *) &tokens_ptr[index]->src_loc;
1260     }
1261   return &tokens_ptr[index];
1262 }
1263
1264 /* Initialize an iterator so that it iterates over the tokens of a
1265    function-like macro argument.  KIND is the kind of tokens we want
1266    ITER to iterate over. TOKEN_PTR points the first token ITER will
1267    iterate over.  */
1268 static void
1269 macro_arg_token_iter_init (macro_arg_token_iter *iter,
1270                            bool track_macro_exp_p,
1271                            enum macro_arg_token_kind kind,
1272                            const macro_arg *arg,
1273                            const cpp_token **token_ptr)
1274 {
1275   iter->track_macro_exp_p = track_macro_exp_p;
1276   iter->kind = kind;
1277   iter->token_ptr = token_ptr;
1278   /* Unconditionally initialize this so that the compiler doesn't warn
1279      about iter->location_ptr being possibly uninitialized later after
1280      this code has been inlined somewhere.  */
1281   iter->location_ptr = NULL;
1282   if (track_macro_exp_p)
1283     iter->location_ptr = get_arg_token_location (arg, kind);
1284 #ifdef ENABLE_CHECKING
1285   iter->num_forwards = 0;
1286   if (track_macro_exp_p
1287       && token_ptr != NULL
1288       && iter->location_ptr == NULL)
1289     abort ();
1290 #endif
1291 }
1292
1293 /* Move the iterator one token forward. Note that if IT was
1294    initialized on an argument that has a stringified token, moving it
1295    foward doesn't make sense as a stringified token is essentially one
1296    string.  */
1297 static void
1298 macro_arg_token_iter_forward (macro_arg_token_iter *it)
1299 {
1300   switch (it->kind)
1301     {
1302     case MACRO_ARG_TOKEN_NORMAL:
1303     case MACRO_ARG_TOKEN_EXPANDED:
1304       it->token_ptr++;
1305       if (it->track_macro_exp_p)
1306         it->location_ptr++;
1307       break;
1308     case MACRO_ARG_TOKEN_STRINGIFIED:
1309 #ifdef ENABLE_CHECKING
1310       if (it->num_forwards > 0)
1311         abort ();
1312 #endif
1313       break;
1314     }
1315
1316 #ifdef ENABLE_CHECKING
1317   it->num_forwards++;
1318 #endif
1319 }
1320
1321 /* Return the token pointed to by the iterator.  */
1322 static const cpp_token *
1323 macro_arg_token_iter_get_token (const macro_arg_token_iter *it)
1324 {
1325 #ifdef ENABLE_CHECKING
1326   if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1327       && it->num_forwards > 0)
1328     abort ();
1329 #endif
1330   if (it->token_ptr == NULL)
1331     return NULL;
1332   return *it->token_ptr;
1333 }
1334
1335 /* Return the location of the token pointed to by the iterator.*/
1336 static source_location
1337 macro_arg_token_iter_get_location (const macro_arg_token_iter *it)
1338 {
1339 #ifdef ENABLE_CHECKING
1340   if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1341       && it->num_forwards > 0)
1342     abort ();
1343 #endif
1344   if (it->track_macro_exp_p)
1345     return *it->location_ptr;
1346   else
1347     return (*it->token_ptr)->src_loc;
1348 }
1349
1350 /* Return the index of a token [resulting from macro expansion] inside
1351    the total list of tokens resulting from a given macro
1352    expansion. The index can be different depending on whether if we
1353    want each tokens resulting from function-like macro arguments
1354    expansion to have a different location or not.
1355
1356    E.g, consider this function-like macro: 
1357
1358         #define M(x) x - 3
1359
1360    Then consider us "calling" it (and thus expanding it) like:
1361    
1362        M(1+4)
1363
1364    It will be expanded into:
1365
1366        1+4-3
1367
1368    Let's consider the case of the token '4'.
1369
1370    Its index can be 2 (it's the third token of the set of tokens
1371    resulting from the expansion) or it can be 0 if we consider that
1372    all tokens resulting from the expansion of the argument "1+2" have
1373    the same index, which is 0. In this later case, the index of token
1374    '-' would then be 1 and the index of token '3' would be 2.
1375
1376    The later case is useful to use less memory e.g, for the case of
1377    the user using the option -ftrack-macro-expansion=1.
1378
1379    ABSOLUTE_TOKEN_INDEX is the index of the macro argument token we
1380    are interested in.  CUR_REPLACEMENT_TOKEN is the token of the macro
1381    parameter (inside the macro replacement list) that corresponds to
1382    the macro argument for which ABSOLUTE_TOKEN_INDEX is a token index
1383    of.
1384
1385    If we refer to the example above, for the '4' argument token,
1386    ABSOLUTE_TOKEN_INDEX would be set to 2, and CUR_REPLACEMENT_TOKEN
1387    would be set to the token 'x', in the replacement list "x - 3" of
1388    macro M.
1389
1390    This is a subroutine of replace_args.  */
1391 inline static unsigned
1392 expanded_token_index (cpp_reader *pfile, cpp_macro *macro,
1393                       const cpp_token *cur_replacement_token,
1394                       unsigned absolute_token_index)
1395 {
1396   if (CPP_OPTION (pfile, track_macro_expansion) > 1)
1397     return absolute_token_index;
1398   return cur_replacement_token - macro->exp.tokens;
1399 }
1400
1401 /* Replace the parameters in a function-like macro of NODE with the
1402    actual ARGS, and place the result in a newly pushed token context.
1403    Expand each argument before replacing, unless it is operated upon
1404    by the # or ## operators. EXPANSION_POINT_LOC is the location of
1405    the expansion point of the macro. E.g, the location of the
1406    function-like macro invocation.  */
1407 static void
1408 replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
1409               macro_arg *args, source_location expansion_point_loc)
1410 {
1411   unsigned int i, total;
1412   const cpp_token *src, *limit;
1413   const cpp_token **first = NULL;
1414   macro_arg *arg;
1415   _cpp_buff *buff = NULL;
1416   source_location *virt_locs = NULL;
1417   unsigned int exp_count;
1418   const struct line_map *map = NULL;
1419   int track_macro_exp;
1420
1421   /* First, fully macro-expand arguments, calculating the number of
1422      tokens in the final expansion as we go.  The ordering of the if
1423      statements below is subtle; we must handle stringification before
1424      pasting.  */
1425
1426   /* EXP_COUNT is the number of tokens in the macro replacement
1427      list.  TOTAL is the number of tokens /after/ macro parameters
1428      have been replaced by their arguments.   */
1429   exp_count = macro_real_token_count (macro);
1430   total = exp_count;
1431   limit = macro->exp.tokens + exp_count;
1432
1433   for (src = macro->exp.tokens; src < limit; src++)
1434     if (src->type == CPP_MACRO_ARG)
1435       {
1436         /* Leading and trailing padding tokens.  */
1437         total += 2;
1438         /* Account for leading and padding tokens in exp_count too.
1439            This is going to be important later down this function,
1440            when we want to handle the case of (track_macro_exp <
1441            2).  */
1442         exp_count += 2;
1443
1444         /* We have an argument.  If it is not being stringified or
1445            pasted it is macro-replaced before insertion.  */
1446         arg = &args[src->val.macro_arg.arg_no - 1];
1447
1448         if (src->flags & STRINGIFY_ARG)
1449           {
1450             if (!arg->stringified)
1451               arg->stringified = stringify_arg (pfile, arg);
1452           }
1453         else if ((src->flags & PASTE_LEFT)
1454                  || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
1455           total += arg->count - 1;
1456         else
1457           {
1458             if (!arg->expanded)
1459               expand_arg (pfile, arg);
1460             total += arg->expanded_count - 1;
1461           }
1462       }
1463
1464   /* When the compiler is called with the -ftrack-macro-expansion
1465      flag, we need to keep track of the location of each token that
1466      results from macro expansion.
1467
1468      A token resulting from macro expansion is not a new token. It is
1469      simply the same token as the token coming from the macro
1470      definition.  The new things that are allocated are the buffer
1471      that holds the tokens resulting from macro expansion and a new
1472      location that records many things like the locus of the expansion
1473      point as well as the original locus inside the definition of the
1474      macro.  This location is called a virtual location.
1475      
1476      So the buffer BUFF holds a set of cpp_token*, and the buffer
1477      VIRT_LOCS holds the virtual locations of the tokens held by BUFF.
1478
1479      Both of these two buffers are going to be hung off of the macro
1480      context, when the latter is pushed.  The memory allocated to
1481      store the tokens and their locations is going to be freed once
1482      the context of macro expansion is popped.
1483      
1484      As far as tokens are concerned, the memory overhead of
1485      -ftrack-macro-expansion is proportional to the number of
1486      macros that get expanded multiplied by sizeof (source_location).
1487      The good news is that extra memory gets freed when the macro
1488      context is freed, i.e shortly after the macro got expanded.  */
1489
1490   /* Is the -ftrack-macro-expansion flag in effect?  */
1491   track_macro_exp = CPP_OPTION (pfile, track_macro_expansion);
1492
1493   /* Now allocate memory space for tokens and locations resulting from
1494      the macro expansion, copy the tokens and replace the arguments.
1495      This memory must be freed when the context of the macro MACRO is
1496      popped.  */
1497   buff = tokens_buff_new (pfile, total, track_macro_exp ? &virt_locs : NULL);
1498
1499   first = (const cpp_token **) buff->base;
1500
1501   /* Create a macro map to record the locations of the tokens that are
1502      involved in the expansion.  Note that the expansion point is set
1503      to the location of the closing parenthesis.  Otherwise, the
1504      subsequent map created for the first token that comes after the
1505      macro map might have a wrong line number.  That would lead to
1506      tokens with wrong line numbers after the macro expansion.  This
1507      adds up to the memory overhead of the -ftrack-macro-expansion
1508      flag; for every macro that is expanded, a "macro map" is
1509      created.  */
1510   if (track_macro_exp)
1511     {
1512       int num_macro_tokens = total;
1513       if (track_macro_exp < 2)
1514         /* Then the number of macro tokens won't take in account the
1515            fact that function-like macro arguments can expand to
1516            multiple tokens. This is to save memory at the expense of
1517            accuracy.
1518
1519            Suppose we have #define SQARE(A) A * A
1520
1521            And then we do SQARE(2+3)
1522
1523            Then the tokens 2, +, 3, will have the same location,
1524            saying they come from the expansion of the argument A.  */
1525         num_macro_tokens = exp_count;
1526       map = linemap_enter_macro (pfile->line_table, node,
1527                                  expansion_point_loc,
1528                                  num_macro_tokens);
1529     }
1530   i = 0;
1531   for (src = macro->exp.tokens; src < limit; src++)
1532     {
1533       unsigned int arg_tokens_count;
1534       macro_arg_token_iter from;
1535       const cpp_token **paste_flag = NULL;
1536       const cpp_token **tmp_token_ptr;
1537
1538       if (src->type != CPP_MACRO_ARG)
1539         {
1540           /* Allocate a virtual location for token SRC, and add that
1541              token and its virtual location into the buffers BUFF and
1542              VIRT_LOCS.  */
1543           unsigned index = expanded_token_index (pfile, macro, src, i);
1544           tokens_buff_add_token (buff, virt_locs, src,
1545                                  src->src_loc, src->src_loc,
1546                                  map, index);
1547           i += 1;
1548           continue;
1549         }
1550
1551       paste_flag = 0;
1552       arg = &args[src->val.macro_arg.arg_no - 1];
1553       /* SRC is a macro parameter that we need to replace with its
1554          corresponding argument.  So at some point we'll need to
1555          iterate over the tokens of the macro argument and copy them
1556          into the "place" now holding the correspondig macro
1557          parameter.  We are going to use the iterator type
1558          macro_argo_token_iter to handle that iterating.  The 'if'
1559          below is to initialize the iterator depending on the type of
1560          tokens the macro argument has.  It also does some adjustment
1561          related to padding tokens and some pasting corner cases.  */
1562       if (src->flags & STRINGIFY_ARG)
1563         {
1564           arg_tokens_count = 1;
1565           macro_arg_token_iter_init (&from,
1566                                      CPP_OPTION (pfile,
1567                                                  track_macro_expansion),
1568                                      MACRO_ARG_TOKEN_STRINGIFIED,
1569                                      arg, &arg->stringified);
1570         }
1571       else if (src->flags & PASTE_LEFT)
1572         {
1573           arg_tokens_count = arg->count;
1574           macro_arg_token_iter_init (&from,
1575                                      CPP_OPTION (pfile,
1576                                                  track_macro_expansion),
1577                                      MACRO_ARG_TOKEN_NORMAL,
1578                                      arg, arg->first);
1579         }
1580       else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
1581         {
1582           int num_toks;
1583           arg_tokens_count = arg->count;
1584           macro_arg_token_iter_init (&from,
1585                                      CPP_OPTION (pfile,
1586                                                  track_macro_expansion),
1587                                      MACRO_ARG_TOKEN_NORMAL,
1588                                      arg, arg->first);
1589
1590           num_toks = tokens_buff_count (buff);
1591
1592           if (num_toks != 0)
1593             {
1594               /* So the current parameter token is pasted to the previous
1595                  token in the replacement list.  Let's look at what
1596                  we have as previous and current arguments.  */
1597
1598               /* This is the previous argument's token ...  */
1599               tmp_token_ptr = tokens_buff_last_token_ptr (buff);
1600
1601               if ((*tmp_token_ptr)->type == CPP_COMMA
1602                   && macro->variadic
1603                   && src->val.macro_arg.arg_no == macro->paramc)
1604                 {
1605                   /* ... which is a comma; and the current parameter
1606                      is the last parameter of a variadic function-like
1607                      macro.  If the argument to the current last
1608                      parameter is NULL, then swallow the comma,
1609                      otherwise drop the paste flag.  */
1610                   if (macro_arg_token_iter_get_token (&from) == NULL)
1611                     tokens_buff_remove_last_token (buff);
1612                   else
1613                     paste_flag = tmp_token_ptr;
1614                 }
1615               /* Remove the paste flag if the RHS is a placemarker.  */
1616               else if (arg_tokens_count == 0)
1617                 paste_flag = tmp_token_ptr;
1618             }
1619         }
1620       else
1621         {
1622           arg_tokens_count = arg->expanded_count;
1623           macro_arg_token_iter_init (&from,
1624                                      CPP_OPTION (pfile,
1625                                                  track_macro_expansion),
1626                                      MACRO_ARG_TOKEN_EXPANDED,
1627                                      arg, arg->expanded);
1628         }
1629
1630       /* Padding on the left of an argument (unless RHS of ##).  */
1631       if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
1632           && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
1633         {
1634           const cpp_token *t = padding_token (pfile, src);
1635           unsigned index = expanded_token_index (pfile, macro, src, i);
1636           /* Allocate a virtual location for the padding token and
1637              append the token and its location to BUFF and
1638              VIRT_LOCS.   */
1639           tokens_buff_add_token (buff, virt_locs, t,
1640                                  t->src_loc, t->src_loc,
1641                                  map, index);
1642         }
1643
1644       if (arg_tokens_count)
1645         {
1646           /* So now we've got the number of tokens that make up the
1647              argument that is going to replace the current parameter
1648              in the macro's replacement list.  */
1649           unsigned int j;
1650           for (j = 0; j < arg_tokens_count; ++j)
1651             {
1652               /* So if track_macro_exp is < 2, the user wants to
1653                  save extra memory while tracking macro expansion
1654                  locations.  So in that case here is what we do:
1655
1656                  Suppose we have #define SQARE(A) A * A
1657
1658                  And then we do SQARE(2+3)
1659
1660                  Then the tokens 2, +, 3, will have the same location,
1661                  saying they come from the expansion of the argument
1662                  A.
1663
1664               So that means we are going to ignore the COUNT tokens
1665               resulting from the expansion of the current macro
1666               arugment. In other words all the ARG_TOKENS_COUNT tokens
1667               resulting from the expansion of the macro argument will
1668               have the index I. Normally, each of those token should
1669               have index I+J.  */
1670               unsigned token_index = i;
1671               unsigned index;
1672               if (track_macro_exp > 1)
1673                 token_index += j;
1674
1675               index = expanded_token_index (pfile, macro, src, token_index);
1676               tokens_buff_add_token (buff, virt_locs,
1677                                      macro_arg_token_iter_get_token (&from),
1678                                      macro_arg_token_iter_get_location (&from),
1679                                      src->src_loc, map, index);
1680               macro_arg_token_iter_forward (&from);
1681             }
1682
1683           /* With a non-empty argument on the LHS of ##, the last
1684              token should be flagged PASTE_LEFT.  */
1685           if (src->flags & PASTE_LEFT)
1686             paste_flag =
1687               (const cpp_token **) tokens_buff_last_token_ptr (buff);
1688         }
1689       else if (CPP_PEDANTIC (pfile) && ! macro->syshdr
1690                && ! CPP_OPTION (pfile, c99)
1691                && ! cpp_in_system_header (pfile))
1692         {
1693           cpp_error (pfile, CPP_DL_PEDWARN,
1694                      "invoking macro %s argument %d: "
1695                      "empty macro arguments are undefined"
1696                      " in ISO C90 and ISO C++98",
1697                      NODE_NAME (node),
1698                      src->val.macro_arg.arg_no);
1699         }
1700
1701       /* Avoid paste on RHS (even case count == 0).  */
1702       if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
1703         {
1704           const cpp_token *t = &pfile->avoid_paste;
1705           tokens_buff_add_token (buff, virt_locs,
1706                                  t, t->src_loc, t->src_loc,
1707                                  NULL, 0);
1708         }
1709
1710       /* Add a new paste flag, or remove an unwanted one.  */
1711       if (paste_flag)
1712         {
1713           cpp_token *token = _cpp_temp_token (pfile);
1714           token->type = (*paste_flag)->type;
1715           token->val = (*paste_flag)->val;
1716           if (src->flags & PASTE_LEFT)
1717             token->flags = (*paste_flag)->flags | PASTE_LEFT;
1718           else
1719             token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1720           *paste_flag = token;
1721         }
1722
1723       i += arg_tokens_count;
1724     }
1725
1726   if (track_macro_exp)
1727     push_extended_tokens_context (pfile, node, buff, virt_locs, first,
1728                                   tokens_buff_count (buff));
1729   else
1730     push_ptoken_context (pfile, node, buff, first,
1731                          tokens_buff_count (buff));
1732
1733   num_macro_tokens_counter += tokens_buff_count (buff);
1734 }
1735
1736 /* Return a special padding token, with padding inherited from SOURCE.  */
1737 static const cpp_token *
1738 padding_token (cpp_reader *pfile, const cpp_token *source)
1739 {
1740   cpp_token *result = _cpp_temp_token (pfile);
1741
1742   result->type = CPP_PADDING;
1743
1744   /* Data in GCed data structures cannot be made const so far, so we
1745      need a cast here.  */
1746   result->val.source = (cpp_token *) source;
1747   result->flags = 0;
1748   return result;
1749 }
1750
1751 /* Get a new uninitialized context.  Create a new one if we cannot
1752    re-use an old one.  */
1753 static cpp_context *
1754 next_context (cpp_reader *pfile)
1755 {
1756   cpp_context *result = pfile->context->next;
1757
1758   if (result == 0)
1759     {
1760       result = XNEW (cpp_context);
1761       memset (result, 0, sizeof (cpp_context));
1762       result->prev = pfile->context;
1763       result->next = 0;
1764       pfile->context->next = result;
1765     }
1766
1767   pfile->context = result;
1768   return result;
1769 }
1770
1771 /* Push a list of pointers to tokens.  */
1772 static void
1773 push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
1774                      const cpp_token **first, unsigned int count)
1775 {
1776   cpp_context *context = next_context (pfile);
1777
1778   context->tokens_kind = TOKENS_KIND_INDIRECT;
1779   context->c.macro = macro;
1780   context->buff = buff;
1781   FIRST (context).ptoken = first;
1782   LAST (context).ptoken = first + count;
1783 }
1784
1785 /* Push a list of tokens.  */
1786 void
1787 _cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
1788                          const cpp_token *first, unsigned int count)
1789 {
1790    cpp_context *context = next_context (pfile);
1791  
1792    context->tokens_kind = TOKENS_KIND_DIRECT;
1793    context->c.macro = macro;
1794    context->buff = NULL;
1795   FIRST (context).token = first;
1796   LAST (context).token = first + count;
1797 }
1798
1799 /* Build a context containing a list of tokens as well as their
1800    virtual locations and push it.  TOKENS_BUFF is the buffer that
1801    contains the tokens pointed to by FIRST.  If TOKENS_BUFF is
1802    non-NULL, it means that the context owns it, meaning that
1803    _cpp_pop_context will free it as well as VIRT_LOCS_BUFF that
1804    contains the virtual locations.  */
1805 static void
1806 push_extended_tokens_context (cpp_reader *pfile,
1807                               cpp_hashnode *macro,
1808                               _cpp_buff *token_buff,
1809                               source_location *virt_locs,
1810                               const cpp_token **first,
1811                               unsigned int count)
1812 {
1813   cpp_context *context = next_context (pfile);
1814   macro_context *m;
1815
1816   context->tokens_kind = TOKENS_KIND_EXTENDED;
1817   context->buff = token_buff;
1818
1819   m = XNEW (macro_context);
1820   m->macro_node = macro;
1821   m->virt_locs = virt_locs;
1822   m->cur_virt_loc = virt_locs;
1823   context->c.mc = m;
1824   FIRST (context).ptoken = first;
1825   LAST (context).ptoken = first + count;
1826 }
1827
1828 /* Push a traditional macro's replacement text.  */
1829 void
1830 _cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
1831                         const uchar *start, size_t len)
1832 {
1833   cpp_context *context = next_context (pfile);
1834
1835   context->tokens_kind = TOKENS_KIND_DIRECT;
1836   context->c.macro = macro;
1837   context->buff = NULL;
1838   CUR (context) = start;
1839   RLIMIT (context) = start + len;
1840   macro->flags |= NODE_DISABLED;
1841 }
1842
1843 /* Creates a buffer that holds tokens a.k.a "token buffer", usually
1844    for the purpose of storing them on a cpp_context. If VIRT_LOCS is
1845    non-null (which means that -ftrack-macro-expansion is on),
1846    *VIRT_LOCS is set to a newly allocated buffer that is supposed to
1847    hold the virtual locations of the tokens resulting from macro
1848    expansion.  */
1849 static _cpp_buff*
1850 tokens_buff_new (cpp_reader *pfile, size_t len,
1851                  source_location **virt_locs)
1852 {
1853   size_t tokens_size = len * sizeof (cpp_token *);
1854   size_t locs_size = len * sizeof (source_location);
1855
1856   if (virt_locs != NULL)
1857     *virt_locs = XNEWVEC (source_location, locs_size);
1858   return _cpp_get_buff (pfile, tokens_size);
1859 }
1860
1861 /* Returns the number of tokens contained in a token buffer.  The
1862    buffer holds a set of cpp_token*.  */
1863 static size_t
1864 tokens_buff_count (_cpp_buff *buff)
1865 {
1866   return (BUFF_FRONT (buff) - buff->base) / sizeof (cpp_token *);
1867 }
1868
1869 /* Return a pointer to the last token contained in the token buffer
1870    BUFF.  */
1871 static const cpp_token **
1872 tokens_buff_last_token_ptr (_cpp_buff *buff)
1873 {
1874   return &((const cpp_token **) BUFF_FRONT (buff))[-1];
1875 }
1876
1877 /* Remove the last token contained in the token buffer TOKENS_BUFF.
1878    If VIRT_LOCS_BUFF is non-NULL,  it should point at the buffer
1879    containing the virtual locations of the tokens in TOKENS_BUFF; in
1880    which case the function updates that buffer as well.   */
1881 static inline void
1882 tokens_buff_remove_last_token (_cpp_buff *tokens_buff)
1883
1884 {
1885   if (BUFF_FRONT (tokens_buff) > tokens_buff->base)
1886     BUFF_FRONT (tokens_buff) =
1887       (unsigned char *) &((cpp_token **) BUFF_FRONT (tokens_buff))[-1];
1888 }
1889
1890 /* Insert a token into the token buffer at the position pointed to by
1891    DEST.  Note that the buffer is not enlarged so the previous token
1892    that was at *DEST is overwritten.  VIRT_LOC_DEST, if non-null,
1893    means -ftrack-macro-expansion is effect; it then points to where to
1894    insert the virtual location of TOKEN.  TOKEN is the token to
1895    insert.  VIRT_LOC is the virtual location of the token, i.e, the
1896    location possibly encoding its locus accross macro expansion.  If
1897    TOKEN is an argument of a function-like macro (inside a macro
1898    replacement list), PARM_DEF_LOC is the spelling location of the
1899    macro parameter that TOKEN is replacing, in the replacement list of
1900    the macro.  If TOKEN is not an argument of a function-like macro or
1901    if it doesn't come from a macro expansion, then VIRT_LOC can just
1902    be set to the same value as PARM_DEF_LOC.  If MAP is non null, it
1903    means TOKEN comes from a macro expansion and MAP is the macro map
1904    associated to the macro.  MACRO_TOKEN_INDEX points to the index of
1905    the token in the macro map; it is not considered if MAP is NULL.
1906
1907    Upon successful completion this function returns the a pointer to
1908    the position of the token coming right after the insertion
1909    point.  */
1910 static inline const cpp_token **
1911 tokens_buff_put_token_to (const cpp_token **dest,
1912                           source_location *virt_loc_dest,
1913                           const cpp_token *token,
1914                           source_location virt_loc,
1915                           source_location parm_def_loc,                   
1916                           const struct line_map *map,
1917                           unsigned int macro_token_index)
1918 {
1919   source_location macro_loc = virt_loc;
1920   const cpp_token **result;
1921
1922   if (virt_loc_dest)
1923     {
1924       /* -ftrack-macro-expansion is on.  */
1925       if (map)
1926         macro_loc = linemap_add_macro_token (map, macro_token_index,
1927                                              virt_loc, parm_def_loc);
1928       *virt_loc_dest = macro_loc;
1929     }
1930   *dest = token;
1931   result = &dest[1];
1932
1933   return result;
1934 }
1935
1936 /* Adds a token at the end of the tokens contained in BUFFER.  Note
1937    that this function doesn't enlarge BUFFER when the number of tokens
1938    reaches BUFFER's size; it aborts in that situation.
1939
1940    TOKEN is the token to append. VIRT_LOC is the virtual location of
1941    the token, i.e, the location possibly encoding its locus accross
1942    macro expansion. If TOKEN is an argument of a function-like macro
1943    (inside a macro replacement list), PARM_DEF_LOC is the location of
1944    the macro parameter that TOKEN is replacing.  If TOKEN doesn't come
1945    from a macro expansion, then VIRT_LOC can just be set to the same
1946    value as PARM_DEF_LOC.  If MAP is non null, it means TOKEN comes
1947    from a macro expansion and MAP is the macro map associated to the
1948    macro.  MACRO_TOKEN_INDEX points to the index of the token in the
1949    macro map; It is not considered if MAP is NULL.  If VIRT_LOCS is
1950    non-null, it means -ftrack-macro-expansion is on; in which case
1951    this function adds the virtual location DEF_LOC to the VIRT_LOCS
1952    array, at the same index as the one of TOKEN in BUFFER.  Upon
1953    successful completion this function returns the a pointer to the
1954    position of the token coming right after the insertion point.  */
1955 static const cpp_token **
1956 tokens_buff_add_token (_cpp_buff *buffer,
1957                        source_location *virt_locs,
1958                        const cpp_token *token,
1959                        source_location virt_loc,
1960                        source_location parm_def_loc,
1961                        const struct line_map *map,
1962                        unsigned int macro_token_index)
1963 {
1964   const cpp_token **result;
1965   source_location *virt_loc_dest = NULL;
1966   unsigned token_index = 
1967     (BUFF_FRONT (buffer) - buffer->base) / sizeof (cpp_token *);
1968
1969   /* Abort if we pass the end the buffer.  */
1970   if (BUFF_FRONT (buffer) > BUFF_LIMIT (buffer))
1971     abort ();
1972
1973   if (virt_locs != NULL)
1974     virt_loc_dest = &virt_locs[token_index];
1975
1976   result =
1977     tokens_buff_put_token_to ((const cpp_token **) BUFF_FRONT (buffer),
1978                               virt_loc_dest, token, virt_loc, parm_def_loc,
1979                               map, macro_token_index);
1980
1981   BUFF_FRONT (buffer) = (unsigned char *) result;
1982   return result;
1983 }
1984
1985 /* Allocate space for the function-like macro argument ARG to store
1986    the tokens resulting from the macro-expansion of the tokens that
1987    make up ARG itself. That space is allocated in ARG->expanded and
1988    needs to be freed using free.  */
1989 static void
1990 alloc_expanded_arg_mem (cpp_reader *pfile, macro_arg *arg, size_t capacity)
1991 {
1992 #ifdef ENABLE_CHECKING
1993   if (arg->expanded != NULL
1994       || arg->expanded_virt_locs != NULL)
1995     abort ();
1996 #endif
1997   arg->expanded = XNEWVEC (const cpp_token *, capacity);
1998   if (CPP_OPTION (pfile, track_macro_expansion))
1999     arg->expanded_virt_locs = XNEWVEC (source_location, capacity);
2000
2001 }
2002
2003 /* If necessary, enlarge ARG->expanded to so that it can contain SIZE
2004    tokens.  */
2005 static void
2006 ensure_expanded_arg_room (cpp_reader *pfile, macro_arg *arg,
2007                           size_t size, size_t *expanded_capacity)
2008 {
2009   if (size <= *expanded_capacity)
2010     return;
2011
2012   size *= 2;
2013
2014   arg->expanded =
2015     XRESIZEVEC (const cpp_token *, arg->expanded, size);
2016   *expanded_capacity = size;
2017
2018   if (CPP_OPTION (pfile, track_macro_expansion))
2019     {
2020       if (arg->expanded_virt_locs == NULL)
2021         arg->expanded_virt_locs = XNEWVEC (source_location, size);
2022       else
2023         arg->expanded_virt_locs = XRESIZEVEC (source_location,
2024                                               arg->expanded_virt_locs,
2025                                               size);
2026     }
2027 }
2028
2029 /* Expand an argument ARG before replacing parameters in a
2030    function-like macro.  This works by pushing a context with the
2031    argument's tokens, and then expanding that into a temporary buffer
2032    as if it were a normal part of the token stream.  collect_args()
2033    has terminated the argument's tokens with a CPP_EOF so that we know
2034    when we have fully expanded the argument.  */
2035 static void
2036 expand_arg (cpp_reader *pfile, macro_arg *arg)
2037 {
2038   size_t capacity;
2039   bool saved_warn_trad;
2040   bool track_macro_exp_p = CPP_OPTION (pfile, track_macro_expansion);
2041
2042   if (arg->count == 0
2043       || arg->expanded != NULL)
2044     return;
2045
2046   /* Don't warn about funlike macros when pre-expanding.  */
2047   saved_warn_trad = CPP_WTRADITIONAL (pfile);
2048   CPP_WTRADITIONAL (pfile) = 0;
2049
2050   /* Loop, reading in the tokens of the argument.  */
2051   capacity = 256;
2052   alloc_expanded_arg_mem (pfile, arg, capacity);
2053
2054   if (track_macro_exp_p)
2055     push_extended_tokens_context (pfile, NULL, NULL,
2056                                   arg->virt_locs,
2057                                   arg->first,
2058                                   arg->count + 1);
2059   else
2060     push_ptoken_context (pfile, NULL, NULL,
2061                          arg->first, arg->count + 1);
2062
2063   for (;;)
2064     {
2065       const cpp_token *token;
2066       source_location location;
2067
2068       ensure_expanded_arg_room (pfile, arg, arg->expanded_count + 1,
2069                                 &capacity);
2070
2071       token = cpp_get_token_1 (pfile, &location);
2072
2073       if (token->type == CPP_EOF)
2074         break;
2075
2076       set_arg_token (arg, token, location,
2077                      arg->expanded_count, MACRO_ARG_TOKEN_EXPANDED,
2078                      CPP_OPTION (pfile, track_macro_expansion));
2079       arg->expanded_count++;
2080     }
2081
2082   _cpp_pop_context (pfile);
2083
2084   CPP_WTRADITIONAL (pfile) = saved_warn_trad;
2085 }
2086
2087 /* Pop the current context off the stack, re-enabling the macro if the
2088    context represented a macro's replacement list.  Initially the
2089    context structure was not freed so that we can re-use it later, but
2090    now we do free it to reduce peak memory consumption.  */
2091 void
2092 _cpp_pop_context (cpp_reader *pfile)
2093 {
2094   cpp_context *context = pfile->context;
2095
2096   if (context->c.macro)
2097     {
2098       cpp_hashnode *macro;
2099       if (context->tokens_kind == TOKENS_KIND_EXTENDED)
2100         {
2101           macro_context *mc = context->c.mc;
2102           macro = mc->macro_node;
2103           /* If context->buff is set, it means the life time of tokens
2104              is bound to the life time of this context; so we must
2105              free the tokens; that means we must free the virtual
2106              locations of these tokens too.  */
2107           if (context->buff && mc->virt_locs)
2108             {
2109               free (mc->virt_locs);
2110               mc->virt_locs = NULL;
2111             }
2112           free (mc);
2113           context->c.mc = NULL;
2114         }
2115       else
2116         macro = context->c.macro;
2117
2118       /* Beware that MACRO can be NULL in cases like when we are
2119          called from expand_arg.  In those cases, a dummy context with
2120          tokens is pushed just for the purpose of walking them using
2121          cpp_get_token_1.  In that case, no 'macro' field is set into
2122          the dummy context.  */
2123       if (macro != NULL)
2124         macro->flags &= ~NODE_DISABLED;
2125     }
2126
2127   if (context->buff)
2128     {
2129       /* Decrease memory peak consumption by freeing the memory used
2130          by the context.  */
2131       _cpp_free_buff (context->buff);
2132     }
2133
2134   pfile->context = context->prev;
2135   /* decrease peak memory consumption by feeing the context.  */
2136   pfile->context->next = NULL;
2137   free (context);
2138 }
2139
2140 /* Return TRUE if we reached the end of the set of tokens stored in
2141    CONTEXT, FALSE otherwise.  */
2142 static inline bool
2143 reached_end_of_context (cpp_context *context)
2144 {
2145   if (context->tokens_kind == TOKENS_KIND_DIRECT)
2146       return FIRST (context).token == LAST (context).token;
2147   else if (context->tokens_kind == TOKENS_KIND_INDIRECT
2148            || context->tokens_kind == TOKENS_KIND_EXTENDED)
2149     return FIRST (context).ptoken == LAST (context).ptoken;
2150   else
2151     abort ();
2152 }
2153
2154 /* Consume the next token contained in the current context of PFILE,
2155    and return it in *TOKEN. It's "full location" is returned in
2156    *LOCATION. If -ftrack-macro-location is in effeect, fFull location"
2157    means the location encoding the locus of the token accross macro
2158    expansion; otherwise it's just is the "normal" location of the
2159    token which (*TOKEN)->src_loc.  */
2160 static inline void
2161 consume_next_token_from_context (cpp_reader *pfile,
2162                                  const cpp_token ** token,
2163                                  source_location *location)
2164 {
2165   cpp_context *c = pfile->context;
2166
2167   if ((c)->tokens_kind == TOKENS_KIND_DIRECT)
2168     {
2169       *token = FIRST (c).token;
2170       *location = (*token)->src_loc;
2171       FIRST (c).token++;
2172     }
2173   else if ((c)->tokens_kind == TOKENS_KIND_INDIRECT)            
2174     {
2175       *token = *FIRST (c).ptoken;
2176       *location = (*token)->src_loc;
2177       FIRST (c).ptoken++;
2178     }
2179   else if ((c)->tokens_kind == TOKENS_KIND_EXTENDED)
2180     {
2181       macro_context *m = c->c.mc;
2182       *token = *FIRST (c).ptoken;
2183       if (m->virt_locs)
2184         {
2185           *location = *m->cur_virt_loc;
2186           m->cur_virt_loc++;
2187         }
2188       else
2189         *location = (*token)->src_loc;
2190       FIRST (c).ptoken++;
2191     }
2192   else
2193     abort ();
2194 }
2195
2196 /* In the traditional mode of the preprocessor, if we are currently in
2197    a directive, the location of a token must be the location of the
2198    start of the directive line.  This function returns the proper
2199    location if we are in the traditional mode, and just returns
2200    LOCATION otherwise.  */
2201
2202 static inline source_location
2203 maybe_adjust_loc_for_trad_cpp (cpp_reader *pfile, source_location location)
2204 {
2205   if (CPP_OPTION (pfile, traditional))
2206     {
2207       if (pfile->state.in_directive)
2208         return pfile->directive_line;
2209     }
2210   return location;
2211 }
2212
2213 /* Routine to get a token as well as its location.
2214
2215    Macro expansions and directives are transparently handled,
2216    including entering included files.  Thus tokens are post-macro
2217    expansion, and after any intervening directives.  External callers
2218    see CPP_EOF only at EOF.  Internal callers also see it when meeting
2219    a directive inside a macro call, when at the end of a directive and
2220    state.in_directive is still 1, and at the end of argument
2221    pre-expansion.
2222
2223    LOC is an out parameter; *LOC is set to the location "as expected
2224    by the user".  Please read the comment of
2225    cpp_get_token_with_location to learn more about the meaning of this
2226    location.  */
2227 static const cpp_token*
2228 cpp_get_token_1 (cpp_reader *pfile, source_location *location)
2229 {
2230   const cpp_token *result;
2231   bool can_set = pfile->set_invocation_location;
2232   /* This token is a virtual token that either encodes a location
2233      related to macro expansion or a spelling location.  */
2234   source_location virt_loc = 0;
2235   pfile->set_invocation_location = false;
2236
2237   for (;;)
2238     {
2239       cpp_hashnode *node;
2240       cpp_context *context = pfile->context;
2241
2242       /* Context->prev == 0 <=> base context.  */
2243       if (!context->prev)
2244         {
2245           result = _cpp_lex_token (pfile);
2246           virt_loc = result->src_loc;
2247         }
2248       else if (!reached_end_of_context (context))
2249         {
2250           consume_next_token_from_context (pfile, &result,
2251                                            &virt_loc);
2252           if (result->flags & PASTE_LEFT)
2253             {
2254               paste_all_tokens (pfile, result);
2255               if (pfile->state.in_directive)
2256                 continue;
2257               result = padding_token (pfile, result);
2258               goto out;
2259             }
2260         }
2261       else
2262         {
2263           if (pfile->context->c.macro)
2264             ++num_expanded_macros_counter;
2265           _cpp_pop_context (pfile);
2266           if (pfile->state.in_directive)
2267             continue;
2268           result = &pfile->avoid_paste;
2269           goto out;
2270         }
2271
2272       if (pfile->state.in_directive && result->type == CPP_COMMENT)
2273         continue;
2274
2275       if (result->type != CPP_NAME)
2276         break;
2277
2278       node = result->val.node.node;
2279
2280       if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
2281         break;
2282
2283       if (!(node->flags & NODE_DISABLED))
2284         {
2285           int ret = 0;
2286           /* If not in a macro context, and we're going to start an
2287              expansion, record the location.  */
2288           if (can_set && !context->c.macro)
2289             pfile->invocation_location = result->src_loc;
2290           if (pfile->state.prevent_expansion)
2291             break;
2292
2293           /* Conditional macros require that a predicate be evaluated
2294              first.  */
2295           if ((node->flags & NODE_CONDITIONAL) != 0)
2296             {
2297               if (pfile->cb.macro_to_expand)
2298                 {
2299                   bool whitespace_after;
2300                   const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
2301
2302                   whitespace_after = (peek_tok->type == CPP_PADDING
2303                                       || (peek_tok->flags & PREV_WHITE));
2304                   node = pfile->cb.macro_to_expand (pfile, result);
2305                   if (node)
2306                     ret = enter_macro_context (pfile, node, result,
2307                                                virt_loc);
2308                   else if (whitespace_after)
2309                     {
2310                       /* If macro_to_expand hook returned NULL and it
2311                          ate some tokens, see if we don't need to add
2312                          a padding token in between this and the
2313                          next token.  */
2314                       peek_tok = cpp_peek_token (pfile, 0);
2315                       if (peek_tok->type != CPP_PADDING
2316                           && (peek_tok->flags & PREV_WHITE) == 0)
2317                         _cpp_push_token_context (pfile, NULL,
2318                                                  padding_token (pfile,
2319                                                                 peek_tok), 1);
2320                     }
2321                 }
2322             }
2323           else
2324             ret = enter_macro_context (pfile, node, result, 
2325                                        virt_loc);
2326           if (ret)
2327             {
2328               if (pfile->state.in_directive || ret == 2)
2329                 continue;
2330               result = padding_token (pfile, result);
2331               goto out;
2332             }
2333         }
2334       else
2335         {
2336           /* Flag this token as always unexpandable.  FIXME: move this
2337              to collect_args()?.  */
2338           cpp_token *t = _cpp_temp_token (pfile);
2339           t->type = result->type;
2340           t->flags = result->flags | NO_EXPAND;
2341           t->val = result->val;
2342           result = t;
2343         }
2344
2345       break;
2346     }
2347
2348  out:
2349   if (location != NULL)
2350     {
2351       if (virt_loc == 0)
2352         virt_loc = result->src_loc;
2353       *location = virt_loc;
2354
2355       if (!CPP_OPTION (pfile, track_macro_expansion)
2356           && can_set
2357           && pfile->context->c.macro != NULL)
2358         /* We are in a macro expansion context, are not tracking
2359            virtual location, but were asked to report the location
2360            of the expansion point of the macro being expanded.  */
2361         *location = pfile->invocation_location;
2362
2363       *location = maybe_adjust_loc_for_trad_cpp (pfile, *location);
2364     }
2365   return result;
2366 }
2367
2368 /* External routine to get a token.  Also used nearly everywhere
2369    internally, except for places where we know we can safely call
2370    _cpp_lex_token directly, such as lexing a directive name.
2371
2372    Macro expansions and directives are transparently handled,
2373    including entering included files.  Thus tokens are post-macro
2374    expansion, and after any intervening directives.  External callers
2375    see CPP_EOF only at EOF.  Internal callers also see it when meeting
2376    a directive inside a macro call, when at the end of a directive and
2377    state.in_directive is still 1, and at the end of argument
2378    pre-expansion.  */
2379 const cpp_token *
2380 cpp_get_token (cpp_reader *pfile)
2381 {
2382   return cpp_get_token_1 (pfile, NULL);
2383 }
2384
2385 /* Like cpp_get_token, but also returns a virtual token location
2386    separate from the spelling location carried by the returned token.
2387
2388    LOC is an out parameter; *LOC is set to the location "as expected
2389    by the user".  This matters when a token results from macro
2390    expansion; in that case the token's spelling location indicates the
2391    locus of the token in the definition of the macro but *LOC
2392    virtually encodes all the other meaningful locuses associated to
2393    the token.
2394
2395    What? virtual location? Yes, virtual location.
2396
2397    If the token results from macro expansion and if macro expansion
2398    location tracking is enabled its virtual location encodes (at the
2399    same time):
2400
2401    - the spelling location of the token
2402
2403    - the locus of the macro expansion point
2404
2405    - the locus of the point where the token got instantiated as part
2406      of the macro expansion process.
2407
2408    You have to use the linemap API to get the locus you are interested
2409    in from a given virtual location.
2410
2411    Note however that virtual locations are not necessarily ordered for
2412    relations '<' and '>'.  One must use the function
2413    linemap_location_before_p instead of using the relational operator
2414    '<'.
2415
2416    If macro expansion tracking is off and if the token results from
2417    macro expansion the virtual location is the expansion point of the
2418    macro that got expanded.
2419
2420    When the token doesn't result from macro expansion, the virtual
2421    location is just the same thing as its spelling location.  */
2422
2423 const cpp_token *
2424 cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
2425 {
2426   const cpp_token *result;
2427
2428   pfile->set_invocation_location = true;
2429   result = cpp_get_token_1 (pfile, loc);
2430   return result;
2431 }
2432
2433 /* Returns true if we're expanding an object-like macro that was
2434    defined in a system header.  Just checks the macro at the top of
2435    the stack.  Used for diagnostic suppression.  */
2436 int
2437 cpp_sys_macro_p (cpp_reader *pfile)
2438 {
2439   cpp_hashnode *node = pfile->context->c.macro;
2440
2441   return node && node->value.macro && node->value.macro->syshdr;
2442 }
2443
2444 /* Read each token in, until end of the current file.  Directives are
2445    transparently processed.  */
2446 void
2447 cpp_scan_nooutput (cpp_reader *pfile)
2448 {
2449   /* Request a CPP_EOF token at the end of this file, rather than
2450      transparently continuing with the including file.  */
2451   pfile->buffer->return_at_eof = true;
2452
2453   pfile->state.discarding_output++;
2454   pfile->state.prevent_expansion++;
2455
2456   if (CPP_OPTION (pfile, traditional))
2457     while (_cpp_read_logical_line_trad (pfile))
2458       ;
2459   else
2460     while (cpp_get_token (pfile)->type != CPP_EOF)
2461       ;
2462
2463   pfile->state.discarding_output--;
2464   pfile->state.prevent_expansion--;
2465 }
2466
2467 /* Step back one or more tokens obtained from the lexer.  */
2468 void
2469 _cpp_backup_tokens_direct (cpp_reader *pfile, unsigned int count)
2470 {
2471   pfile->lookaheads += count;
2472   while (count--)
2473     {
2474       pfile->cur_token--;
2475       if (pfile->cur_token == pfile->cur_run->base
2476           /* Possible with -fpreprocessed and no leading #line.  */
2477           && pfile->cur_run->prev != NULL)
2478         {
2479           pfile->cur_run = pfile->cur_run->prev;
2480           pfile->cur_token = pfile->cur_run->limit;
2481         }
2482     }
2483 }
2484
2485 /* Step back one (or more) tokens.  Can only step back more than 1 if
2486    they are from the lexer, and not from macro expansion.  */
2487 void
2488 _cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
2489 {
2490   if (pfile->context->prev == NULL)
2491     _cpp_backup_tokens_direct (pfile, count);
2492   else
2493     {
2494       if (count != 1)
2495         abort ();
2496       if (pfile->context->tokens_kind == TOKENS_KIND_DIRECT)
2497         FIRST (pfile->context).token--;
2498       else if (pfile->context->tokens_kind == TOKENS_KIND_INDIRECT)
2499         FIRST (pfile->context).ptoken--;
2500       else if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2501         {
2502           FIRST (pfile->context).ptoken--;
2503           if (pfile->context->c.macro)
2504             {
2505               macro_context *m = pfile->context->c.mc;
2506               m->cur_virt_loc--;
2507 #ifdef ENABLE_CHECKING
2508               if (m->cur_virt_loc < m->virt_locs)
2509                 abort ();
2510 #endif
2511             }
2512           else
2513             abort ();
2514         }
2515       else
2516         abort ();
2517     }
2518 }
2519
2520 /* #define directive parsing and handling.  */
2521
2522 /* Returns nonzero if a macro redefinition warning is required.  */
2523 static bool
2524 warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node,
2525                       const cpp_macro *macro2)
2526 {
2527   const cpp_macro *macro1;
2528   unsigned int i;
2529
2530   /* Some redefinitions need to be warned about regardless.  */
2531   if (node->flags & NODE_WARN)
2532     return true;
2533
2534   /* Suppress warnings for builtins that lack the NODE_WARN flag.  */
2535   if (node->flags & NODE_BUILTIN)
2536     {
2537       if (!pfile->cb.user_builtin_macro
2538           || !pfile->cb.user_builtin_macro (pfile, node))
2539         return false;
2540     }
2541
2542   /* Redefinitions of conditional (context-sensitive) macros, on
2543      the other hand, must be allowed silently.  */
2544   if (node->flags & NODE_CONDITIONAL)
2545     return false;
2546
2547   /* Redefinition of a macro is allowed if and only if the old and new
2548      definitions are the same.  (6.10.3 paragraph 2).  */
2549   macro1 = node->value.macro;
2550
2551   /* Don't check count here as it can be different in valid
2552      traditional redefinitions with just whitespace differences.  */
2553   if (macro1->paramc != macro2->paramc
2554       || macro1->fun_like != macro2->fun_like
2555       || macro1->variadic != macro2->variadic)
2556     return true;
2557
2558   /* Check parameter spellings.  */
2559   for (i = 0; i < macro1->paramc; i++)
2560     if (macro1->params[i] != macro2->params[i])
2561       return true;
2562
2563   /* Check the replacement text or tokens.  */
2564   if (CPP_OPTION (pfile, traditional))
2565     return _cpp_expansions_different_trad (macro1, macro2);
2566
2567   if (macro1->count != macro2->count)
2568     return true;
2569
2570   for (i = 0; i < macro1->count; i++)
2571     if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
2572       return true;
2573
2574   return false;
2575 }
2576
2577 /* Free the definition of hashnode H.  */
2578 void
2579 _cpp_free_definition (cpp_hashnode *h)
2580 {
2581   /* Macros and assertions no longer have anything to free.  */
2582   h->type = NT_VOID;
2583   /* Clear builtin flag in case of redefinition.  */
2584   h->flags &= ~(NODE_BUILTIN | NODE_DISABLED | NODE_USED);
2585 }
2586
2587 /* Save parameter NODE to the parameter list of macro MACRO.  Returns
2588    zero on success, nonzero if the parameter is a duplicate.  */
2589 bool
2590 _cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
2591 {
2592   unsigned int len;
2593   /* Constraint 6.10.3.6 - duplicate parameter names.  */
2594   if (node->flags & NODE_MACRO_ARG)
2595     {
2596       cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
2597                  NODE_NAME (node));
2598       return true;
2599     }
2600
2601   if (BUFF_ROOM (pfile->a_buff)
2602       < (macro->paramc + 1) * sizeof (cpp_hashnode *))
2603     _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
2604
2605   ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
2606   node->flags |= NODE_MACRO_ARG;
2607   len = macro->paramc * sizeof (union _cpp_hashnode_value);
2608   if (len > pfile->macro_buffer_len)
2609     {
2610       pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
2611                                         len);
2612       pfile->macro_buffer_len = len;
2613     }
2614   ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
2615     = node->value;
2616   
2617   node->value.arg_index  = macro->paramc;
2618   return false;
2619 }
2620
2621 /* Check the syntax of the parameters in a MACRO definition.  Returns
2622    false if an error occurs.  */
2623 static bool
2624 parse_params (cpp_reader *pfile, cpp_macro *macro)
2625 {
2626   unsigned int prev_ident = 0;
2627
2628   for (;;)
2629     {
2630       const cpp_token *token = _cpp_lex_token (pfile);
2631
2632       switch (token->type)
2633         {
2634         default:
2635           /* Allow/ignore comments in parameter lists if we are
2636              preserving comments in macro expansions.  */
2637           if (token->type == CPP_COMMENT
2638               && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
2639             continue;
2640
2641           cpp_error (pfile, CPP_DL_ERROR,
2642                      "\"%s\" may not appear in macro parameter list",
2643                      cpp_token_as_text (pfile, token));
2644           return false;
2645
2646         case CPP_NAME:
2647           if (prev_ident)
2648             {
2649               cpp_error (pfile, CPP_DL_ERROR,
2650                          "macro parameters must be comma-separated");
2651               return false;
2652             }
2653           prev_ident = 1;
2654
2655           if (_cpp_save_parameter (pfile, macro, token->val.node.node))
2656             return false;
2657           continue;
2658
2659         case CPP_CLOSE_PAREN:
2660           if (prev_ident || macro->paramc == 0)
2661             return true;
2662
2663           /* Fall through to pick up the error.  */
2664         case CPP_COMMA:
2665           if (!prev_ident)
2666             {
2667               cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
2668               return false;
2669             }
2670           prev_ident = 0;
2671           continue;
2672
2673         case CPP_ELLIPSIS:
2674           macro->variadic = 1;
2675           if (!prev_ident)
2676             {
2677               _cpp_save_parameter (pfile, macro,
2678                                    pfile->spec_nodes.n__VA_ARGS__);
2679               pfile->state.va_args_ok = 1;
2680               if (! CPP_OPTION (pfile, c99)
2681                   && CPP_OPTION (pfile, cpp_pedantic)
2682                   && CPP_OPTION (pfile, warn_variadic_macros))
2683                 cpp_pedwarning
2684                   (pfile, CPP_W_VARIADIC_MACROS,
2685                    "anonymous variadic macros were introduced in C99");
2686             }
2687           else if (CPP_OPTION (pfile, cpp_pedantic)
2688                    && CPP_OPTION (pfile, warn_variadic_macros))
2689             cpp_pedwarning (pfile, CPP_W_VARIADIC_MACROS,
2690                             "ISO C does not permit named variadic macros");
2691
2692           /* We're at the end, and just expect a closing parenthesis.  */
2693           token = _cpp_lex_token (pfile);
2694           if (token->type == CPP_CLOSE_PAREN)
2695             return true;
2696           /* Fall through.  */
2697
2698         case CPP_EOF:
2699           cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
2700           return false;
2701         }
2702     }
2703 }
2704
2705 /* Allocate room for a token from a macro's replacement list.  */
2706 static cpp_token *
2707 alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
2708 {
2709   if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
2710     _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
2711
2712   return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
2713 }
2714
2715 /* Lex a token from the expansion of MACRO, but mark parameters as we
2716    find them and warn of traditional stringification.  */
2717 static cpp_token *
2718 lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
2719 {
2720   cpp_token *token, *saved_cur_token;
2721
2722   saved_cur_token = pfile->cur_token;
2723   pfile->cur_token = alloc_expansion_token (pfile, macro);
2724   token = _cpp_lex_direct (pfile);
2725   pfile->cur_token = saved_cur_token;
2726
2727   /* Is this a parameter?  */
2728   if (token->type == CPP_NAME
2729       && (token->val.node.node->flags & NODE_MACRO_ARG) != 0)
2730     {
2731       token->type = CPP_MACRO_ARG;
2732       token->val.macro_arg.arg_no = token->val.node.node->value.arg_index;
2733     }
2734   else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
2735            && (token->type == CPP_STRING || token->type == CPP_CHAR))
2736     check_trad_stringification (pfile, macro, &token->val.str);
2737
2738   return token;
2739 }
2740
2741 static bool
2742 create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
2743 {
2744   cpp_token *token;
2745   const cpp_token *ctoken;
2746   bool following_paste_op = false;
2747   const char *paste_op_error_msg =
2748     N_("'##' cannot appear at either end of a macro expansion");
2749   unsigned int num_extra_tokens = 0;
2750
2751   /* Get the first token of the expansion (or the '(' of a
2752      function-like macro).  */
2753   ctoken = _cpp_lex_token (pfile);
2754
2755   if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
2756     {
2757       bool ok = parse_params (pfile, macro);
2758       macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
2759       if (!ok)
2760         return false;
2761
2762       /* Success.  Commit or allocate the parameter array.  */
2763       if (pfile->hash_table->alloc_subobject)
2764         {
2765           cpp_hashnode **params =
2766             (cpp_hashnode **) pfile->hash_table->alloc_subobject
2767             (sizeof (cpp_hashnode *) * macro->paramc);
2768           memcpy (params, macro->params,
2769                   sizeof (cpp_hashnode *) * macro->paramc);
2770           macro->params = params;
2771         }
2772       else
2773         BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
2774       macro->fun_like = 1;
2775     }
2776   else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
2777     {
2778       /* While ISO C99 requires whitespace before replacement text
2779          in a macro definition, ISO C90 with TC1 allows there characters
2780          from the basic source character set.  */
2781       if (CPP_OPTION (pfile, c99))
2782         cpp_error (pfile, CPP_DL_PEDWARN,
2783                    "ISO C99 requires whitespace after the macro name");
2784       else
2785         {
2786           int warntype = CPP_DL_WARNING;
2787           switch (ctoken->type)
2788             {
2789             case CPP_ATSIGN:
2790             case CPP_AT_NAME:
2791             case CPP_OBJC_STRING:
2792               /* '@' is not in basic character set.  */
2793               warntype = CPP_DL_PEDWARN;
2794               break;
2795             case CPP_OTHER:
2796               /* Basic character set sans letters, digits and _.  */
2797               if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
2798                           ctoken->val.str.text[0]) == NULL)
2799                 warntype = CPP_DL_PEDWARN;
2800               break;
2801             default:
2802               /* All other tokens start with a character from basic
2803                  character set.  */
2804               break;
2805             }
2806           cpp_error (pfile, warntype,
2807                      "missing whitespace after the macro name");
2808         }
2809     }
2810
2811   if (macro->fun_like)
2812     token = lex_expansion_token (pfile, macro);
2813   else
2814     {
2815       token = alloc_expansion_token (pfile, macro);
2816       *token = *ctoken;
2817     }
2818
2819   for (;;)
2820     {
2821       /* Check the stringifying # constraint 6.10.3.2.1 of
2822          function-like macros when lexing the subsequent token.  */
2823       if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
2824         {
2825           if (token->type == CPP_MACRO_ARG)
2826             {
2827               if (token->flags & PREV_WHITE)
2828                 token->flags |= SP_PREV_WHITE;
2829               if (token[-1].flags & DIGRAPH)
2830                 token->flags |= SP_DIGRAPH;
2831               token->flags &= ~PREV_WHITE;
2832               token->flags |= STRINGIFY_ARG;
2833               token->flags |= token[-1].flags & PREV_WHITE;
2834               token[-1] = token[0];
2835               macro->count--;
2836             }
2837           /* Let assembler get away with murder.  */
2838           else if (CPP_OPTION (pfile, lang) != CLK_ASM)
2839             {
2840               cpp_error (pfile, CPP_DL_ERROR,
2841                          "'#' is not followed by a macro parameter");
2842               return false;
2843             }
2844         }
2845
2846       if (token->type == CPP_EOF)
2847         {
2848           /* Paste operator constraint 6.10.3.3.1:
2849              Token-paste ##, can appear in both object-like and
2850              function-like macros, but not at the end.  */
2851           if (following_paste_op)
2852             {
2853               cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
2854               return false;
2855             }
2856           break;
2857         }
2858
2859       /* Paste operator constraint 6.10.3.3.1.  */
2860       if (token->type == CPP_PASTE)
2861         {
2862           /* Token-paste ##, can appear in both object-like and
2863              function-like macros, but not at the beginning.  */
2864           if (macro->count == 1)
2865             {
2866               cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
2867               return false;
2868             }
2869
2870           if (token[-1].flags & PASTE_LEFT)
2871             {
2872               macro->extra_tokens = 1;
2873               num_extra_tokens++;
2874               token->val.token_no = macro->count - 1;
2875             }
2876           else
2877             {
2878               --macro->count;
2879               token[-1].flags |= PASTE_LEFT;
2880               if (token->flags & DIGRAPH)
2881                 token[-1].flags |= SP_DIGRAPH;
2882               if (token->flags & PREV_WHITE)
2883                 token[-1].flags |= SP_PREV_WHITE;
2884             }
2885         }
2886
2887       following_paste_op = (token->type == CPP_PASTE);
2888       token = lex_expansion_token (pfile, macro);
2889     }
2890
2891   macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
2892   macro->traditional = 0;
2893
2894   /* Don't count the CPP_EOF.  */
2895   macro->count--;
2896
2897   /* Clear whitespace on first token for warn_of_redefinition().  */
2898   if (macro->count)
2899     macro->exp.tokens[0].flags &= ~PREV_WHITE;
2900
2901   /* Commit or allocate the memory.  */
2902   if (pfile->hash_table->alloc_subobject)
2903     {
2904       cpp_token *tokns =
2905         (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
2906                                                           * macro->count);
2907       if (num_extra_tokens)
2908         {
2909           /* Place second and subsequent ## or %:%: tokens in
2910              sequences of consecutive such tokens at the end of the
2911              list to preserve information about where they appear, how
2912              they are spelt and whether they are preceded by
2913              whitespace without otherwise interfering with macro
2914              expansion.  */
2915           cpp_token *normal_dest = tokns;
2916           cpp_token *extra_dest = tokns + macro->count - num_extra_tokens;
2917           unsigned int i;
2918           for (i = 0; i < macro->count; i++)
2919             {
2920               if (macro->exp.tokens[i].type == CPP_PASTE)
2921                 *extra_dest++ = macro->exp.tokens[i];
2922               else
2923                 *normal_dest++ = macro->exp.tokens[i];
2924             }
2925         }
2926       else
2927         memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
2928       macro->exp.tokens = tokns;
2929     }
2930   else
2931     BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
2932
2933   return true;
2934 }
2935
2936 /* Parse a macro and save its expansion.  Returns nonzero on success.  */
2937 bool
2938 _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
2939 {
2940   cpp_macro *macro;
2941   unsigned int i;
2942   bool ok;
2943
2944   if (pfile->hash_table->alloc_subobject)
2945     macro = (cpp_macro *) pfile->hash_table->alloc_subobject
2946       (sizeof (cpp_macro));
2947   else
2948     macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
2949   macro->line = pfile->directive_line;
2950   macro->params = 0;
2951   macro->paramc = 0;
2952   macro->variadic = 0;
2953   macro->used = !CPP_OPTION (pfile, warn_unused_macros);
2954   macro->count = 0;
2955   macro->fun_like = 0;
2956   macro->extra_tokens = 0;
2957   /* To suppress some diagnostics.  */
2958   macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
2959
2960   if (CPP_OPTION (pfile, traditional))
2961     ok = _cpp_create_trad_definition (pfile, macro);
2962   else
2963     {
2964       ok = create_iso_definition (pfile, macro);
2965
2966       /* We set the type for SEEN_EOL() in directives.c.
2967
2968          Longer term we should lex the whole line before coming here,
2969          and just copy the expansion.  */
2970
2971       /* Stop the lexer accepting __VA_ARGS__.  */
2972       pfile->state.va_args_ok = 0;
2973     }
2974
2975   /* Clear the fast argument lookup indices.  */
2976   for (i = macro->paramc; i-- > 0; )
2977     {
2978       struct cpp_hashnode *node = macro->params[i];
2979       node->flags &= ~ NODE_MACRO_ARG;
2980       node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
2981     }
2982
2983   if (!ok)
2984     return ok;
2985
2986   if (node->type == NT_MACRO)
2987     {
2988       if (CPP_OPTION (pfile, warn_unused_macros))
2989         _cpp_warn_if_unused_macro (pfile, node, NULL);
2990
2991       if (warn_of_redefinition (pfile, node, macro))
2992         {
2993           const int reason = (node->flags & NODE_BUILTIN)
2994                              ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
2995           bool warned;
2996
2997           warned = cpp_pedwarning_with_line (pfile, reason,
2998                                              pfile->directive_line, 0,
2999                                              "\"%s\" redefined",
3000                                              NODE_NAME (node));
3001
3002           if (warned && node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
3003             cpp_error_with_line (pfile, CPP_DL_NOTE,
3004                                  node->value.macro->line, 0,
3005                          "this is the location of the previous definition");
3006         }
3007     }
3008
3009   if (node->type != NT_VOID)
3010     _cpp_free_definition (node);
3011
3012   /* Enter definition in hash table.  */
3013   node->type = NT_MACRO;
3014   node->value.macro = macro;
3015   if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
3016       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
3017       /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
3018          in the C standard, as something that one must use in C++.
3019          However DR#593 indicates that these aren't actually mentioned
3020          in the C++ standard.  We special-case them anyway.  */
3021       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
3022       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
3023     node->flags |= NODE_WARN;
3024
3025   /* If user defines one of the conditional macros, remove the
3026      conditional flag */
3027   node->flags &= ~NODE_CONDITIONAL;
3028
3029   return ok;
3030 }
3031
3032 /* Warn if a token in STRING matches one of a function-like MACRO's
3033    parameters.  */
3034 static void
3035 check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
3036                             const cpp_string *string)
3037 {
3038   unsigned int i, len;
3039   const uchar *p, *q, *limit;
3040
3041   /* Loop over the string.  */
3042   limit = string->text + string->len - 1;
3043   for (p = string->text + 1; p < limit; p = q)
3044     {
3045       /* Find the start of an identifier.  */
3046       while (p < limit && !is_idstart (*p))
3047         p++;
3048
3049       /* Find the end of the identifier.  */
3050       q = p;
3051       while (q < limit && is_idchar (*q))
3052         q++;
3053
3054       len = q - p;
3055
3056       /* Loop over the function macro arguments to see if the
3057          identifier inside the string matches one of them.  */
3058       for (i = 0; i < macro->paramc; i++)
3059         {
3060           const cpp_hashnode *node = macro->params[i];
3061
3062           if (NODE_LEN (node) == len
3063               && !memcmp (p, NODE_NAME (node), len))
3064             {
3065               cpp_error (pfile, CPP_DL_WARNING,
3066            "macro argument \"%s\" would be stringified in traditional C",
3067                          NODE_NAME (node));
3068               break;
3069             }
3070         }
3071     }
3072 }
3073
3074 /* Returns the name, arguments and expansion of a macro, in a format
3075    suitable to be read back in again, and therefore also for DWARF 2
3076    debugging info.  e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
3077    Caller is expected to generate the "#define" bit if needed.  The
3078    returned text is temporary, and automatically freed later.  */
3079 const unsigned char *
3080 cpp_macro_definition (cpp_reader *pfile, cpp_hashnode *node)
3081 {
3082   unsigned int i, len;
3083   const cpp_macro *macro;
3084   unsigned char *buffer;
3085
3086   if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
3087     {
3088       if (node->type != NT_MACRO
3089           || !pfile->cb.user_builtin_macro
3090           || !pfile->cb.user_builtin_macro (pfile, node))
3091         {
3092           cpp_error (pfile, CPP_DL_ICE,
3093                      "invalid hash type %d in cpp_macro_definition",
3094                      node->type);
3095           return 0;
3096         }
3097     }
3098
3099   macro = node->value.macro;
3100   /* Calculate length.  */
3101   len = NODE_LEN (node) + 2;                    /* ' ' and NUL.  */
3102   if (macro->fun_like)
3103     {
3104       len += 4;         /* "()" plus possible final ".." of named
3105                            varargs (we have + 1 below).  */
3106       for (i = 0; i < macro->paramc; i++)
3107         len += NODE_LEN (macro->params[i]) + 1; /* "," */
3108     }
3109
3110   /* This should match below where we fill in the buffer.  */
3111   if (CPP_OPTION (pfile, traditional))
3112     len += _cpp_replacement_text_len (macro);
3113   else
3114     {
3115       unsigned int count = macro_real_token_count (macro);
3116       for (i = 0; i < count; i++)
3117         {
3118           cpp_token *token = &macro->exp.tokens[i];
3119
3120           if (token->type == CPP_MACRO_ARG)
3121             len += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
3122           else
3123             len += cpp_token_len (token);
3124
3125           if (token->flags & STRINGIFY_ARG)
3126             len++;                      /* "#" */
3127           if (token->flags & PASTE_LEFT)
3128             len += 3;           /* " ##" */
3129           if (token->flags & PREV_WHITE)
3130             len++;              /* " " */
3131         }
3132     }
3133
3134   if (len > pfile->macro_buffer_len)
3135     {
3136       pfile->macro_buffer = XRESIZEVEC (unsigned char,
3137                                         pfile->macro_buffer, len);
3138       pfile->macro_buffer_len = len;
3139     }
3140
3141   /* Fill in the buffer.  Start with the macro name.  */
3142   buffer = pfile->macro_buffer;
3143   memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
3144   buffer += NODE_LEN (node);
3145
3146   /* Parameter names.  */
3147   if (macro->fun_like)
3148     {
3149       *buffer++ = '(';
3150       for (i = 0; i < macro->paramc; i++)
3151         {
3152           cpp_hashnode *param = macro->params[i];
3153
3154           if (param != pfile->spec_nodes.n__VA_ARGS__)
3155             {
3156               memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
3157               buffer += NODE_LEN (param);
3158             }
3159
3160           if (i + 1 < macro->paramc)
3161             /* Don't emit a space after the comma here; we're trying
3162                to emit a Dwarf-friendly definition, and the Dwarf spec
3163                forbids spaces in the argument list.  */
3164             *buffer++ = ',';
3165           else if (macro->variadic)
3166             *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
3167         }
3168       *buffer++ = ')';
3169     }
3170
3171   /* The Dwarf spec requires a space after the macro name, even if the
3172      definition is the empty string.  */
3173   *buffer++ = ' ';
3174
3175   if (CPP_OPTION (pfile, traditional))
3176     buffer = _cpp_copy_replacement_text (macro, buffer);
3177   else if (macro->count)
3178   /* Expansion tokens.  */
3179     {
3180       unsigned int count = macro_real_token_count (macro);
3181       for (i = 0; i < count; i++)
3182         {
3183           cpp_token *token = &macro->exp.tokens[i];
3184
3185           if (token->flags & PREV_WHITE)
3186             *buffer++ = ' ';
3187           if (token->flags & STRINGIFY_ARG)
3188             *buffer++ = '#';
3189
3190           if (token->type == CPP_MACRO_ARG)
3191             {
3192               memcpy (buffer,
3193                       NODE_NAME (macro->params[token->val.macro_arg.arg_no - 1]),
3194                       NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]));
3195               buffer += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
3196             }
3197           else
3198             buffer = cpp_spell_token (pfile, token, buffer, false);
3199
3200           if (token->flags & PASTE_LEFT)
3201             {
3202               *buffer++ = ' ';
3203               *buffer++ = '#';
3204               *buffer++ = '#';
3205               /* Next has PREV_WHITE; see _cpp_create_definition.  */
3206             }
3207         }
3208     }
3209
3210   *buffer = '\0';
3211   return pfile->macro_buffer;
3212 }