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