OSDN Git Service

* cpphash.h (struct cpp_reader): Remove lexer_pos, directive_pos.
[pf3gnuchains/gcc-fork.git] / gcc / cppmacro.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 Free Software Foundation, Inc.
4    Written by Per Bothner, 1994.
5    Based on CCCP program by Paul Rubin, June 1986
6    Adapted to ANSI C, Richard Stallman, Jan 1987
7
8 This program is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
11 later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
22  In other words, you are welcome to use, share and improve this program.
23  You are forbidden to forbid anyone else to use, share and improve
24  what you give them.   Help stamp out software-hoarding!  */
25
26 #include "config.h"
27 #include "system.h"
28 #include "intl.h"               /* for _("<command line>") below.  */
29 #include "cpplib.h"
30 #include "cpphash.h"
31
32 struct cpp_macro
33 {
34   cpp_hashnode **params;        /* Parameters, if any.  */
35   cpp_token *expansion;         /* First token of replacement list.   */
36   unsigned int line;            /* Starting line number.  */
37   unsigned int count;           /* Number of tokens in expansion.  */
38   unsigned short paramc;        /* Number of parameters.  */
39   unsigned int fun_like : 1;    /* If a function-like macro.  */
40   unsigned int variadic : 1;    /* If a variadic macro.  */
41   unsigned int disabled : 1;    /* If macro is disabled.  */
42   unsigned int syshdr   : 1;    /* If macro defined in system header.  */
43 };
44
45 typedef struct macro_arg macro_arg;
46 struct macro_arg
47 {
48   cpp_token *first;             /* First token in unexpanded argument.  */
49   cpp_token *expanded;          /* Macro-expanded argument.   */
50   cpp_token *stringified;       /* Stringified argument.  */
51   unsigned int count;           /* # of tokens in argument.  */
52   unsigned int expanded_count;  /* # of tokens in expanded argument.  */
53 };
54
55 /* Macro expansion.  */
56
57 static void lock_pools PARAMS ((cpp_reader *));
58 static void unlock_pools PARAMS ((cpp_reader *));
59 static int enter_macro_context PARAMS ((cpp_reader *, cpp_hashnode *));
60 static void builtin_macro PARAMS ((cpp_reader *, cpp_token *));
61 static cpp_context *push_arg_context PARAMS ((cpp_reader *, macro_arg *));
62 static enum cpp_ttype parse_arg PARAMS ((cpp_reader *, macro_arg *, int));
63 static macro_arg *parse_args PARAMS ((cpp_reader *, const cpp_hashnode *));
64 static cpp_context *next_context PARAMS ((cpp_reader *));
65 static void expand_arg PARAMS ((cpp_reader *, macro_arg *));
66 static unsigned char *quote_string PARAMS ((unsigned char *,
67                                             const unsigned char *,
68                                             unsigned int));
69 static void make_string_token PARAMS ((cpp_pool *, cpp_token *,
70                                        const U_CHAR *, unsigned int));
71 static void make_number_token PARAMS ((cpp_reader *, cpp_token *, int));
72 static void stringify_arg PARAMS ((cpp_reader *, macro_arg *));
73 static void paste_all_tokens PARAMS ((cpp_reader *, cpp_token *));
74 static int paste_tokens PARAMS ((cpp_reader *, cpp_token *, cpp_token *));
75 static int funlike_invocation_p PARAMS ((cpp_reader *, const cpp_hashnode *,
76                                           struct toklist *));
77 static void replace_args PARAMS ((cpp_reader *, cpp_macro *, macro_arg *,
78                                   struct toklist *));
79
80 /* #define directive parsing and handling.  */
81
82 static cpp_token *lex_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
83 static int warn_of_redefinition PARAMS ((cpp_reader *, const cpp_hashnode *,
84                                          const cpp_macro *));
85 static int save_parameter PARAMS ((cpp_reader *, cpp_macro *, cpp_hashnode *));
86 static int parse_params PARAMS ((cpp_reader *, cpp_macro *));
87 static void check_trad_stringification PARAMS ((cpp_reader *,
88                                                 const cpp_macro *,
89                                                 const cpp_string *));
90
91 /* Allocates a buffer to hold a token's TEXT, and converts TOKEN to a
92    CPP_STRING token containing TEXT in quoted form.  */
93 static void
94 make_string_token (pool, token, text, len)
95      cpp_pool *pool;
96      cpp_token *token;
97      const U_CHAR *text;
98      unsigned int len;
99 {
100   U_CHAR *buf = _cpp_pool_alloc (pool, len * 4 + 1);
101
102   token->type = CPP_STRING;
103   token->val.str.text = buf;
104   token->val.str.len = quote_string (buf, text, len) - buf;
105   buf[token->val.str.len] = '\0';
106   token->flags = 0;
107 }
108
109 /* Allocates and converts a temporary token to a CPP_NUMBER token,
110    evaluating to NUMBER.  */
111 static void
112 make_number_token (pfile, token, number)
113      cpp_reader *pfile;
114      cpp_token *token;
115      int number;
116 {
117   unsigned char *buf = _cpp_pool_alloc (&pfile->ident_pool, 20);
118
119   sprintf ((char *) buf, "%d", number);
120   token->type = CPP_NUMBER;
121   token->val.str.text = buf;
122   token->val.str.len = ustrlen (buf);
123   token->flags = 0;
124 }
125
126 static const char * const monthnames[] =
127 {
128   "Jan", "Feb", "Mar", "Apr", "May", "Jun",
129   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
130 };
131
132 /* Handle builtin macros like __FILE__.  */
133 static void
134 builtin_macro (pfile, token)
135      cpp_reader *pfile;
136      cpp_token *token;
137 {
138   unsigned char flags = ((token->flags & (PREV_WHITE | BOL)) | AVOID_LPASTE);
139   cpp_hashnode *node = token->val.node;
140
141   switch (node->value.builtin)
142     {
143     case BT_FILE:
144     case BT_BASE_FILE:
145       {
146         const char *name;
147         const struct line_map *map = pfile->map;
148
149         if (node->value.builtin == BT_BASE_FILE)
150           while (! MAIN_FILE_P (map))
151             map = INCLUDED_FROM (&pfile->line_maps, map);
152
153         name = map->to_file;
154         make_string_token (&pfile->ident_pool, token,
155                            (const unsigned char *) name, strlen (name));
156       }
157       break;
158         
159     case BT_INCLUDE_LEVEL:
160       /* The line map depth counts the primary source as level 1, but
161          historically __INCLUDE_DEPTH__ has called the primary source
162          level 0.  */
163       make_number_token (pfile, token, pfile->line_maps.depth - 1);
164       break;
165
166     case BT_SPECLINE:
167       /* If __LINE__ is embedded in a macro, it must expand to the
168          line of the macro's invocation, not its definition.
169          Otherwise things like assert() will not work properly.  */
170       make_number_token (pfile, token,
171                          SOURCE_LINE (pfile->map, pfile->cur_token[-1].line));
172       break;
173
174     case BT_STDC:
175       {
176         int stdc = (!CPP_IN_SYSTEM_HEADER (pfile)
177                     || pfile->spec_nodes.n__STRICT_ANSI__->type != NT_VOID);
178         make_number_token (pfile, token, stdc);
179       }
180       break;
181
182     case BT_DATE:
183     case BT_TIME:
184       if (pfile->date.type == CPP_EOF)
185         {
186           /* Allocate __DATE__ and __TIME__ from permanent storage,
187              and save them in pfile so we don't have to do this again.
188              We don't generate these strings at init time because
189              time() and localtime() are very slow on some systems.  */
190           time_t tt = time (NULL);
191           struct tm *tb = localtime (&tt);
192
193           make_string_token (&pfile->ident_pool, &pfile->date,
194                              DSC("Oct 11 1347"));
195           make_string_token (&pfile->ident_pool, &pfile->time,
196                              DSC("12:34:56"));
197
198           sprintf ((char *) pfile->date.val.str.text, "%s %2d %4d",
199                    monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900);
200           sprintf ((char *) pfile->time.val.str.text, "%02d:%02d:%02d",
201                    tb->tm_hour, tb->tm_min, tb->tm_sec);
202         }
203       *token = node->value.builtin == BT_DATE ? pfile->date: pfile->time;
204       break;
205
206     default:
207       cpp_ice (pfile, "invalid builtin macro \"%s\"", NODE_NAME (node));
208       break;
209     }
210
211   token->flags = flags;
212 }
213
214 static void
215 lock_pools (pfile)
216      cpp_reader *pfile;
217 {
218   _cpp_lock_pool (&pfile->argument_pool);
219 }
220
221 static void
222 unlock_pools (pfile)
223      cpp_reader *pfile;
224 {
225   _cpp_unlock_pool (&pfile->argument_pool);
226 }
227
228 /* Adds backslashes before all backslashes and double quotes appearing
229    in strings.  Non-printable characters are converted to octal.  */
230 static U_CHAR *
231 quote_string (dest, src, len)
232      U_CHAR *dest;
233      const U_CHAR *src;
234      unsigned int len;
235 {
236   while (len--)
237     {
238       U_CHAR c = *src++;
239
240       if (c == '\\' || c == '"')
241         {
242           *dest++ = '\\';
243           *dest++ = c;
244         }
245       else
246         {
247           if (ISPRINT (c))
248             *dest++ = c;
249           else
250             {
251               sprintf ((char *) dest, "\\%03o", c);
252               dest += 4;
253             }
254         }
255     }
256
257   return dest;
258 }
259
260 /* Convert a token sequence to a single string token according to the
261    rules of the ISO C #-operator.  */
262 static void
263 stringify_arg (pfile, arg)
264      cpp_reader *pfile;
265      macro_arg *arg;
266 {
267   cpp_pool *pool = &pfile->ident_pool;
268   unsigned char *start = POOL_FRONT (pool);
269   unsigned int i, escape_it, total_len = 0, backslash_count = 0;
270
271   /* Loop, reading in the argument's tokens.  */
272   for (i = 0; i < arg->count; i++)
273     {
274       unsigned char *dest;
275       const cpp_token *token = &arg->first[i];
276       unsigned int len = cpp_token_len (token);
277
278       escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING
279                    || token->type == CPP_CHAR || token->type == CPP_WCHAR);
280
281       if (escape_it)
282         /* Worst case is each char is octal.  */
283         len *= 4;
284       len += 2;                 /* Room for initial space and final NUL.  */
285
286       dest = &start[total_len];
287       if (dest + len > POOL_LIMIT (pool))
288         {
289           _cpp_next_chunk (pool, len, (unsigned char **) &start);
290           dest = &start[total_len];
291         }
292
293       /* No leading white space.  */
294       if (token->flags & PREV_WHITE && total_len > 0)
295         *dest++ = ' ';
296
297       if (escape_it)
298         {
299           unsigned char *buf = (unsigned char *) xmalloc (len);
300
301           len = cpp_spell_token (pfile, token, buf) - buf;
302           dest = quote_string (dest, buf, len);
303           free (buf);
304         }
305       else
306         dest = cpp_spell_token (pfile, token, dest);
307       total_len = dest - start;
308
309       if (token->type == CPP_OTHER && token->val.c == '\\')
310         backslash_count++;
311       else
312         backslash_count = 0;
313     }
314
315   /* Ignore the final \ of invalid string literals.  */
316   if (backslash_count & 1)
317     {
318       cpp_warning (pfile, "invalid string literal, ignoring final '\\'");
319       total_len--;
320     }
321
322   /* Null terminate, and commit the memory.  */
323   start[total_len] = '\0';
324   POOL_COMMIT (pool, total_len + 1);
325
326   arg->stringified = xnew (cpp_token);
327   arg->stringified->flags = 0;
328   arg->stringified->type = CPP_STRING;
329   arg->stringified->val.str.text = start;
330   arg->stringified->val.str.len = total_len;
331 }
332
333 /* Try to paste two tokens.  On success, the LHS becomes the pasted
334    token, and 0 is returned.  For failure, we update the flags of the
335    RHS appropriately and return non-zero.  */
336 static int
337 paste_tokens (pfile, lhs, rhs)
338      cpp_reader *pfile;
339      cpp_token *lhs, *rhs;
340 {
341   unsigned char flags;
342   int digraph = 0;
343   enum cpp_ttype type;
344
345   type = cpp_can_paste (pfile, lhs, rhs, &digraph);
346   
347   if (type == CPP_EOF)
348     {
349       /* Mandatory warning for all apart from assembler.  */
350       if (CPP_OPTION (pfile, lang) != CLK_ASM)
351         cpp_warning (pfile,
352          "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
353                      cpp_token_as_text (pfile, lhs),
354                      cpp_token_as_text (pfile, rhs));
355
356       /* The standard states that behaviour is undefined.  By the
357          principle of least surpise, we step back before the RHS, and
358          mark it to prevent macro expansion.  Tests in the testsuite
359          rely on clearing PREV_WHITE here, though you could argue we
360          should actually set it.  Assembler can have '.' in labels and
361          so requires that we don't insert spaces there.  Maybe we should
362          change this to put out a space unless it's assembler.  */
363       rhs->flags &= ~PREV_WHITE;
364       rhs->flags |= NO_EXPAND;
365       return 1;
366     }
367
368   flags = lhs->flags & ~DIGRAPH;
369   if (digraph)
370     flags |= DIGRAPH;
371
372   /* Identifiers and numbers need spellings to be pasted.  */
373   if (type == CPP_NAME || type == CPP_NUMBER)
374     {
375       unsigned int total_len = cpp_token_len (lhs) + cpp_token_len (rhs);
376       unsigned char *result, *end;
377
378       result = _cpp_pool_alloc (&pfile->ident_pool, total_len + 1);
379
380       /* Paste the spellings and null terminate.  */
381       end = cpp_spell_token (pfile, rhs, cpp_spell_token (pfile, lhs, result));
382       *end = '\0';
383       total_len = end - result;
384
385       if (type == CPP_NAME)
386         {
387           lhs->val.node = cpp_lookup (pfile, result, total_len);
388           if (lhs->val.node->flags & NODE_OPERATOR)
389             {
390               flags |= NAMED_OP;
391               lhs->type = lhs->val.node->value.operator;
392             }
393         }
394       else
395         {
396           lhs->val.str.text = result;
397           lhs->val.str.len = total_len;
398         }
399     }
400   else if (type == CPP_WCHAR || type == CPP_WSTRING)
401     lhs->val.str = rhs->val.str;
402
403   /* Set type and flags after pasting spellings.  */
404   lhs->type = type;
405   lhs->flags = flags;
406
407   return 0;
408 }
409
410 /* Handles an arbitrarily long sequence of ## operators.  This
411    implementation is left-associative, non-recursive, and finishes a
412    paste before handling succeeding ones.  If the paste fails, we back
413    up a token to just after the ## operator, with the effect that it
414    appears in the output stream normally.  */
415 static void
416 paste_all_tokens (pfile, lhs)
417      cpp_reader *pfile;
418      cpp_token *lhs;
419 {
420   cpp_token *rhs;
421   unsigned char orig_flags = lhs->flags;
422
423   do
424     {
425       /* Take the token directly from the current context.  We can do
426          this, because we are in the replacement list of either an
427          object-like macro, or a function-like macro with arguments
428          inserted.  In either case, the constraints to #define
429          guarantee we have at least one more token.  */
430       rhs = pfile->context->list.first++;
431       if (paste_tokens (pfile, lhs, rhs))
432         {
433           /* We failed.  Step back so we read the RHS in next.  */
434           pfile->context->list.first--;
435           break;
436         }
437     }
438   while (rhs->flags & PASTE_LEFT);
439
440   /* The pasted token has the PREV_WHITE flag of the LHS, is no longer
441      PASTE_LEFT, and is subject to macro expansion.  */
442   lhs->flags &= ~(PREV_WHITE | BOL | PASTE_LEFT | NO_EXPAND);
443   lhs->flags |= orig_flags & (PREV_WHITE | BOL | AVOID_LPASTE);
444 }
445
446 /* Reads the unexpanded tokens of a macro argument into ARG.  VAR_ARGS
447    is non-zero if this is a variadic macro.  Returns the type of the
448    token that caused reading to finish.  */
449 static enum cpp_ttype
450 parse_arg (pfile, arg, variadic)
451      cpp_reader *pfile;
452      struct macro_arg *arg;
453      int variadic;
454 {
455   enum cpp_ttype result;
456   unsigned int paren = 0;
457   unsigned int line;
458
459   arg->first = (cpp_token *) POOL_FRONT (&pfile->argument_pool);
460   for (;; arg->count++)
461     {
462       cpp_token *token = &arg->first[arg->count];
463       if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->argument_pool))
464         {
465           _cpp_next_chunk (&pfile->argument_pool, sizeof (cpp_token),
466                            (unsigned char **) &arg->first);
467           token = &arg->first[arg->count];
468         }
469
470       /* Newlines in arguments are white space (6.10.3.10).  */
471       line = pfile->line;
472       cpp_get_token (pfile, token);
473
474       if (line != pfile->line)
475         token->flags |= PREV_WHITE;
476
477       result = token->type;
478
479       if (result == CPP_OPEN_PAREN)
480         paren++;
481       else if (result == CPP_CLOSE_PAREN && paren-- == 0)
482         break;
483       /* Commas are not terminators within parantheses or variadic.  */
484       else if (result == CPP_COMMA && paren == 0 && !variadic)
485         break;
486       else if (result == CPP_EOF)
487         {
488           /* We still need the EOF (added below) to end pre-expansion
489              and directives.  */
490           if (pfile->context->prev || pfile->state.in_directive)
491             _cpp_backup_tokens (pfile, 1);
492           /* Error reported by caller.  */
493           break;
494         }
495       else if (result == CPP_HASH && token->flags & BOL)
496         {
497           /* 6.10.3 paragraph 11: If there are sequences of
498              preprocessing tokens within the list of arguments that
499              would otherwise act as preprocessing directives, the
500              behavior is undefined.
501
502              This implementation will report a hard error, terminate
503              the macro invocation, and proceed to process the
504              directive.  */
505           cpp_error (pfile,
506                      "directives may not be used inside a macro argument");
507           _cpp_backup_tokens (pfile, 1);
508           result = CPP_EOF;
509           break;
510         }
511     }
512
513   /* Commit the memory used to store the arguments.  We make the last
514      argument a CPP_EOF, so that it terminates macro pre-expansion,
515      but it is not included in arg->count.  */
516   arg->first[arg->count].type = CPP_EOF;  
517   POOL_COMMIT (&pfile->argument_pool, (arg->count + 1) * sizeof (cpp_token));
518
519   return result;
520 }
521
522 /* Parse the arguments making up a macro invocation.  */
523 static macro_arg *
524 parse_args (pfile, node)
525      cpp_reader *pfile;
526      const cpp_hashnode *node;
527 {
528   cpp_macro *macro = node->value.macro;
529   macro_arg *args, *cur;
530   enum cpp_ttype type;
531   int argc, error = 0;
532
533   /* Allocate room for at least one argument, and zero it out.  */
534   argc = macro->paramc ? macro->paramc: 1;
535   args = xcnewvec (macro_arg, argc);
536
537   for (cur = args, argc = 0; ;)
538     {
539       argc++;
540
541       type = parse_arg (pfile, cur, argc == macro->paramc && macro->variadic);
542       if (type == CPP_CLOSE_PAREN || type == CPP_EOF)
543         break;
544
545       /* Re-use the last argument for excess arguments.  */
546       if (argc < macro->paramc)
547         cur++;
548     }
549
550   if (type == CPP_EOF)
551     {
552       cpp_error (pfile, "unterminated argument list invoking macro \"%s\"",
553                  NODE_NAME (node));
554       error = 1;
555     }
556   else if (argc < macro->paramc)
557     {
558       /* As an extension, a rest argument is allowed to not appear in
559          the invocation at all.
560          e.g. #define debug(format, args...) something
561          debug("string");
562          
563          This is exactly the same as if there had been an empty rest
564          argument - debug("string", ).  */
565
566       if (argc + 1 == macro->paramc && macro->variadic)
567         {
568           if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
569             cpp_pedwarn (pfile, "ISO C99 requires rest arguments to be used");
570         }
571       else
572         {
573           cpp_error (pfile,
574                      "macro \"%s\" requires %u arguments, but only %u given",
575                      NODE_NAME (node), macro->paramc, argc);
576           error = 1;
577         }
578     }
579   else if (argc > macro->paramc)
580     {
581       /* Empty argument to a macro taking no arguments is OK.  */
582       if (argc != 1 || cur->count)
583         {
584           cpp_error (pfile,
585                      "macro \"%s\" passed %u arguments, but takes just %u",
586                      NODE_NAME (node), argc, macro->paramc);
587           error = 1;
588         }
589     }
590
591   if (error)
592     {
593       free (args);
594       args = 0;
595     }
596
597   return args;
598 }
599
600 static int
601 funlike_invocation_p (pfile, node, list)
602      cpp_reader *pfile;
603      const cpp_hashnode *node;
604      struct toklist *list;
605 {
606   cpp_token maybe_paren;
607   macro_arg *args = 0;
608
609   pfile->state.parsing_args = 1;
610   pfile->state.prevent_expansion++;
611
612   pfile->keep_tokens++;
613   cpp_get_token (pfile, &maybe_paren);
614   pfile->state.parsing_args = 2;
615
616   if (maybe_paren.type == CPP_OPEN_PAREN)
617     args = parse_args (pfile, node);
618   else
619     {
620       _cpp_backup_tokens (pfile, 1);
621       if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
622         cpp_warning (pfile,
623  "function-like macro \"%s\" must be used with arguments in traditional C",
624                      NODE_NAME (node));
625     }
626
627   pfile->state.prevent_expansion--;
628   pfile->state.parsing_args = 0;
629   pfile->keep_tokens--;
630
631   if (args)
632     {
633       if (node->value.macro->paramc > 0)
634         replace_args (pfile, node->value.macro, args, list);
635       free (args);
636     }
637
638   return args != 0;
639 }
640
641 /* Push the context of a macro onto the context stack.  TOKEN is the
642    macro name.  If we can successfully start expanding the macro,
643    TOKEN is replaced with the first token of the expansion, and we
644    return non-zero.  */
645 static int
646 enter_macro_context (pfile, node)
647      cpp_reader *pfile;
648      cpp_hashnode *node;
649 {
650   cpp_context *context;
651   cpp_macro *macro = node->value.macro;
652   struct toklist list;
653
654   /* Save the position of the outermost macro invocation.  */
655   if (!pfile->context->prev)
656     lock_pools (pfile);
657
658   if (macro->fun_like && !funlike_invocation_p (pfile, node, &list))
659     {
660       if (!pfile->context->prev)
661         unlock_pools (pfile);
662       return 0;
663     }
664
665   if (macro->paramc == 0)
666     {
667       list.first = macro->expansion;
668       list.limit = macro->expansion + macro->count;
669     }
670
671   context = next_context (pfile);
672   context->list = list;
673   context->macro = macro;
674       
675   /* Disable the macro within its expansion.  */
676   macro->disabled = 1;
677
678   return 1;
679 }
680
681 /* Move to the next context.  Create one if there is none.  */
682 static cpp_context *
683 next_context (pfile)
684      cpp_reader *pfile;
685 {
686   cpp_context *prev = pfile->context;
687   cpp_context *result = prev->next;
688
689   if (result == 0)
690     {
691       result = xnew (cpp_context);
692       prev->next = result;
693       result->prev = prev;
694       result->next = 0;
695     }
696
697   pfile->context = result;
698   return result;
699 }
700
701 static void
702 replace_args (pfile, macro, args, list)
703      cpp_reader *pfile;
704      cpp_macro *macro;
705      macro_arg *args;
706      struct toklist *list;
707 {
708   unsigned char flags = 0;
709   unsigned int i, total;
710   const cpp_token *src, *limit;
711   cpp_token *dest;
712   macro_arg *arg;
713
714   src = macro->expansion;
715   limit = src + macro->count;
716
717   /* First, fully macro-expand arguments, calculating the number of
718      tokens in the final expansion as we go.  This ensures that the
719      possible recursive use of argument_pool is fine.  */
720   total = limit - src;
721   for (; src < limit; src++)
722     if (src->type == CPP_MACRO_ARG)
723       {
724         /* We have an argument.  If it is not being stringified or
725            pasted it is macro-replaced before insertion.  */
726         arg = &args[src->val.arg_no - 1];
727
728         if (src->flags & STRINGIFY_ARG)
729           {
730             if (!arg->stringified)
731               stringify_arg (pfile, arg);
732           }
733         else if ((src->flags & PASTE_LEFT)
734                  || (src > macro->expansion && (src[-1].flags & PASTE_LEFT)))
735           total += arg->count - 1;
736         else
737           {
738             if (!arg->expanded)
739               {
740                 arg->expanded_count = 0;
741                 if (arg->count)
742                   expand_arg (pfile, arg);
743               }
744             total += arg->expanded_count - 1;
745           }
746       }
747
748   dest = (cpp_token *) _cpp_pool_alloc (&pfile->argument_pool,
749                                         total * sizeof (cpp_token));
750   list->first = dest;
751
752   for (src = macro->expansion; src < limit; src++)
753     if (src->type == CPP_MACRO_ARG)
754       {
755         unsigned int count;
756         const cpp_token *from;
757
758         arg = &args[src->val.arg_no - 1];
759         if (src->flags & STRINGIFY_ARG)
760           {
761             from = arg->stringified, count = 1;
762             /* Ugh.  Maintain position of original argument.  */
763             arg->stringified->line = src->line;
764             arg->stringified->col = src->col;
765           }
766         else if (src->flags & PASTE_LEFT)
767           count = arg->count, from = arg->first;
768         else if (src > macro->expansion && (src[-1].flags & PASTE_LEFT))
769           {
770             count = arg->count, from = arg->first;
771             if (dest != list->first)
772               {
773                 /* GCC has special semantics for , ## b where b is a
774                    varargs parameter: the comma disappears if b was
775                    given no actual arguments (not merely if b is an
776                    empty argument); otherwise pasting is turned off.  */
777                 if (dest[-1].type == CPP_COMMA
778                     && macro->variadic
779                     && src->val.arg_no == macro->paramc)
780                   {
781                     if (count == 0)
782                       dest--;
783                     else
784                       dest[-1].flags &= ~PASTE_LEFT;
785                   }
786                 /* Count == 0 is the RHS a placemarker case.  */
787                 else if (count == 0)
788                   dest[-1].flags &= ~PASTE_LEFT;
789               }
790           }
791         else
792           count = arg->expanded_count, from = arg->expanded;
793
794         /* Count == 0 is the LHS a placemarker case.  */
795         if (count)
796           {
797             memcpy (dest, from, count * sizeof (cpp_token));
798
799             /* The first token gets PREV_WHITE of the CPP_MACRO_ARG.  */
800             dest->flags &= ~(PREV_WHITE | BOL);
801             dest->flags |= src->flags & (PREV_WHITE | BOL);
802             dest->flags |= AVOID_LPASTE;
803
804             /* The last token gets the PASTE_LEFT of the CPP_MACRO_ARG.  */
805             dest[count - 1].flags |= src->flags & PASTE_LEFT;
806
807             dest += count;
808           }
809
810         /* The token after the argument must avoid an accidental paste.  */
811         flags = AVOID_LPASTE;
812       }
813     else
814       {
815         *dest = *src;
816         dest->flags |= flags;
817         dest++;
818         flags = 0;
819       }
820
821   list->limit = dest;
822
823   /* Free the expanded arguments.  */
824   for (i = 0; i < macro->paramc; i++)
825     {
826       if (args[i].expanded)
827         free (args[i].expanded);
828       if (args[i].stringified)
829         free (args[i].stringified);
830     }
831 }
832
833 /* Subroutine of expand_arg to put the unexpanded tokens on the
834    context stack.  */
835 static cpp_context *
836 push_arg_context (pfile, arg)
837      cpp_reader *pfile;
838      macro_arg *arg;
839 {
840   cpp_context *context = next_context (pfile);
841   context->macro = 0;
842   context->list.first = arg->first;
843   context->list.limit = arg->first + arg->count + 1;
844
845   return context;
846 }
847
848 static void
849 expand_arg (pfile, arg)
850      cpp_reader *pfile;
851      macro_arg *arg;
852 {
853   cpp_token *token;
854   unsigned int capacity = 256;
855
856   /* Loop, reading in the arguments.  */
857   arg->expanded = (cpp_token *) xmalloc (capacity * sizeof (cpp_token));
858
859   push_arg_context (pfile, arg);
860   do
861     {
862       if (arg->expanded_count >= capacity)
863         {
864           capacity *= 2;
865           arg->expanded = (cpp_token *)
866             xrealloc (arg->expanded, capacity * sizeof (cpp_token));
867         }
868       token = &arg->expanded[arg->expanded_count++];
869       cpp_get_token (pfile, token);
870     }
871   while (token->type != CPP_EOF);
872
873   arg->expanded_count--;
874
875   /* Pop the context we pushed.  */ 
876   pfile->context = pfile->context->prev;
877 }
878
879 void
880 _cpp_pop_context (pfile)
881      cpp_reader *pfile;
882 {
883   cpp_context *context = pfile->context;
884
885   pfile->context = context->prev;
886   if (!pfile->context->prev && !pfile->state.parsing_args)
887     unlock_pools (pfile);
888
889   /* Re-enable a macro when leaving its expansion.  */
890   context->macro->disabled = 0;
891 }
892
893 /* Eternal routine to get a token.  Also used nearly everywhere
894    internally, except for places where we know we can safely call
895    the lexer directly, such as lexing a directive name.
896
897    Macro expansions and directives are transparently handled,
898    including entering included files.  Thus tokens are post-macro
899    expansion, and after any intervening directives.  External callers
900    see CPP_EOF only at EOF.  Internal callers also see it when meeting
901    a directive inside a macro call, when at the end of a directive and
902    state.in_directive is still 1, and at the end of argument
903    pre-expansion.  */
904 void
905 cpp_get_token (pfile, token)
906      cpp_reader *pfile;
907      cpp_token *token;
908 {
909   for (;;)
910     {
911       cpp_context *context = pfile->context;
912
913       /* Context->prev == 0 <=> base context.  */
914       if (!context->prev)
915         _cpp_lex_token (pfile, token);
916       else if (context->list.first != context->list.limit)
917         {
918           *token = *context->list.first++;
919           token->flags |= pfile->buffer->saved_flags;
920           pfile->buffer->saved_flags = 0;
921           /* PASTE_LEFT tokens can only appear in macro expansions.  */
922           if (token->flags & PASTE_LEFT)
923             {
924               /* Maintains position of original token.  */
925               paste_all_tokens (pfile, token);
926               pfile->buffer->saved_flags = AVOID_LPASTE;
927             }
928         }
929       else
930         {
931           if (!context->macro)
932             cpp_ice (pfile, "context->macro == 0");
933
934           /* Avoid accidental paste at the end of a macro.  */
935           pfile->buffer->saved_flags |= AVOID_LPASTE;
936           _cpp_pop_context (pfile);
937           continue;
938         }
939
940       if (token->type != CPP_NAME)
941         break;
942
943       /* Handle macros and the _Pragma operator.  */
944       if (token->val.node->type == NT_MACRO
945           && !pfile->state.prevent_expansion
946           && !(token->flags & NO_EXPAND))
947         {
948           cpp_hashnode *node = token->val.node;
949
950           /* Macros invalidate controlling macros.  */
951           pfile->mi_valid = false;
952
953           if (node->flags & NODE_BUILTIN)
954             {
955               /* Maintains position of original token.  */
956               builtin_macro (pfile, token);
957               pfile->buffer->saved_flags = AVOID_LPASTE;
958               break;
959             }
960
961           if (node->value.macro->disabled)
962             token->flags |= NO_EXPAND;
963           else if (enter_macro_context (pfile, node))
964             {
965               /* Pass AVOID_LPASTE and our PREV_WHITE to next token.  */
966               pfile->buffer->saved_flags = ((token->flags & (PREV_WHITE | BOL))
967                                             | AVOID_LPASTE);
968               continue;
969             }
970         }
971
972       /* Don't interpret _Pragma within directives.  The standard is
973          not clear on this, but to me this makes most sense.  */
974       if (token->val.node != pfile->spec_nodes.n__Pragma
975           || pfile->state.in_directive)
976         break;
977
978       /* Handle it, and loop back for another token.  MI is cleared
979          since this token came from either the lexer or a macro.  */
980       _cpp_do__Pragma (pfile);
981     }
982 }
983
984 /* Returns true if we're expanding an object-like macro that was
985    defined in a system header.  Just checks the macro at the top of
986    the stack.  Used for diagnostic suppression.  */
987 int
988 cpp_sys_macro_p (pfile)
989      cpp_reader *pfile;
990 {
991   cpp_macro *macro = pfile->context->macro;
992
993   return macro && macro->syshdr;
994 }
995
996 /* Read each token in, until EOF.  Directives are transparently
997    processed.  */
998 void
999 cpp_scan_nooutput (pfile)
1000      cpp_reader *pfile;
1001 {
1002   cpp_token token;
1003
1004   do
1005     cpp_get_token (pfile, &token);
1006   while (token.type != CPP_EOF);
1007 }
1008
1009 /* Step back one (or more) tokens.  Can only step mack more than 1 if
1010    they are from the lexer, and not from macro expansion.  */
1011 void
1012 _cpp_backup_tokens (pfile, count)
1013      cpp_reader *pfile;
1014      unsigned int count;
1015 {
1016   if (pfile->context->prev == NULL)
1017     {
1018       pfile->lookaheads += count;
1019       while (count--)
1020         {
1021           pfile->cur_token--;
1022           if (pfile->cur_token == pfile->cur_run->base)
1023             {
1024               pfile->cur_run = pfile->cur_run->prev;
1025               pfile->cur_token = pfile->cur_run->limit;
1026             }
1027         }
1028     }
1029   else
1030     {
1031       if (count != 1)
1032         abort ();
1033       pfile->context->list.first--;
1034     }
1035 }
1036
1037 /* #define directive parsing and handling.  */
1038
1039 /* Returns non-zero if a macro redefinition warning is required.  */
1040 static int
1041 warn_of_redefinition (pfile, node, macro2)
1042      cpp_reader *pfile;
1043      const cpp_hashnode *node;
1044      const cpp_macro *macro2;
1045 {
1046   const cpp_macro *macro1;
1047   unsigned int i;
1048
1049   /* Some redefinitions need to be warned about regardless.  */
1050   if (node->flags & NODE_WARN)
1051     return 1;
1052
1053   if (! CPP_PEDANTIC (pfile))
1054     return 0;
1055
1056   /* Redefinition of a macro is allowed if and only if the old and new
1057      definitions are the same.  (6.10.3 paragraph 2).  */
1058   macro1 = node->value.macro;
1059
1060   /* The quick failures.  */
1061   if (macro1->count != macro2->count
1062       || macro1->paramc != macro2->paramc
1063       || macro1->fun_like != macro2->fun_like
1064       || macro1->variadic != macro2->variadic)
1065     return 1;
1066
1067   /* Check each token.  */
1068   for (i = 0; i < macro1->count; i++)
1069     if (! _cpp_equiv_tokens (&macro1->expansion[i], &macro2->expansion[i]))
1070       return 1;
1071
1072   /* Check parameter spellings.  */
1073   for (i = 0; i < macro1->paramc; i++)
1074     if (macro1->params[i] != macro2->params[i])
1075       return 1;
1076
1077   return 0;
1078 }
1079
1080 /* Free the definition of hashnode H.  */
1081
1082 void
1083 _cpp_free_definition (h)
1084      cpp_hashnode *h;
1085 {
1086   /* Macros and assertions no longer have anything to free.  */
1087   h->type = NT_VOID;
1088   /* Clear builtin flag in case of redefinition.  */
1089   h->flags &= ~NODE_BUILTIN;
1090 }
1091
1092 static int
1093 save_parameter (pfile, macro, node)
1094      cpp_reader *pfile;
1095      cpp_macro *macro;
1096      cpp_hashnode *node;
1097 {
1098   cpp_hashnode **dest;
1099
1100   /* Constraint 6.10.3.6 - duplicate parameter names.  */
1101   if (node->arg_index)
1102     {
1103       cpp_error (pfile, "duplicate macro parameter \"%s\"", NODE_NAME (node));
1104       return 1;
1105     }
1106
1107   dest = &macro->params[macro->paramc];
1108
1109   /* Check we have room for the parameters.  */
1110   if ((unsigned char *) (dest + 1) >= POOL_LIMIT (&pfile->macro_pool))
1111     {
1112       _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_hashnode *),
1113                        (unsigned char **) &macro->params);
1114       dest = &macro->params[macro->paramc];
1115     }
1116
1117   *dest = node;
1118   node->arg_index = ++macro->paramc;
1119   return 0;
1120 }
1121
1122 static int
1123 parse_params (pfile, macro)
1124      cpp_reader *pfile;
1125      cpp_macro *macro;
1126 {
1127   cpp_token token;
1128   unsigned int prev_ident = 0;
1129
1130   macro->params = (cpp_hashnode **) POOL_FRONT (&pfile->macro_pool);
1131   for (;;)
1132     {
1133       _cpp_lex_token (pfile, &token);
1134
1135       switch (token.type)
1136         {
1137         default:
1138           cpp_error (pfile, "\"%s\" may not appear in macro parameter list",
1139                      cpp_token_as_text (pfile, &token));
1140           return 0;
1141
1142         case CPP_NAME:
1143           if (prev_ident)
1144             {
1145               cpp_error (pfile, "macro parameters must be comma-separated");
1146               return 0;
1147             }
1148           prev_ident = 1;
1149
1150           if (save_parameter (pfile, macro, token.val.node))
1151             return 0;
1152           continue;
1153
1154         case CPP_CLOSE_PAREN:
1155           if (prev_ident || macro->paramc == 0)
1156             break;
1157
1158           /* Fall through to pick up the error.  */
1159         case CPP_COMMA:
1160           if (!prev_ident)
1161             {
1162               cpp_error (pfile, "parameter name missing");
1163               return 0;
1164             }
1165           prev_ident = 0;
1166           continue;
1167
1168         case CPP_ELLIPSIS:
1169           macro->variadic = 1;
1170           if (!prev_ident)
1171             {
1172               save_parameter (pfile, macro, pfile->spec_nodes.n__VA_ARGS__);
1173               pfile->state.va_args_ok = 1;
1174               if (! CPP_OPTION (pfile, c99) && CPP_OPTION (pfile, pedantic))
1175                 cpp_pedwarn (pfile,
1176                      "anonymous variadic macros were introduced in C99");
1177             }
1178           else if (CPP_OPTION (pfile, pedantic))
1179             cpp_pedwarn (pfile, "ISO C does not permit named variadic macros");
1180
1181           /* We're at the end, and just expect a closing parenthesis.  */
1182           _cpp_lex_token (pfile, &token);
1183           if (token.type == CPP_CLOSE_PAREN)
1184             break;
1185           /* Fall through.  */
1186
1187         case CPP_EOF:
1188           cpp_error (pfile, "missing ')' in macro parameter list");
1189           return 0;
1190         }
1191
1192       /* Success.  Commit the parameter array.  */
1193       POOL_COMMIT (&pfile->macro_pool,
1194                    macro->paramc * sizeof (cpp_hashnode *));
1195       return 1;
1196     }
1197 }
1198
1199 /* Lex a token from a macro's replacement list.  Translate it to a
1200    CPP_MACRO_ARG if appropriate.  */
1201 static cpp_token *
1202 lex_expansion_token (pfile, macro)
1203      cpp_reader *pfile;
1204      cpp_macro *macro;
1205 {
1206   cpp_token *token = &macro->expansion[macro->count];
1207
1208   /* Check we have room for the token.  */
1209   if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
1210     {
1211       _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1212                        (unsigned char **) &macro->expansion);
1213       token = &macro->expansion[macro->count];
1214     }
1215
1216   macro->count++;
1217   _cpp_lex_token (pfile, token);
1218
1219   /* Is this an argument?  */
1220   if (token->type == CPP_NAME && token->val.node->arg_index)
1221     {
1222       token->type = CPP_MACRO_ARG;
1223       token->val.arg_no = token->val.node->arg_index;
1224     }
1225   else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1226            && (token->type == CPP_STRING || token->type == CPP_CHAR))
1227     check_trad_stringification (pfile, macro, &token->val.str);
1228
1229   return token;
1230 }
1231
1232 /* Parse a macro and save its expansion.  Returns non-zero on success.  */
1233 int
1234 _cpp_create_definition (pfile, node)
1235      cpp_reader *pfile;
1236      cpp_hashnode *node;
1237 {
1238   cpp_macro *macro;
1239   cpp_token *token;
1240   unsigned int i, ok = 1;
1241
1242   macro = (cpp_macro *) _cpp_pool_alloc (&pfile->macro_pool,
1243                                          sizeof (cpp_macro));
1244   macro->line = pfile->directive_line;
1245   macro->params = 0;
1246   macro->paramc = 0;
1247   macro->fun_like = 0;
1248   macro->variadic = 0;
1249   macro->count = 0;
1250   macro->expansion = (cpp_token *) POOL_FRONT (&pfile->macro_pool);
1251
1252   /* Get the first token of the expansion (or the '(' of a
1253      function-like macro).  */
1254   token = lex_expansion_token (pfile, macro);
1255   if (token->type == CPP_OPEN_PAREN && !(token->flags & PREV_WHITE))
1256     {
1257       if (!(ok = parse_params (pfile, macro)))
1258         goto cleanup;
1259       macro->count = 0;
1260       macro->fun_like = 1;
1261       /* Some of the pool may have been used for the parameter store.  */
1262       macro->expansion = (cpp_token *) POOL_FRONT (&pfile->macro_pool);
1263       token = lex_expansion_token (pfile, macro);
1264     }
1265   else if (token->type != CPP_EOF && !(token->flags & PREV_WHITE))
1266     cpp_pedwarn (pfile, "ISO C requires whitespace after the macro name");
1267
1268   /* Setting it here means we don't catch leading comments.  */
1269   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
1270
1271   for (;;)
1272     {
1273       /* Check the stringifying # constraint 6.10.3.2.1 of
1274          function-like macros when lexing the subsequent token.  */
1275       if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1276         {
1277           if (token->type == CPP_MACRO_ARG)
1278             {
1279               token->flags &= ~PREV_WHITE;
1280               token->flags |= STRINGIFY_ARG;
1281               token->flags |= token[-1].flags & PREV_WHITE;
1282               token[-1] = token[0];
1283               macro->count--;
1284             }
1285           /* Let assembler get away with murder.  */
1286           else if (CPP_OPTION (pfile, lang) != CLK_ASM)
1287             {
1288               ok = 0;
1289               cpp_error (pfile, "'#' is not followed by a macro parameter");
1290               goto cleanup;
1291             }
1292         }
1293
1294       if (token->type == CPP_EOF)
1295         break;
1296
1297       /* Paste operator constraint 6.10.3.3.1.  */
1298       if (token->type == CPP_PASTE)
1299         {
1300           /* Token-paste ##, can appear in both object-like and
1301              function-like macros, but not at the ends.  */
1302           if (--macro->count > 0)
1303             token = lex_expansion_token (pfile, macro);
1304
1305           if (macro->count == 0 || token->type == CPP_EOF)
1306             {
1307               ok = 0;
1308               cpp_error (pfile,
1309                          "'##' cannot appear at either end of a macro expansion");
1310               goto cleanup;
1311             }
1312
1313           token[-1].flags |= PASTE_LEFT;
1314           /* Give it a PREV_WHITE for -dM etc.  */
1315           token->flags |= PREV_WHITE;
1316         }
1317
1318       token = lex_expansion_token (pfile, macro);
1319     }
1320
1321   /* Don't count the CPP_EOF.  */
1322   macro->count--;
1323
1324   /* Clear the whitespace flag from the leading token.  */
1325   macro->expansion[0].flags &= ~PREV_WHITE;
1326
1327   /* Implement the macro-defined-to-itself optimisation.  */
1328   macro->disabled = (macro->count == 1 && !macro->fun_like
1329                      && macro->expansion[0].type == CPP_NAME
1330                      && macro->expansion[0].val.node == node);
1331
1332   /* To suppress some diagnostics.  */
1333   macro->syshdr = pfile->map->sysp != 0;
1334
1335   /* Commit the memory.  */
1336   POOL_COMMIT (&pfile->macro_pool, macro->count * sizeof (cpp_token));
1337
1338   if (node->type != NT_VOID)
1339     {
1340       if (warn_of_redefinition (pfile, node, macro))
1341         {
1342           cpp_pedwarn_with_line (pfile, pfile->directive_line, 0,
1343                                  "\"%s\" redefined", NODE_NAME (node));
1344
1345           if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
1346             cpp_pedwarn_with_line (pfile, node->value.macro->line, 1,
1347                             "this is the location of the previous definition");
1348         }
1349       _cpp_free_definition (node);
1350     }
1351
1352   /* Enter definition in hash table.  */
1353   node->type = NT_MACRO;
1354   node->value.macro = macro;
1355   if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_")))
1356     node->flags |= NODE_WARN;
1357
1358  cleanup:
1359
1360   /* Stop the lexer accepting __VA_ARGS__.  */
1361   pfile->state.va_args_ok = 0;
1362
1363   /* Clear the fast argument lookup indices.  */
1364   for (i = macro->paramc; i-- > 0; )
1365     macro->params[i]->arg_index = 0;
1366
1367   return ok;
1368 }
1369
1370 /* Warn if a token in `string' matches one of the function macro
1371    arguments in `info'.  This function assumes that the macro is a
1372    function macro and not an object macro.  */
1373 static void
1374 check_trad_stringification (pfile, macro, string)
1375      cpp_reader *pfile;
1376      const cpp_macro *macro;
1377      const cpp_string *string;
1378 {
1379   unsigned int i, len;
1380   const U_CHAR *p, *q, *limit = string->text + string->len;
1381   
1382   /* Loop over the string.  */
1383   for (p = string->text; p < limit; p = q)
1384     {
1385       /* Find the start of an identifier.  */
1386       while (p < limit && !is_idstart (*p))
1387         p++;
1388
1389       /* Find the end of the identifier.  */
1390       q = p;
1391       while (q < limit && is_idchar (*q))
1392         q++;
1393
1394       len = q - p;
1395
1396       /* Loop over the function macro arguments to see if the
1397          identifier inside the string matches one of them.  */
1398       for (i = 0; i < macro->paramc; i++)
1399         {
1400           const cpp_hashnode *node = macro->params[i];
1401
1402           if (NODE_LEN (node) == len
1403               && !memcmp (p, NODE_NAME (node), len))
1404             {
1405               cpp_warning (pfile,
1406            "macro argument \"%s\" would be stringified with -traditional.",
1407                            NODE_NAME (node));
1408               break;
1409             }
1410         }
1411     }
1412 }
1413
1414 /* Returns the name, arguments and expansion of a macro, in a format
1415    suitable to be read back in again, and therefore also for DWARF 2
1416    debugging info.  e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1417    Caller is expected to generate the "#define" bit if needed.  The
1418    returned text is temporary, and automatically freed later.  */
1419
1420 const unsigned char *
1421 cpp_macro_definition (pfile, node)
1422      cpp_reader *pfile;
1423      const cpp_hashnode *node;
1424 {
1425   unsigned int i, len;
1426   const cpp_macro *macro = node->value.macro;
1427   unsigned char *buffer;
1428
1429   if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1430     {
1431       cpp_ice (pfile, "invalid hash type %d in cpp_macro_definition", node->type);
1432       return 0;
1433     }
1434
1435   /* Calculate length.  */
1436   len = NODE_LEN (node) + 1;                    /* ' ' */
1437   if (macro->fun_like)
1438     {
1439       len += 3;         /* "()" plus possible final "." of named
1440                            varargs (we have + 2 below).  */
1441       for (i = 0; i < macro->paramc; i++)
1442         len += NODE_LEN (macro->params[i]) + 2; /* ", " */
1443     }
1444
1445   for (i = 0; i < macro->count; i++)
1446     {
1447       cpp_token *token = &macro->expansion[i];
1448
1449       if (token->type == CPP_MACRO_ARG)
1450         len += NODE_LEN (macro->params[token->val.arg_no - 1]);
1451       else
1452         len += cpp_token_len (token); /* Includes room for ' '.  */
1453       if (token->flags & STRINGIFY_ARG)
1454         len++;                  /* "#" */
1455       if (token->flags & PASTE_LEFT)
1456         len += 3;               /* " ##" */
1457     }
1458
1459   if (len > pfile->macro_buffer_len)
1460     {
1461       pfile->macro_buffer = (U_CHAR *) xrealloc (pfile->macro_buffer, len);
1462       pfile->macro_buffer_len = len;
1463     }
1464
1465   /* Fill in the buffer.  Start with the macro name.  */
1466   buffer = pfile->macro_buffer;
1467   memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
1468   buffer += NODE_LEN (node);
1469
1470   /* Parameter names.  */
1471   if (macro->fun_like)
1472     {
1473       *buffer++ = '(';
1474       for (i = 0; i < macro->paramc; i++)
1475         {
1476           cpp_hashnode *param = macro->params[i];
1477
1478           if (param != pfile->spec_nodes.n__VA_ARGS__)
1479             {
1480               memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
1481               buffer += NODE_LEN (param);
1482             }
1483
1484           if (i + 1 < macro->paramc)
1485             *buffer++ = ',', *buffer++ = ' ';
1486           else if (macro->variadic)
1487             *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
1488         }
1489       *buffer++ = ')';
1490     }
1491
1492   /* Expansion tokens.  */
1493   if (macro->count)
1494     {
1495       *buffer++ = ' ';
1496       for (i = 0; i < macro->count; i++)
1497         {
1498           cpp_token *token = &macro->expansion[i];
1499
1500           if (token->flags & PREV_WHITE)
1501             *buffer++ = ' ';
1502           if (token->flags & STRINGIFY_ARG)
1503             *buffer++ = '#';
1504
1505           if (token->type == CPP_MACRO_ARG)
1506             {
1507               len = NODE_LEN (macro->params[token->val.arg_no - 1]);
1508               memcpy (buffer,
1509                       NODE_NAME (macro->params[token->val.arg_no - 1]), len);
1510               buffer += len;
1511             }
1512           else
1513             buffer = cpp_spell_token (pfile, token, buffer);
1514
1515           if (token->flags & PASTE_LEFT)
1516             {
1517               *buffer++ = ' ';
1518               *buffer++ = '#';
1519               *buffer++ = '#';
1520               /* Next has PREV_WHITE; see _cpp_create_definition.  */
1521             }
1522         }
1523     }
1524
1525   *buffer = '\0';
1526   return pfile->macro_buffer;
1527 }