643aeefca3a0f9dcdb0ca74e30e2bf18e7319243
[fw/sdcc] / support / cpp2 / 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   const char *file;             /* Defined in file name.  */
37   unsigned int line;            /* Starting line number.  */
38   unsigned int count;           /* Number of tokens in expansion.  */
39   unsigned short paramc;        /* Number of parameters.  */
40   unsigned int fun_like : 1;    /* If a function-like macro.  */
41   unsigned int variadic : 1;    /* If a variadic macro.  */
42   unsigned int disabled : 1;    /* If macro is disabled.  */
43   unsigned int syshdr   : 1;    /* If macro defined in system header.  */
44 };
45
46 typedef struct macro_arg macro_arg;
47 struct macro_arg
48 {
49   cpp_token *first;             /* First token in unexpanded argument.  */
50   cpp_token *expanded;          /* Macro-expanded argument.   */
51   cpp_token *stringified;       /* Stringified argument.  */
52   unsigned int count;           /* # of tokens in argument.  */
53   unsigned int expanded_count;  /* # of tokens in expanded argument.  */
54 };
55
56 /* Macro expansion.  */
57
58 static void lock_pools PARAMS ((cpp_reader *));
59 static void unlock_pools PARAMS ((cpp_reader *));
60 static int enter_macro_context PARAMS ((cpp_reader *, cpp_hashnode *));
61 static void builtin_macro PARAMS ((cpp_reader *, cpp_token *));
62 static cpp_context *push_arg_context PARAMS ((cpp_reader *, macro_arg *));
63 static enum cpp_ttype parse_arg PARAMS ((cpp_reader *, macro_arg *, int));
64 static macro_arg *parse_args PARAMS ((cpp_reader *, const cpp_hashnode *));
65 static cpp_context *next_context PARAMS ((cpp_reader *));
66 static void expand_arg PARAMS ((cpp_reader *, macro_arg *));
67 static unsigned char *quote_string PARAMS ((unsigned char *,
68                                             const unsigned char *,
69                                             unsigned int));
70 static void make_string_token PARAMS ((cpp_pool *, cpp_token *,
71                                        const U_CHAR *, unsigned int));
72 static void make_number_token PARAMS ((cpp_reader *, cpp_token *, int));
73 static void stringify_arg PARAMS ((cpp_reader *, macro_arg *));
74 static void paste_all_tokens PARAMS ((cpp_reader *, cpp_token *));
75 static int paste_tokens PARAMS ((cpp_reader *, cpp_token *, cpp_token *));
76 static int funlike_invocation_p PARAMS ((cpp_reader *, const cpp_hashnode *,
77                                           struct toklist *));
78 static void replace_args PARAMS ((cpp_reader *, cpp_macro *, macro_arg *,
79                                   struct toklist *));
80
81 /* Lookaheads.  */
82
83 static void save_lookahead_token PARAMS ((cpp_reader *, const cpp_token *));
84 static void take_lookahead_token PARAMS ((cpp_reader *, cpp_token *));
85 static cpp_lookahead *alloc_lookahead PARAMS ((cpp_reader *));
86 static void free_lookahead PARAMS ((cpp_lookahead *));
87
88 /* #define directive parsing and handling.  */
89
90 static cpp_token *lex_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
91 static int warn_of_redefinition PARAMS ((cpp_reader *, const cpp_hashnode *,
92                                          const cpp_macro *));
93 static int save_parameter PARAMS ((cpp_reader *, cpp_macro *, cpp_hashnode *));
94 static int parse_params PARAMS ((cpp_reader *, cpp_macro *));
95 static void check_trad_stringification PARAMS ((cpp_reader *,
96                                                 const cpp_macro *,
97                                                 const cpp_string *));
98
99 /* Allocates a buffer to hold a token's TEXT, and converts TOKEN to a
100    CPP_STRING token containing TEXT in quoted form.  */
101 static void
102 make_string_token (pool, token, text, len)
103      cpp_pool *pool;
104      cpp_token *token;
105      const U_CHAR *text;
106      unsigned int len;
107 {
108   U_CHAR *buf = _cpp_pool_alloc (pool, len * 4 + 1);
109
110   token->type = CPP_STRING;
111   token->val.str.text = buf;
112   token->val.str.len = quote_string (buf, text, len) - buf;
113   buf[token->val.str.len] = '\0';
114   token->flags = 0;
115 }
116
117 /* Allocates and converts a temporary token to a CPP_NUMBER token,
118    evaluating to NUMBER.  */
119 static void
120 make_number_token (pfile, token, number)
121      cpp_reader *pfile;
122      cpp_token *token;
123      int number;
124 {
125   unsigned char *buf = _cpp_pool_alloc (&pfile->ident_pool, 20);
126
127   sprintf ((char *) buf, "%d", number);
128   token->type = CPP_NUMBER;
129   token->val.str.text = buf;
130   token->val.str.len = ustrlen (buf);
131   token->flags = 0;
132 }
133
134 static const char * const monthnames[] =
135 {
136   "Jan", "Feb", "Mar", "Apr", "May", "Jun",
137   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
138 };
139
140 /* Handle builtin macros like __FILE__.  */
141 static void
142 builtin_macro (pfile, token)
143      cpp_reader *pfile;
144      cpp_token *token;
145 {
146   unsigned char flags = ((token->flags & PREV_WHITE) | AVOID_LPASTE);
147   cpp_hashnode *node = token->val.node;
148
149   switch (node->value.builtin)
150     {
151     case BT_FILE:
152     case BT_BASE_FILE:
153       {
154         const char *name;
155         cpp_buffer *buffer = pfile->buffer;
156
157         if (node->value.builtin == BT_BASE_FILE)
158           while (buffer->prev)
159             buffer = buffer->prev;
160
161         name = buffer->nominal_fname;
162         make_string_token (&pfile->ident_pool, token,
163                            (const unsigned char *) name, strlen (name));
164       }
165       break;
166         
167     case BT_INCLUDE_LEVEL:
168       /* pfile->include_depth counts the primary source as level 1,
169          but historically __INCLUDE_DEPTH__ has called the primary
170          source level 0.  */
171       make_number_token (pfile, token, pfile->include_depth - 1);
172       break;
173
174     case BT_SPECLINE:
175       /* If __LINE__ is embedded in a macro, it must expand to the
176          line of the macro's invocation, not its definition.
177          Otherwise things like assert() will not work properly.  */
178       make_number_token (pfile, token, 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->lexer_pos.output_line;
488       cpp_get_token (pfile, token);
489       if (line != pfile->lexer_pos.output_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_context *orig;
595   cpp_token maybe_paren;
596   macro_arg *args = 0;
597   cpp_lexer_pos macro_pos;
598
599   macro_pos = pfile->lexer_pos;
600   pfile->state.parsing_args = 1;
601   pfile->state.prevent_expansion++;
602   orig = pfile->context;
603
604   cpp_start_lookahead (pfile);
605   cpp_get_token (pfile, &maybe_paren);
606   cpp_stop_lookahead (pfile, maybe_paren.type == CPP_OPEN_PAREN);
607   pfile->state.parsing_args = 2;
608
609   if (maybe_paren.type == CPP_OPEN_PAREN)
610     args = parse_args (pfile, node);
611   else if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
612     cpp_warning (pfile,
613          "function-like macro \"%s\" must be used with arguments in traditional C",
614                  NODE_NAME (node));
615
616   /* Restore original context.  */
617   pfile->context = orig;
618   pfile->state.prevent_expansion--;
619   pfile->state.parsing_args = 0;
620
621   /* Reset the position in case of failure.  If success, the macro's
622      expansion appears where the name would have.  */
623   pfile->lexer_pos = macro_pos;
624
625   if (args)
626     {
627       if (node->value.macro->paramc > 0)
628         {
629           /* Don't save tokens during pre-expansion.  */
630           struct cpp_lookahead *la_saved = pfile->la_write;
631           pfile->la_write = 0;
632           replace_args (pfile, node->value.macro, args, list);
633           pfile->la_write = la_saved;
634         }
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   /* Only push a macro context for non-empty replacement lists.  */
672   if (list.first != list.limit)
673     {
674       context = next_context (pfile);
675       context->list = list;
676       context->macro = macro;
677       
678       /* Disable the macro within its expansion.  */
679       macro->disabled = 1;
680     }
681
682   return 1;
683 }
684
685 /* Move to the next context.  Create one if there is none.  */
686 static cpp_context *
687 next_context (pfile)
688      cpp_reader *pfile;
689 {
690   cpp_context *prev = pfile->context;
691   cpp_context *result = prev->next;
692
693   if (result == 0)
694     {
695       result = xnew (cpp_context);
696       prev->next = result;
697       result->prev = prev;
698       result->next = 0;
699     }
700
701   pfile->context = result;
702   return result;
703 }
704
705 static void
706 replace_args (pfile, macro, args, list)
707      cpp_reader *pfile;
708      cpp_macro *macro;
709      macro_arg *args;
710      struct toklist *list;
711 {
712   unsigned char flags = 0;
713   unsigned int i, total;
714   const cpp_token *src, *limit;
715   cpp_token *dest;
716   macro_arg *arg;
717
718   src = macro->expansion;
719   limit = src + macro->count;
720
721   /* First, fully macro-expand arguments, calculating the number of
722      tokens in the final expansion as we go.  This ensures that the
723      possible recursive use of argument_pool is fine.  */
724   total = limit - src;
725   for (; src < limit; src++)
726     if (src->type == CPP_MACRO_ARG)
727       {
728         /* We have an argument.  If it is not being stringified or
729            pasted it is macro-replaced before insertion.  */
730         arg = &args[src->val.arg_no - 1];
731
732         if (src->flags & STRINGIFY_ARG)
733           {
734             if (!arg->stringified)
735               stringify_arg (pfile, arg);
736           }
737         else if ((src->flags & PASTE_LEFT)
738                  || (src > macro->expansion && (src[-1].flags & PASTE_LEFT)))
739           total += arg->count - 1;
740         else
741           {
742             if (!arg->expanded)
743               {
744                 arg->expanded_count = 0;
745                 if (arg->count)
746                   expand_arg (pfile, arg);
747               }
748             total += arg->expanded_count - 1;
749           }
750       }
751
752   dest = (cpp_token *) _cpp_pool_alloc (&pfile->argument_pool,
753                                         total * sizeof (cpp_token));
754   list->first = dest;
755
756   for (src = macro->expansion; src < limit; src++)
757     if (src->type == CPP_MACRO_ARG)
758       {
759         unsigned int count;
760         const cpp_token *from;
761
762         arg = &args[src->val.arg_no - 1];
763         if (src->flags & STRINGIFY_ARG)
764           from = arg->stringified, count = 1;
765         else if (src->flags & PASTE_LEFT)
766           count = arg->count, from = arg->first;
767         else if (src > macro->expansion && (src[-1].flags & PASTE_LEFT))
768           {
769             count = arg->count, from = arg->first;
770             if (dest != list->first)
771               {
772                 /* GCC has special semantics for , ## b where b is a
773                    varargs parameter: the comma disappears if b was
774                    given no actual arguments (not merely if b is an
775                    empty argument); otherwise pasting is turned off.  */
776                 if (dest[-1].type == CPP_COMMA
777                     && macro->variadic
778                     && src->val.arg_no == macro->paramc)
779                   {
780                     if (count == 0)
781                       dest--;
782                     else
783                       dest[-1].flags &= ~PASTE_LEFT;
784                   }
785                 /* Count == 0 is the RHS a placemarker case.  */
786                 else if (count == 0)
787                   dest[-1].flags &= ~PASTE_LEFT;
788               }
789           }
790         else
791           count = arg->expanded_count, from = arg->expanded;
792
793         /* Count == 0 is the LHS a placemarker case.  */
794         if (count)
795           {
796             memcpy (dest, from, count * sizeof (cpp_token));
797
798             /* The first token gets PREV_WHITE of the CPP_MACRO_ARG.  */
799             dest->flags &= ~PREV_WHITE;
800             dest->flags |= src->flags & PREV_WHITE;
801             dest->flags |= AVOID_LPASTE;
802
803             /* The last token gets the PASTE_LEFT of the CPP_MACRO_ARG.  */
804             dest[count - 1].flags |= src->flags & PASTE_LEFT;
805
806             dest += count;
807           }
808
809         /* The token after the argument must avoid an accidental paste.  */
810         flags = AVOID_LPASTE;
811       }
812     else
813       {
814         *dest = *src;
815         dest->flags |= flags;
816         dest++;
817         flags = 0;
818       }
819
820   list->limit = dest;
821
822   /* Free the expanded arguments.  */
823   for (i = 0; i < macro->paramc; i++)
824     {
825       if (args[i].expanded)
826         free (args[i].expanded);
827       if (args[i].stringified)
828         free (args[i].stringified);
829     }
830 }
831
832 /* Subroutine of expand_arg to put the unexpanded tokens on the
833    context stack.  */
834 static cpp_context *
835 push_arg_context (pfile, arg)
836      cpp_reader *pfile;
837      macro_arg *arg;
838 {
839   cpp_context *context = next_context (pfile);
840   context->macro = 0;
841   context->list.first = arg->first;
842   context->list.limit = arg->first + arg->count;
843
844   return context;
845 }
846
847 static void
848 expand_arg (pfile, arg)
849      cpp_reader *pfile;
850      macro_arg *arg;
851 {
852   cpp_token *token;
853   unsigned int capacity = 256;
854
855   /* Loop, reading in the arguments.  */
856   arg->expanded = (cpp_token *) xmalloc (capacity * sizeof (cpp_token));
857
858   push_arg_context (pfile, arg);
859   do
860     {
861       if (arg->expanded_count >= capacity)
862         {
863           capacity *= 2;
864           arg->expanded = (cpp_token *)
865             xrealloc (arg->expanded, capacity * sizeof (cpp_token));
866         }
867       token = &arg->expanded[arg->expanded_count++];
868       cpp_get_token (pfile, token);
869     }
870   while (token->type != CPP_EOF);
871
872   arg->expanded_count--;
873
874   /* Pop the context we pushed.  */ 
875   pfile->context = pfile->context->prev;
876 }
877
878 void
879 _cpp_pop_context (pfile)
880      cpp_reader *pfile;
881 {
882   cpp_context *context = pfile->context;
883
884   pfile->context = context->prev;
885   if (!pfile->context->prev && !pfile->state.parsing_args)
886     unlock_pools (pfile);
887
888   /* Re-enable a macro, temporarily if parsing_args, when leaving its
889      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       if (pfile->la_read)
914         take_lookahead_token (pfile, token);
915       /* Context->prev == 0 <=> base context.  */
916       else if (!context->prev)
917         _cpp_lex_token (pfile, token);
918       else if (context->list.first != context->list.limit)
919         {
920           *token = *context->list.first++;
921           token->flags |= pfile->buffer->saved_flags;
922           pfile->buffer->saved_flags = 0;
923           /* PASTE_LEFT tokens can only appear in macro expansions.  */
924           if (token->flags & PASTE_LEFT)
925             {
926               paste_all_tokens (pfile, token);
927               pfile->buffer->saved_flags = AVOID_LPASTE;
928             }
929         }
930       else
931         {
932           if (context->macro)
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           /* End of argument pre-expansion.  */
940           token->type = CPP_EOF;
941           token->flags = 0;
942           return;
943         }
944
945       if (token->type != CPP_NAME)
946         break;
947
948       /* Handle macros and the _Pragma operator.  */
949       if (token->val.node->type == NT_MACRO
950           && !pfile->state.prevent_expansion
951           && !(token->flags & NO_EXPAND))
952         {
953           cpp_hashnode *node = token->val.node;
954
955           /* Macros invalidate controlling macros.  */
956           pfile->mi_state = MI_FAILED;
957
958           if (node->flags & NODE_BUILTIN)
959             {
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_buffer_nooutput (pfile, all_buffers)
1007      cpp_reader *pfile;
1008      int all_buffers;
1009 {
1010   cpp_token token;
1011   cpp_buffer *buffer = all_buffers ? 0: pfile->buffer->prev;
1012
1013   do
1014     do
1015       cpp_get_token (pfile, &token);
1016     while (token.type != CPP_EOF);
1017   while (cpp_pop_buffer (pfile) != buffer);
1018 }
1019
1020 /* Lookahead handling.  */
1021
1022 static void
1023 save_lookahead_token (pfile, token)
1024      cpp_reader *pfile;
1025      const cpp_token *token;
1026 {
1027   if (token->type != CPP_EOF)
1028     {
1029       cpp_lookahead *la = pfile->la_write;
1030       cpp_token_with_pos *twp;
1031
1032       if (la->count == la->cap)
1033         {
1034           la->cap += la->cap + 8;
1035           la->tokens = (cpp_token_with_pos *)
1036             xrealloc (la->tokens, la->cap * sizeof (cpp_token_with_pos));
1037         }
1038
1039       twp = &la->tokens[la->count++];
1040       twp->token = *token;
1041       twp->pos = *cpp_get_line (pfile);
1042     }
1043 }
1044
1045 static void
1046 take_lookahead_token (pfile, token)
1047      cpp_reader *pfile;
1048      cpp_token *token;
1049 {
1050   cpp_lookahead *la = pfile->la_read;
1051   cpp_token_with_pos *twp = &la->tokens[la->cur];
1052
1053   *token = twp->token;
1054   pfile->lexer_pos = twp->pos;
1055
1056   if (++la->cur == la->count)
1057     _cpp_release_lookahead (pfile);
1058 }
1059
1060 /* Moves the lookahead at the front of the read list to the free store.  */
1061 void
1062 _cpp_release_lookahead (pfile)
1063      cpp_reader *pfile;
1064 {
1065   cpp_lookahead *la = pfile->la_read;
1066
1067   pfile->la_read = la->next;
1068   la->next = pfile->la_unused;
1069   pfile->la_unused = la;
1070   unlock_pools (pfile);
1071 }
1072
1073 /* Take a new lookahead from the free store, or allocate one if none.  */
1074 static cpp_lookahead *
1075 alloc_lookahead (pfile)
1076      cpp_reader *pfile;
1077 {
1078   cpp_lookahead *la = pfile->la_unused;
1079
1080   if (la)
1081     pfile->la_unused = la->next;
1082   else
1083     {
1084       la = xnew (cpp_lookahead);
1085       la->tokens = 0;
1086       la->cap = 0;
1087     }
1088
1089   la->cur = la->count = 0;
1090   return la;
1091 }
1092
1093 /* Free memory associated with a lookahead list.  */
1094 static void
1095 free_lookahead (la)
1096      cpp_lookahead *la;
1097 {
1098   if (la->tokens)
1099     free ((PTR) la->tokens);
1100   free ((PTR) la);
1101 }
1102
1103 /* Free all the lookaheads of a cpp_reader.  */
1104 void
1105 _cpp_free_lookaheads (pfile)
1106      cpp_reader *pfile;
1107 {
1108   cpp_lookahead *la, *lan;
1109
1110   if (pfile->la_read)
1111     free_lookahead (pfile->la_read);
1112   if (pfile->la_write)
1113     free_lookahead (pfile->la_write);
1114
1115   for (la = pfile->la_unused; la; la = lan)
1116     {
1117       lan = la->next;
1118       free_lookahead (la);
1119     }
1120 }
1121
1122 /* Allocate a lookahead and move it to the front of the write list.  */
1123 void
1124 cpp_start_lookahead (pfile)
1125      cpp_reader *pfile;
1126 {
1127   cpp_lookahead *la = alloc_lookahead (pfile);
1128
1129   la->next = pfile->la_write;
1130   pfile->la_write = la;
1131
1132   la->pos = *cpp_get_line (pfile);
1133
1134   /* Don't allow memory pools to be re-used whilst we're reading ahead.  */
1135   lock_pools (pfile);
1136 }
1137
1138 /* Stop reading ahead - either step back, or drop the read ahead.  */
1139 void
1140 cpp_stop_lookahead (pfile, drop)
1141      cpp_reader *pfile;
1142      int drop;
1143 {
1144   cpp_lookahead *la = pfile->la_write;
1145
1146   pfile->la_write = la->next;
1147   la->next = pfile->la_read;
1148   pfile->la_read = la;
1149
1150   if (drop || la->count == 0)
1151     _cpp_release_lookahead (pfile);
1152   else
1153     pfile->lexer_pos = la->pos;
1154 }
1155
1156 /* Push a single token back to the front of the queue.  Only to be
1157    used by cpplib, and only then when necessary.  POS is the position
1158    to report for the preceding token.  */
1159 void
1160 _cpp_push_token (pfile, token, pos)
1161      cpp_reader *pfile;
1162      const cpp_token *token;
1163      const cpp_lexer_pos *pos;
1164 {
1165   cpp_start_lookahead (pfile);
1166   save_lookahead_token (pfile, token);
1167   cpp_stop_lookahead (pfile, 0);
1168   pfile->lexer_pos = *pos;
1169 }
1170
1171 /* #define directive parsing and handling.  */
1172
1173 /* Returns non-zero if a macro redefinition warning is required.  */
1174 static int
1175 warn_of_redefinition (pfile, node, macro2)
1176      cpp_reader *pfile;
1177      const cpp_hashnode *node;
1178      const cpp_macro *macro2;
1179 {
1180   const cpp_macro *macro1;
1181   unsigned int i;
1182
1183   /* Some redefinitions need to be warned about regardless.  */
1184   if (node->flags & NODE_WARN)
1185     return 1;
1186
1187 #if 0
1188   if (! CPP_PEDANTIC (pfile))
1189     return 0;
1190 #endif
1191
1192   /* Redefinition of a macro is allowed if and only if the old and new
1193      definitions are the same.  (6.10.3 paragraph 2). */
1194   macro1 = node->value.macro;
1195
1196   /* The quick failures.  */
1197   if (macro1->count != macro2->count
1198       || macro1->paramc != macro2->paramc
1199       || macro1->fun_like != macro2->fun_like
1200       || macro1->variadic != macro2->variadic)
1201     return 1;
1202
1203   /* Check each token.  */
1204   for (i = 0; i < macro1->count; i++)
1205     if (! _cpp_equiv_tokens (&macro1->expansion[i], &macro2->expansion[i]))
1206       return 1;
1207
1208   /* Check parameter spellings.  */
1209   for (i = 0; i < macro1->paramc; i++)
1210     if (macro1->params[i] != macro2->params[i])
1211       return 1;
1212
1213   return 0;
1214 }
1215
1216 /* Free the definition of hashnode H.  */
1217
1218 void
1219 _cpp_free_definition (h)
1220      cpp_hashnode *h;
1221 {
1222   /* Macros and assertions no longer have anything to free.  */
1223   h->type = NT_VOID;
1224   /* Clear builtin flag in case of redefinition.  */
1225   h->flags &= ~NODE_BUILTIN;
1226 }
1227
1228 static int
1229 save_parameter (pfile, macro, node)
1230      cpp_reader *pfile;
1231      cpp_macro *macro;
1232      cpp_hashnode *node;
1233 {
1234   cpp_hashnode **dest;
1235
1236   /* Constraint 6.10.3.6 - duplicate parameter names.  */
1237   if (node->arg_index)
1238     {
1239       cpp_error (pfile, "duplicate macro parameter \"%s\"", NODE_NAME (node));
1240       return 1;
1241     }
1242
1243   dest = &macro->params[macro->paramc];
1244
1245   /* Check we have room for the parameters.  */
1246   if ((unsigned char *) (dest + 1) >= POOL_LIMIT (&pfile->macro_pool))
1247     {
1248       _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_hashnode *),
1249                        (unsigned char **) &macro->params);
1250       dest = &macro->params[macro->paramc];
1251     }
1252
1253   *dest = node;
1254   node->arg_index = ++macro->paramc;
1255   return 0;
1256 }
1257
1258 static int
1259 parse_params (pfile, macro)
1260      cpp_reader *pfile;
1261      cpp_macro *macro;
1262 {
1263   cpp_token token;
1264   unsigned int prev_ident = 0;
1265
1266   macro->params = (cpp_hashnode **) POOL_FRONT (&pfile->macro_pool);
1267   for (;;)
1268     {
1269       _cpp_lex_token (pfile, &token);
1270
1271       switch (token.type)
1272         {
1273         default:
1274           cpp_error (pfile, "\"%s\" may not appear in macro parameter list",
1275                      cpp_token_as_text (pfile, &token));
1276           return 0;
1277
1278         case CPP_NAME:
1279           if (prev_ident)
1280             {
1281               cpp_error (pfile, "macro parameters must be comma-separated");
1282               return 0;
1283             }
1284           prev_ident = 1;
1285
1286           if (save_parameter (pfile, macro, token.val.node))
1287             return 0;
1288           continue;
1289
1290         case CPP_CLOSE_PAREN:
1291           if (prev_ident || macro->paramc == 0)
1292             break;
1293
1294           /* Fall through to pick up the error.  */
1295         case CPP_COMMA:
1296           if (!prev_ident)
1297             {
1298               cpp_error (pfile, "parameter name missing");
1299               return 0;
1300             }
1301           prev_ident = 0;
1302           continue;
1303
1304         case CPP_ELLIPSIS:
1305           macro->variadic = 1;
1306           if (!prev_ident)
1307             {
1308               save_parameter (pfile, macro, pfile->spec_nodes.n__VA_ARGS__);
1309               pfile->state.va_args_ok = 1;
1310               if (! CPP_OPTION (pfile, c99) && CPP_OPTION (pfile, pedantic))
1311                 cpp_pedwarn (pfile,
1312                      "anonymous variadic macros were introduced in C99");
1313             }
1314           else if (CPP_OPTION (pfile, pedantic))
1315             cpp_pedwarn (pfile, "ISO C does not permit named variadic macros");
1316
1317           /* We're at the end, and just expect a closing parenthesis.  */
1318           _cpp_lex_token (pfile, &token);
1319           if (token.type == CPP_CLOSE_PAREN)
1320             break;
1321           /* Fall through.  */
1322
1323         case CPP_EOF:
1324           cpp_error (pfile, "missing ')' in macro parameter list");
1325           return 0;
1326         }
1327
1328       /* Success.  Commit the parameter array.  */
1329       POOL_COMMIT (&pfile->macro_pool,
1330                    macro->paramc * sizeof (cpp_hashnode *));
1331       return 1;
1332     }
1333 }
1334
1335 /* Lex a token from a macro's replacement list.  Translate it to a
1336    CPP_MACRO_ARG if appropriate.  */
1337 static cpp_token *
1338 lex_expansion_token (pfile, macro)
1339      cpp_reader *pfile;
1340      cpp_macro *macro;
1341 {
1342   cpp_token *token = &macro->expansion[macro->count];
1343
1344   /* Check we have room for the token.  */
1345   if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
1346     {
1347       _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1348                        (unsigned char **) &macro->expansion);
1349       token = &macro->expansion[macro->count];
1350     }
1351
1352   macro->count++;
1353   _cpp_lex_token (pfile, token);
1354
1355   /* Is this an argument?  */
1356   if (token->type == CPP_NAME && token->val.node->arg_index)
1357     {
1358       token->type = CPP_MACRO_ARG;
1359       token->val.arg_no = token->val.node->arg_index;
1360     }
1361   else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1362            && (token->type == CPP_STRING || token->type == CPP_CHAR))
1363     check_trad_stringification (pfile, macro, &token->val.str);
1364
1365   return token;
1366 }
1367
1368 /* Parse a macro and save its expansion.  Returns non-zero on success.  */
1369 int
1370 _cpp_create_definition (pfile, node)
1371      cpp_reader *pfile;
1372      cpp_hashnode *node;
1373 {
1374   cpp_macro *macro;
1375   cpp_token *token;
1376   unsigned int i, ok = 1;
1377
1378   macro = (cpp_macro *) _cpp_pool_alloc (&pfile->macro_pool,
1379                                          sizeof (cpp_macro));
1380   macro->file = pfile->buffer->nominal_fname;
1381   macro->line = pfile->directive_pos.line;
1382   macro->params = 0;
1383   macro->paramc = 0;
1384   macro->fun_like = 0;
1385   macro->variadic = 0;
1386   macro->count = 0;
1387   macro->expansion = (cpp_token *) POOL_FRONT (&pfile->macro_pool);
1388
1389   /* Get the first token of the expansion (or the '(' of a
1390      function-like macro).  */
1391   token = lex_expansion_token (pfile, macro);
1392   if (token->type == CPP_OPEN_PAREN && !(token->flags & PREV_WHITE))
1393     {
1394       if (!(ok = parse_params (pfile, macro)))
1395         goto cleanup;
1396       macro->count = 0;
1397       macro->fun_like = 1;
1398       /* Some of the pool may have been used for the parameter store.  */
1399       macro->expansion = (cpp_token *) POOL_FRONT (&pfile->macro_pool);
1400       token = lex_expansion_token (pfile, macro);
1401     }
1402   else if (token->type != CPP_EOF && !(token->flags & PREV_WHITE))
1403     cpp_pedwarn (pfile, "ISO C requires whitespace after the macro name");
1404
1405   /* Setting it here means we don't catch leading comments.  */
1406   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
1407
1408   for (;;)
1409     {
1410       /* Check the stringifying # constraint 6.10.3.2.1 of
1411          function-like macros when lexing the subsequent token.  */
1412       if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1413         {
1414           if (token->type == CPP_MACRO_ARG)
1415             {
1416               token->flags &= ~PREV_WHITE;
1417               token->flags |= STRINGIFY_ARG;
1418               token->flags |= token[-1].flags & PREV_WHITE;
1419               token[-1] = token[0];
1420               macro->count--;
1421             }
1422           /* Let assembler get away with murder.  */
1423           else if (CPP_OPTION (pfile, lang) != CLK_ASM)
1424             {
1425               ok = 0;
1426               cpp_error (pfile, "'#' is not followed by a macro parameter");
1427               goto cleanup;
1428             }
1429         }
1430
1431       if (token->type == CPP_EOF)
1432         break;
1433
1434       /* Paste operator constraint 6.10.3.3.1.  */
1435       if (token->type == CPP_PASTE)
1436         {
1437           /* Token-paste ##, can appear in both object-like and
1438              function-like macros, but not at the ends.  */
1439           if (--macro->count > 0)
1440             token = lex_expansion_token (pfile, macro);
1441
1442           if (macro->count == 0 || token->type == CPP_EOF)
1443             {
1444               ok = 0;
1445               cpp_error (pfile,
1446                          "'##' cannot appear at either end of a macro expansion");
1447               goto cleanup;
1448             }
1449
1450           token[-1].flags |= PASTE_LEFT;
1451           /* Give it a PREV_WHITE for -dM etc.  */
1452           token->flags |= PREV_WHITE;
1453         }
1454
1455       token = lex_expansion_token (pfile, macro);
1456     }
1457
1458   /* Don't count the CPP_EOF.  */
1459   macro->count--;
1460
1461   /* Clear the whitespace flag from the leading token.  */
1462   macro->expansion[0].flags &= ~PREV_WHITE;
1463
1464   /* Implement the macro-defined-to-itself optimisation.  */
1465   macro->disabled = (macro->count == 1 && !macro->fun_like
1466                      && macro->expansion[0].type == CPP_NAME
1467                      && macro->expansion[0].val.node == node);
1468
1469   /* To suppress some diagnostics.  */
1470   macro->syshdr = pfile->buffer->sysp != 0;
1471
1472   /* Commit the memory.  */
1473   POOL_COMMIT (&pfile->macro_pool, macro->count * sizeof (cpp_token));
1474
1475   if (node->type != NT_VOID)
1476     {
1477       if (warn_of_redefinition (pfile, node, macro))
1478         {
1479           cpp_pedwarn_with_line (pfile, pfile->directive_pos.line,
1480                                  pfile->directive_pos.col,
1481                                  "\"%s\" redefined", NODE_NAME (node));
1482
1483           if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
1484             cpp_pedwarn_with_file_and_line (pfile,
1485                                             node->value.macro->file,
1486                                             node->value.macro->line, 1,
1487                             "this is the location of the previous definition");
1488         }
1489       _cpp_free_definition (node);
1490     }
1491
1492   /* Enter definition in hash table.  */
1493   node->type = NT_MACRO;
1494   node->value.macro = macro;
1495   if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_")))
1496     node->flags |= NODE_WARN;
1497
1498  cleanup:
1499
1500   /* Stop the lexer accepting __VA_ARGS__.  */
1501   pfile->state.va_args_ok = 0;
1502
1503   /* Clear the fast argument lookup indices.  */
1504   for (i = macro->paramc; i-- > 0; )
1505     macro->params[i]->arg_index = 0;
1506
1507   return ok;
1508 }
1509
1510 /* Warn if a token in `string' matches one of the function macro
1511    arguments in `info'.  This function assumes that the macro is a
1512    function macro and not an object macro.  */
1513 static void
1514 check_trad_stringification (pfile, macro, string)
1515      cpp_reader *pfile;
1516      const cpp_macro *macro;
1517      const cpp_string *string;
1518 {
1519   unsigned int i, len;
1520   const U_CHAR *p, *q, *limit = string->text + string->len;
1521   
1522   /* Loop over the string.  */
1523   for (p = string->text; p < limit; p = q)
1524     {
1525       /* Find the start of an identifier.  */
1526       while (p < limit && !is_idstart (*p))
1527         p++;
1528
1529       /* Find the end of the identifier.  */
1530       q = p;
1531       while (q < limit && is_idchar (*q))
1532         q++;
1533
1534       len = q - p;
1535
1536       /* Loop over the function macro arguments to see if the
1537          identifier inside the string matches one of them.  */
1538       for (i = 0; i < macro->paramc; i++)
1539         {
1540           const cpp_hashnode *node = macro->params[i];
1541
1542           if (NODE_LEN (node) == len
1543               && !memcmp (p, NODE_NAME (node), len))
1544             {
1545               cpp_warning (pfile,
1546            "macro argument \"%s\" would be stringified with -traditional.",
1547                            NODE_NAME (node));
1548               break;
1549             }
1550         }
1551     }
1552 }
1553
1554 /* Returns the name, arguments and expansion of a macro, in a format
1555    suitable to be read back in again, and therefore also for DWARF 2
1556    debugging info.  e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1557    Caller is expected to generate the "#define" bit if needed.  The
1558    returned text is temporary, and automatically freed later.  */
1559
1560 const unsigned char *
1561 cpp_macro_definition (pfile, node)
1562      cpp_reader *pfile;
1563      const cpp_hashnode *node;
1564 {
1565   unsigned int i, len;
1566   const cpp_macro *macro = node->value.macro;
1567   unsigned char *buffer;
1568
1569   if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1570     {
1571       cpp_ice (pfile, "invalid hash type %d in cpp_macro_definition", node->type);
1572       return 0;
1573     }
1574
1575   /* Calculate length.  */
1576   len = NODE_LEN (node) + 1;                    /* ' ' */
1577   if (macro->fun_like)
1578     {
1579       len += 3;         /* "()" plus possible final "." of named
1580                            varargs (we have + 2 below).  */
1581       for (i = 0; i < macro->paramc; i++)
1582         len += NODE_LEN (macro->params[i]) + 2; /* ", " */
1583     }
1584
1585   for (i = 0; i < macro->count; i++)
1586     {
1587       cpp_token *token = &macro->expansion[i];
1588
1589       if (token->type == CPP_MACRO_ARG)
1590         len += NODE_LEN (macro->params[token->val.arg_no - 1]);
1591       else
1592         len += cpp_token_len (token); /* Includes room for ' '.  */
1593       if (token->flags & STRINGIFY_ARG)
1594         len++;                  /* "#" */
1595       if (token->flags & PASTE_LEFT)
1596         len += 3;               /* " ##" */
1597     }
1598
1599   if (len > pfile->macro_buffer_len)
1600     {
1601       pfile->macro_buffer = (U_CHAR *) xrealloc (pfile->macro_buffer, len);
1602       pfile->macro_buffer_len = len;
1603     }
1604
1605   /* Fill in the buffer.  Start with the macro name.  */
1606   buffer = pfile->macro_buffer;
1607   memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
1608   buffer += NODE_LEN (node);
1609
1610   /* Parameter names.  */
1611   if (macro->fun_like)
1612     {
1613       *buffer++ = '(';
1614       for (i = 0; i < macro->paramc; i++)
1615         {
1616           cpp_hashnode *param = macro->params[i];
1617
1618           if (param != pfile->spec_nodes.n__VA_ARGS__)
1619             {
1620               memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
1621               buffer += NODE_LEN (param);
1622             }
1623
1624           if (i + 1 < macro->paramc)
1625             *buffer++ = ',', *buffer++ = ' ';
1626           else if (macro->variadic)
1627             *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
1628         }
1629       *buffer++ = ')';
1630     }
1631
1632   /* Expansion tokens.  */
1633   if (macro->count)
1634     {
1635       *buffer++ = ' ';
1636       for (i = 0; i < macro->count; i++)
1637         {
1638           cpp_token *token = &macro->expansion[i];
1639
1640           if (token->flags & PREV_WHITE)
1641             *buffer++ = ' ';
1642           if (token->flags & STRINGIFY_ARG)
1643             *buffer++ = '#';
1644
1645           if (token->type == CPP_MACRO_ARG)
1646             {
1647               len = NODE_LEN (macro->params[token->val.arg_no - 1]);
1648               memcpy (buffer,
1649                       NODE_NAME (macro->params[token->val.arg_no - 1]), len);
1650               buffer += len;
1651             }
1652           else
1653             buffer = cpp_spell_token (pfile, token, buffer);
1654
1655           if (token->flags & PASTE_LEFT)
1656             {
1657               *buffer++ = ' ';
1658               *buffer++ = '#';
1659               *buffer++ = '#';
1660               /* Next has PREV_WHITE; see _cpp_create_definition.  */
1661             }
1662         }
1663     }
1664
1665   *buffer = '\0';
1666   return pfile->macro_buffer;
1667 }