OSDN Git Service

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