OSDN Git Service

libcpp:
[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 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 struct macro_arg
34 {
35   const cpp_token **first;      /* First token in unexpanded argument.  */
36   const cpp_token **expanded;   /* Macro-expanded argument.  */
37   const cpp_token *stringified; /* Stringified argument.  */
38   unsigned int count;           /* # of tokens in argument.  */
39   unsigned int expanded_count;  /* # of tokens in expanded argument.  */
40 };
41
42 /* Macro expansion.  */
43
44 static int enter_macro_context (cpp_reader *, cpp_hashnode *,
45                                 const cpp_token *);
46 static int builtin_macro (cpp_reader *, cpp_hashnode *);
47 static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
48                                  const cpp_token **, unsigned int);
49 static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *,
50                                 _cpp_buff **);
51 static cpp_context *next_context (cpp_reader *);
52 static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
53 static void expand_arg (cpp_reader *, macro_arg *);
54 static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
55 static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
56 static void paste_all_tokens (cpp_reader *, const cpp_token *);
57 static bool paste_tokens (cpp_reader *, const cpp_token **, const cpp_token *);
58 static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
59                           macro_arg *);
60 static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *,
61                                         _cpp_buff **);
62 static bool create_iso_definition (cpp_reader *, cpp_macro *);
63
64 /* #define directive parsing and handling.  */
65
66 static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
67 static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
68 static bool warn_of_redefinition (cpp_reader *, const cpp_hashnode *,
69                                   const cpp_macro *);
70 static bool parse_params (cpp_reader *, cpp_macro *);
71 static void check_trad_stringification (cpp_reader *, const cpp_macro *,
72                                         const cpp_string *);
73
74 /* Emits a warning if NODE is a macro defined in the main file that
75    has not been used.  */
76 int
77 _cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
78                            void *v ATTRIBUTE_UNUSED)
79 {
80   if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
81     {
82       cpp_macro *macro = node->value.macro;
83
84       if (!macro->used
85           && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
86         cpp_error_with_line (pfile, CPP_DL_WARNING, macro->line, 0,
87                              "macro \"%s\" is not used", NODE_NAME (node));
88     }
89
90   return 1;
91 }
92
93 /* Allocates and returns a CPP_STRING token, containing TEXT of length
94    LEN, after null-terminating it.  TEXT must be in permanent storage.  */
95 static const cpp_token *
96 new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
97 {
98   cpp_token *token = _cpp_temp_token (pfile);
99
100   text[len] = '\0';
101   token->type = CPP_STRING;
102   token->val.str.len = len;
103   token->val.str.text = text;
104   token->flags = 0;
105   return token;
106 }
107
108 static const char * const monthnames[] =
109 {
110   "Jan", "Feb", "Mar", "Apr", "May", "Jun",
111   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
112 };
113
114 /* Helper function for builtin_macro.  Returns the text generated by
115    a builtin macro. */
116 const uchar *
117 _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
118 {
119   const struct line_map *map;
120   const uchar *result = NULL;
121   linenum_type number = 1;
122
123   switch (node->value.builtin)
124     {
125     default:
126       cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
127                  NODE_NAME (node));
128       break;
129
130     case BT_TIMESTAMP:
131       {
132         cpp_buffer *pbuffer = cpp_get_buffer (pfile);
133         if (pbuffer->timestamp == NULL)
134           {
135             /* Initialize timestamp value of the assotiated file. */
136             struct _cpp_file *file = cpp_get_file (pbuffer);
137             if (file)
138               {
139                 /* Generate __TIMESTAMP__ string, that represents 
140                    the date and time of the last modification 
141                    of the current source file. The string constant 
142                    looks like "Sun Sep 16 01:03:52 1973".  */
143                 struct tm *tb = NULL;
144                 struct stat *st = _cpp_get_file_stat (file);
145                 if (st)
146                   tb = localtime (&st->st_mtime);
147                 if (tb)
148                   {
149                     char *str = asctime (tb);
150                     size_t len = strlen (str);
151                     unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
152                     buf[0] = '"';
153                     strcpy ((char *) buf + 1, str);
154                     buf[len] = '"';
155                     pbuffer->timestamp = buf;
156                   }
157                 else
158                   {
159                     cpp_errno (pfile, CPP_DL_WARNING,
160                         "could not determine file timestamp");
161                     pbuffer->timestamp = UC"\"??? ??? ?? ??:??:?? ????\"";
162                   }
163               }
164           }
165         result = pbuffer->timestamp;
166       }
167       break;
168     case BT_FILE:
169     case BT_BASE_FILE:
170       {
171         unsigned int len;
172         const char *name;
173         uchar *buf;
174         map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line);
175
176         if (node->value.builtin == BT_BASE_FILE)
177           while (! MAIN_FILE_P (map))
178             map = INCLUDED_FROM (pfile->line_table, map);
179
180         name = map->to_file;
181         len = strlen (name);
182         buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
183         result = buf;
184         *buf = '"';
185         buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
186         *buf++ = '"';
187         *buf = '\0';
188       }
189       break;
190
191     case BT_INCLUDE_LEVEL:
192       /* The line map depth counts the primary source as level 1, but
193          historically __INCLUDE_DEPTH__ has called the primary source
194          level 0.  */
195       number = pfile->line_table->depth - 1;
196       break;
197
198     case BT_SPECLINE:
199       map = &pfile->line_table->maps[pfile->line_table->used-1];
200       /* If __LINE__ is embedded in a macro, it must expand to the
201          line of the macro's invocation, not its definition.
202          Otherwise things like assert() will not work properly.  */
203       number = SOURCE_LINE (map, 
204                             CPP_OPTION (pfile, traditional) 
205                             ? pfile->line_table->highest_line
206                             : pfile->cur_token[-1].src_loc);
207       break;
208
209       /* __STDC__ has the value 1 under normal circumstances.
210          However, if (a) we are in a system header, (b) the option
211          stdc_0_in_system_headers is true (set by target config), and
212          (c) we are not in strictly conforming mode, then it has the
213          value 0.  (b) and (c) are already checked in cpp_init_builtins.  */
214     case BT_STDC:
215       if (cpp_in_system_header (pfile))
216         number = 0;
217       else
218         number = 1;
219       break;
220
221     case BT_DATE:
222     case BT_TIME:
223       if (pfile->date == NULL)
224         {
225           /* Allocate __DATE__ and __TIME__ strings from permanent
226              storage.  We only do this once, and don't generate them
227              at init time, because time() and localtime() are very
228              slow on some systems.  */
229           time_t tt;
230           struct tm *tb = NULL;
231
232           /* (time_t) -1 is a legitimate value for "number of seconds
233              since the Epoch", so we have to do a little dance to
234              distinguish that from a genuine error.  */
235           errno = 0;
236           tt = time(NULL);
237           if (tt != (time_t)-1 || errno == 0)
238             tb = localtime (&tt);
239
240           if (tb)
241             {
242               pfile->date = _cpp_unaligned_alloc (pfile,
243                                                   sizeof ("\"Oct 11 1347\""));
244               sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
245                        monthnames[tb->tm_mon], tb->tm_mday,
246                        tb->tm_year + 1900);
247
248               pfile->time = _cpp_unaligned_alloc (pfile,
249                                                   sizeof ("\"12:34:56\""));
250               sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
251                        tb->tm_hour, tb->tm_min, tb->tm_sec);
252             }
253           else
254             {
255               cpp_errno (pfile, CPP_DL_WARNING,
256                          "could not determine date and time");
257                 
258               pfile->date = UC"\"??? ?? ????\"";
259               pfile->time = UC"\"??:??:??\"";
260             }
261         }
262
263       if (node->value.builtin == BT_DATE)
264         result = pfile->date;
265       else
266         result = pfile->time;
267       break;
268
269     case BT_COUNTER:
270       if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
271         cpp_error (pfile, CPP_DL_ERROR,
272             "__COUNTER__ expanded inside directive with -fdirectives-only");
273       number = pfile->counter++;
274       break;
275     }
276
277   if (result == NULL)
278     {
279       /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers.  */
280       result = _cpp_unaligned_alloc (pfile, 21);
281       sprintf ((char *) result, "%u", number);
282     }
283
284   return result;      
285 }
286
287 /* Convert builtin macros like __FILE__ to a token and push it on the
288    context stack.  Also handles _Pragma, for which a new token may not
289    be created.  Returns 1 if it generates a new token context, 0 to
290    return the token to the caller.  */
291 static int
292 builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
293 {
294   const uchar *buf;
295   size_t len;
296   char *nbuf;
297
298   if (node->value.builtin == BT_PRAGMA)
299     {
300       /* Don't interpret _Pragma within directives.  The standard is
301          not clear on this, but to me this makes most sense.  */
302       if (pfile->state.in_directive)
303         return 0;
304
305       return _cpp_do__Pragma (pfile);
306     }
307
308   buf = _cpp_builtin_macro_text (pfile, node);
309   len = ustrlen (buf);
310   nbuf = (char *) alloca (len + 1);
311   memcpy (nbuf, buf, len);
312   nbuf[len]='\n';
313
314   cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
315   _cpp_clean_line (pfile);
316
317   /* Set pfile->cur_token as required by _cpp_lex_direct.  */
318   pfile->cur_token = _cpp_temp_token (pfile);
319   _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
320   if (pfile->buffer->cur != pfile->buffer->rlimit)
321     cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
322                NODE_NAME (node));
323   _cpp_pop_buffer (pfile);
324
325   return 1;
326 }
327
328 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
329    backslashes and double quotes. DEST must be of sufficient size.
330    Returns a pointer to the end of the string.  */
331 uchar *
332 cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
333 {
334   while (len--)
335     {
336       uchar c = *src++;
337
338       if (c == '\\' || c == '"')
339         {
340           *dest++ = '\\';
341           *dest++ = c;
342         }
343       else
344           *dest++ = c;
345     }
346
347   return dest;
348 }
349
350 /* Convert a token sequence ARG to a single string token according to
351    the rules of the ISO C #-operator.  */
352 static const cpp_token *
353 stringify_arg (cpp_reader *pfile, macro_arg *arg)
354 {
355   unsigned char *dest;
356   unsigned int i, escape_it, backslash_count = 0;
357   const cpp_token *source = NULL;
358   size_t len;
359
360   if (BUFF_ROOM (pfile->u_buff) < 3)
361     _cpp_extend_buff (pfile, &pfile->u_buff, 3);
362   dest = BUFF_FRONT (pfile->u_buff);
363   *dest++ = '"';
364
365   /* Loop, reading in the argument's tokens.  */
366   for (i = 0; i < arg->count; i++)
367     {
368       const cpp_token *token = arg->first[i];
369
370       if (token->type == CPP_PADDING)
371         {
372           if (source == NULL
373               || (!(source->flags & PREV_WHITE)
374                   && token->val.source == NULL))
375             source = token->val.source;
376           continue;
377         }
378
379       escape_it = (token->type == CPP_STRING || token->type == CPP_CHAR
380                    || token->type == CPP_WSTRING || token->type == CPP_STRING
381                    || token->type == CPP_STRING32 || token->type == CPP_CHAR32
382                    || token->type == CPP_STRING16 || token->type == CPP_CHAR16);
383
384       /* Room for each char being written in octal, initial space and
385          final quote and NUL.  */
386       len = cpp_token_len (token);
387       if (escape_it)
388         len *= 4;
389       len += 3;
390
391       if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
392         {
393           size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
394           _cpp_extend_buff (pfile, &pfile->u_buff, len);
395           dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
396         }
397
398       /* Leading white space?  */
399       if (dest - 1 != BUFF_FRONT (pfile->u_buff))
400         {
401           if (source == NULL)
402             source = token;
403           if (source->flags & PREV_WHITE)
404             *dest++ = ' ';
405         }
406       source = NULL;
407
408       if (escape_it)
409         {
410           _cpp_buff *buff = _cpp_get_buff (pfile, len);
411           unsigned char *buf = BUFF_FRONT (buff);
412           len = cpp_spell_token (pfile, token, buf, true) - buf;
413           dest = cpp_quote_string (dest, buf, len);
414           _cpp_release_buff (pfile, buff);
415         }
416       else
417         dest = cpp_spell_token (pfile, token, dest, true);
418
419       if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
420         backslash_count++;
421       else
422         backslash_count = 0;
423     }
424
425   /* Ignore the final \ of invalid string literals.  */
426   if (backslash_count & 1)
427     {
428       cpp_error (pfile, CPP_DL_WARNING,
429                  "invalid string literal, ignoring final '\\'");
430       dest--;
431     }
432
433   /* Commit the memory, including NUL, and return the token.  */
434   *dest++ = '"';
435   len = dest - BUFF_FRONT (pfile->u_buff);
436   BUFF_FRONT (pfile->u_buff) = dest + 1;
437   return new_string_token (pfile, dest - len, len);
438 }
439
440 /* Try to paste two tokens.  On success, return nonzero.  In any
441    case, PLHS is updated to point to the pasted token, which is
442    guaranteed to not have the PASTE_LEFT flag set.  */
443 static bool
444 paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
445 {
446   unsigned char *buf, *end, *lhsend;
447   cpp_token *lhs;
448   unsigned int len;
449
450   len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
451   buf = (unsigned char *) alloca (len);
452   end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
453
454   /* Avoid comment headers, since they are still processed in stage 3.
455      It is simpler to insert a space here, rather than modifying the
456      lexer to ignore comments in some circumstances.  Simply returning
457      false doesn't work, since we want to clear the PASTE_LEFT flag.  */
458   if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
459     *end++ = ' ';
460   /* In one obscure case we might see padding here.  */
461   if (rhs->type != CPP_PADDING)
462     end = cpp_spell_token (pfile, rhs, end, false);
463   *end = '\n';
464
465   cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
466   _cpp_clean_line (pfile);
467
468   /* Set pfile->cur_token as required by _cpp_lex_direct.  */
469   pfile->cur_token = _cpp_temp_token (pfile);
470   lhs = _cpp_lex_direct (pfile);
471   if (pfile->buffer->cur != pfile->buffer->rlimit)
472     {
473       source_location saved_loc = lhs->src_loc;
474
475       _cpp_pop_buffer (pfile);
476       _cpp_backup_tokens (pfile, 1);
477       *lhsend = '\0';
478
479       /* We have to remove the PASTE_LEFT flag from the old lhs, but
480          we want to keep the new location.  */
481       *lhs = **plhs;
482       *plhs = lhs;
483       lhs->src_loc = saved_loc;
484       lhs->flags &= ~PASTE_LEFT;
485
486       /* Mandatory error for all apart from assembler.  */
487       if (CPP_OPTION (pfile, lang) != CLK_ASM)
488         cpp_error (pfile, CPP_DL_ERROR,
489          "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
490                    buf, cpp_token_as_text (pfile, rhs));
491       return false;
492     }
493
494   *plhs = lhs;
495   _cpp_pop_buffer (pfile);
496   return true;
497 }
498
499 /* Handles an arbitrarily long sequence of ## operators, with initial
500    operand LHS.  This implementation is left-associative,
501    non-recursive, and finishes a paste before handling succeeding
502    ones.  If a paste fails, we back up to the RHS of the failing ##
503    operator before pushing the context containing the result of prior
504    successful pastes, with the effect that the RHS appears in the
505    output stream after the pasted LHS normally.  */
506 static void
507 paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
508 {
509   const cpp_token *rhs;
510   cpp_context *context = pfile->context;
511
512   do
513     {
514       /* Take the token directly from the current context.  We can do
515          this, because we are in the replacement list of either an
516          object-like macro, or a function-like macro with arguments
517          inserted.  In either case, the constraints to #define
518          guarantee we have at least one more token.  */
519       if (context->direct_p)
520         rhs = FIRST (context).token++;
521       else
522         rhs = *FIRST (context).ptoken++;
523
524       if (rhs->type == CPP_PADDING)
525         {
526           if (rhs->flags & PASTE_LEFT)
527             abort ();
528         }
529       if (!paste_tokens (pfile, &lhs, rhs))
530         break;
531     }
532   while (rhs->flags & PASTE_LEFT);
533
534   /* Put the resulting token in its own context.  */
535   _cpp_push_token_context (pfile, NULL, lhs, 1);
536 }
537
538 /* Returns TRUE if the number of arguments ARGC supplied in an
539    invocation of the MACRO referenced by NODE is valid.  An empty
540    invocation to a macro with no parameters should pass ARGC as zero.
541
542    Note that MACRO cannot necessarily be deduced from NODE, in case
543    NODE was redefined whilst collecting arguments.  */
544 bool
545 _cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
546 {
547   if (argc == macro->paramc)
548     return true;
549
550   if (argc < macro->paramc)
551     {
552       /* As an extension, a rest argument is allowed to not appear in
553          the invocation at all.
554          e.g. #define debug(format, args...) something
555          debug("string");
556
557          This is exactly the same as if there had been an empty rest
558          argument - debug("string", ).  */
559
560       if (argc + 1 == macro->paramc && macro->variadic)
561         {
562           if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
563             cpp_error (pfile, CPP_DL_PEDWARN,
564                        "ISO C99 requires rest arguments to be used");
565           return true;
566         }
567
568       cpp_error (pfile, CPP_DL_ERROR,
569                  "macro \"%s\" requires %u arguments, but only %u given",
570                  NODE_NAME (node), macro->paramc, argc);
571     }
572   else
573     cpp_error (pfile, CPP_DL_ERROR,
574                "macro \"%s\" passed %u arguments, but takes just %u",
575                NODE_NAME (node), argc, macro->paramc);
576
577   return false;
578 }
579
580 /* Reads and returns the arguments to a function-like macro
581    invocation.  Assumes the opening parenthesis has been processed.
582    If there is an error, emits an appropriate diagnostic and returns
583    NULL.  Each argument is terminated by a CPP_EOF token, for the
584    future benefit of expand_arg().  If there are any deferred
585    #pragma directives among macro arguments, store pointers to the
586    CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.  */
587 static _cpp_buff *
588 collect_args (cpp_reader *pfile, const cpp_hashnode *node,
589               _cpp_buff **pragma_buff)
590 {
591   _cpp_buff *buff, *base_buff;
592   cpp_macro *macro;
593   macro_arg *args, *arg;
594   const cpp_token *token;
595   unsigned int argc;
596
597   macro = node->value.macro;
598   if (macro->paramc)
599     argc = macro->paramc;
600   else
601     argc = 1;
602   buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
603                                        + sizeof (macro_arg)));
604   base_buff = buff;
605   args = (macro_arg *) buff->base;
606   memset (args, 0, argc * sizeof (macro_arg));
607   buff->cur = (unsigned char *) &args[argc];
608   arg = args, argc = 0;
609
610   /* Collect the tokens making up each argument.  We don't yet know
611      how many arguments have been supplied, whether too many or too
612      few.  Hence the slightly bizarre usage of "argc" and "arg".  */
613   do
614     {
615       unsigned int paren_depth = 0;
616       unsigned int ntokens = 0;
617
618       argc++;
619       arg->first = (const cpp_token **) buff->cur;
620
621       for (;;)
622         {
623           /* Require space for 2 new tokens (including a CPP_EOF).  */
624           if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
625             {
626               buff = _cpp_append_extend_buff (pfile, buff,
627                                               1000 * sizeof (cpp_token *));
628               arg->first = (const cpp_token **) buff->cur;
629             }
630
631           token = cpp_get_token (pfile);
632
633           if (token->type == CPP_PADDING)
634             {
635               /* Drop leading padding.  */
636               if (ntokens == 0)
637                 continue;
638             }
639           else if (token->type == CPP_OPEN_PAREN)
640             paren_depth++;
641           else if (token->type == CPP_CLOSE_PAREN)
642             {
643               if (paren_depth-- == 0)
644                 break;
645             }
646           else if (token->type == CPP_COMMA)
647             {
648               /* A comma does not terminate an argument within
649                  parentheses or as part of a variable argument.  */
650               if (paren_depth == 0
651                   && ! (macro->variadic && argc == macro->paramc))
652                 break;
653             }
654           else if (token->type == CPP_EOF
655                    || (token->type == CPP_HASH && token->flags & BOL))
656             break;
657           else if (token->type == CPP_PRAGMA)
658             {
659               cpp_token *newtok = _cpp_temp_token (pfile);
660
661               /* CPP_PRAGMA token lives in directive_result, which will
662                  be overwritten on the next directive.  */
663               *newtok = *token;
664               token = newtok;
665               do
666                 {
667                   if (*pragma_buff == NULL
668                       || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
669                     {
670                       _cpp_buff *next;
671                       if (*pragma_buff == NULL)
672                         *pragma_buff
673                           = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
674                       else
675                         {
676                           next = *pragma_buff;
677                           *pragma_buff
678                             = _cpp_get_buff (pfile,
679                                              (BUFF_FRONT (*pragma_buff)
680                                               - (*pragma_buff)->base) * 2);
681                           (*pragma_buff)->next = next;
682                         }
683                     }
684                   *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
685                   BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
686                   if (token->type == CPP_PRAGMA_EOL)
687                     break;
688                   token = cpp_get_token (pfile);
689                 }
690               while (token->type != CPP_EOF);
691
692               /* In deferred pragmas parsing_args and prevent_expansion
693                  had been changed, reset it.  */
694               pfile->state.parsing_args = 2;
695               pfile->state.prevent_expansion = 1;
696
697               if (token->type == CPP_EOF)
698                 break;
699               else
700                 continue;
701             }
702
703           arg->first[ntokens++] = token;
704         }
705
706       /* Drop trailing padding.  */
707       while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
708         ntokens--;
709
710       arg->count = ntokens;
711       arg->first[ntokens] = &pfile->eof;
712
713       /* Terminate the argument.  Excess arguments loop back and
714          overwrite the final legitimate argument, before failing.  */
715       if (argc <= macro->paramc)
716         {
717           buff->cur = (unsigned char *) &arg->first[ntokens + 1];
718           if (argc != macro->paramc)
719             arg++;
720         }
721     }
722   while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
723
724   if (token->type == CPP_EOF)
725     {
726       /* We still need the CPP_EOF to end directives, and to end
727          pre-expansion of a macro argument.  Step back is not
728          unconditional, since we don't want to return a CPP_EOF to our
729          callers at the end of an -include-d file.  */
730       if (pfile->context->prev || pfile->state.in_directive)
731         _cpp_backup_tokens (pfile, 1);
732       cpp_error (pfile, CPP_DL_ERROR,
733                  "unterminated argument list invoking macro \"%s\"",
734                  NODE_NAME (node));
735     }
736   else
737     {
738       /* A single empty argument is counted as no argument.  */
739       if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
740         argc = 0;
741       if (_cpp_arguments_ok (pfile, macro, node, argc))
742         {
743           /* GCC has special semantics for , ## b where b is a varargs
744              parameter: we remove the comma if b was omitted entirely.
745              If b was merely an empty argument, the comma is retained.
746              If the macro takes just one (varargs) parameter, then we
747              retain the comma only if we are standards conforming.
748
749              If FIRST is NULL replace_args () swallows the comma.  */
750           if (macro->variadic && (argc < macro->paramc
751                                   || (argc == 1 && args[0].count == 0
752                                       && !CPP_OPTION (pfile, std))))
753             args[macro->paramc - 1].first = NULL;
754           return base_buff;
755         }
756     }
757
758   /* An error occurred.  */
759   _cpp_release_buff (pfile, base_buff);
760   return NULL;
761 }
762
763 /* Search for an opening parenthesis to the macro of NODE, in such a
764    way that, if none is found, we don't lose the information in any
765    intervening padding tokens.  If we find the parenthesis, collect
766    the arguments and return the buffer containing them.  PRAGMA_BUFF
767    argument is the same as in collect_args.  */
768 static _cpp_buff *
769 funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
770                       _cpp_buff **pragma_buff)
771 {
772   const cpp_token *token, *padding = NULL;
773
774   for (;;)
775     {
776       token = cpp_get_token (pfile);
777       if (token->type != CPP_PADDING)
778         break;
779       if (padding == NULL
780           || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
781         padding = token;
782     }
783
784   if (token->type == CPP_OPEN_PAREN)
785     {
786       pfile->state.parsing_args = 2;
787       return collect_args (pfile, node, pragma_buff);
788     }
789
790   /* CPP_EOF can be the end of macro arguments, or the end of the
791      file.  We mustn't back up over the latter.  Ugh.  */
792   if (token->type != CPP_EOF || token == &pfile->eof)
793     {
794       /* Back up.  We may have skipped padding, in which case backing
795          up more than one token when expanding macros is in general
796          too difficult.  We re-insert it in its own context.  */
797       _cpp_backup_tokens (pfile, 1);
798       if (padding)
799         _cpp_push_token_context (pfile, NULL, padding, 1);
800     }
801
802   return NULL;
803 }
804
805 /* Push the context of a macro with hash entry NODE onto the context
806    stack.  If we can successfully expand the macro, we push a context
807    containing its yet-to-be-rescanned replacement list and return one.
808    If there were additionally any unexpanded deferred #pragma directives
809    among macro arguments, push another context containing the
810    pragma tokens before the yet-to-be-rescanned replacement list
811    and return two.  Otherwise, we don't push a context and return zero.  */
812 static int
813 enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
814                      const cpp_token *result)
815 {
816   /* The presence of a macro invalidates a file's controlling macro.  */
817   pfile->mi_valid = false;
818
819   pfile->state.angled_headers = false;
820
821   if ((node->flags & NODE_BUILTIN) && !(node->flags & NODE_USED))
822     {
823       node->flags |= NODE_USED;
824       if (pfile->cb.used_define)
825         pfile->cb.used_define (pfile, pfile->directive_line, node);
826     }
827
828   /* Handle standard macros.  */
829   if (! (node->flags & NODE_BUILTIN))
830     {
831       cpp_macro *macro = node->value.macro;
832       _cpp_buff *pragma_buff = NULL;
833
834       if (macro->fun_like)
835         {
836           _cpp_buff *buff;
837
838           pfile->state.prevent_expansion++;
839           pfile->keep_tokens++;
840           pfile->state.parsing_args = 1;
841           buff = funlike_invocation_p (pfile, node, &pragma_buff);
842           pfile->state.parsing_args = 0;
843           pfile->keep_tokens--;
844           pfile->state.prevent_expansion--;
845
846           if (buff == NULL)
847             {
848               if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
849                 cpp_error (pfile, CPP_DL_WARNING,
850  "function-like macro \"%s\" must be used with arguments in traditional C",
851                            NODE_NAME (node));
852
853               if (pragma_buff)
854                 _cpp_release_buff (pfile, pragma_buff);
855
856               return 0;
857             }
858
859           if (macro->paramc > 0)
860             replace_args (pfile, node, macro, (macro_arg *) buff->base);
861           _cpp_release_buff (pfile, buff);
862         }
863
864       /* Disable the macro within its expansion.  */
865       node->flags |= NODE_DISABLED;
866
867       if (!(node->flags & NODE_USED))
868         {
869           node->flags |= NODE_USED;
870           if (pfile->cb.used_define)
871             pfile->cb.used_define (pfile, pfile->directive_line, node);
872         }
873
874       macro->used = 1;
875
876       if (macro->paramc == 0)
877         _cpp_push_token_context (pfile, node, macro->exp.tokens, macro->count);
878
879       if (pragma_buff)
880         {
881           if (!pfile->state.in_directive)
882             _cpp_push_token_context (pfile, NULL,
883                                      padding_token (pfile, result), 1);
884           do
885             {
886               _cpp_buff *tail = pragma_buff->next;
887               pragma_buff->next = NULL;
888               push_ptoken_context (pfile, NULL, pragma_buff,
889                                    (const cpp_token **) pragma_buff->base,
890                                    ((const cpp_token **) BUFF_FRONT (pragma_buff)
891                                     - (const cpp_token **) pragma_buff->base));
892               pragma_buff = tail;
893             }
894           while (pragma_buff != NULL);
895           return 2;
896         }
897
898       return 1;
899     }
900
901   /* Handle built-in macros and the _Pragma operator.  */
902   return builtin_macro (pfile, node);
903 }
904
905 /* Replace the parameters in a function-like macro of NODE with the
906    actual ARGS, and place the result in a newly pushed token context.
907    Expand each argument before replacing, unless it is operated upon
908    by the # or ## operators.  */
909 static void
910 replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro, macro_arg *args)
911 {
912   unsigned int i, total;
913   const cpp_token *src, *limit;
914   const cpp_token **dest, **first;
915   macro_arg *arg;
916   _cpp_buff *buff;
917
918   /* First, fully macro-expand arguments, calculating the number of
919      tokens in the final expansion as we go.  The ordering of the if
920      statements below is subtle; we must handle stringification before
921      pasting.  */
922   total = macro->count;
923   limit = macro->exp.tokens + macro->count;
924
925   for (src = macro->exp.tokens; src < limit; src++)
926     if (src->type == CPP_MACRO_ARG)
927       {
928         /* Leading and trailing padding tokens.  */
929         total += 2;
930
931         /* We have an argument.  If it is not being stringified or
932            pasted it is macro-replaced before insertion.  */
933         arg = &args[src->val.arg_no - 1];
934
935         if (src->flags & STRINGIFY_ARG)
936           {
937             if (!arg->stringified)
938               arg->stringified = stringify_arg (pfile, arg);
939           }
940         else if ((src->flags & PASTE_LEFT)
941                  || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
942           total += arg->count - 1;
943         else
944           {
945             if (!arg->expanded)
946               expand_arg (pfile, arg);
947             total += arg->expanded_count - 1;
948           }
949       }
950
951   /* Now allocate space for the expansion, copy the tokens and replace
952      the arguments.  */
953   buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
954   first = (const cpp_token **) buff->base;
955   dest = first;
956
957   for (src = macro->exp.tokens; src < limit; src++)
958     {
959       unsigned int count;
960       const cpp_token **from, **paste_flag;
961
962       if (src->type != CPP_MACRO_ARG)
963         {
964           *dest++ = src;
965           continue;
966         }
967
968       paste_flag = 0;
969       arg = &args[src->val.arg_no - 1];
970       if (src->flags & STRINGIFY_ARG)
971         count = 1, from = &arg->stringified;
972       else if (src->flags & PASTE_LEFT)
973         count = arg->count, from = arg->first;
974       else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
975         {
976           count = arg->count, from = arg->first;
977           if (dest != first)
978             {
979               if (dest[-1]->type == CPP_COMMA
980                   && macro->variadic
981                   && src->val.arg_no == macro->paramc)
982                 {
983                   /* Swallow a pasted comma if from == NULL, otherwise
984                      drop the paste flag.  */
985                   if (from == NULL)
986                     dest--;
987                   else
988                     paste_flag = dest - 1;
989                 }
990               /* Remove the paste flag if the RHS is a placemarker.  */
991               else if (count == 0)
992                 paste_flag = dest - 1;
993             }
994         }
995       else
996         count = arg->expanded_count, from = arg->expanded;
997
998       /* Padding on the left of an argument (unless RHS of ##).  */
999       if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
1000           && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
1001         *dest++ = padding_token (pfile, src);
1002
1003       if (count)
1004         {
1005           memcpy (dest, from, count * sizeof (cpp_token *));
1006           dest += count;
1007
1008           /* With a non-empty argument on the LHS of ##, the last
1009              token should be flagged PASTE_LEFT.  */
1010           if (src->flags & PASTE_LEFT)
1011             paste_flag = dest - 1;
1012         }
1013       else if (CPP_PEDANTIC (pfile) && ! macro->syshdr
1014                && ! CPP_OPTION (pfile, c99)
1015                && ! cpp_in_system_header (pfile))
1016         {
1017           cpp_error (pfile, CPP_DL_PEDWARN,
1018                      "invoking macro %s argument %d: "
1019                      "empty macro arguments are undefined"
1020                      " in ISO C90 and ISO C++98",
1021                      NODE_NAME (node),
1022                      src->val.arg_no);
1023         }
1024
1025       /* Avoid paste on RHS (even case count == 0).  */
1026       if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
1027         *dest++ = &pfile->avoid_paste;
1028
1029       /* Add a new paste flag, or remove an unwanted one.  */
1030       if (paste_flag)
1031         {
1032           cpp_token *token = _cpp_temp_token (pfile);
1033           token->type = (*paste_flag)->type;
1034           token->val = (*paste_flag)->val;
1035           if (src->flags & PASTE_LEFT)
1036             token->flags = (*paste_flag)->flags | PASTE_LEFT;
1037           else
1038             token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1039           *paste_flag = token;
1040         }
1041     }
1042
1043   /* Free the expanded arguments.  */
1044   for (i = 0; i < macro->paramc; i++)
1045     if (args[i].expanded)
1046       free (args[i].expanded);
1047
1048   push_ptoken_context (pfile, node, buff, first, dest - first);
1049 }
1050
1051 /* Return a special padding token, with padding inherited from SOURCE.  */
1052 static const cpp_token *
1053 padding_token (cpp_reader *pfile, const cpp_token *source)
1054 {
1055   cpp_token *result = _cpp_temp_token (pfile);
1056
1057   result->type = CPP_PADDING;
1058
1059   /* Data in GCed data structures cannot be made const so far, so we
1060      need a cast here.  */
1061   result->val.source = (cpp_token *) source;
1062   result->flags = 0;
1063   return result;
1064 }
1065
1066 /* Get a new uninitialized context.  Create a new one if we cannot
1067    re-use an old one.  */
1068 static cpp_context *
1069 next_context (cpp_reader *pfile)
1070 {
1071   cpp_context *result = pfile->context->next;
1072
1073   if (result == 0)
1074     {
1075       result = XNEW (cpp_context);
1076       result->prev = pfile->context;
1077       result->next = 0;
1078       pfile->context->next = result;
1079     }
1080
1081   pfile->context = result;
1082   return result;
1083 }
1084
1085 /* Push a list of pointers to tokens.  */
1086 static void
1087 push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
1088                      const cpp_token **first, unsigned int count)
1089 {
1090   cpp_context *context = next_context (pfile);
1091
1092   context->direct_p = false;
1093   context->macro = macro;
1094   context->buff = buff;
1095   FIRST (context).ptoken = first;
1096   LAST (context).ptoken = first + count;
1097 }
1098
1099 /* Push a list of tokens.  */
1100 void
1101 _cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
1102                          const cpp_token *first, unsigned int count)
1103 {
1104   cpp_context *context = next_context (pfile);
1105
1106   context->direct_p = true;
1107   context->macro = macro;
1108   context->buff = NULL;
1109   FIRST (context).token = first;
1110   LAST (context).token = first + count;
1111 }
1112
1113 /* Push a traditional macro's replacement text.  */
1114 void
1115 _cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
1116                         const uchar *start, size_t len)
1117 {
1118   cpp_context *context = next_context (pfile);
1119
1120   context->direct_p = true;
1121   context->macro = macro;
1122   context->buff = NULL;
1123   CUR (context) = start;
1124   RLIMIT (context) = start + len;
1125   macro->flags |= NODE_DISABLED;
1126 }
1127
1128 /* Expand an argument ARG before replacing parameters in a
1129    function-like macro.  This works by pushing a context with the
1130    argument's tokens, and then expanding that into a temporary buffer
1131    as if it were a normal part of the token stream.  collect_args()
1132    has terminated the argument's tokens with a CPP_EOF so that we know
1133    when we have fully expanded the argument.  */
1134 static void
1135 expand_arg (cpp_reader *pfile, macro_arg *arg)
1136 {
1137   unsigned int capacity;
1138   bool saved_warn_trad;
1139
1140   if (arg->count == 0)
1141     return;
1142
1143   /* Don't warn about funlike macros when pre-expanding.  */
1144   saved_warn_trad = CPP_WTRADITIONAL (pfile);
1145   CPP_WTRADITIONAL (pfile) = 0;
1146
1147   /* Loop, reading in the arguments.  */
1148   capacity = 256;
1149   arg->expanded = XNEWVEC (const cpp_token *, capacity);
1150
1151   push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1);
1152   for (;;)
1153     {
1154       const cpp_token *token;
1155
1156       if (arg->expanded_count + 1 >= capacity)
1157         {
1158           capacity *= 2;
1159           arg->expanded = XRESIZEVEC (const cpp_token *, arg->expanded,
1160                                       capacity);
1161         }
1162
1163       token = cpp_get_token (pfile);
1164
1165       if (token->type == CPP_EOF)
1166         break;
1167
1168       arg->expanded[arg->expanded_count++] = token;
1169     }
1170
1171   _cpp_pop_context (pfile);
1172
1173   CPP_WTRADITIONAL (pfile) = saved_warn_trad;
1174 }
1175
1176 /* Pop the current context off the stack, re-enabling the macro if the
1177    context represented a macro's replacement list.  The context
1178    structure is not freed so that we can re-use it later.  */
1179 void
1180 _cpp_pop_context (cpp_reader *pfile)
1181 {
1182   cpp_context *context = pfile->context;
1183
1184   if (context->macro)
1185     context->macro->flags &= ~NODE_DISABLED;
1186
1187   if (context->buff)
1188     _cpp_release_buff (pfile, context->buff);
1189
1190   pfile->context = context->prev;
1191 }
1192
1193 /* External routine to get a token.  Also used nearly everywhere
1194    internally, except for places where we know we can safely call
1195    _cpp_lex_token directly, such as lexing a directive name.
1196
1197    Macro expansions and directives are transparently handled,
1198    including entering included files.  Thus tokens are post-macro
1199    expansion, and after any intervening directives.  External callers
1200    see CPP_EOF only at EOF.  Internal callers also see it when meeting
1201    a directive inside a macro call, when at the end of a directive and
1202    state.in_directive is still 1, and at the end of argument
1203    pre-expansion.  */
1204 const cpp_token *
1205 cpp_get_token (cpp_reader *pfile)
1206 {
1207   const cpp_token *result;
1208   bool can_set = pfile->set_invocation_location;
1209   pfile->set_invocation_location = false;
1210
1211   for (;;)
1212     {
1213       cpp_hashnode *node;
1214       cpp_context *context = pfile->context;
1215
1216       /* Context->prev == 0 <=> base context.  */
1217       if (!context->prev)
1218         result = _cpp_lex_token (pfile);
1219       else if (FIRST (context).token != LAST (context).token)
1220         {
1221           if (context->direct_p)
1222             result = FIRST (context).token++;
1223           else
1224             result = *FIRST (context).ptoken++;
1225
1226           if (result->flags & PASTE_LEFT)
1227             {
1228               paste_all_tokens (pfile, result);
1229               if (pfile->state.in_directive)
1230                 continue;
1231               return padding_token (pfile, result);
1232             }
1233         }
1234       else
1235         {
1236           _cpp_pop_context (pfile);
1237           if (pfile->state.in_directive)
1238             continue;
1239           return &pfile->avoid_paste;
1240         }
1241
1242       if (pfile->state.in_directive && result->type == CPP_COMMENT)
1243         continue;
1244
1245       if (result->type != CPP_NAME)
1246         break;
1247
1248       node = result->val.node;
1249
1250       if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
1251         break;
1252
1253       if (!(node->flags & NODE_DISABLED))
1254         {
1255           int ret = 0;
1256           /* If not in a macro context, and we're going to start an
1257              expansion, record the location.  */
1258           if (can_set && !context->macro)
1259             pfile->invocation_location = result->src_loc;
1260           if (pfile->state.prevent_expansion)
1261             break;
1262
1263           /* Conditional macros require that a predicate be evaluated
1264              first.  */
1265           if ((node->flags & NODE_CONDITIONAL) != 0)
1266             {
1267               if (pfile->cb.macro_to_expand)
1268                 {
1269                   bool whitespace_after;
1270                   const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
1271
1272                   whitespace_after = (peek_tok->type == CPP_PADDING
1273                                       || (peek_tok->flags & PREV_WHITE));
1274                   node = pfile->cb.macro_to_expand (pfile, result);
1275                   if (node)
1276                     ret = enter_macro_context (pfile, node, result);
1277                   else if (whitespace_after)
1278                     {
1279                       /* If macro_to_expand hook returned NULL and it
1280                          ate some tokens, see if we don't need to add
1281                          a padding token in between this and the
1282                          next token.  */
1283                       peek_tok = cpp_peek_token (pfile, 0);
1284                       if (peek_tok->type != CPP_PADDING
1285                           && (peek_tok->flags & PREV_WHITE) == 0)
1286                         _cpp_push_token_context (pfile, NULL,
1287                                                  padding_token (pfile,
1288                                                                 peek_tok), 1);
1289                     }
1290                 }
1291             }
1292           else
1293             ret = enter_macro_context (pfile, node, result);
1294           if (ret)
1295             {
1296               if (pfile->state.in_directive || ret == 2)
1297                 continue;
1298               return padding_token (pfile, result);
1299             }
1300         }
1301       else
1302         {
1303           /* Flag this token as always unexpandable.  FIXME: move this
1304              to collect_args()?.  */
1305           cpp_token *t = _cpp_temp_token (pfile);
1306           t->type = result->type;
1307           t->flags = result->flags | NO_EXPAND;
1308           t->val = result->val;
1309           result = t;
1310         }
1311
1312       break;
1313     }
1314
1315   return result;
1316 }
1317
1318 /* Like cpp_get_token, but also returns a location separate from the
1319    one provided by the returned token.  LOC is an out parameter; *LOC
1320    is set to the location "as expected by the user".  This matters
1321    when a token results from macro expansion -- the token's location
1322    will indicate where the macro is defined, but *LOC will be the
1323    location of the start of the expansion.  */
1324 const cpp_token *
1325 cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
1326 {
1327   const cpp_token *result;
1328
1329   pfile->set_invocation_location = true;
1330   result = cpp_get_token (pfile);
1331   if (pfile->context->macro)
1332     *loc = pfile->invocation_location;
1333   else
1334     *loc = result->src_loc;
1335
1336   return result;
1337 }
1338
1339 /* Returns true if we're expanding an object-like macro that was
1340    defined in a system header.  Just checks the macro at the top of
1341    the stack.  Used for diagnostic suppression.  */
1342 int
1343 cpp_sys_macro_p (cpp_reader *pfile)
1344 {
1345   cpp_hashnode *node = pfile->context->macro;
1346
1347   return node && node->value.macro && node->value.macro->syshdr;
1348 }
1349
1350 /* Read each token in, until end of the current file.  Directives are
1351    transparently processed.  */
1352 void
1353 cpp_scan_nooutput (cpp_reader *pfile)
1354 {
1355   /* Request a CPP_EOF token at the end of this file, rather than
1356      transparently continuing with the including file.  */
1357   pfile->buffer->return_at_eof = true;
1358
1359   pfile->state.discarding_output++;
1360   pfile->state.prevent_expansion++;
1361
1362   if (CPP_OPTION (pfile, traditional))
1363     while (_cpp_read_logical_line_trad (pfile))
1364       ;
1365   else
1366     while (cpp_get_token (pfile)->type != CPP_EOF)
1367       ;
1368
1369   pfile->state.discarding_output--;
1370   pfile->state.prevent_expansion--;
1371 }
1372
1373 /* Step back one or more tokens obtained from the lexer.  */
1374 void
1375 _cpp_backup_tokens_direct (cpp_reader *pfile, unsigned int count)
1376 {
1377   pfile->lookaheads += count;
1378   while (count--)
1379     {
1380       pfile->cur_token--;
1381       if (pfile->cur_token == pfile->cur_run->base
1382           /* Possible with -fpreprocessed and no leading #line.  */
1383           && pfile->cur_run->prev != NULL)
1384         {
1385           pfile->cur_run = pfile->cur_run->prev;
1386           pfile->cur_token = pfile->cur_run->limit;
1387         }
1388     }
1389 }
1390
1391 /* Step back one (or more) tokens.  Can only step back more than 1 if
1392    they are from the lexer, and not from macro expansion.  */
1393 void
1394 _cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
1395 {
1396   if (pfile->context->prev == NULL)
1397     _cpp_backup_tokens_direct (pfile, count);
1398   else
1399     {
1400       if (count != 1)
1401         abort ();
1402       if (pfile->context->direct_p)
1403         FIRST (pfile->context).token--;
1404       else
1405         FIRST (pfile->context).ptoken--;
1406     }
1407 }
1408
1409 /* #define directive parsing and handling.  */
1410
1411 /* Returns nonzero if a macro redefinition warning is required.  */
1412 static bool
1413 warn_of_redefinition (cpp_reader *pfile, const cpp_hashnode *node,
1414                       const cpp_macro *macro2)
1415 {
1416   const cpp_macro *macro1;
1417   unsigned int i;
1418
1419   /* Some redefinitions need to be warned about regardless.  */
1420   if (node->flags & NODE_WARN)
1421     return true;
1422
1423   /* Suppress warnings for builtins that lack the NODE_WARN flag.  */
1424   if (node->flags & NODE_BUILTIN)
1425     return false;
1426
1427   /* Redefinitions of conditional (context-sensitive) macros, on
1428      the other hand, must be allowed silently.  */
1429   if (node->flags & NODE_CONDITIONAL)
1430     return false;
1431
1432   /* Redefinition of a macro is allowed if and only if the old and new
1433      definitions are the same.  (6.10.3 paragraph 2).  */
1434   macro1 = node->value.macro;
1435
1436   /* Don't check count here as it can be different in valid
1437      traditional redefinitions with just whitespace differences.  */
1438   if (macro1->paramc != macro2->paramc
1439       || macro1->fun_like != macro2->fun_like
1440       || macro1->variadic != macro2->variadic)
1441     return true;
1442
1443   /* Check parameter spellings.  */
1444   for (i = 0; i < macro1->paramc; i++)
1445     if (macro1->params[i] != macro2->params[i])
1446       return true;
1447
1448   /* Check the replacement text or tokens.  */
1449   if (CPP_OPTION (pfile, traditional))
1450     return _cpp_expansions_different_trad (macro1, macro2);
1451
1452   if (macro1->count != macro2->count)
1453     return true;
1454
1455   for (i = 0; i < macro1->count; i++)
1456     if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
1457       return true;
1458
1459   return false;
1460 }
1461
1462 /* Free the definition of hashnode H.  */
1463 void
1464 _cpp_free_definition (cpp_hashnode *h)
1465 {
1466   /* Macros and assertions no longer have anything to free.  */
1467   h->type = NT_VOID;
1468   /* Clear builtin flag in case of redefinition.  */
1469   h->flags &= ~(NODE_BUILTIN | NODE_DISABLED | NODE_USED);
1470 }
1471
1472 /* Save parameter NODE to the parameter list of macro MACRO.  Returns
1473    zero on success, nonzero if the parameter is a duplicate.  */
1474 bool
1475 _cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
1476 {
1477   unsigned int len;
1478   /* Constraint 6.10.3.6 - duplicate parameter names.  */
1479   if (node->flags & NODE_MACRO_ARG)
1480     {
1481       cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
1482                  NODE_NAME (node));
1483       return true;
1484     }
1485
1486   if (BUFF_ROOM (pfile->a_buff)
1487       < (macro->paramc + 1) * sizeof (cpp_hashnode *))
1488     _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
1489
1490   ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
1491   node->flags |= NODE_MACRO_ARG;
1492   len = macro->paramc * sizeof (union _cpp_hashnode_value);
1493   if (len > pfile->macro_buffer_len)
1494     {
1495       pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
1496                                         len);
1497       pfile->macro_buffer_len = len;
1498     }
1499   ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
1500     = node->value;
1501   
1502   node->value.arg_index  = macro->paramc;
1503   return false;
1504 }
1505
1506 /* Check the syntax of the parameters in a MACRO definition.  Returns
1507    false if an error occurs.  */
1508 static bool
1509 parse_params (cpp_reader *pfile, cpp_macro *macro)
1510 {
1511   unsigned int prev_ident = 0;
1512
1513   for (;;)
1514     {
1515       const cpp_token *token = _cpp_lex_token (pfile);
1516
1517       switch (token->type)
1518         {
1519         default:
1520           /* Allow/ignore comments in parameter lists if we are
1521              preserving comments in macro expansions.  */
1522           if (token->type == CPP_COMMENT
1523               && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
1524             continue;
1525
1526           cpp_error (pfile, CPP_DL_ERROR,
1527                      "\"%s\" may not appear in macro parameter list",
1528                      cpp_token_as_text (pfile, token));
1529           return false;
1530
1531         case CPP_NAME:
1532           if (prev_ident)
1533             {
1534               cpp_error (pfile, CPP_DL_ERROR,
1535                          "macro parameters must be comma-separated");
1536               return false;
1537             }
1538           prev_ident = 1;
1539
1540           if (_cpp_save_parameter (pfile, macro, token->val.node))
1541             return false;
1542           continue;
1543
1544         case CPP_CLOSE_PAREN:
1545           if (prev_ident || macro->paramc == 0)
1546             return true;
1547
1548           /* Fall through to pick up the error.  */
1549         case CPP_COMMA:
1550           if (!prev_ident)
1551             {
1552               cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
1553               return false;
1554             }
1555           prev_ident = 0;
1556           continue;
1557
1558         case CPP_ELLIPSIS:
1559           macro->variadic = 1;
1560           if (!prev_ident)
1561             {
1562               _cpp_save_parameter (pfile, macro,
1563                                    pfile->spec_nodes.n__VA_ARGS__);
1564               pfile->state.va_args_ok = 1;
1565               if (! CPP_OPTION (pfile, c99)
1566                   && CPP_OPTION (pfile, pedantic)
1567                   && CPP_OPTION (pfile, warn_variadic_macros))
1568                 cpp_error (pfile, CPP_DL_PEDWARN,
1569                            "anonymous variadic macros were introduced in C99");
1570             }
1571           else if (CPP_OPTION (pfile, pedantic)
1572                    && CPP_OPTION (pfile, warn_variadic_macros))
1573             cpp_error (pfile, CPP_DL_PEDWARN,
1574                        "ISO C does not permit named variadic macros");
1575
1576           /* We're at the end, and just expect a closing parenthesis.  */
1577           token = _cpp_lex_token (pfile);
1578           if (token->type == CPP_CLOSE_PAREN)
1579             return true;
1580           /* Fall through.  */
1581
1582         case CPP_EOF:
1583           cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
1584           return false;
1585         }
1586     }
1587 }
1588
1589 /* Allocate room for a token from a macro's replacement list.  */
1590 static cpp_token *
1591 alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
1592 {
1593   if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
1594     _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
1595
1596   return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
1597 }
1598
1599 /* Lex a token from the expansion of MACRO, but mark parameters as we
1600    find them and warn of traditional stringification.  */
1601 static cpp_token *
1602 lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
1603 {
1604   cpp_token *token, *saved_cur_token;
1605
1606   saved_cur_token = pfile->cur_token;
1607   pfile->cur_token = alloc_expansion_token (pfile, macro);
1608   token = _cpp_lex_direct (pfile);
1609   pfile->cur_token = saved_cur_token;
1610
1611   /* Is this a parameter?  */
1612   if (token->type == CPP_NAME
1613       && (token->val.node->flags & NODE_MACRO_ARG) != 0)
1614     {
1615       token->type = CPP_MACRO_ARG;
1616       token->val.arg_no = token->val.node->value.arg_index;
1617     }
1618   else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1619            && (token->type == CPP_STRING || token->type == CPP_CHAR))
1620     check_trad_stringification (pfile, macro, &token->val.str);
1621
1622   return token;
1623 }
1624
1625 static bool
1626 create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
1627 {
1628   cpp_token *token;
1629   const cpp_token *ctoken;
1630   bool following_paste_op = false;
1631   const char *paste_op_error_msg =
1632     N_("'##' cannot appear at either end of a macro expansion");
1633
1634   /* Get the first token of the expansion (or the '(' of a
1635      function-like macro).  */
1636   ctoken = _cpp_lex_token (pfile);
1637
1638   if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
1639     {
1640       bool ok = parse_params (pfile, macro);
1641       macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
1642       if (!ok)
1643         return false;
1644
1645       /* Success.  Commit or allocate the parameter array.  */
1646       if (pfile->hash_table->alloc_subobject)
1647         {
1648           cpp_hashnode **params =
1649             (cpp_hashnode **) pfile->hash_table->alloc_subobject
1650             (sizeof (cpp_hashnode *) * macro->paramc);
1651           memcpy (params, macro->params,
1652                   sizeof (cpp_hashnode *) * macro->paramc);
1653           macro->params = params;
1654         }
1655       else
1656         BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
1657       macro->fun_like = 1;
1658     }
1659   else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
1660     {
1661       /* While ISO C99 requires whitespace before replacement text
1662          in a macro definition, ISO C90 with TC1 allows there characters
1663          from the basic source character set.  */
1664       if (CPP_OPTION (pfile, c99))
1665         cpp_error (pfile, CPP_DL_PEDWARN,
1666                    "ISO C99 requires whitespace after the macro name");
1667       else
1668         {
1669           int warntype = CPP_DL_WARNING;
1670           switch (ctoken->type)
1671             {
1672             case CPP_ATSIGN:
1673             case CPP_AT_NAME:
1674             case CPP_OBJC_STRING:
1675               /* '@' is not in basic character set.  */
1676               warntype = CPP_DL_PEDWARN;
1677               break;
1678             case CPP_OTHER:
1679               /* Basic character set sans letters, digits and _.  */
1680               if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
1681                           ctoken->val.str.text[0]) == NULL)
1682                 warntype = CPP_DL_PEDWARN;
1683               break;
1684             default:
1685               /* All other tokens start with a character from basic
1686                  character set.  */
1687               break;
1688             }
1689           cpp_error (pfile, warntype,
1690                      "missing whitespace after the macro name");
1691         }
1692     }
1693
1694   if (macro->fun_like)
1695     token = lex_expansion_token (pfile, macro);
1696   else
1697     {
1698       token = alloc_expansion_token (pfile, macro);
1699       *token = *ctoken;
1700     }
1701
1702   for (;;)
1703     {
1704       /* Check the stringifying # constraint 6.10.3.2.1 of
1705          function-like macros when lexing the subsequent token.  */
1706       if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1707         {
1708           if (token->type == CPP_MACRO_ARG)
1709             {
1710               token->flags &= ~PREV_WHITE;
1711               token->flags |= STRINGIFY_ARG;
1712               token->flags |= token[-1].flags & PREV_WHITE;
1713               token[-1] = token[0];
1714               macro->count--;
1715             }
1716           /* Let assembler get away with murder.  */
1717           else if (CPP_OPTION (pfile, lang) != CLK_ASM)
1718             {
1719               cpp_error (pfile, CPP_DL_ERROR,
1720                          "'#' is not followed by a macro parameter");
1721               return false;
1722             }
1723         }
1724
1725       if (token->type == CPP_EOF)
1726         {
1727           /* Paste operator constraint 6.10.3.3.1:
1728              Token-paste ##, can appear in both object-like and
1729              function-like macros, but not at the end.  */
1730           if (following_paste_op)
1731             {
1732               cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
1733               return false;
1734             }
1735           break;
1736         }
1737
1738       /* Paste operator constraint 6.10.3.3.1.  */
1739       if (token->type == CPP_PASTE)
1740         {
1741           /* Token-paste ##, can appear in both object-like and
1742              function-like macros, but not at the beginning.  */
1743           if (macro->count == 1)
1744             {
1745               cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
1746               return false;
1747             }
1748
1749           --macro->count;
1750           token[-1].flags |= PASTE_LEFT;
1751         }
1752
1753       following_paste_op = (token->type == CPP_PASTE);
1754       token = lex_expansion_token (pfile, macro);
1755     }
1756
1757   macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
1758   macro->traditional = 0;
1759
1760   /* Don't count the CPP_EOF.  */
1761   macro->count--;
1762
1763   /* Clear whitespace on first token for warn_of_redefinition().  */
1764   if (macro->count)
1765     macro->exp.tokens[0].flags &= ~PREV_WHITE;
1766
1767   /* Commit or allocate the memory.  */
1768   if (pfile->hash_table->alloc_subobject)
1769     {
1770       cpp_token *tokns =
1771         (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
1772                                                           * macro->count);
1773       memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
1774       macro->exp.tokens = tokns;
1775     }
1776   else
1777     BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
1778
1779   return true;
1780 }
1781
1782 /* Parse a macro and save its expansion.  Returns nonzero on success.  */
1783 bool
1784 _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
1785 {
1786   cpp_macro *macro;
1787   unsigned int i;
1788   bool ok;
1789
1790   if (pfile->hash_table->alloc_subobject)
1791     macro = (cpp_macro *) pfile->hash_table->alloc_subobject
1792       (sizeof (cpp_macro));
1793   else
1794     macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
1795   macro->line = pfile->directive_line;
1796   macro->params = 0;
1797   macro->paramc = 0;
1798   macro->variadic = 0;
1799   macro->used = !CPP_OPTION (pfile, warn_unused_macros);
1800   macro->count = 0;
1801   macro->fun_like = 0;
1802   /* To suppress some diagnostics.  */
1803   macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
1804
1805   if (CPP_OPTION (pfile, traditional))
1806     ok = _cpp_create_trad_definition (pfile, macro);
1807   else
1808     {
1809       ok = create_iso_definition (pfile, macro);
1810
1811       /* We set the type for SEEN_EOL() in directives.c.
1812
1813          Longer term we should lex the whole line before coming here,
1814          and just copy the expansion.  */
1815
1816       /* Stop the lexer accepting __VA_ARGS__.  */
1817       pfile->state.va_args_ok = 0;
1818     }
1819
1820   /* Clear the fast argument lookup indices.  */
1821   for (i = macro->paramc; i-- > 0; )
1822     {
1823       struct cpp_hashnode *node = macro->params[i];
1824       node->flags &= ~ NODE_MACRO_ARG;
1825       node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
1826     }
1827
1828   if (!ok)
1829     return ok;
1830
1831   if (node->type == NT_MACRO)
1832     {
1833       if (CPP_OPTION (pfile, warn_unused_macros))
1834         _cpp_warn_if_unused_macro (pfile, node, NULL);
1835
1836       if (warn_of_redefinition (pfile, node, macro))
1837         {
1838           bool warned;
1839           warned = cpp_error_with_line (pfile, CPP_DL_PEDWARN,
1840                                         pfile->directive_line, 0,
1841                                         "\"%s\" redefined", NODE_NAME (node));
1842
1843           if (warned && node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
1844             cpp_error_with_line (pfile, CPP_DL_NOTE,
1845                                  node->value.macro->line, 0,
1846                          "this is the location of the previous definition");
1847         }
1848     }
1849
1850   if (node->type != NT_VOID)
1851     _cpp_free_definition (node);
1852
1853   /* Enter definition in hash table.  */
1854   node->type = NT_MACRO;
1855   node->value.macro = macro;
1856   if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
1857       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
1858       /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
1859          in the C standard, as something that one must use in C++.
1860          However DR#593 indicates that these aren't actually mentioned
1861          in the C++ standard.  We special-case them anyway.  */
1862       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
1863       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
1864     node->flags |= NODE_WARN;
1865
1866   /* If user defines one of the conditional macros, remove the
1867      conditional flag */
1868   node->flags &= ~NODE_CONDITIONAL;
1869
1870   return ok;
1871 }
1872
1873 /* Warn if a token in STRING matches one of a function-like MACRO's
1874    parameters.  */
1875 static void
1876 check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
1877                             const cpp_string *string)
1878 {
1879   unsigned int i, len;
1880   const uchar *p, *q, *limit;
1881
1882   /* Loop over the string.  */
1883   limit = string->text + string->len - 1;
1884   for (p = string->text + 1; p < limit; p = q)
1885     {
1886       /* Find the start of an identifier.  */
1887       while (p < limit && !is_idstart (*p))
1888         p++;
1889
1890       /* Find the end of the identifier.  */
1891       q = p;
1892       while (q < limit && is_idchar (*q))
1893         q++;
1894
1895       len = q - p;
1896
1897       /* Loop over the function macro arguments to see if the
1898          identifier inside the string matches one of them.  */
1899       for (i = 0; i < macro->paramc; i++)
1900         {
1901           const cpp_hashnode *node = macro->params[i];
1902
1903           if (NODE_LEN (node) == len
1904               && !memcmp (p, NODE_NAME (node), len))
1905             {
1906               cpp_error (pfile, CPP_DL_WARNING,
1907            "macro argument \"%s\" would be stringified in traditional C",
1908                          NODE_NAME (node));
1909               break;
1910             }
1911         }
1912     }
1913 }
1914
1915 /* Returns the name, arguments and expansion of a macro, in a format
1916    suitable to be read back in again, and therefore also for DWARF 2
1917    debugging info.  e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1918    Caller is expected to generate the "#define" bit if needed.  The
1919    returned text is temporary, and automatically freed later.  */
1920 const unsigned char *
1921 cpp_macro_definition (cpp_reader *pfile, const cpp_hashnode *node)
1922 {
1923   unsigned int i, len;
1924   const cpp_macro *macro = node->value.macro;
1925   unsigned char *buffer;
1926
1927   if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1928     {
1929       cpp_error (pfile, CPP_DL_ICE,
1930                  "invalid hash type %d in cpp_macro_definition", node->type);
1931       return 0;
1932     }
1933
1934   /* Calculate length.  */
1935   len = NODE_LEN (node) + 2;                    /* ' ' and NUL.  */
1936   if (macro->fun_like)
1937     {
1938       len += 4;         /* "()" plus possible final ".." of named
1939                            varargs (we have + 1 below).  */
1940       for (i = 0; i < macro->paramc; i++)
1941         len += NODE_LEN (macro->params[i]) + 1; /* "," */
1942     }
1943
1944   /* This should match below where we fill in the buffer.  */
1945   if (CPP_OPTION (pfile, traditional))
1946     len += _cpp_replacement_text_len (macro);
1947   else
1948     {
1949       for (i = 0; i < macro->count; i++)
1950         {
1951           cpp_token *token = &macro->exp.tokens[i];
1952
1953           if (token->type == CPP_MACRO_ARG)
1954             len += NODE_LEN (macro->params[token->val.arg_no - 1]);
1955           else
1956             len += cpp_token_len (token);
1957
1958           if (token->flags & STRINGIFY_ARG)
1959             len++;                      /* "#" */
1960           if (token->flags & PASTE_LEFT)
1961             len += 3;           /* " ##" */
1962           if (token->flags & PREV_WHITE)
1963             len++;              /* " " */
1964         }
1965     }
1966
1967   if (len > pfile->macro_buffer_len)
1968     {
1969       pfile->macro_buffer = XRESIZEVEC (unsigned char,
1970                                         pfile->macro_buffer, len);
1971       pfile->macro_buffer_len = len;
1972     }
1973
1974   /* Fill in the buffer.  Start with the macro name.  */
1975   buffer = pfile->macro_buffer;
1976   memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
1977   buffer += NODE_LEN (node);
1978
1979   /* Parameter names.  */
1980   if (macro->fun_like)
1981     {
1982       *buffer++ = '(';
1983       for (i = 0; i < macro->paramc; i++)
1984         {
1985           cpp_hashnode *param = macro->params[i];
1986
1987           if (param != pfile->spec_nodes.n__VA_ARGS__)
1988             {
1989               memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
1990               buffer += NODE_LEN (param);
1991             }
1992
1993           if (i + 1 < macro->paramc)
1994             /* Don't emit a space after the comma here; we're trying
1995                to emit a Dwarf-friendly definition, and the Dwarf spec
1996                forbids spaces in the argument list.  */
1997             *buffer++ = ',';
1998           else if (macro->variadic)
1999             *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
2000         }
2001       *buffer++ = ')';
2002     }
2003
2004   /* The Dwarf spec requires a space after the macro name, even if the
2005      definition is the empty string.  */
2006   *buffer++ = ' ';
2007
2008   if (CPP_OPTION (pfile, traditional))
2009     buffer = _cpp_copy_replacement_text (macro, buffer);
2010   else if (macro->count)
2011   /* Expansion tokens.  */
2012     {
2013       for (i = 0; i < macro->count; i++)
2014         {
2015           cpp_token *token = &macro->exp.tokens[i];
2016
2017           if (token->flags & PREV_WHITE)
2018             *buffer++ = ' ';
2019           if (token->flags & STRINGIFY_ARG)
2020             *buffer++ = '#';
2021
2022           if (token->type == CPP_MACRO_ARG)
2023             {
2024               memcpy (buffer,
2025                       NODE_NAME (macro->params[token->val.arg_no - 1]),
2026                       NODE_LEN (macro->params[token->val.arg_no - 1]));
2027               buffer += NODE_LEN (macro->params[token->val.arg_no - 1]);
2028             }
2029           else
2030             buffer = cpp_spell_token (pfile, token, buffer, false);
2031
2032           if (token->flags & PASTE_LEFT)
2033             {
2034               *buffer++ = ' ';
2035               *buffer++ = '#';
2036               *buffer++ = '#';
2037               /* Next has PREV_WHITE; see _cpp_create_definition.  */
2038             }
2039         }
2040     }
2041
2042   *buffer = '\0';
2043   return pfile->macro_buffer;
2044 }