xref: /netbsd-src/external/gpl3/gcc.old/dist/libcpp/traditional.c (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1 /* CPP Library - traditional lexical analysis and macro expansion.
2    Copyright (C) 2002-2015 Free Software Foundation, Inc.
3    Contributed by Neil Booth, May 2002
4 
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 3, or (at your option) any
8 later version.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with this program; see the file COPYING3.  If not see
17 <http://www.gnu.org/licenses/>.  */
18 
19 #include "config.h"
20 #include "system.h"
21 #include "cpplib.h"
22 #include "internal.h"
23 
24 /* The replacement text of a function-like macro is stored as a
25    contiguous sequence of aligned blocks, each representing the text
26    between subsequent parameters.
27 
28    Each block comprises the text between its surrounding parameters,
29    the length of that text, and the one-based index of the following
30    parameter.  The final block in the replacement text is easily
31    recognizable as it has an argument index of zero.  */
32 
33 struct block
34 {
35   unsigned int text_len;
36   unsigned short arg_index;
37   uchar text[1];
38 };
39 
40 #define BLOCK_HEADER_LEN offsetof (struct block, text)
41 #define BLOCK_LEN(TEXT_LEN) CPP_ALIGN (BLOCK_HEADER_LEN + (TEXT_LEN))
42 
43 /* Structure holding information about a function-like macro
44    invocation.  */
45 struct fun_macro
46 {
47   /* Memory buffer holding the trad_arg array.  */
48   _cpp_buff *buff;
49 
50   /* An array of size the number of macro parameters + 1, containing
51      the offsets of the start of each macro argument in the output
52      buffer.  The argument continues until the character before the
53      start of the next one.  */
54   size_t *args;
55 
56   /* The hashnode of the macro.  */
57   cpp_hashnode *node;
58 
59   /* The offset of the macro name in the output buffer.  */
60   size_t offset;
61 
62   /* The line the macro name appeared on.  */
63   source_location line;
64 
65   /* Number of parameters.  */
66   unsigned int paramc;
67 
68   /* Zero-based index of argument being currently lexed.  */
69   unsigned int argc;
70 };
71 
72 /* Lexing state.  It is mostly used to prevent macro expansion.  */
73 enum ls {ls_none = 0,		/* Normal state.  */
74 	 ls_fun_open,		/* When looking for '('.  */
75 	 ls_fun_close,		/* When looking for ')'.  */
76 	 ls_defined,		/* After defined.  */
77 	 ls_defined_close,	/* Looking for ')' of defined().  */
78 	 ls_hash,		/* After # in preprocessor conditional.  */
79 	 ls_predicate,		/* After the predicate, maybe paren?  */
80 	 ls_answer,		/* In answer to predicate.  */
81 	 ls_has_include,	/* After __has_include__.  */
82 	 ls_has_include_close};	/* Looking for ')' of __has_include__.  */
83 
84 /* Lexing TODO: Maybe handle space in escaped newlines.  Stop lex.c
85    from recognizing comments and directives during its lexing pass.  */
86 
87 static const uchar *skip_whitespace (cpp_reader *, const uchar *, int);
88 static cpp_hashnode *lex_identifier (cpp_reader *, const uchar *);
89 static const uchar *copy_comment (cpp_reader *, const uchar *, int);
90 static void check_output_buffer (cpp_reader *, size_t);
91 static void push_replacement_text (cpp_reader *, cpp_hashnode *);
92 static bool scan_parameters (cpp_reader *, cpp_macro *);
93 static bool recursive_macro (cpp_reader *, cpp_hashnode *);
94 static void save_replacement_text (cpp_reader *, cpp_macro *, unsigned int);
95 static void maybe_start_funlike (cpp_reader *, cpp_hashnode *, const uchar *,
96 				 struct fun_macro *);
97 static void save_argument (struct fun_macro *, size_t);
98 static void replace_args_and_push (cpp_reader *, struct fun_macro *);
99 static size_t canonicalize_text (uchar *, const uchar *, size_t, uchar *);
100 
101 /* Ensures we have N bytes' space in the output buffer, and
102    reallocates it if not.  */
103 static void
104 check_output_buffer (cpp_reader *pfile, size_t n)
105 {
106   /* We might need two bytes to terminate an unterminated comment, and
107      one more to terminate the line with a NUL.  */
108   n += 2 + 1;
109 
110   if (n > (size_t) (pfile->out.limit - pfile->out.cur))
111     {
112       size_t size = pfile->out.cur - pfile->out.base;
113       size_t new_size = (size + n) * 3 / 2;
114 
115       pfile->out.base = XRESIZEVEC (unsigned char, pfile->out.base, new_size);
116       pfile->out.limit = pfile->out.base + new_size;
117       pfile->out.cur = pfile->out.base + size;
118     }
119 }
120 
121 /* Skip a C-style block comment in a macro as a result of -CC.
122    Buffer->cur points to the initial asterisk of the comment.  */
123 static void
124 skip_macro_block_comment (cpp_reader *pfile)
125 {
126   const uchar *cur = pfile->buffer->cur;
127 
128   cur++;
129   if (*cur == '/')
130     cur++;
131 
132   /* People like decorating comments with '*', so check for '/'
133      instead for efficiency.  */
134   while(! (*cur++ == '/' && cur[-2] == '*') )
135     ;
136 
137   pfile->buffer->cur = cur;
138 }
139 
140 /* CUR points to the asterisk introducing a comment in the current
141    context.  IN_DEFINE is true if we are in the replacement text of a
142    macro.
143 
144    The asterisk and following comment is copied to the buffer pointed
145    to by pfile->out.cur, which must be of sufficient size.
146    Unterminated comments are diagnosed, and correctly terminated in
147    the output.  pfile->out.cur is updated depending upon IN_DEFINE,
148    -C, -CC and pfile->state.in_directive.
149 
150    Returns a pointer to the first character after the comment in the
151    input buffer.  */
152 static const uchar *
153 copy_comment (cpp_reader *pfile, const uchar *cur, int in_define)
154 {
155   bool unterminated, copy = false;
156   source_location src_loc = pfile->line_table->highest_line;
157   cpp_buffer *buffer = pfile->buffer;
158 
159   buffer->cur = cur;
160   if (pfile->context->prev)
161     unterminated = false, skip_macro_block_comment (pfile);
162   else
163     unterminated = _cpp_skip_block_comment (pfile);
164 
165   if (unterminated)
166     cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
167 			 "unterminated comment");
168 
169   /* Comments in directives become spaces so that tokens are properly
170      separated when the ISO preprocessor re-lexes the line.  The
171      exception is #define.  */
172   if (pfile->state.in_directive)
173     {
174       if (in_define)
175 	{
176 	  if (CPP_OPTION (pfile, discard_comments_in_macro_exp))
177 	    pfile->out.cur--;
178 	  else
179 	    copy = true;
180 	}
181       else
182 	pfile->out.cur[-1] = ' ';
183     }
184   else if (CPP_OPTION (pfile, discard_comments))
185     pfile->out.cur--;
186   else
187     copy = true;
188 
189   if (copy)
190     {
191       size_t len = (size_t) (buffer->cur - cur);
192       memcpy (pfile->out.cur, cur, len);
193       pfile->out.cur += len;
194       if (unterminated)
195 	{
196 	  *pfile->out.cur++ = '*';
197 	  *pfile->out.cur++ = '/';
198 	}
199     }
200 
201   return buffer->cur;
202 }
203 
204 /* CUR points to any character in the input buffer.  Skips over all
205    contiguous horizontal white space and NULs, including comments if
206    SKIP_COMMENTS, until reaching the first non-horizontal-whitespace
207    character or the end of the current context.  Escaped newlines are
208    removed.
209 
210    The whitespace is copied verbatim to the output buffer, except that
211    comments are handled as described in copy_comment().
212    pfile->out.cur is updated.
213 
214    Returns a pointer to the first character after the whitespace in
215    the input buffer.  */
216 static const uchar *
217 skip_whitespace (cpp_reader *pfile, const uchar *cur, int skip_comments)
218 {
219   uchar *out = pfile->out.cur;
220 
221   for (;;)
222     {
223       unsigned int c = *cur++;
224       *out++ = c;
225 
226       if (is_nvspace (c))
227 	continue;
228 
229       if (c == '/' && *cur == '*' && skip_comments)
230 	{
231 	  pfile->out.cur = out;
232 	  cur = copy_comment (pfile, cur, false /* in_define */);
233 	  out = pfile->out.cur;
234 	  continue;
235 	}
236 
237       out--;
238       break;
239     }
240 
241   pfile->out.cur = out;
242   return cur - 1;
243 }
244 
245 /* Lexes and outputs an identifier starting at CUR, which is assumed
246    to point to a valid first character of an identifier.  Returns
247    the hashnode, and updates out.cur.  */
248 static cpp_hashnode *
249 lex_identifier (cpp_reader *pfile, const uchar *cur)
250 {
251   size_t len;
252   uchar *out = pfile->out.cur;
253   cpp_hashnode *result;
254 
255   do
256     *out++ = *cur++;
257   while (is_numchar (*cur));
258 
259   CUR (pfile->context) = cur;
260   len = out - pfile->out.cur;
261   result = CPP_HASHNODE (ht_lookup (pfile->hash_table, pfile->out.cur,
262 				    len, HT_ALLOC));
263   pfile->out.cur = out;
264   return result;
265 }
266 
267 /* Overlays the true file buffer temporarily with text of length LEN
268    starting at START.  The true buffer is restored upon calling
269    restore_buff().  */
270 void
271 _cpp_overlay_buffer (cpp_reader *pfile, const uchar *start, size_t len)
272 {
273   cpp_buffer *buffer = pfile->buffer;
274 
275   pfile->overlaid_buffer = buffer;
276   pfile->saved_cur = buffer->cur;
277   pfile->saved_rlimit = buffer->rlimit;
278   pfile->saved_line_base = buffer->next_line;
279   buffer->need_line = false;
280 
281   buffer->cur = start;
282   buffer->line_base = start;
283   buffer->rlimit = start + len;
284 }
285 
286 /* Restores a buffer overlaid by _cpp_overlay_buffer().  */
287 void
288 _cpp_remove_overlay (cpp_reader *pfile)
289 {
290   cpp_buffer *buffer = pfile->overlaid_buffer;
291 
292   buffer->cur = pfile->saved_cur;
293   buffer->rlimit = pfile->saved_rlimit;
294   buffer->line_base = pfile->saved_line_base;
295   buffer->need_line = true;
296 
297   pfile->overlaid_buffer = NULL;
298 }
299 
300 /* Reads a logical line into the output buffer.  Returns TRUE if there
301    is more text left in the buffer.  */
302 bool
303 _cpp_read_logical_line_trad (cpp_reader *pfile)
304 {
305   do
306     {
307       if (pfile->buffer->need_line && !_cpp_get_fresh_line (pfile))
308 	return false;
309     }
310   while (!_cpp_scan_out_logical_line (pfile, NULL, false)
311 	 || pfile->state.skipping);
312 
313   return pfile->buffer != NULL;
314 }
315 
316 /* Return true if NODE is a fun_like macro.  */
317 static inline bool
318 fun_like_macro (cpp_hashnode *node)
319 {
320   if (node->flags & NODE_BUILTIN)
321     return node->value.builtin == BT_HAS_ATTRIBUTE;
322   else
323     return node->value.macro->fun_like;
324 }
325 
326 /* Set up state for finding the opening '(' of a function-like
327    macro.  */
328 static void
329 maybe_start_funlike (cpp_reader *pfile, cpp_hashnode *node, const uchar *start,
330 		     struct fun_macro *macro)
331 {
332   unsigned int n;
333   if (node->flags & NODE_BUILTIN)
334     n = 1;
335   else
336     n = node->value.macro->paramc;
337 
338   if (macro->buff)
339     _cpp_release_buff (pfile, macro->buff);
340   macro->buff = _cpp_get_buff (pfile, (n + 1) * sizeof (size_t));
341   macro->args = (size_t *) BUFF_FRONT (macro->buff);
342   macro->node = node;
343   macro->offset = start - pfile->out.base;
344   macro->paramc = n;
345   macro->argc = 0;
346 }
347 
348 /* Save the OFFSET of the start of the next argument to MACRO.  */
349 static void
350 save_argument (struct fun_macro *macro, size_t offset)
351 {
352   macro->argc++;
353   if (macro->argc <= macro->paramc)
354     macro->args[macro->argc] = offset;
355 }
356 
357 /* Copies the next logical line in the current buffer (starting at
358    buffer->cur) to the output buffer.  The output is guaranteed to
359    terminate with a NUL character.  buffer->cur is updated.
360 
361    If MACRO is non-NULL, then we are scanning the replacement list of
362    MACRO, and we call save_replacement_text() every time we meet an
363    argument.
364 
365    If BUILTIN_MACRO_ARG is true, this is called to macro expand
366    arguments of builtin function-like macros.  */
367 bool
368 _cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro,
369 			    bool builtin_macro_arg)
370 {
371   bool result = true;
372   cpp_context *context;
373   const uchar *cur;
374   uchar *out;
375   struct fun_macro fmacro;
376   unsigned int c, paren_depth = 0, quote;
377   enum ls lex_state = ls_none;
378   bool header_ok;
379   const uchar *start_of_input_line;
380 
381   fmacro.buff = NULL;
382   fmacro.args = NULL;
383   fmacro.node = NULL;
384   fmacro.offset = 0;
385   fmacro.line = 0;
386   fmacro.paramc = 0;
387   fmacro.argc = 0;
388 
389   quote = 0;
390   header_ok = pfile->state.angled_headers;
391   CUR (pfile->context) = pfile->buffer->cur;
392   RLIMIT (pfile->context) = pfile->buffer->rlimit;
393   if (!builtin_macro_arg)
394     {
395       pfile->out.cur = pfile->out.base;
396       pfile->out.first_line = pfile->line_table->highest_line;
397     }
398   /* start_of_input_line is needed to make sure that directives really,
399      really start at the first character of the line.  */
400   start_of_input_line = pfile->buffer->cur;
401  new_context:
402   context = pfile->context;
403   cur = CUR (context);
404   check_output_buffer (pfile, RLIMIT (context) - cur);
405   out = pfile->out.cur;
406 
407   for (;;)
408     {
409       if (!context->prev
410 	  && !builtin_macro_arg
411 	  && cur >= pfile->buffer->notes[pfile->buffer->cur_note].pos)
412 	{
413 	  pfile->buffer->cur = cur;
414 	  _cpp_process_line_notes (pfile, false);
415 	}
416       c = *cur++;
417       *out++ = c;
418 
419       /* Whitespace should "continue" out of the switch,
420 	 non-whitespace should "break" out of it.  */
421       switch (c)
422 	{
423 	case ' ':
424 	case '\t':
425 	case '\f':
426 	case '\v':
427 	case '\0':
428 	  continue;
429 
430 	case '\n':
431 	  /* If this is a macro's expansion, pop it.  */
432 	  if (context->prev)
433 	    {
434 	      pfile->out.cur = out - 1;
435 	      _cpp_pop_context (pfile);
436 	      goto new_context;
437 	    }
438 
439 	  /* Omit the newline from the output buffer.  */
440 	  pfile->out.cur = out - 1;
441 	  pfile->buffer->cur = cur;
442 	  if (builtin_macro_arg)
443 	    goto done;
444 	  pfile->buffer->need_line = true;
445 	  CPP_INCREMENT_LINE (pfile, 0);
446 
447 	  if ((lex_state == ls_fun_open || lex_state == ls_fun_close)
448 	      && !pfile->state.in_directive
449 	      && _cpp_get_fresh_line (pfile))
450 	    {
451 	      /* Newlines in arguments become a space, but we don't
452 		 clear any in-progress quote.  */
453 	      if (lex_state == ls_fun_close)
454 		out[-1] = ' ';
455 	      cur = pfile->buffer->cur;
456 	      continue;
457 	    }
458 	  goto done;
459 
460 	case '<':
461 	  if (header_ok)
462 	    quote = '>';
463 	  break;
464 	case '>':
465 	  if (c == quote)
466 	    quote = 0;
467 	  break;
468 
469 	case '"':
470 	case '\'':
471 	  if (c == quote)
472 	    quote = 0;
473 	  else if (!quote)
474 	    quote = c;
475 	  break;
476 
477 	case '\\':
478 	  /* Skip escaped quotes here, it's easier than above.  */
479 	  if (*cur == '\\' || *cur == '"' || *cur == '\'')
480 	    *out++ = *cur++;
481 	  break;
482 
483 	case '/':
484 	  /* Traditional CPP does not recognize comments within
485 	     literals.  */
486 	  if (!quote && *cur == '*')
487 	    {
488 	      pfile->out.cur = out;
489 	      cur = copy_comment (pfile, cur, macro != 0);
490 	      out = pfile->out.cur;
491 	      continue;
492 	    }
493 	  break;
494 
495 	case '_':
496 	case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
497 	case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
498 	case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
499 	case 's': case 't': case 'u': case 'v': case 'w': case 'x':
500 	case 'y': case 'z':
501 	case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
502 	case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
503 	case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
504 	case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
505 	case 'Y': case 'Z':
506 	  if (!pfile->state.skipping && (quote == 0 || macro))
507 	    {
508 	      cpp_hashnode *node;
509 	      uchar *out_start = out - 1;
510 
511 	      pfile->out.cur = out_start;
512 	      node = lex_identifier (pfile, cur - 1);
513 	      out = pfile->out.cur;
514 	      cur = CUR (context);
515 
516 	      if (node->type == NT_MACRO
517 		  /* Should we expand for ls_answer?  */
518 		  && (lex_state == ls_none || lex_state == ls_fun_open)
519 		  && !pfile->state.prevent_expansion)
520 		{
521 		  /* Macros invalidate MI optimization.  */
522 		  pfile->mi_valid = false;
523 		  if (fun_like_macro (node))
524 		    {
525 		      maybe_start_funlike (pfile, node, out_start, &fmacro);
526 		      lex_state = ls_fun_open;
527 		      fmacro.line = pfile->line_table->highest_line;
528 		      continue;
529 		    }
530 		  else if (!recursive_macro (pfile, node))
531 		    {
532 		      /* Remove the object-like macro's name from the
533 			 output, and push its replacement text.  */
534 		      pfile->out.cur = out_start;
535 		      push_replacement_text (pfile, node);
536 		      lex_state = ls_none;
537 		      goto new_context;
538 		    }
539 		}
540 	      else if (macro && (node->flags & NODE_MACRO_ARG) != 0)
541 		{
542 		  /* Found a parameter in the replacement text of a
543 		     #define.  Remove its name from the output.  */
544 		  pfile->out.cur = out_start;
545 		  save_replacement_text (pfile, macro, node->value.arg_index);
546 		  out = pfile->out.base;
547 		}
548 	      else if (lex_state == ls_hash)
549 		{
550 		  lex_state = ls_predicate;
551 		  continue;
552 		}
553 	      else if (pfile->state.in_expression
554 		       && node == pfile->spec_nodes.n_defined)
555 		{
556 		  lex_state = ls_defined;
557 		  continue;
558 		}
559 	      else if (pfile->state.in_expression
560 		       && (node == pfile->spec_nodes.n__has_include__
561 			|| node == pfile->spec_nodes.n__has_include_next__))
562 		{
563 		  lex_state = ls_has_include;
564 		  continue;
565 		}
566 	    }
567 	  break;
568 
569 	case '(':
570 	  if (quote == 0)
571 	    {
572 	      paren_depth++;
573 	      if (lex_state == ls_fun_open)
574 		{
575 		  if (recursive_macro (pfile, fmacro.node))
576 		    lex_state = ls_none;
577 		  else
578 		    {
579 		      lex_state = ls_fun_close;
580 		      paren_depth = 1;
581 		      out = pfile->out.base + fmacro.offset;
582 		      fmacro.args[0] = fmacro.offset;
583 		    }
584 		}
585 	      else if (lex_state == ls_predicate)
586 		lex_state = ls_answer;
587 	      else if (lex_state == ls_defined)
588 		lex_state = ls_defined_close;
589 	      else if (lex_state == ls_has_include)
590 		lex_state = ls_has_include_close;
591 	    }
592 	  break;
593 
594 	case ',':
595 	  if (quote == 0 && lex_state == ls_fun_close && paren_depth == 1)
596 	    save_argument (&fmacro, out - pfile->out.base);
597 	  break;
598 
599 	case ')':
600 	  if (quote == 0)
601 	    {
602 	      paren_depth--;
603 	      if (lex_state == ls_fun_close && paren_depth == 0)
604 		{
605 		  if (fmacro.node->flags & NODE_BUILTIN)
606 		    {
607 		      /* Handle builtin function-like macros like
608 			 __has_attribute.  The already parsed arguments
609 			 are put into a buffer, which is then preprocessed
610 			 and the result is fed to _cpp_push_text_context
611 			 with disabled expansion, where the ISO preprocessor
612 			 parses it.  While in traditional preprocessing
613 			 macro arguments aren't immediately expanded, they in
614 			 the end are because the macro with replaced arguments
615 			 is preprocessed again.  For the builtin function-like
616 			 macros we need the argument immediately though,
617 			 if we don't preprocess them, they would behave
618 			 very differently from ISO preprocessor handling
619 			 of those builtin macros.  So, this handling is
620 			 more similar to traditional preprocessing of
621 			 #if directives, where we also keep preprocessing
622 			 until everything is expanded, and then feed the
623 			 result with disabled expansion to ISO preprocessor
624 			 for handling the directives.  */
625 		      lex_state = ls_none;
626 		      save_argument (&fmacro, out - pfile->out.base);
627 		      cpp_macro m;
628 		      memset (&m, '\0', sizeof (m));
629 		      m.paramc = fmacro.paramc;
630 		      if (_cpp_arguments_ok (pfile, &m, fmacro.node,
631 					     fmacro.argc))
632 			{
633 			  size_t len = fmacro.args[1] - fmacro.args[0];
634 			  uchar *buf;
635 
636 			  /* Remove the macro's invocation from the
637 			     output, and push its replacement text.  */
638 			  pfile->out.cur = pfile->out.base + fmacro.offset;
639 			  CUR (context) = cur;
640 			  buf = _cpp_unaligned_alloc (pfile, len + 2);
641 			  buf[0] = '(';
642 			  memcpy (buf + 1, pfile->out.base + fmacro.args[0],
643 				  len);
644 			  buf[len + 1] = '\n';
645 
646 			  const unsigned char *ctx_rlimit = RLIMIT (context);
647 			  const unsigned char *saved_cur = pfile->buffer->cur;
648 			  const unsigned char *saved_rlimit
649 			    = pfile->buffer->rlimit;
650 			  const unsigned char *saved_line_base
651 			    = pfile->buffer->line_base;
652 			  bool saved_need_line = pfile->buffer->need_line;
653 			  cpp_buffer *saved_overlaid_buffer
654 			    = pfile->overlaid_buffer;
655 			  pfile->buffer->cur = buf;
656 			  pfile->buffer->line_base = buf;
657 			  pfile->buffer->rlimit = buf + len + 1;
658 			  pfile->buffer->need_line = false;
659 			  pfile->overlaid_buffer = pfile->buffer;
660 			  bool saved_in_directive = pfile->state.in_directive;
661 			  pfile->state.in_directive = true;
662 			  cpp_context *saved_prev_context = context->prev;
663 			  context->prev = NULL;
664 
665 			  _cpp_scan_out_logical_line (pfile, NULL, true);
666 
667 			  pfile->state.in_directive = saved_in_directive;
668 			  check_output_buffer (pfile, 1);
669 			  *pfile->out.cur = '\n';
670 			  pfile->buffer->cur = pfile->out.base + fmacro.offset;
671 			  pfile->buffer->line_base = pfile->buffer->cur;
672 			  pfile->buffer->rlimit = pfile->out.cur;
673 			  CUR (context) = pfile->buffer->cur;
674 			  RLIMIT (context) = pfile->buffer->rlimit;
675 
676 			  pfile->state.prevent_expansion++;
677 			  const uchar *text
678 			    = _cpp_builtin_macro_text (pfile, fmacro.node);
679 			  pfile->state.prevent_expansion--;
680 
681 			  context->prev = saved_prev_context;
682 			  pfile->buffer->cur = saved_cur;
683 			  pfile->buffer->rlimit = saved_rlimit;
684 			  pfile->buffer->line_base = saved_line_base;
685 			  pfile->buffer->need_line = saved_need_line;
686 			  pfile->overlaid_buffer = saved_overlaid_buffer;
687 			  pfile->out.cur = pfile->out.base + fmacro.offset;
688 			  CUR (context) = cur;
689 			  RLIMIT (context) = ctx_rlimit;
690 			  len = ustrlen (text);
691 			  buf = _cpp_unaligned_alloc (pfile, len + 1);
692 			  memcpy (buf, text, len);
693 			  buf[len] = '\n';
694 			  text = buf;
695 			  _cpp_push_text_context (pfile, fmacro.node,
696 						  text, len);
697 			  goto new_context;
698 			}
699 		      break;
700 		    }
701 
702 		  cpp_macro *m = fmacro.node->value.macro;
703 
704 		  m->used = 1;
705 		  lex_state = ls_none;
706 		  save_argument (&fmacro, out - pfile->out.base);
707 
708 		  /* A single zero-length argument is no argument.  */
709 		  if (fmacro.argc == 1
710 		      && m->paramc == 0
711 		      && out == pfile->out.base + fmacro.offset + 1)
712 		    fmacro.argc = 0;
713 
714 		  if (_cpp_arguments_ok (pfile, m, fmacro.node, fmacro.argc))
715 		    {
716 		      /* Remove the macro's invocation from the
717 			 output, and push its replacement text.  */
718 		      pfile->out.cur = pfile->out.base + fmacro.offset;
719 		      CUR (context) = cur;
720 		      replace_args_and_push (pfile, &fmacro);
721 		      goto new_context;
722 		    }
723 		}
724 	      else if (lex_state == ls_answer || lex_state == ls_defined_close
725 			|| lex_state == ls_has_include_close)
726 		lex_state = ls_none;
727 	    }
728 	  break;
729 
730 	case '#':
731 	  if (cur - 1 == start_of_input_line
732 	      /* A '#' from a macro doesn't start a directive.  */
733 	      && !pfile->context->prev
734 	      && !pfile->state.in_directive)
735 	    {
736 	      /* A directive.  With the way _cpp_handle_directive
737 		 currently works, we only want to call it if either we
738 		 know the directive is OK, or we want it to fail and
739 		 be removed from the output.  If we want it to be
740 		 passed through (the assembler case) then we must not
741 		 call _cpp_handle_directive.  */
742 	      pfile->out.cur = out;
743 	      cur = skip_whitespace (pfile, cur, true /* skip_comments */);
744 	      out = pfile->out.cur;
745 
746 	      if (*cur == '\n')
747 		{
748 		  /* Null directive.  Ignore it and don't invalidate
749 		     the MI optimization.  */
750 		  pfile->buffer->need_line = true;
751 		  CPP_INCREMENT_LINE (pfile, 0);
752 		  result = false;
753 		  goto done;
754 		}
755 	      else
756 		{
757 		  bool do_it = false;
758 
759 		  if (is_numstart (*cur)
760 		      && CPP_OPTION (pfile, lang) != CLK_ASM)
761 		    do_it = true;
762 		  else if (is_idstart (*cur))
763 		    /* Check whether we know this directive, but don't
764 		       advance.  */
765 		    do_it = lex_identifier (pfile, cur)->is_directive;
766 
767 		  if (do_it || CPP_OPTION (pfile, lang) != CLK_ASM)
768 		    {
769 		      /* This is a kludge.  We want to have the ISO
770 			 preprocessor lex the next token.  */
771 		      pfile->buffer->cur = cur;
772 		      _cpp_handle_directive (pfile, false /* indented */);
773 		      result = false;
774 		      goto done;
775 		    }
776 		}
777 	    }
778 
779 	  if (pfile->state.in_expression)
780 	    {
781 	      lex_state = ls_hash;
782 	      continue;
783 	    }
784 	  break;
785 
786 	default:
787 	  break;
788 	}
789 
790       /* Non-whitespace disables MI optimization and stops treating
791 	 '<' as a quote in #include.  */
792       header_ok = false;
793       if (!pfile->state.in_directive)
794 	pfile->mi_valid = false;
795 
796       if (lex_state == ls_none)
797 	continue;
798 
799       /* Some of these transitions of state are syntax errors.  The
800 	 ISO preprocessor will issue errors later.  */
801       if (lex_state == ls_fun_open)
802 	/* Missing '('.  */
803 	lex_state = ls_none;
804       else if (lex_state == ls_hash
805 	       || lex_state == ls_predicate
806 	       || lex_state == ls_defined
807 	       || lex_state == ls_has_include)
808 	lex_state = ls_none;
809 
810       /* ls_answer and ls_defined_close keep going until ')'.  */
811     }
812 
813  done:
814   if (fmacro.buff)
815     _cpp_release_buff (pfile, fmacro.buff);
816 
817   if (lex_state == ls_fun_close)
818     cpp_error_with_line (pfile, CPP_DL_ERROR, fmacro.line, 0,
819 			 "unterminated argument list invoking macro \"%s\"",
820 			 NODE_NAME (fmacro.node));
821   return result;
822 }
823 
824 /* Push a context holding the replacement text of the macro NODE on
825    the context stack.  NODE is either object-like, or a function-like
826    macro with no arguments.  */
827 static void
828 push_replacement_text (cpp_reader *pfile, cpp_hashnode *node)
829 {
830   size_t len;
831   const uchar *text;
832   uchar *buf;
833 
834   if (node->flags & NODE_BUILTIN)
835     {
836       text = _cpp_builtin_macro_text (pfile, node);
837       len = ustrlen (text);
838       buf = _cpp_unaligned_alloc (pfile, len + 1);
839       memcpy (buf, text, len);
840       buf[len] = '\n';
841       text = buf;
842     }
843   else
844     {
845       cpp_macro *macro = node->value.macro;
846       macro->used = 1;
847       text = macro->exp.text;
848       macro->traditional = 1;
849       len = macro->count;
850     }
851 
852   _cpp_push_text_context (pfile, node, text, len);
853 }
854 
855 /* Returns TRUE if traditional macro recursion is detected.  */
856 static bool
857 recursive_macro (cpp_reader *pfile, cpp_hashnode *node)
858 {
859   bool recursing = !!(node->flags & NODE_DISABLED);
860 
861   /* Object-like macros that are already expanding are necessarily
862      recursive.
863 
864      However, it is possible to have traditional function-like macros
865      that are not infinitely recursive but recurse to any given depth.
866      Further, it is easy to construct examples that get ever longer
867      until the point they stop recursing.  So there is no easy way to
868      detect true recursion; instead we assume any expansion more than
869      20 deep since the first invocation of this macro must be
870      recursing.  */
871   if (recursing && fun_like_macro (node))
872     {
873       size_t depth = 0;
874       cpp_context *context = pfile->context;
875 
876       do
877 	{
878 	  depth++;
879 	  if (context->c.macro == node && depth > 20)
880 	    break;
881 	  context = context->prev;
882 	}
883       while (context);
884       recursing = context != NULL;
885     }
886 
887   if (recursing)
888     cpp_error (pfile, CPP_DL_ERROR,
889 	       "detected recursion whilst expanding macro \"%s\"",
890 	       NODE_NAME (node));
891 
892   return recursing;
893 }
894 
895 /* Return the length of the replacement text of a function-like or
896    object-like non-builtin macro.  */
897 size_t
898 _cpp_replacement_text_len (const cpp_macro *macro)
899 {
900   size_t len;
901 
902   if (macro->fun_like && (macro->paramc != 0))
903     {
904       const uchar *exp;
905 
906       len = 0;
907       for (exp = macro->exp.text;;)
908 	{
909 	  struct block *b = (struct block *) exp;
910 
911 	  len += b->text_len;
912 	  if (b->arg_index == 0)
913 	    break;
914 	  len += NODE_LEN (macro->params[b->arg_index - 1]);
915 	  exp += BLOCK_LEN (b->text_len);
916 	}
917     }
918   else
919     len = macro->count;
920 
921   return len;
922 }
923 
924 /* Copy the replacement text of MACRO to DEST, which must be of
925    sufficient size.  It is not NUL-terminated.  The next character is
926    returned.  */
927 uchar *
928 _cpp_copy_replacement_text (const cpp_macro *macro, uchar *dest)
929 {
930   if (macro->fun_like && (macro->paramc != 0))
931     {
932       const uchar *exp;
933 
934       for (exp = macro->exp.text;;)
935 	{
936 	  struct block *b = (struct block *) exp;
937 	  cpp_hashnode *param;
938 
939 	  memcpy (dest, b->text, b->text_len);
940 	  dest += b->text_len;
941 	  if (b->arg_index == 0)
942 	    break;
943 	  param = macro->params[b->arg_index - 1];
944 	  memcpy (dest, NODE_NAME (param), NODE_LEN (param));
945 	  dest += NODE_LEN (param);
946 	  exp += BLOCK_LEN (b->text_len);
947 	}
948     }
949   else
950     {
951       memcpy (dest, macro->exp.text, macro->count);
952       dest += macro->count;
953     }
954 
955   return dest;
956 }
957 
958 /* Push a context holding the replacement text of the macro NODE on
959    the context stack.  NODE is either object-like, or a function-like
960    macro with no arguments.  */
961 static void
962 replace_args_and_push (cpp_reader *pfile, struct fun_macro *fmacro)
963 {
964   cpp_macro *macro = fmacro->node->value.macro;
965 
966   if (macro->paramc == 0)
967     push_replacement_text (pfile, fmacro->node);
968   else
969     {
970       const uchar *exp;
971       uchar *p;
972       _cpp_buff *buff;
973       size_t len = 0;
974       int cxtquote = 0;
975 
976       /* Get an estimate of the length of the argument-replaced text.
977 	 This is a worst case estimate, assuming that every replacement
978 	 text character needs quoting.  */
979       for (exp = macro->exp.text;;)
980 	{
981 	  struct block *b = (struct block *) exp;
982 
983 	  len += b->text_len;
984 	  if (b->arg_index == 0)
985 	    break;
986 	  len += 2 * (fmacro->args[b->arg_index]
987 		      - fmacro->args[b->arg_index - 1] - 1);
988 	  exp += BLOCK_LEN (b->text_len);
989 	}
990 
991       /* Allocate room for the expansion plus \n.  */
992       buff = _cpp_get_buff (pfile, len + 1);
993 
994       /* Copy the expansion and replace arguments.  */
995       /* Accumulate actual length, including quoting as necessary */
996       p = BUFF_FRONT (buff);
997       len = 0;
998       for (exp = macro->exp.text;;)
999 	{
1000 	  struct block *b = (struct block *) exp;
1001 	  size_t arglen;
1002 	  int argquote;
1003 	  uchar *base;
1004 	  uchar *in;
1005 
1006 	  len += b->text_len;
1007 	  /* Copy the non-argument text literally, keeping
1008 	     track of whether matching quotes have been seen. */
1009 	  for (arglen = b->text_len, in = b->text; arglen > 0; arglen--)
1010 	    {
1011 	      if (*in == '"')
1012 		cxtquote = ! cxtquote;
1013 	      *p++ = *in++;
1014 	    }
1015 	  /* Done if no more arguments */
1016 	  if (b->arg_index == 0)
1017 	    break;
1018 	  arglen = (fmacro->args[b->arg_index]
1019 		    - fmacro->args[b->arg_index - 1] - 1);
1020 	  base = pfile->out.base + fmacro->args[b->arg_index - 1];
1021 	  in = base;
1022 #if 0
1023 	  /* Skip leading whitespace in the text for the argument to
1024 	     be substituted. To be compatible with gcc 2.95, we would
1025 	     also need to trim trailing whitespace. Gcc 2.95 trims
1026 	     leading and trailing whitespace, which may be a bug.  The
1027 	     current gcc testsuite explicitly checks that this leading
1028 	     and trailing whitespace in actual arguments is
1029 	     preserved. */
1030 	  while (arglen > 0 && is_space (*in))
1031 	    {
1032 	      in++;
1033 	      arglen--;
1034 	    }
1035 #endif
1036 	  for (argquote = 0; arglen > 0; arglen--)
1037 	    {
1038 	      if (cxtquote && *in == '"')
1039 		{
1040 		  if (in > base && *(in-1) != '\\')
1041 		    argquote = ! argquote;
1042 		  /* Always add backslash before double quote if argument
1043 		     is expanded in a quoted context */
1044 		  *p++ = '\\';
1045 		  len++;
1046 		}
1047 	      else if (cxtquote && argquote && *in == '\\')
1048 		{
1049 		  /* Always add backslash before a backslash in an argument
1050 		     that is expanded in a quoted context and also in the
1051 		     range of a quoted context in the argument itself. */
1052 		  *p++ = '\\';
1053 		  len++;
1054 		}
1055 	      *p++ = *in++;
1056 	      len++;
1057 	    }
1058 	  exp += BLOCK_LEN (b->text_len);
1059 	}
1060 
1061       /* \n-terminate.  */
1062       *p = '\n';
1063       _cpp_push_text_context (pfile, fmacro->node, BUFF_FRONT (buff), len);
1064 
1065       /* So we free buffer allocation when macro is left.  */
1066       pfile->context->buff = buff;
1067     }
1068 }
1069 
1070 /* Read and record the parameters, if any, of a function-like macro
1071    definition.  Destroys pfile->out.cur.
1072 
1073    Returns true on success, false on failure (syntax error or a
1074    duplicate parameter).  On success, CUR (pfile->context) is just
1075    past the closing parenthesis.  */
1076 static bool
1077 scan_parameters (cpp_reader *pfile, cpp_macro *macro)
1078 {
1079   const uchar *cur = CUR (pfile->context) + 1;
1080   bool ok;
1081 
1082   for (;;)
1083     {
1084       cur = skip_whitespace (pfile, cur, true /* skip_comments */);
1085 
1086       if (is_idstart (*cur))
1087 	{
1088 	  struct cpp_hashnode *id = lex_identifier (pfile, cur);
1089 	  ok = false;
1090 	  if (_cpp_save_parameter (pfile, macro, id, id))
1091 	    break;
1092 	  cur = skip_whitespace (pfile, CUR (pfile->context),
1093 				 true /* skip_comments */);
1094 	  if (*cur == ',')
1095 	    {
1096 	      cur++;
1097 	      continue;
1098 	    }
1099 	  ok = (*cur == ')');
1100 	  break;
1101 	}
1102 
1103       ok = (*cur == ')' && macro->paramc == 0);
1104       break;
1105     }
1106 
1107   if (!ok)
1108     cpp_error (pfile, CPP_DL_ERROR, "syntax error in macro parameter list");
1109 
1110   CUR (pfile->context) = cur + (*cur == ')');
1111 
1112   return ok;
1113 }
1114 
1115 /* Save the text from pfile->out.base to pfile->out.cur as
1116    the replacement text for the current macro, followed by argument
1117    ARG_INDEX, with zero indicating the end of the replacement
1118    text.  */
1119 static void
1120 save_replacement_text (cpp_reader *pfile, cpp_macro *macro,
1121 		       unsigned int arg_index)
1122 {
1123   size_t len = pfile->out.cur - pfile->out.base;
1124   uchar *exp;
1125 
1126   if (macro->paramc == 0)
1127     {
1128       /* Object-like and function-like macros without parameters
1129 	 simply store their \n-terminated replacement text.  */
1130       exp = _cpp_unaligned_alloc (pfile, len + 1);
1131       memcpy (exp, pfile->out.base, len);
1132       exp[len] = '\n';
1133       macro->exp.text = exp;
1134       macro->traditional = 1;
1135       macro->count = len;
1136     }
1137   else
1138     {
1139       /* Store the text's length (unsigned int), the argument index
1140 	 (unsigned short, base 1) and then the text.  */
1141       size_t blen = BLOCK_LEN (len);
1142       struct block *block;
1143 
1144       if (macro->count + blen > BUFF_ROOM (pfile->a_buff))
1145 	_cpp_extend_buff (pfile, &pfile->a_buff, macro->count + blen);
1146 
1147       exp = BUFF_FRONT (pfile->a_buff);
1148       block = (struct block *) (exp + macro->count);
1149       macro->exp.text = exp;
1150       macro->traditional = 1;
1151 
1152       /* Write out the block information.  */
1153       block->text_len = len;
1154       block->arg_index = arg_index;
1155       memcpy (block->text, pfile->out.base, len);
1156 
1157       /* Lex the rest into the start of the output buffer.  */
1158       pfile->out.cur = pfile->out.base;
1159 
1160       macro->count += blen;
1161 
1162       /* If we've finished, commit the memory.  */
1163       if (arg_index == 0)
1164 	BUFF_FRONT (pfile->a_buff) += macro->count;
1165     }
1166 }
1167 
1168 /* Analyze and save the replacement text of a macro.  Returns true on
1169    success.  */
1170 bool
1171 _cpp_create_trad_definition (cpp_reader *pfile, cpp_macro *macro)
1172 {
1173   const uchar *cur;
1174   uchar *limit;
1175   cpp_context *context = pfile->context;
1176 
1177   /* The context has not been set up for command line defines, and CUR
1178      has not been updated for the macro name for in-file defines.  */
1179   pfile->out.cur = pfile->out.base;
1180   CUR (context) = pfile->buffer->cur;
1181   RLIMIT (context) = pfile->buffer->rlimit;
1182   check_output_buffer (pfile, RLIMIT (context) - CUR (context));
1183 
1184   /* Is this a function-like macro?  */
1185   if (* CUR (context) == '(')
1186     {
1187       bool ok = scan_parameters (pfile, macro);
1188 
1189       /* Remember the params so we can clear NODE_MACRO_ARG flags.  */
1190       macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
1191 
1192       /* Setting macro to NULL indicates an error occurred, and
1193 	 prevents unnecessary work in _cpp_scan_out_logical_line.  */
1194       if (!ok)
1195 	macro = NULL;
1196       else
1197 	{
1198 	  BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
1199 	  macro->fun_like = 1;
1200 	}
1201     }
1202 
1203   /* Skip leading whitespace in the replacement text.  */
1204   pfile->buffer->cur
1205     = skip_whitespace (pfile, CUR (context),
1206 		       CPP_OPTION (pfile, discard_comments_in_macro_exp));
1207 
1208   pfile->state.prevent_expansion++;
1209   _cpp_scan_out_logical_line (pfile, macro, false);
1210   pfile->state.prevent_expansion--;
1211 
1212   if (!macro)
1213     return false;
1214 
1215   /* Skip trailing white space.  */
1216   cur = pfile->out.base;
1217   limit = pfile->out.cur;
1218   while (limit > cur && is_space (limit[-1]))
1219     limit--;
1220   pfile->out.cur = limit;
1221   save_replacement_text (pfile, macro, 0);
1222 
1223   return true;
1224 }
1225 
1226 /* Copy SRC of length LEN to DEST, but convert all contiguous
1227    whitespace to a single space, provided it is not in quotes.  The
1228    quote currently in effect is pointed to by PQUOTE, and is updated
1229    by the function.  Returns the number of bytes copied.  */
1230 static size_t
1231 canonicalize_text (uchar *dest, const uchar *src, size_t len, uchar *pquote)
1232 {
1233   uchar *orig_dest = dest;
1234   uchar quote = *pquote;
1235 
1236   while (len)
1237     {
1238       if (is_space (*src) && !quote)
1239 	{
1240 	  do
1241 	    src++, len--;
1242 	  while (len && is_space (*src));
1243 	  *dest++ = ' ';
1244 	}
1245       else
1246 	{
1247 	  if (*src == '\'' || *src == '"')
1248 	    {
1249 	      if (!quote)
1250 		quote = *src;
1251 	      else if (quote == *src)
1252 		quote = 0;
1253 	    }
1254 	  *dest++ = *src++, len--;
1255 	}
1256     }
1257 
1258   *pquote = quote;
1259   return dest - orig_dest;
1260 }
1261 
1262 /* Returns true if MACRO1 and MACRO2 have expansions different other
1263    than in the form of their whitespace.  */
1264 bool
1265 _cpp_expansions_different_trad (const cpp_macro *macro1,
1266 				const cpp_macro *macro2)
1267 {
1268   uchar *p1 = XNEWVEC (uchar, macro1->count + macro2->count);
1269   uchar *p2 = p1 + macro1->count;
1270   uchar quote1 = 0, quote2 = 0;
1271   bool mismatch;
1272   size_t len1, len2;
1273 
1274   if (macro1->paramc > 0)
1275     {
1276       const uchar *exp1 = macro1->exp.text, *exp2 = macro2->exp.text;
1277 
1278       mismatch = true;
1279       for (;;)
1280 	{
1281 	  struct block *b1 = (struct block *) exp1;
1282 	  struct block *b2 = (struct block *) exp2;
1283 
1284 	  if (b1->arg_index != b2->arg_index)
1285 	    break;
1286 
1287 	  len1 = canonicalize_text (p1, b1->text, b1->text_len, &quote1);
1288 	  len2 = canonicalize_text (p2, b2->text, b2->text_len, &quote2);
1289 	  if (len1 != len2 || memcmp (p1, p2, len1))
1290 	    break;
1291 	  if (b1->arg_index == 0)
1292 	    {
1293 	      mismatch = false;
1294 	      break;
1295 	    }
1296 	  exp1 += BLOCK_LEN (b1->text_len);
1297 	  exp2 += BLOCK_LEN (b2->text_len);
1298 	}
1299     }
1300   else
1301     {
1302       len1 = canonicalize_text (p1, macro1->exp.text, macro1->count, &quote1);
1303       len2 = canonicalize_text (p2, macro2->exp.text, macro2->count, &quote2);
1304       mismatch = (len1 != len2 || memcmp (p1, p2, len1));
1305     }
1306 
1307   free (p1);
1308   return mismatch;
1309 }
1310