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