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