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