OSDN Git Service

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