]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cppmacro.c
* jv-scan.c (help): Document --complexity.
[thirdparty/gcc.git] / gcc / cppmacro.c
CommitLineData
79bd622b 1/* Part of CPP library. (Macro and #define handling.)
69461e0d 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
3 1999, 2000 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
22 In other words, you are welcome to use, share and improve this program.
23 You are forbidden to forbid anyone else to use, share and improve
24 what you give them. Help stamp out software-hoarding! */
25
26#include "config.h"
27#include "system.h"
79bd622b 28#include "intl.h" /* for _("<command line>") below. */
69461e0d 29#include "cpplib.h"
30#include "cpphash.h"
31
98439989 32#ifndef STDC_0_IN_SYSTEM_HEADERS
33#define STDC_0_IN_SYSTEM_HEADERS 0 /* Boolean macro. */
34#endif
35
79bd622b 36struct cpp_macro
69461e0d 37{
79bd622b 38 cpp_hashnode **params; /* Parameters, if any. */
39 cpp_token *expansion; /* First token of replacement list. */
40 const char *file; /* Defined in file name. */
41 unsigned int line; /* Starting line number. */
42 unsigned int count; /* Number of tokens in expansion. */
43 unsigned short paramc; /* Number of parameters. */
44 unsigned int fun_like : 1; /* If a function-like macro. */
45 unsigned int var_args : 1; /* If a variable-args macro. */
46 unsigned int disabled : 1; /* If macro is disabled. */
47};
48
49typedef struct macro_arg macro_arg;
50struct macro_arg
51{
52 cpp_token *first; /* First token in unexpanded argument. */
53 cpp_token *expanded; /* Macro-expanded argument. */
54 cpp_token *stringified; /* Stringified argument. */
55 unsigned int count; /* # of tokens in argument. */
56 unsigned int expanded_count; /* # of tokens in expanded argument. */
69461e0d 57};
58
79bd622b 59/* Macro expansion. */
60
61static void lock_pools PARAMS ((cpp_reader *));
62static void unlock_pools PARAMS ((cpp_reader *));
def71b06 63static int enter_macro_context PARAMS ((cpp_reader *, cpp_hashnode *));
79bd622b 64static void builtin_macro PARAMS ((cpp_reader *, cpp_token *));
65static cpp_context *push_arg_context PARAMS ((cpp_reader *, macro_arg *));
66static enum cpp_ttype parse_arg PARAMS ((cpp_reader *, macro_arg *, int));
67static macro_arg *parse_args PARAMS ((cpp_reader *, const cpp_hashnode *));
68static cpp_context *next_context PARAMS ((cpp_reader *));
69static void expand_arg PARAMS ((cpp_reader *, macro_arg *));
70static unsigned char *quote_string PARAMS ((unsigned char *,
71 const unsigned char *,
72 unsigned int));
73static void make_string_token PARAMS ((cpp_pool *, cpp_token *,
74 const U_CHAR *, unsigned int));
75static void make_number_token PARAMS ((cpp_reader *, cpp_token *, int));
76static void stringify_arg PARAMS ((cpp_reader *, macro_arg *));
77static void paste_all_tokens PARAMS ((cpp_reader *, cpp_token *));
78static void paste_payloads PARAMS ((cpp_reader *, cpp_token *,
79 const cpp_token *));
80static int funlike_invocation_p PARAMS ((cpp_reader *, const cpp_hashnode *,
81 struct toklist *));
82static void replace_args PARAMS ((cpp_reader *, cpp_macro *, macro_arg *,
83 struct toklist *));
84
85/* Lookaheads. */
86
87static void save_lookahead_token PARAMS ((cpp_reader *, const cpp_token *));
88static void take_lookahead_token PARAMS ((cpp_reader *, cpp_token *));
79bd622b 89static cpp_lookahead *alloc_lookahead PARAMS ((cpp_reader *));
90static void free_lookahead PARAMS ((cpp_lookahead *));
91
92/* #define directive parsing and handling. */
93
94static cpp_token *lex_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
95static int check_macro_redefinition PARAMS ((cpp_reader *,
96 const cpp_hashnode *,
97 const cpp_macro *));
98static int save_parameter PARAMS ((cpp_reader *, cpp_macro *, cpp_hashnode *));
99static int parse_params PARAMS ((cpp_reader *, cpp_macro *));
bceb9193 100static void check_trad_stringification PARAMS ((cpp_reader *,
79bd622b 101 const cpp_macro *,
bceb9193 102 const cpp_string *));
69461e0d 103
79bd622b 104/* Allocates a buffer to hold a token's TEXT, and converts TOKEN to a
105 CPP_STRING token containing TEXT in quoted form. */
106static void
107make_string_token (pool, token, text, len)
108 cpp_pool *pool;
109 cpp_token *token;
110 const U_CHAR *text;
111 unsigned int len;
112{
113 U_CHAR *buf = _cpp_pool_alloc (pool, len * 4);
114
115 token->type = CPP_STRING;
116 token->val.str.text = buf;
117 token->val.str.len = quote_string (buf, text, len) - buf;
118 token->flags = 0;
119}
120
121/* Allocates and converts a temporary token to a CPP_NUMBER token,
122 evaluating to NUMBER. */
123static void
124make_number_token (pfile, token, number)
125 cpp_reader *pfile;
126 cpp_token *token;
127 int number;
128{
129 unsigned char *buf = _cpp_pool_alloc (pfile->string_pool, 20);
130
131 sprintf ((char *) buf, "%d", number);
132 token->type = CPP_NUMBER;
133 token->val.str.text = buf;
134 token->val.str.len = ustrlen (buf);
135 token->flags = 0;
136}
137
138static const char * const monthnames[] =
139{
140 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
141 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
142};
143
144/* Handle builtin macros like __FILE__. */
145static void
146builtin_macro (pfile, token)
147 cpp_reader *pfile;
148 cpp_token *token;
149{
150 unsigned char flags = token->flags & PREV_WHITE;
151 cpp_hashnode *node = token->val.node;
152 cpp_buffer *ip;
153
154 switch (node->value.builtin)
155 {
156 case BT_FILE:
157 case BT_BASE_FILE:
69461e0d 158 {
79bd622b 159 const char *file;
160
161 ip = CPP_BUFFER (pfile);
162 if (ip == 0)
163 file = "";
164 else
165 {
166 if (node->value.builtin == BT_BASE_FILE)
167 while (CPP_PREV_BUFFER (ip) != NULL)
168 ip = CPP_PREV_BUFFER (ip);
169
170 file = ip->nominal_fname;
171 }
172 make_string_token (pfile->string_pool, token,
dd9977e9 173 (const U_CHAR *) file, strlen (file));
69461e0d 174 }
79bd622b 175 break;
176
177 case BT_INCLUDE_LEVEL:
178 /* pfile->include_depth counts the primary source as level 1,
179 but historically __INCLUDE_DEPTH__ has called the primary
180 source level 0. */
181 make_number_token (pfile, token, pfile->include_depth - 1);
182 break;
183
184 case BT_SPECLINE:
185 /* If __LINE__ is embedded in a macro, it must expand to the
186 line of the macro's invocation, not its definition.
187 Otherwise things like assert() will not work properly. */
188 make_number_token (pfile, token, cpp_get_line (pfile)->line);
189 break;
190
191 case BT_STDC:
192 {
193 int stdc = 1;
194
98439989 195 if (STDC_0_IN_SYSTEM_HEADERS && CPP_IN_SYSTEM_HEADER (pfile)
d5502c23 196 && pfile->spec_nodes.n__STRICT_ANSI__->type == NT_VOID)
79bd622b 197 stdc = 0;
79bd622b 198 make_number_token (pfile, token, stdc);
199 }
200 break;
69461e0d 201
79bd622b 202 case BT_DATE:
203 case BT_TIME:
204 if (pfile->date.type == CPP_EOF)
205 {
206 /* Allocate __DATE__ and __TIME__ from permanent storage,
207 and save them in pfile so we don't have to do this again.
208 We don't generate these strings at init time because
209 time() and localtime() are very slow on some systems. */
210 time_t tt = time (NULL);
211 struct tm *tb = localtime (&tt);
212
213 make_string_token (&pfile->ident_pool, &pfile->date,
214 DSC("Oct 11 1347"));
215 make_string_token (&pfile->ident_pool, &pfile->time,
216 DSC("12:34:56"));
217
218 sprintf ((char *) pfile->date.val.str.text, "%s %2d %4d",
219 monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900);
220 sprintf ((char *) pfile->time.val.str.text, "%02d:%02d:%02d",
221 tb->tm_hour, tb->tm_min, tb->tm_sec);
222 }
223 *token = node->value.builtin == BT_DATE ? pfile->date: pfile->time;
224 break;
225
226 default:
227 cpp_ice (pfile, "invalid builtin macro \"%s\"", node->name);
228 break;
229 }
230
231 token->flags = flags;
69461e0d 232}
233
79bd622b 234/* Used by cpperror.c to obtain the correct line and column to report
235 in a diagnostic. */
236const cpp_lexer_pos *
237cpp_get_line (pfile)
69461e0d 238 cpp_reader *pfile;
69461e0d 239{
79bd622b 240 /* Within a macro expansion, return the position of the outermost
241 invocation. */
242 if (pfile->context->prev)
243 return &pfile->macro_pos;
244 return &pfile->lexer_pos;
245}
69461e0d 246
79bd622b 247static void
248lock_pools (pfile)
249 cpp_reader *pfile;
250{
251 _cpp_lock_pool (&pfile->temp_string_pool);
252 _cpp_lock_pool (&pfile->argument_pool);
69461e0d 253}
254
79bd622b 255static void
256unlock_pools (pfile)
257 cpp_reader *pfile;
258{
259 _cpp_unlock_pool (&pfile->temp_string_pool);
260 _cpp_unlock_pool (&pfile->argument_pool);
261}
69461e0d 262
69461e0d 263static void
79bd622b 264paste_payloads (pfile, lhs, rhs)
69461e0d 265 cpp_reader *pfile;
79bd622b 266 cpp_token *lhs;
267 const cpp_token *rhs;
69461e0d 268{
79bd622b 269 unsigned int total_len = cpp_token_len (lhs) + cpp_token_len (rhs);
270 unsigned char *result, *end;
271 cpp_pool *pool;
272
273 pool = lhs->type == CPP_NAME ? &pfile->ident_pool: pfile->string_pool;
274 result = _cpp_pool_alloc (pool, total_len + 1);
69461e0d 275
79bd622b 276 /* Paste the spellings and null terminate. */
277 end = cpp_spell_token (pfile, rhs, cpp_spell_token (pfile, lhs, result));
278 *end = '\0';
279 total_len = end - result;
69461e0d 280
79bd622b 281 if (lhs->type == CPP_NAME)
69461e0d 282 {
79bd622b 283 lhs->val.node = cpp_lookup (pfile, result, total_len);
284 if (lhs->val.node->flags & NODE_OPERATOR)
69461e0d 285 {
79bd622b 286 lhs->flags |= NAMED_OP;
287 lhs->type = lhs->val.node->value.operator;
288 }
289 }
290 else
291 {
292 lhs->val.str.text = result;
293 lhs->val.str.len = total_len;
294 }
295}
69461e0d 296
79bd622b 297/* Adds backslashes before all backslashes and double quotes appearing
298 in strings. Non-printable characters are converted to octal. */
299static U_CHAR *
300quote_string (dest, src, len)
301 U_CHAR *dest;
302 const U_CHAR *src;
303 unsigned int len;
304{
305 while (len--)
306 {
307 U_CHAR c = *src++;
69461e0d 308
79bd622b 309 if (c == '\\' || c == '"')
310 {
311 *dest++ = '\\';
312 *dest++ = c;
313 }
314 else
315 {
316 if (ISPRINT (c))
317 *dest++ = c;
318 else
69461e0d 319 {
79bd622b 320 sprintf ((char *) dest, "\\%03o", c);
321 dest += 4;
69461e0d 322 }
79bd622b 323 }
324 }
69461e0d 325
79bd622b 326 return dest;
327}
69461e0d 328
79bd622b 329/* Convert a token sequence to a single string token according to the
330 rules of the ISO C #-operator. */
331static void
332stringify_arg (pfile, arg)
333 cpp_reader *pfile;
334 macro_arg *arg;
335{
336 cpp_pool *pool = pfile->string_pool;
337 unsigned char *start = POOL_FRONT (pool);
338 unsigned int i, escape_it, total_len = 0, backslash_count = 0;
69461e0d 339
79bd622b 340 /* Loop, reading in the argument's tokens. */
341 for (i = 0; i < arg->count; i++)
342 {
343 unsigned char *dest;
344 const cpp_token *token = &arg->first[i];
345 unsigned int len = cpp_token_len (token);
69461e0d 346
79bd622b 347 escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING
348 || token->type == CPP_CHAR || token->type == CPP_WCHAR
349 || token->type == CPP_OSTRING);
69461e0d 350
79bd622b 351 if (escape_it)
352 /* Worst case is each char is octal. */
353 len *= 4;
354 len++; /* Room for initial space. */
69461e0d 355
79bd622b 356 dest = &start[total_len];
357 if (dest + len > POOL_LIMIT (pool))
358 {
359 _cpp_next_chunk (pool, len, (unsigned char **) &start);
360 dest = &start[total_len];
361 }
69461e0d 362
79bd622b 363 /* No leading white space. */
3c7df4d3 364 if (token->flags & PREV_WHITE && total_len > 0)
365 *dest++ = ' ';
69461e0d 366
79bd622b 367 if (escape_it)
368 {
369 unsigned char *buf = (unsigned char *) xmalloc (len);
370
371 len = cpp_spell_token (pfile, token, buf) - buf;
372 dest = quote_string (dest, buf, len);
373 free (buf);
374 }
375 else
376 dest = cpp_spell_token (pfile, token, dest);
377 total_len = dest - start;
378
33344a1c 379 if (token->type == CPP_OTHER && token->val.c == '\\')
79bd622b 380 backslash_count++;
381 else
382 backslash_count = 0;
383 }
384
385 /* Ignore the final \ of invalid string literals. */
386 if (backslash_count & 1)
387 {
388 cpp_warning (pfile, "invalid string literal, ignoring final '\\'");
389 total_len--;
390 }
391
392 POOL_COMMIT (pool, total_len);
393
394 arg->stringified = xnew (cpp_token);
395 arg->stringified->flags = 0;
396 arg->stringified->type = CPP_STRING;
397 arg->stringified->val.str.text = start;
398 arg->stringified->val.str.len = total_len;
399}
400
401/* Handles an arbitrarily long sequence of ## operators. This
402 implementation is left-associative, non-recursive, and finishes a
403 paste before handling succeeding ones. If the paste fails, the
404 right hand side of the ## operator is placed in the then-current
405 context's lookahead buffer, with the effect that it appears in the
406 output stream normally. */
407static void
408paste_all_tokens (pfile, lhs)
409 cpp_reader *pfile;
410 cpp_token *lhs;
411{
412 unsigned char orig_flags = lhs->flags;
413 cpp_token *rhs;
414
415 do
416 {
3c7df4d3 417 int digraph = 0;
418 enum cpp_ttype type;
419
79bd622b 420 /* Take the token directly from the current context. We can do
421 this, because we are in the replacement list of either an
422 object-like macro, or a function-like macro with arguments
423 inserted. In either case, the constraints to #define
424 guarantee we have at least one more token (empty arguments
425 become placemarkers). */
426 rhs = pfile->context->list.first++;
427
3c7df4d3 428 type = cpp_can_paste (pfile, lhs, rhs, &digraph);
429 if (type == CPP_EOF)
79bd622b 430 {
3c7df4d3 431 if (CPP_OPTION (pfile, warn_paste))
432 cpp_warning (pfile,
433 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
434 cpp_token_as_text (pfile, lhs),
435 cpp_token_as_text (pfile, rhs));
436
437 /* The standard states that behaviour is undefined. By the
438 principle of least surpise, we step back before the RHS,
439 and mark it to prevent macro expansion. Tests in the
440 testsuite rely on clearing PREV_WHITE here, though you
441 could argue we should actually set it. */
442 rhs->flags &= ~PREV_WHITE;
443 rhs->flags |= NO_EXPAND;
444
445 /* Step back so we read the RHS in next. */
446 pfile->context->list.first--;
447 break;
79bd622b 448 }
69461e0d 449
3c7df4d3 450 lhs->type = type;
451 lhs->flags &= ~DIGRAPH;
452 if (digraph)
453 lhs->flags |= DIGRAPH;
79bd622b 454
3c7df4d3 455 if (type == CPP_NAME || type == CPP_NUMBER)
456 paste_payloads (pfile, lhs, rhs);
457 else if (type == CPP_WCHAR || type == CPP_WSTRING)
458 lhs->val.str = rhs->val.str;
79bd622b 459 }
460 while (rhs->flags & PASTE_LEFT);
461
462 /* The pasted token has the PREV_WHITE flag of the LHS, is no longer
463 PASTE_LEFT, and is subject to macro expansion. */
464 lhs->flags &= ~(PREV_WHITE | PASTE_LEFT | NO_EXPAND);
465 lhs->flags |= orig_flags & PREV_WHITE;
466}
467
3c7df4d3 468/* Reads the unexpanded tokens of a macro argument into ARG. VAR_ARGS
469 is non-zero if this is a variable argument. Returns the type of
470 the token that caused reading to finish. */
79bd622b 471static enum cpp_ttype
472parse_arg (pfile, arg, var_args)
473 cpp_reader *pfile;
474 struct macro_arg *arg;
475 int var_args;
476{
477 enum cpp_ttype result;
478 unsigned int paren = 0;
479
480 arg->first = (cpp_token *) POOL_FRONT (&pfile->argument_pool);
481 for (;; arg->count++)
482 {
483 cpp_token *token = &arg->first[arg->count];
484 if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->argument_pool))
485 {
486 _cpp_next_chunk (&pfile->argument_pool, sizeof (cpp_token),
487 (unsigned char **) &arg->first);
488 token = &arg->first[arg->count];
489 }
490
343fd982 491 cpp_get_token (pfile, token);
79bd622b 492 result = token->type;
493
494 if (result == CPP_OPEN_PAREN)
495 paren++;
496 else if (result == CPP_CLOSE_PAREN && paren-- == 0)
497 break;
498 /* Commas are not terminators within parantheses or var_args. */
499 else if (result == CPP_COMMA && paren == 0 && !var_args)
500 break;
501 else if (result == CPP_EOF)
502 break; /* Error reported by caller. */
79bd622b 503 }
69461e0d 504
79bd622b 505 /* Commit the memory used to store the arguments. */
506 POOL_COMMIT (&pfile->argument_pool, arg->count * sizeof (cpp_token));
507
508 return result;
69461e0d 509}
510
79bd622b 511/* Parse the arguments making up a macro invocation. */
512static macro_arg *
513parse_args (pfile, node)
514 cpp_reader *pfile;
515 const cpp_hashnode *node;
516{
517 cpp_macro *macro = node->value.macro;
518 macro_arg *args, *cur;
519 enum cpp_ttype type;
520 int argc, error = 0;
521
522 /* Allocate room for at least one argument, and zero it out. */
523 argc = macro->paramc ? macro->paramc: 1;
524 args = xcnewvec (macro_arg, argc);
525
526 for (cur = args, argc = 0; ;)
527 {
528 argc++;
529
530 type = parse_arg (pfile, cur, argc == macro->paramc && macro->var_args);
531 if (type == CPP_CLOSE_PAREN || type == CPP_EOF)
532 break;
533
534 /* Re-use the last argument for excess arguments. */
535 if (argc < macro->paramc)
536 cur++;
537 }
538
539 if (type == CPP_EOF)
540 {
541 cpp_error (pfile, "unterminated argument list invoking macro \"%s\"",
542 node->name);
543 error = 1;
544 }
545 else if (argc < macro->paramc)
546 {
547 /* As an extension, a rest argument is allowed to not appear in
548 the invocation at all.
549 e.g. #define debug(format, args...) something
550 debug("string");
551
552 This is exactly the same as if there had been an empty rest
553 argument - debug("string", ). */
554
555 if (argc + 1 == macro->paramc && macro->var_args)
556 {
79bd622b 557 if (CPP_OPTION (pfile, c99) && CPP_PEDANTIC (pfile))
558 cpp_pedwarn (pfile, "ISO C99 requires rest arguments to be used");
559 }
560 else
561 {
562 cpp_error (pfile,
563 "macro \"%s\" requires %u arguments, but only %u given",
564 node->name, macro->paramc, argc);
565 error = 1;
566 }
567 }
568 else if (argc > macro->paramc)
569 {
3c7df4d3 570 /* Empty argument to a macro taking no arguments is OK. */
571 if (argc != 1 || cur->count)
79bd622b 572 {
573 cpp_error (pfile,
574 "macro \"%s\" passed %u arguments, but takes just %u",
575 node->name, argc, macro->paramc);
576 error = 1;
577 }
578 }
579
580 if (error)
581 {
582 free (args);
583 args = 0;
584 }
585
586 return args;
587}
588
589static int
590funlike_invocation_p (pfile, node, list)
591 cpp_reader *pfile;
592 const cpp_hashnode *node;
593 struct toklist *list;
594{
595 cpp_context *orig_context;
596 cpp_token maybe_paren;
597 macro_arg *args = 0;
598
599 pfile->state.parsing_args = 1;
600 pfile->state.prevent_expansion++;
601 orig_context = pfile->context;
602
603 cpp_start_lookahead (pfile);
604 cpp_get_token (pfile, &maybe_paren);
605 cpp_stop_lookahead (pfile, maybe_paren.type == CPP_OPEN_PAREN);
606
607 if (maybe_paren.type == CPP_OPEN_PAREN)
608 args = parse_args (pfile, node);
609 else if (CPP_WTRADITIONAL (pfile))
610 cpp_warning (pfile,
611 "function-like macro \"%s\" must be used with arguments in traditional C",
612 node->name);
613
614 /* Restore original context. */
615 pfile->context = orig_context;
616 pfile->state.prevent_expansion--;
617 pfile->state.parsing_args = 0;
618
619 if (args)
620 {
621 if (node->value.macro->paramc > 0)
343fd982 622 {
623 /* Don't save tokens during pre-expansion. */
624 struct cpp_lookahead *la_saved = pfile->la_write;
625 pfile->la_write = 0;
626 replace_args (pfile, node->value.macro, args, list);
627 pfile->la_write = la_saved;
628 }
79bd622b 629 free (args);
630 }
631
632 return args != 0;
633}
634
635/* Push the context of a macro onto the context stack. TOKEN is the
636 macro name. If we can successfully start expanding the macro,
396ffa86 637 TOKEN is replaced with the first token of the expansion, and we
638 return non-zero. */
69461e0d 639static int
def71b06 640enter_macro_context (pfile, node)
69461e0d 641 cpp_reader *pfile;
def71b06 642 cpp_hashnode *node;
69461e0d 643{
79bd622b 644 cpp_context *context;
def71b06 645 cpp_macro *macro = node->value.macro;
79bd622b 646 struct toklist list;
69461e0d 647
79bd622b 648 /* Save the position of the outermost macro invocation. */
649 if (!pfile->context->prev)
650 {
651 pfile->macro_pos = pfile->lexer_pos;
652 lock_pools (pfile);
653 }
69461e0d 654
def71b06 655 if (macro->fun_like && !funlike_invocation_p (pfile, node, &list))
79bd622b 656 {
657 if (!pfile->context->prev)
658 unlock_pools (pfile);
396ffa86 659 return 0;
79bd622b 660 }
69461e0d 661
79bd622b 662 if (macro->paramc == 0)
69461e0d 663 {
3c7df4d3 664 list.first = macro->expansion;
665 list.limit = macro->expansion + macro->count;
69461e0d 666 }
3c7df4d3 667
def71b06 668 if (list.first != list.limit)
669 {
670 /* Push its context. */
671 context = next_context (pfile);
672 context->list = list;
673 context->macro = macro;
79bd622b 674
def71b06 675 /* Disable the macro within its expansion. */
676 macro->disabled = 1;
677 }
79bd622b 678
396ffa86 679 return 1;
79bd622b 680}
681
682/* Move to the next context. Create one if there is none. */
683static cpp_context *
684next_context (pfile)
685 cpp_reader *pfile;
686{
687 cpp_context *prev = pfile->context;
688 cpp_context *result = prev->next;
689
690 if (result == 0)
69461e0d 691 {
79bd622b 692 result = xnew (cpp_context);
693 prev->next = result;
694 result->prev = prev;
695 result->next = 0;
69461e0d 696 }
697
79bd622b 698 pfile->context = result;
699 return result;
700}
701
702static void
703replace_args (pfile, macro, args, list)
704 cpp_reader *pfile;
705 cpp_macro *macro;
706 macro_arg *args;
707 struct toklist *list;
708{
709 unsigned int i, total;
710 const cpp_token *src, *limit;
711 cpp_token *dest;
712 macro_arg *arg;
713
714 src = macro->expansion;
715 limit = src + macro->count;
716
717 /* First, fully macro-expand arguments, calculating the number of
718 tokens in the final expansion as we go. This ensures that the
719 possible recursive use of argument_pool is fine. */
720 total = limit - src;
721 for (; src < limit; src++)
722 if (src->type == CPP_MACRO_ARG)
723 {
724 /* We have an argument. If it is not being stringified or
725 pasted it is macro-replaced before insertion. */
33344a1c 726 arg = &args[src->val.arg_no - 1];
3c7df4d3 727
79bd622b 728 if (src->flags & STRINGIFY_ARG)
729 {
730 if (!arg->stringified)
731 stringify_arg (pfile, arg);
732 }
733 else if ((src->flags & PASTE_LEFT)
734 || (src > macro->expansion && (src[-1].flags & PASTE_LEFT)))
735 total += arg->count - 1;
736 else
737 {
738 if (!arg->expanded)
3c7df4d3 739 {
740 arg->expanded_count = 0;
741 if (arg->count)
742 expand_arg (pfile, arg);
743 }
79bd622b 744 total += arg->expanded_count - 1;
745 }
746 }
747
748 dest = (cpp_token *) _cpp_pool_alloc (&pfile->argument_pool,
749 total * sizeof (cpp_token));
750 list->first = dest;
79bd622b 751
752 for (src = macro->expansion; src < limit; src++)
753 if (src->type == CPP_MACRO_ARG)
754 {
755 unsigned int count;
756 const cpp_token *from;
757
33344a1c 758 arg = &args[src->val.arg_no - 1];
79bd622b 759 if (src->flags & STRINGIFY_ARG)
760 from = arg->stringified, count = 1;
3c7df4d3 761 else if (src->flags & PASTE_LEFT)
79bd622b 762 count = arg->count, from = arg->first;
3c7df4d3 763 else if (src > macro->expansion && (src[-1].flags & PASTE_LEFT))
764 {
765 count = arg->count, from = arg->first;
766 if (dest != list->first)
767 {
768 /* GCC has special semantics for , ## b where b is a
769 varargs parameter: the comma disappears if b was
770 given no actual arguments (not merely if b is an
771 empty argument); otherwise pasting is turned off. */
772 if (dest[-1].type == CPP_COMMA
773 && macro->var_args
774 && src->val.arg_no == macro->paramc)
775 {
776 if (count == 0)
777 dest--;
778 else
779 dest[-1].flags &= ~PASTE_LEFT;
780 }
781 /* Count == 0 is the RHS a placemarker case. */
782 else if (count == 0)
783 dest[-1].flags &= ~PASTE_LEFT;
784 }
785 }
79bd622b 786 else
787 count = arg->expanded_count, from = arg->expanded;
79bd622b 788
3c7df4d3 789 /* Count == 0 is the LHS a placemarker case. */
790 if (count)
791 {
792 memcpy (dest, from, count * sizeof (cpp_token));
793
794 /* The first token gets PREV_WHITE of the CPP_MACRO_ARG. */
795 dest->flags &= ~PREV_WHITE;
796 dest->flags |= src->flags & PREV_WHITE;
79bd622b 797
3c7df4d3 798 /* The last token gets the PASTE_LEFT of the CPP_MACRO_ARG. */
799 dest[count - 1].flags |= src->flags & PASTE_LEFT;
79bd622b 800
3c7df4d3 801 dest += count;
802 }
79bd622b 803 }
804 else
805 *dest++ = *src;
806
3c7df4d3 807 list->limit = dest;
808
79bd622b 809 /* Free the expanded arguments. */
810 for (i = 0; i < macro->paramc; i++)
69461e0d 811 {
79bd622b 812 if (args[i].expanded)
813 free (args[i].expanded);
814 if (args[i].stringified)
815 free (args[i].stringified);
816 }
817}
818
819/* Subroutine of expand_arg to put the unexpanded tokens on the
820 context stack. */
821static cpp_context *
822push_arg_context (pfile, arg)
823 cpp_reader *pfile;
824 macro_arg *arg;
825{
826 cpp_context *context = next_context (pfile);
827 context->macro = 0;
828 context->list.first = arg->first;
829 context->list.limit = arg->first + arg->count;
830
831 return context;
832}
833
834static void
835expand_arg (pfile, arg)
836 cpp_reader *pfile;
837 macro_arg *arg;
838{
839 cpp_token *token;
840 unsigned int capacity = 256;
841
842 /* Loop, reading in the arguments. */
843 arg->expanded = (cpp_token *) xmalloc (capacity * sizeof (cpp_token));
79bd622b 844
845 push_arg_context (pfile, arg);
846 do
847 {
848 if (arg->expanded_count >= capacity)
69461e0d 849 {
79bd622b 850 capacity *= 2;
851 arg->expanded = (cpp_token *)
852 xrealloc (arg->expanded, capacity * sizeof (cpp_token));
853 }
854 token = &arg->expanded[arg->expanded_count++];
343fd982 855 cpp_get_token (pfile, token);
79bd622b 856 }
857 while (token->type != CPP_EOF);
858
859 arg->expanded_count--;
860
861 /* Pop the context we pushed. */
862 pfile->context = pfile->context->prev;
863}
864
865void
866_cpp_pop_context (pfile)
867 cpp_reader *pfile;
868{
869 cpp_context *context = pfile->context;
870
871 pfile->context = context->prev;
872 /* Re-enable a macro and free resources when leaving its expansion. */
873 if (!pfile->state.parsing_args)
874 {
875 if (!pfile->context->prev)
876 unlock_pools (pfile);
877 context->macro->disabled = 0;
878 }
879}
880
343fd982 881/* Eternal routine to get a token. Also used nearly everywhere
882 internally, except for places where we know we can safely call
883 the lexer directly, such as lexing a directive name.
884
885 Macro expansions and directives are transparently handled,
886 including entering included files. Thus tokens are post-macro
887 expansion, and after any intervening directives. External callers
888 see CPP_EOF only at EOF. Internal callers also see it when meeting
889 a directive inside a macro call, when at the end of a directive and
890 state.in_directive is still 1, and at the end of argument
891 pre-expansion. */
79bd622b 892void
343fd982 893cpp_get_token (pfile, token)
79bd622b 894 cpp_reader *pfile;
895 cpp_token *token;
896{
def71b06 897 unsigned char flags = 0;
898
899 for (;;)
79bd622b 900 {
901 cpp_context *context = pfile->context;
902
903 if (pfile->la_read)
904 take_lookahead_token (pfile, token);
905 /* Context->prev == 0 <=> base context. */
906 else if (!context->prev)
907 _cpp_lex_token (pfile, token);
908 else if (context->list.first != context->list.limit)
def71b06 909 {
910 *token = *context->list.first++;
911 token->flags |= flags;
912 flags = 0;
343fd982 913 /* PASTE_LEFT tokens can only appear in macro expansions. */
914 if (token->flags & PASTE_LEFT && !pfile->skipping)
915 paste_all_tokens (pfile, token);
def71b06 916 }
79bd622b 917 else
918 {
919 if (context->macro)
69461e0d 920 {
79bd622b 921 _cpp_pop_context (pfile);
def71b06 922 continue;
69461e0d 923 }
e14c5993 924 /* End of argument pre-expansion. */
79bd622b 925 token->type = CPP_EOF;
926 token->flags = 0;
920b5d41 927 return;
79bd622b 928 }
79bd622b 929
def71b06 930 /* Loop until we're not skipping. */
931 if (pfile->skipping)
932 continue;
933
396ffa86 934 if (token->type != CPP_NAME)
79bd622b 935 break;
936
396ffa86 937 /* Handle macros and the _Pragma operator. */
938 if (token->val.node->type == NT_MACRO
939 && !pfile->state.prevent_expansion
940 && !(token->flags & NO_EXPAND))
79bd622b 941 {
def71b06 942 cpp_hashnode *node = token->val.node;
3c7df4d3 943
396ffa86 944 /* Macros invalidate controlling macros. */
945 pfile->mi_state = MI_FAILED;
946
def71b06 947 if (node->flags & NODE_BUILTIN)
396ffa86 948 {
949 builtin_macro (pfile, token);
950 break;
951 }
952
def71b06 953 /* Merge PREV_WHITE of tokens. */
954 flags = token->flags & PREV_WHITE;
955
956 if (node->value.macro->disabled)
957 token->flags |= NO_EXPAND;
958 else if (enter_macro_context (pfile, node))
396ffa86 959 continue;
79bd622b 960 }
396ffa86 961
9677c711 962 /* Don't interpret _Pragma within directives. The standard is
963 not clear on this, but to me this makes most sense. */
964 if (token->val.node != pfile->spec_nodes.n__Pragma
965 || pfile->state.in_directive)
79bd622b 966 break;
396ffa86 967
343fd982 968 /* Handle it, and loop back for another token. MI is cleared
969 since this token came from either the lexer or a macro. */
396ffa86 970 _cpp_do__Pragma (pfile);
79bd622b 971 }
79bd622b 972
973 if (pfile->la_write)
974 save_lookahead_token (pfile, token);
975}
976
977/* Read each token in, until EOF. Directives are transparently
978 processed. */
979void
980cpp_scan_buffer_nooutput (pfile)
981 cpp_reader *pfile;
982{
983 cpp_token token;
984
985 do
986 do
987 cpp_get_token (pfile, &token);
988 while (token.type != CPP_EOF);
989 while (cpp_pop_buffer (pfile) != 0);
990}
991
992/* Lookahead handling. */
993
994static void
995save_lookahead_token (pfile, token)
996 cpp_reader *pfile;
997 const cpp_token *token;
998{
999 if (token->type != CPP_EOF)
1000 {
1001 cpp_lookahead *la = pfile->la_write;
1002 cpp_token_with_pos *twp;
1003
1004 if (la->count == la->cap)
69461e0d 1005 {
79bd622b 1006 la->cap += la->cap + 8;
1007 la->tokens = (cpp_token_with_pos *)
1008 xrealloc (la->tokens, la->cap * sizeof (cpp_token_with_pos));
69461e0d 1009 }
79bd622b 1010
1011 twp = &la->tokens[la->count++];
1012 twp->token = *token;
1013 twp->pos = *cpp_get_line (pfile);
69461e0d 1014 }
69461e0d 1015}
1016
79bd622b 1017static void
1018take_lookahead_token (pfile, token)
69461e0d 1019 cpp_reader *pfile;
79bd622b 1020 cpp_token *token;
69461e0d 1021{
79bd622b 1022 cpp_lookahead *la = pfile->la_read;
1023 cpp_token_with_pos *twp = &la->tokens[la->cur];
69461e0d 1024
79bd622b 1025 *token = twp->token;
1026 pfile->lexer_pos = twp->pos;
69461e0d 1027
79bd622b 1028 if (++la->cur == la->count)
920b5d41 1029 _cpp_release_lookahead (pfile);
79bd622b 1030}
69461e0d 1031
79bd622b 1032/* Moves the lookahead at the front of the read list to the free store. */
920b5d41 1033void
1034_cpp_release_lookahead (pfile)
79bd622b 1035 cpp_reader *pfile;
1036{
1037 cpp_lookahead *la = pfile->la_read;
69461e0d 1038
79bd622b 1039 pfile->la_read = la->next;
1040 la->next = pfile->la_unused;
1041 pfile->la_unused = la;
1042 unlock_pools (pfile);
1043}
69461e0d 1044
79bd622b 1045/* Take a new lookahead from the free store, or allocate one if none. */
1046static cpp_lookahead *
1047alloc_lookahead (pfile)
1048 cpp_reader *pfile;
1049{
1050 cpp_lookahead *la = pfile->la_unused;
1051
1052 if (la)
1053 pfile->la_unused = la->next;
1054 else
1055 {
1056 la = xnew (cpp_lookahead);
1057 la->tokens = 0;
1058 la->cap = 0;
1059 }
1060
1061 la->cur = la->count = 0;
1062 return la;
69461e0d 1063}
1064
79bd622b 1065/* Free memory associated with a lookahead list. */
1066static void
1067free_lookahead (la)
1068 cpp_lookahead *la;
69461e0d 1069{
79bd622b 1070 if (la->tokens)
1071 free ((PTR) la->tokens);
1072 free ((PTR) la);
1073}
69461e0d 1074
79bd622b 1075/* Free all the lookaheads of a cpp_reader. */
1076void
1077_cpp_free_lookaheads (pfile)
1078 cpp_reader *pfile;
1079{
1080 cpp_lookahead *la, *lan;
1081
1082 if (pfile->la_read)
1083 free_lookahead (pfile->la_read);
1084 if (pfile->la_write)
1085 free_lookahead (pfile->la_write);
1086
1087 for (la = pfile->la_unused; la; la = lan)
1088 {
1089 lan = la->next;
1090 free_lookahead (la);
1091 }
1092}
69461e0d 1093
79bd622b 1094/* Allocate a lookahead and move it to the front of the write list. */
1095void
1096cpp_start_lookahead (pfile)
69461e0d 1097 cpp_reader *pfile;
69461e0d 1098{
79bd622b 1099 cpp_lookahead *la = alloc_lookahead (pfile);
69461e0d 1100
79bd622b 1101 la->next = pfile->la_write;
1102 pfile->la_write = la;
69461e0d 1103
79bd622b 1104 la->pos = *cpp_get_line (pfile);
69461e0d 1105
79bd622b 1106 /* Don't allow memory pools to be re-used whilst we're reading ahead. */
1107 lock_pools (pfile);
1108}
69461e0d 1109
79bd622b 1110/* Stop reading ahead - either step back, or drop the read ahead. */
1111void
1112cpp_stop_lookahead (pfile, drop)
1113 cpp_reader *pfile;
1114 int drop;
1115{
1116 cpp_lookahead *la = pfile->la_write;
69461e0d 1117
79bd622b 1118 pfile->la_write = la->next;
1119 la->next = pfile->la_read;
1120 pfile->la_read = la;
69461e0d 1121
79bd622b 1122 if (drop || la->count == 0)
920b5d41 1123 _cpp_release_lookahead (pfile);
79bd622b 1124 else
1125 pfile->lexer_pos = la->pos;
69461e0d 1126}
1127
79bd622b 1128/* Push a single token back to the front of the queue. Only to be
1129 used by cpplib, and only then when necessary. POS is the position
1130 to report for the preceding token. */
1131void
1132_cpp_push_token (pfile, token, pos)
1133 cpp_reader *pfile;
1134 const cpp_token *token;
1135 const cpp_lexer_pos *pos;
1136{
1137 cpp_start_lookahead (pfile);
1138 save_lookahead_token (pfile, token);
1139 cpp_stop_lookahead (pfile, 0);
1140 pfile->lexer_pos = *pos;
1141}
1142
1143/* #define directive parsing and handling. */
1144
1145/* Returns non-zero if a macro redefinition is trivial. */
1146static int
1147check_macro_redefinition (pfile, node, macro2)
1148 cpp_reader *pfile;
1149 const cpp_hashnode *node;
1150 const cpp_macro *macro2;
1151{
1152 const cpp_macro *macro1;
1153 unsigned int i;
1154
1155 if (node->type != NT_MACRO || node->flags & NODE_BUILTIN)
1156 return ! pfile->done_initializing;
1157
1158 macro1 = node->value.macro;
1159
1160 /* The quick failures. */
1161 if (macro1->count != macro2->count
1162 || macro1->paramc != macro2->paramc
1163 || macro1->fun_like != macro2->fun_like
1164 || macro1->var_args != macro2->var_args)
1165 return 0;
1166
1167 /* Check each token. */
1168 for (i = 0; i < macro1->count; i++)
1169 if (! _cpp_equiv_tokens (&macro1->expansion[i], &macro2->expansion[i]))
1170 return 0;
1171
1172 /* Check parameter spellings. */
1173 for (i = 0; i < macro1->paramc; i++)
1174 if (macro1->params[i] != macro2->params[i])
1175 return 0;
1176
1177 return 1;
1178}
1179
1180/* Free the definition of hashnode H. */
69461e0d 1181
1182void
1183_cpp_free_definition (h)
1184 cpp_hashnode *h;
1185{
79bd622b 1186 /* Macros and assertions no longer have anything to free. */
1187 h->type = NT_VOID;
1188 /* Clear builtin flag in case of redefinition. */
1189 h->flags &= ~NODE_BUILTIN;
1190}
1191
1192static int
1193save_parameter (pfile, macro, node)
1194 cpp_reader *pfile;
1195 cpp_macro *macro;
1196 cpp_hashnode *node;
1197{
1198 cpp_hashnode **dest;
1199
1200 /* Constraint 6.10.3.6 - duplicate parameter names. */
1201 if (node->arg_index)
11d10d3f 1202 {
79bd622b 1203 cpp_error (pfile, "duplicate macro parameter \"%s\"", node->name);
1204 return 1;
1205 }
11d10d3f 1206
79bd622b 1207 dest = &macro->params[macro->paramc];
1208
1209 /* Check we have room for the parameters. */
1210 if ((unsigned char *) (dest + 1) >= POOL_LIMIT (&pfile->macro_pool))
1211 {
1212 _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_hashnode *),
1213 (unsigned char **) &macro->params);
1214 dest = &macro->params[macro->paramc];
11d10d3f 1215 }
1216
79bd622b 1217 *dest = node;
1218 node->arg_index = ++macro->paramc;
1219 return 0;
69461e0d 1220}
1221
79bd622b 1222static int
1223parse_params (pfile, macro)
69461e0d 1224 cpp_reader *pfile;
79bd622b 1225 cpp_macro *macro;
69461e0d 1226{
79bd622b 1227 cpp_token token;
1228 unsigned int prev_ident = 0;
69461e0d 1229
79bd622b 1230 macro->params = (cpp_hashnode **) POOL_FRONT (&pfile->macro_pool);
1231 for (;;)
69461e0d 1232 {
79bd622b 1233 _cpp_lex_token (pfile, &token);
69461e0d 1234
79bd622b 1235 switch (token.type)
69461e0d 1236 {
79bd622b 1237 default:
1238 cpp_error (pfile, "\"%s\" may not appear in macro parameter list",
1239 cpp_token_as_text (pfile, &token));
1240 return 0;
1241
69461e0d 1242 case CPP_NAME:
79bd622b 1243 if (prev_ident)
1244 {
1245 cpp_error (pfile, "macro parameters must be comma-separated");
1246 return 0;
1247 }
1248 prev_ident = 1;
1249
1250 if (save_parameter (pfile, macro, token.val.node))
1251 return 0;
1252 continue;
69461e0d 1253
79bd622b 1254 case CPP_CLOSE_PAREN:
1255 if (prev_ident || macro->paramc == 0)
69461e0d 1256 break;
69461e0d 1257
79bd622b 1258 /* Fall through to pick up the error. */
1259 case CPP_COMMA:
1260 if (!prev_ident)
1261 {
1262 cpp_error (pfile, "parameter name missing");
1263 return 0;
1264 }
1265 prev_ident = 0;
69461e0d 1266 continue;
1267
79bd622b 1268 case CPP_ELLIPSIS:
1269 macro->var_args = 1;
1270 if (!prev_ident)
1271 {
1272 save_parameter (pfile, macro, pfile->spec_nodes.n__VA_ARGS__);
1273 pfile->state.va_args_ok = 1;
1274 if (! CPP_OPTION (pfile, c99) && CPP_OPTION (pfile, pedantic))
1275 cpp_pedwarn (pfile,
1276 "C89 does not permit anonymous variable arguments");
1277 }
1278 else if (CPP_OPTION (pfile, pedantic))
1279 cpp_pedwarn (pfile,
1280 "ISO C does not permit named variable arguments");
69461e0d 1281
79bd622b 1282 /* We're at the end, and just expect a closing parenthesis. */
1283 _cpp_lex_token (pfile, &token);
1284 if (token.type == CPP_CLOSE_PAREN)
1285 break;
1286 /* Fall through. */
69461e0d 1287
79bd622b 1288 case CPP_EOF:
1289 cpp_error (pfile, "missing ')' in macro parameter list");
1290 return 0;
69461e0d 1291 }
1292
79bd622b 1293 /* Success. Commit the parameter array. */
1294 POOL_COMMIT (&pfile->macro_pool,
1295 macro->paramc * sizeof (cpp_hashnode *));
1296 return 1;
69461e0d 1297 }
79bd622b 1298}
1299
1300/* Lex a token from a macro's replacement list. Translate it to a
1301 CPP_MACRO_ARG if appropriate. */
1302static cpp_token *
1303lex_expansion_token (pfile, macro)
1304 cpp_reader *pfile;
1305 cpp_macro *macro;
1306{
1307 cpp_token *token = &macro->expansion[macro->count];
69461e0d 1308
79bd622b 1309 /* Check we have room for the token. */
1310 if ((unsigned char *) (token + 1) >= POOL_LIMIT (&pfile->macro_pool))
69461e0d 1311 {
79bd622b 1312 _cpp_next_chunk (&pfile->macro_pool, sizeof (cpp_token),
1313 (unsigned char **) &macro->expansion);
1314 token = &macro->expansion[macro->count];
69461e0d 1315 }
1316
79bd622b 1317 macro->count++;
1318 _cpp_lex_token (pfile, token);
1319
1320 /* Is this an argument? */
1321 if (token->type == CPP_NAME && token->val.node->arg_index)
1322 {
1323 token->type = CPP_MACRO_ARG;
33344a1c 1324 token->val.arg_no = token->val.node->arg_index;
79bd622b 1325 }
1326 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1327 && (token->type == CPP_STRING || token->type == CPP_CHAR))
1328 check_trad_stringification (pfile, macro, &token->val.str);
1329
1330 return token;
69461e0d 1331}
1332
1333/* Parse a macro and save its expansion. Returns non-zero on success. */
1334int
79bd622b 1335_cpp_create_definition (pfile, node)
69461e0d 1336 cpp_reader *pfile;
79bd622b 1337 cpp_hashnode *node;
69461e0d 1338{
79bd622b 1339 cpp_macro *macro;
1340 cpp_token *token;
1341 unsigned int i, ok = 1;
1342
1343 macro = (cpp_macro *) _cpp_pool_alloc (&pfile->macro_pool,
1344 sizeof (cpp_macro));
1345 macro->file = pfile->buffer->nominal_fname;
1346 macro->line = pfile->directive_pos.line;
1347 macro->params = 0;
1348 macro->paramc = 0;
1349 macro->fun_like = 0;
1350 macro->var_args = 0;
79bd622b 1351 macro->count = 0;
1352 macro->expansion = (cpp_token *) POOL_FRONT (&pfile->macro_pool);
1353
1354 /* Get the first token of the expansion (or the '(' of a
1355 function-like macro). */
1356 token = lex_expansion_token (pfile, macro);
1357 if (token->type == CPP_OPEN_PAREN && !(token->flags & PREV_WHITE))
1358 {
1359 if (!(ok = parse_params (pfile, macro)))
1360 goto cleanup;
1361 macro->count = 0;
1362 macro->fun_like = 1;
1363 /* Some of the pool may have been used for the parameter store. */
1364 macro->expansion = (cpp_token *) POOL_FRONT (&pfile->macro_pool);
1365 token = lex_expansion_token (pfile, macro);
1366 }
1367 else if (token->type != CPP_EOF && !(token->flags & PREV_WHITE))
1368 cpp_pedwarn (pfile, "ISO C requires whitespace after the macro name");
69461e0d 1369
79bd622b 1370 /* Setting it here means we don't catch leading comments. */
1371 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
69461e0d 1372
79bd622b 1373 for (;;)
1374 {
1375 /* Check the stringifying # constraint 6.10.3.2.1 of
1376 function-like macros when lexing the subsequent token. */
1377 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1378 {
1379 if (token->type == CPP_MACRO_ARG)
1380 {
1381 token->flags &= ~PREV_WHITE;
1382 token->flags |= STRINGIFY_ARG;
1383 token->flags |= token[-1].flags & PREV_WHITE;
1384 token[-1] = token[0];
1385 macro->count--;
1386 }
1387 /* Let assembler get away with murder. */
1388 else if (!CPP_OPTION (pfile, lang_asm))
1389 {
1390 ok = 0;
1391 cpp_error (pfile, "'#' is not followed by a macro parameter");
1392 goto cleanup;
1393 }
1394 }
1395
1396 if (token->type == CPP_EOF)
1397 break;
1398
1399 /* Paste operator constraint 6.10.3.3.1. */
1400 if (token->type == CPP_PASTE)
1401 {
1402 /* Token-paste ##, can appear in both object-like and
1403 function-like macros, but not at the ends. */
1404 if (--macro->count > 0)
1405 token = lex_expansion_token (pfile, macro);
1406
1407 if (macro->count == 0 || token->type == CPP_EOF)
1408 {
1409 ok = 0;
1410 cpp_error (pfile,
1411 "'##' cannot appear at either end of a macro expansion");
1412 goto cleanup;
1413 }
69461e0d 1414
79bd622b 1415 token[-1].flags |= PASTE_LEFT;
1416 /* Give it a PREV_WHITE for -dM etc. */
1417 token->flags |= PREV_WHITE;
1418 }
1419
1420 token = lex_expansion_token (pfile, macro);
1421 }
1422
3c7df4d3 1423 /* Don't count the CPP_EOF. */
1424 macro->count--;
79bd622b 1425
1426 /* Clear the whitespace flag from the leading token. */
1427 macro->expansion[0].flags &= ~PREV_WHITE;
1428
4dab9f9f 1429 /* Implement the macro-defined-to-itself optimisation. */
1430 macro->disabled = (macro->count == 1 && !macro->fun_like
1431 && macro->expansion[0].type == CPP_NAME
1432 && macro->expansion[0].val.node == node);
1433
79bd622b 1434 /* Commit the memory. */
1435 POOL_COMMIT (&pfile->macro_pool, macro->count * sizeof (cpp_token));
1436
1437 /* Redefinition of a macro is allowed if and only if the old and new
1438 definitions are the same. (6.10.3 paragraph 2). */
1439 if (node->type != NT_VOID)
69461e0d 1440 {
79bd622b 1441 if (CPP_PEDANTIC (pfile)
1442 && !check_macro_redefinition (pfile, node, macro))
69461e0d 1443 {
79bd622b 1444 cpp_pedwarn_with_line (pfile, pfile->directive_pos.line,
1445 pfile->directive_pos.col,
1446 "\"%s\" redefined", node->name);
1447
1448 if (pfile->done_initializing && node->type == NT_MACRO
1449 && !(node->flags & NODE_BUILTIN))
69461e0d 1450 cpp_pedwarn_with_file_and_line (pfile,
79bd622b 1451 node->value.macro->file,
1452 node->value.macro->line, 1,
69461e0d 1453 "this is the location of the previous definition");
1454 }
79bd622b 1455 _cpp_free_definition (node);
69461e0d 1456 }
1457
1458 /* Enter definition in hash table. */
79bd622b 1459 node->type = NT_MACRO;
1460 node->value.macro = macro;
69461e0d 1461
79bd622b 1462 cleanup:
1463
1464 /* Stop the lexer accepting __VA_ARGS__. */
1465 pfile->state.va_args_ok = 0;
1466
1467 /* Clear the fast argument lookup indices. */
1468 for (i = macro->paramc; i-- > 0; )
1469 macro->params[i]->arg_index = 0;
1470
1471 return ok;
69461e0d 1472}
1473
bceb9193 1474/* Warn if a token in `string' matches one of the function macro
1475 arguments in `info'. This function assumes that the macro is a
1476 function macro and not an object macro. */
1477static void
79bd622b 1478check_trad_stringification (pfile, macro, string)
bceb9193 1479 cpp_reader *pfile;
79bd622b 1480 const cpp_macro *macro;
bceb9193 1481 const cpp_string *string;
1482{
79bd622b 1483 unsigned int i, len;
bceb9193 1484 const U_CHAR *p, *q, *limit = string->text + string->len;
1485
1486 /* Loop over the string. */
1487 for (p = string->text; p < limit; p = q)
1488 {
bceb9193 1489 /* Find the start of an identifier. */
7e118154 1490 while (p < limit && !is_idstart (*p))
1491 p++;
bceb9193 1492
1493 /* Find the end of the identifier. */
1494 q = p;
7e118154 1495 while (q < limit && is_idchar (*q))
1496 q++;
79bd622b 1497
1498 len = q - p;
1499
bceb9193 1500 /* Loop over the function macro arguments to see if the
1501 identifier inside the string matches one of them. */
79bd622b 1502 for (i = 0; i < macro->paramc; i++)
1503 {
1504 const cpp_hashnode *node = macro->params[i];
bceb9193 1505
79bd622b 1506 if (node->length == len && !memcmp (p, node->name, len))
bceb9193 1507 {
1508 cpp_warning (pfile,
79bd622b 1509 "macro argument \"%s\" would be stringified with -traditional.",
1510 node->name);
bceb9193 1511 break;
1512 }
1513 }
1514 }
1515}
79bd622b 1516
1517/* Returns the expansion of a macro, in a format suitable to be read
1518 back in again, and therefore also for DWARF 2 debugging info.
1519 Caller is expected to generate the "#define NAME" bit. The
1520 returned text is temporary, and automatically freed later. */
1521
1522const unsigned char *
1523cpp_macro_definition (pfile, node)
1524 cpp_reader *pfile;
1525 const cpp_hashnode *node;
1526{
1527 unsigned int i, len;
1528 const cpp_macro *macro = node->value.macro;
1529 unsigned char *buffer;
1530
1531 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1532 {
1533 cpp_ice (pfile, "invalid hash type %d in dump_definition", node->type);
1534 return 0;
1535 }
1536
1537 /* Calculate length. */
1538 len = 1; /* ' ' */
1539 if (macro->fun_like)
1540 {
1541 len += 3; /* "()" plus possible final "." of ellipsis. */
1542 for (i = 0; i < macro->paramc; i++)
1543 len += macro->params[i]->length + 2; /* ", " */
1544 }
1545
3c7df4d3 1546 for (i = 0; i < macro->count; i++)
79bd622b 1547 {
3c7df4d3 1548 cpp_token *token = &macro->expansion[i];
79bd622b 1549
3c7df4d3 1550 if (token->type == CPP_MACRO_ARG)
1551 len += macro->params[token->val.arg_no - 1]->length;
1552 else
1553 len += cpp_token_len (token); /* Includes room for ' '. */
1554 if (token->flags & STRINGIFY_ARG)
1555 len++; /* "#" */
1556 if (token->flags & PASTE_LEFT)
1557 len += 3; /* " ##" */
79bd622b 1558 }
1559
1560 if (len > pfile->macro_buffer_len)
1561 pfile->macro_buffer = (U_CHAR *) xrealloc (pfile->macro_buffer, len);
1562 buffer = pfile->macro_buffer;
1563
1564 /* Parameter names. */
1565 if (macro->fun_like)
1566 {
1567 *buffer++ = '(';
1568 for (i = 0; i < macro->paramc; i++)
1569 {
1570 cpp_hashnode *param = macro->params[i];
1571
1572 if (param != pfile->spec_nodes.n__VA_ARGS__)
1573 {
1574 memcpy (buffer, param->name, param->length);
1575 buffer += param->length;
1576 }
1577
1578 if (i + 1 < macro->paramc)
1579 *buffer++ = ',', *buffer++ = ' ';
1580 else if (macro->var_args)
1581 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
1582 }
1583 *buffer++ = ')';
1584 }
1585
1586 /* Expansion tokens. */
3c7df4d3 1587 if (macro->count)
79bd622b 1588 {
1589 *buffer++ = ' ';
1590 for (i = 0; i < macro->count; i++)
1591 {
1592 cpp_token *token = &macro->expansion[i];
1593
1594 if (token->flags & PREV_WHITE)
1595 *buffer++ = ' ';
1596 if (token->flags & STRINGIFY_ARG)
1597 *buffer++ = '#';
1598
1599 if (token->type == CPP_MACRO_ARG)
1600 {
33344a1c 1601 len = macro->params[token->val.arg_no - 1]->length;
1602 memcpy (buffer, macro->params[token->val.arg_no - 1]->name, len);
79bd622b 1603 buffer += len;
1604 }
1605 else
1606 buffer = cpp_spell_token (pfile, token, buffer);
1607
1608 if (token->flags & PASTE_LEFT)
1609 {
1610 *buffer++ = ' ';
1611 *buffer++ = '#';
1612 *buffer++ = '#';
1613 /* Next has PREV_WHITE; see _cpp_create_definition. */
1614 }
1615 }
1616 }
1617
1618 *buffer = '\0';
1619 return pfile->macro_buffer;
1620}