OSDN Git Service

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