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