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