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
8 This program is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
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! */
28 #include "intl.h" /* for _("<command line>") below. */
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. */
46 typedef struct macro_arg macro_arg
;
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. */
56 /* Macro expansion. */
58 static void lock_pools
PARAMS ((cpp_reader
*));
59 static void unlock_pools
PARAMS ((cpp_reader
*));
60 static int enter_macro_context
PARAMS ((cpp_reader
*, cpp_hashnode
*));
61 static void builtin_macro
PARAMS ((cpp_reader
*, cpp_token
*));
62 static cpp_context
*push_arg_context
PARAMS ((cpp_reader
*, macro_arg
*));
63 static enum cpp_ttype parse_arg
PARAMS ((cpp_reader
*, macro_arg
*, int));
64 static macro_arg
*parse_args
PARAMS ((cpp_reader
*, const cpp_hashnode
*));
65 static cpp_context
*next_context
PARAMS ((cpp_reader
*));
66 static void expand_arg
PARAMS ((cpp_reader
*, macro_arg
*));
67 static unsigned char *quote_string
PARAMS ((unsigned char *,
68 const unsigned char *,
70 static void make_string_token
PARAMS ((cpp_pool
*, cpp_token
*,
71 const U_CHAR
*, unsigned int));
72 static void make_number_token
PARAMS ((cpp_reader
*, cpp_token
*, int));
73 static void stringify_arg
PARAMS ((cpp_reader
*, macro_arg
*));
74 static void paste_all_tokens
PARAMS ((cpp_reader
*, cpp_token
*));
75 static int paste_tokens
PARAMS ((cpp_reader
*, cpp_token
*, cpp_token
*));
76 static int funlike_invocation_p
PARAMS ((cpp_reader
*, const cpp_hashnode
*,
78 static void replace_args
PARAMS ((cpp_reader
*, cpp_macro
*, macro_arg
*,
83 static void save_lookahead_token
PARAMS ((cpp_reader
*, const cpp_token
*));
84 static void take_lookahead_token
PARAMS ((cpp_reader
*, cpp_token
*));
85 static cpp_lookahead
*alloc_lookahead
PARAMS ((cpp_reader
*));
86 static void free_lookahead
PARAMS ((cpp_lookahead
*));
88 /* #define directive parsing and handling. */
90 static cpp_token
*lex_expansion_token
PARAMS ((cpp_reader
*, cpp_macro
*));
91 static int warn_of_redefinition
PARAMS ((cpp_reader
*, const cpp_hashnode
*,
93 static int save_parameter
PARAMS ((cpp_reader
*, cpp_macro
*, cpp_hashnode
*));
94 static int parse_params
PARAMS ((cpp_reader
*, cpp_macro
*));
95 static void check_trad_stringification
PARAMS ((cpp_reader
*,
99 /* Allocates a buffer to hold a token's TEXT, and converts TOKEN to a
100 CPP_STRING token containing TEXT in quoted form. */
102 make_string_token (pool
, token
, text
, len
)
108 U_CHAR
*buf
= _cpp_pool_alloc (pool
, len
* 4);
110 token
->type
= CPP_STRING
;
111 token
->val
.str
.text
= buf
;
112 token
->val
.str
.len
= quote_string (buf
, text
, len
) - buf
;
116 /* Allocates and converts a temporary token to a CPP_NUMBER token,
117 evaluating to NUMBER. */
119 make_number_token (pfile
, token
, number
)
124 unsigned char *buf
= _cpp_pool_alloc (&pfile
->ident_pool
, 20);
126 sprintf ((char *) buf
, "%d", number
);
127 token
->type
= CPP_NUMBER
;
128 token
->val
.str
.text
= buf
;
129 token
->val
.str
.len
= ustrlen (buf
);
133 static const char * const monthnames
[] =
135 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
136 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
139 /* Handle builtin macros like __FILE__. */
141 builtin_macro (pfile
, token
)
145 unsigned char flags
= ((token
->flags
& PREV_WHITE
) | AVOID_LPASTE
);
146 cpp_hashnode
*node
= token
->val
.node
;
148 switch (node
->value
.builtin
)
154 cpp_buffer
*buffer
= pfile
->buffer
;
156 if (node
->value
.builtin
== BT_BASE_FILE
)
158 buffer
= buffer
->prev
;
160 name
= buffer
->nominal_fname
;
161 make_string_token (&pfile
->ident_pool
, token
,
162 (const unsigned char *) name
, strlen (name
));
166 case BT_INCLUDE_LEVEL
:
167 /* pfile->include_depth counts the primary source as level 1,
168 but historically __INCLUDE_DEPTH__ has called the primary
170 make_number_token (pfile
, token
, pfile
->include_depth
- 1);
174 /* If __LINE__ is embedded in a macro, it must expand to the
175 line of the macro's invocation, not its definition.
176 Otherwise things like assert() will not work properly. */
177 make_number_token (pfile
, token
, cpp_get_line (pfile
)->line
);
182 int stdc
= (!CPP_IN_SYSTEM_HEADER (pfile
)
183 || pfile
->spec_nodes
.n__STRICT_ANSI__
->type
!= NT_VOID
);
184 make_number_token (pfile
, token
, stdc
);
190 if (pfile
->date
.type
== CPP_EOF
)
192 /* Allocate __DATE__ and __TIME__ from permanent storage,
193 and save them in pfile so we don't have to do this again.
194 We don't generate these strings at init time because
195 time() and localtime() are very slow on some systems. */
196 time_t tt
= time (NULL
);
197 struct tm
*tb
= localtime (&tt
);
199 make_string_token (&pfile
->ident_pool
, &pfile
->date
,
201 make_string_token (&pfile
->ident_pool
, &pfile
->time
,
204 sprintf ((char *) pfile
->date
.val
.str
.text
, "%s %2d %4d",
205 monthnames
[tb
->tm_mon
], tb
->tm_mday
, tb
->tm_year
+ 1900);
206 sprintf ((char *) pfile
->time
.val
.str
.text
, "%02d:%02d:%02d",
207 tb
->tm_hour
, tb
->tm_min
, tb
->tm_sec
);
209 *token
= node
->value
.builtin
== BT_DATE
? pfile
->date
: pfile
->time
;
213 cpp_ice (pfile
, "invalid builtin macro \"%s\"", node
->name
);
217 token
->flags
= flags
;
220 /* Used by cpperror.c to obtain the correct line and column to report
222 const cpp_lexer_pos
*
226 return &pfile
->lexer_pos
;
233 _cpp_lock_pool (&pfile
->argument_pool
);
240 _cpp_unlock_pool (&pfile
->argument_pool
);
243 /* Adds backslashes before all backslashes and double quotes appearing
244 in strings. Non-printable characters are converted to octal. */
246 quote_string (dest
, src
, len
)
255 if (c
== '\\' || c
== '"')
266 sprintf ((char *) dest
, "\\%03o", c
);
275 /* Convert a token sequence to a single string token according to the
276 rules of the ISO C #-operator. */
278 stringify_arg (pfile
, arg
)
282 cpp_pool
*pool
= &pfile
->ident_pool
;
283 unsigned char *start
= POOL_FRONT (pool
);
284 unsigned int i
, escape_it
, total_len
= 0, backslash_count
= 0;
286 /* Loop, reading in the argument's tokens. */
287 for (i
= 0; i
< arg
->count
; i
++)
290 const cpp_token
*token
= &arg
->first
[i
];
291 unsigned int len
= cpp_token_len (token
);
293 escape_it
= (token
->type
== CPP_STRING
|| token
->type
== CPP_WSTRING
294 || token
->type
== CPP_CHAR
|| token
->type
== CPP_WCHAR
295 || token
->type
== CPP_OSTRING
);
298 /* Worst case is each char is octal. */
300 len
++; /* Room for initial space. */
302 dest
= &start
[total_len
];
303 if (dest
+ len
> POOL_LIMIT (pool
))
305 _cpp_next_chunk (pool
, len
, (unsigned char **) &start
);
306 dest
= &start
[total_len
];
309 /* No leading white space. */
310 if (token
->flags
& PREV_WHITE
&& total_len
> 0)
315 unsigned char *buf
= (unsigned char *) xmalloc (len
);
317 len
= cpp_spell_token (pfile
, token
, buf
) - buf
;
318 dest
= quote_string (dest
, buf
, len
);
322 dest
= cpp_spell_token (pfile
, token
, dest
);
323 total_len
= dest
- start
;
325 if (token
->type
== CPP_OTHER
&& token
->val
.c
== '\\')
331 /* Ignore the final \ of invalid string literals. */
332 if (backslash_count
& 1)
334 cpp_warning (pfile
, "invalid string literal, ignoring final '\\'");
338 POOL_COMMIT (pool
, total_len
);
340 arg
->stringified
= xnew (cpp_token
);
341 arg
->stringified
->flags
= 0;
342 arg
->stringified
->type
= CPP_STRING
;
343 arg
->stringified
->val
.str
.text
= start
;
344 arg
->stringified
->val
.str
.len
= total_len
;
347 /* Try to paste two tokens. On success, the LHS becomes the pasted
348 token, and 0 is returned. For failure, we update the flags of the
349 RHS appropriately and return non-zero. */
351 paste_tokens (pfile
, lhs
, rhs
)
353 cpp_token
*lhs
, *rhs
;
359 type
= cpp_can_paste (pfile
, lhs
, rhs
, &digraph
);
363 /* Mandatory warning for all apart from assembler. */
364 if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
366 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
367 cpp_token_as_text (pfile
, lhs
),
368 cpp_token_as_text (pfile
, rhs
));
370 /* The standard states that behaviour is undefined. By the
371 principle of least surpise, we step back before the RHS, and
372 mark it to prevent macro expansion. Tests in the testsuite
373 rely on clearing PREV_WHITE here, though you could argue we
374 should actually set it. Assembler can have '.' in labels and
375 so requires that we don't insert spaces there. Maybe we should
376 change this to put out a space unless it's assembler. */
377 rhs
->flags
&= ~PREV_WHITE
;
378 rhs
->flags
|= NO_EXPAND
;
382 flags
= lhs
->flags
& ~DIGRAPH
;
386 /* Identifiers and numbers need spellings to be pasted. */
387 if (type
== CPP_NAME
|| type
== CPP_NUMBER
)
389 unsigned int total_len
= cpp_token_len (lhs
) + cpp_token_len (rhs
);
390 unsigned char *result
, *end
;
392 result
= _cpp_pool_alloc (&pfile
->ident_pool
, total_len
+ 1);
394 /* Paste the spellings and null terminate. */
395 end
= cpp_spell_token (pfile
, rhs
, cpp_spell_token (pfile
, lhs
, result
));
397 total_len
= end
- result
;
399 if (type
== CPP_NAME
)
401 lhs
->val
.node
= cpp_lookup (pfile
, result
, total_len
);
402 if (lhs
->val
.node
->flags
& NODE_OPERATOR
)
405 lhs
->type
= lhs
->val
.node
->value
.operator;
410 lhs
->val
.str
.text
= result
;
411 lhs
->val
.str
.len
= total_len
;
414 else if (type
== CPP_WCHAR
|| type
== CPP_WSTRING
)
415 lhs
->val
.str
= rhs
->val
.str
;
417 /* Set type and flags after pasting spellings. */
424 /* Handles an arbitrarily long sequence of ## operators. This
425 implementation is left-associative, non-recursive, and finishes a
426 paste before handling succeeding ones. If the paste fails, we back
427 up a token to just after the ## operator, with the effect that it
428 appears in the output stream normally. */
430 paste_all_tokens (pfile
, lhs
)
435 unsigned char orig_flags
= lhs
->flags
;
439 /* Take the token directly from the current context. We can do
440 this, because we are in the replacement list of either an
441 object-like macro, or a function-like macro with arguments
442 inserted. In either case, the constraints to #define
443 guarantee we have at least one more token. */
444 rhs
= pfile
->context
->list
.first
++;
445 if (paste_tokens (pfile
, lhs
, rhs
))
447 /* We failed. Step back so we read the RHS in next. */
448 pfile
->context
->list
.first
--;
452 while (rhs
->flags
& PASTE_LEFT
);
454 /* The pasted token has the PREV_WHITE flag of the LHS, is no longer
455 PASTE_LEFT, and is subject to macro expansion. */
456 lhs
->flags
&= ~(PREV_WHITE
| PASTE_LEFT
| NO_EXPAND
);
457 lhs
->flags
|= orig_flags
& (PREV_WHITE
| AVOID_LPASTE
);
460 /* Reads the unexpanded tokens of a macro argument into ARG. VAR_ARGS
461 is non-zero if this is a variadic macro. Returns the type of the
462 token that caused reading to finish. */
463 static enum cpp_ttype
464 parse_arg (pfile
, arg
, variadic
)
466 struct macro_arg
*arg
;
469 enum cpp_ttype result
;
470 unsigned int paren
= 0;
473 arg
->first
= (cpp_token
*) POOL_FRONT (&pfile
->argument_pool
);
474 for (;; arg
->count
++)
476 cpp_token
*token
= &arg
->first
[arg
->count
];
477 if ((unsigned char *) (token
+ 1) >= POOL_LIMIT (&pfile
->argument_pool
))
479 _cpp_next_chunk (&pfile
->argument_pool
, sizeof (cpp_token
),
480 (unsigned char **) &arg
->first
);
481 token
= &arg
->first
[arg
->count
];
484 /* Newlines in arguments are white space (6.10.3.10). */
485 line
= pfile
->lexer_pos
.output_line
;
486 cpp_get_token (pfile
, token
);
487 if (line
!= pfile
->lexer_pos
.output_line
)
488 token
->flags
|= PREV_WHITE
;
490 result
= token
->type
;
491 if (result
== CPP_OPEN_PAREN
)
493 else if (result
== CPP_CLOSE_PAREN
&& paren
-- == 0)
495 /* Commas are not terminators within parantheses or variadic. */
496 else if (result
== CPP_COMMA
&& paren
== 0 && !variadic
)
498 else if (result
== CPP_EOF
)
499 break; /* Error reported by caller. */
502 /* Commit the memory used to store the arguments. */
503 POOL_COMMIT (&pfile
->argument_pool
, arg
->count
* sizeof (cpp_token
));
508 /* Parse the arguments making up a macro invocation. */
510 parse_args (pfile
, node
)
512 const cpp_hashnode
*node
;
514 cpp_macro
*macro
= node
->value
.macro
;
515 macro_arg
*args
, *cur
;
519 /* Allocate room for at least one argument, and zero it out. */
520 argc
= macro
->paramc
? macro
->paramc
: 1;
521 args
= xcnewvec (macro_arg
, argc
);
523 for (cur
= args
, argc
= 0; ;)
527 type
= parse_arg (pfile
, cur
, argc
== macro
->paramc
&& macro
->variadic
);
528 if (type
== CPP_CLOSE_PAREN
|| type
== CPP_EOF
)
531 /* Re-use the last argument for excess arguments. */
532 if (argc
< macro
->paramc
)
538 cpp_error (pfile
, "unterminated argument list invoking macro \"%s\"",
542 else if (argc
< macro
->paramc
)
544 /* As an extension, a rest argument is allowed to not appear in
545 the invocation at all.
546 e.g. #define debug(format, args...) something
549 This is exactly the same as if there had been an empty rest
550 argument - debug("string", ). */
552 if (argc
+ 1 == macro
->paramc
&& macro
->variadic
)
554 if (CPP_PEDANTIC (pfile
) && ! macro
->syshdr
)
555 cpp_pedwarn (pfile
, "ISO C99 requires rest arguments to be used");
560 "macro \"%s\" requires %u arguments, but only %u given",
561 node
->name
, macro
->paramc
, argc
);
565 else if (argc
> macro
->paramc
)
567 /* Empty argument to a macro taking no arguments is OK. */
568 if (argc
!= 1 || cur
->count
)
571 "macro \"%s\" passed %u arguments, but takes just %u",
572 node
->name
, argc
, macro
->paramc
);
587 funlike_invocation_p (pfile
, node
, list
)
589 const cpp_hashnode
*node
;
590 struct toklist
*list
;
593 cpp_token maybe_paren
;
595 cpp_lexer_pos macro_pos
;
597 macro_pos
= pfile
->lexer_pos
;
598 pfile
->state
.parsing_args
= 1;
599 pfile
->state
.prevent_expansion
++;
600 orig
= pfile
->context
;
602 cpp_start_lookahead (pfile
);
603 cpp_get_token (pfile
, &maybe_paren
);
604 cpp_stop_lookahead (pfile
, maybe_paren
.type
== CPP_OPEN_PAREN
);
606 if (maybe_paren
.type
== CPP_OPEN_PAREN
)
607 args
= parse_args (pfile
, node
);
608 else if (CPP_WTRADITIONAL (pfile
) && ! node
->value
.macro
->syshdr
)
610 "function-like macro \"%s\" must be used with arguments in traditional C",
613 /* Restore original context. */
614 pfile
->context
= orig
;
615 pfile
->state
.prevent_expansion
--;
616 pfile
->state
.parsing_args
= 0;
620 /* The macro's expansion appears where the name would have. */
621 pfile
->lexer_pos
= macro_pos
;
623 if (node
->value
.macro
->paramc
> 0)
625 /* Don't save tokens during pre-expansion. */
626 struct cpp_lookahead
*la_saved
= pfile
->la_write
;
628 replace_args (pfile
, node
->value
.macro
, args
, list
);
629 pfile
->la_write
= la_saved
;
637 /* Push the context of a macro onto the context stack. TOKEN is the
638 macro name. If we can successfully start expanding the macro,
639 TOKEN is replaced with the first token of the expansion, and we
642 enter_macro_context (pfile
, node
)
646 cpp_context
*context
;
647 cpp_macro
*macro
= node
->value
.macro
;
650 /* Save the position of the outermost macro invocation. */
651 if (!pfile
->context
->prev
)
654 if (macro
->fun_like
&& !funlike_invocation_p (pfile
, node
, &list
))
656 if (!pfile
->context
->prev
)
657 unlock_pools (pfile
);
661 if (macro
->paramc
== 0)
663 list
.first
= macro
->expansion
;
664 list
.limit
= macro
->expansion
+ macro
->count
;
667 /* Only push a macro context for non-empty replacement lists. */
668 if (list
.first
!= list
.limit
)
670 context
= next_context (pfile
);
671 context
->list
= list
;
672 context
->macro
= macro
;
674 /* Disable the macro within its expansion. */
681 /* Move to the next context. Create one if there is none. */
686 cpp_context
*prev
= pfile
->context
;
687 cpp_context
*result
= prev
->next
;
691 result
= xnew (cpp_context
);
697 pfile
->context
= result
;
702 replace_args (pfile
, macro
, args
, list
)
706 struct toklist
*list
;
708 unsigned char flags
= 0;
709 unsigned int i
, total
;
710 const cpp_token
*src
, *limit
;
714 src
= macro
->expansion
;
715 limit
= src
+ macro
->count
;
717 /* First, fully macro-expand arguments, calculating the number of
718 tokens in the final expansion as we go. This ensures that the
719 possible recursive use of argument_pool is fine. */
721 for (; src
< limit
; src
++)
722 if (src
->type
== CPP_MACRO_ARG
)
724 /* We have an argument. If it is not being stringified or
725 pasted it is macro-replaced before insertion. */
726 arg
= &args
[src
->val
.arg_no
- 1];
728 if (src
->flags
& STRINGIFY_ARG
)
730 if (!arg
->stringified
)
731 stringify_arg (pfile
, arg
);
733 else if ((src
->flags
& PASTE_LEFT
)
734 || (src
> macro
->expansion
&& (src
[-1].flags
& PASTE_LEFT
)))
735 total
+= arg
->count
- 1;
740 arg
->expanded_count
= 0;
742 expand_arg (pfile
, arg
);
744 total
+= arg
->expanded_count
- 1;
748 dest
= (cpp_token
*) _cpp_pool_alloc (&pfile
->argument_pool
,
749 total
* sizeof (cpp_token
));
752 for (src
= macro
->expansion
; src
< limit
; src
++)
753 if (src
->type
== CPP_MACRO_ARG
)
756 const cpp_token
*from
;
758 arg
= &args
[src
->val
.arg_no
- 1];
759 if (src
->flags
& STRINGIFY_ARG
)
760 from
= arg
->stringified
, count
= 1;
761 else if (src
->flags
& PASTE_LEFT
)
762 count
= arg
->count
, from
= arg
->first
;
763 else if (src
> macro
->expansion
&& (src
[-1].flags
& PASTE_LEFT
))
765 count
= arg
->count
, from
= arg
->first
;
766 if (dest
!= list
->first
)
768 /* GCC has special semantics for , ## b where b is a
769 varargs parameter: the comma disappears if b was
770 given no actual arguments (not merely if b is an
771 empty argument); otherwise pasting is turned off. */
772 if (dest
[-1].type
== CPP_COMMA
774 && src
->val
.arg_no
== macro
->paramc
)
779 dest
[-1].flags
&= ~PASTE_LEFT
;
781 /* Count == 0 is the RHS a placemarker case. */
783 dest
[-1].flags
&= ~PASTE_LEFT
;
787 count
= arg
->expanded_count
, from
= arg
->expanded
;
789 /* Count == 0 is the LHS a placemarker case. */
792 memcpy (dest
, from
, count
* sizeof (cpp_token
));
794 /* The first token gets PREV_WHITE of the CPP_MACRO_ARG. */
795 dest
->flags
&= ~PREV_WHITE
;
796 dest
->flags
|= src
->flags
& PREV_WHITE
;
797 dest
->flags
|= AVOID_LPASTE
;
799 /* The last token gets the PASTE_LEFT of the CPP_MACRO_ARG. */
800 dest
[count
- 1].flags
|= src
->flags
& PASTE_LEFT
;
805 /* The token after the argument must avoid an accidental paste. */
806 flags
= AVOID_LPASTE
;
811 dest
->flags
|= flags
;
818 /* Free the expanded arguments. */
819 for (i
= 0; i
< macro
->paramc
; i
++)
821 if (args
[i
].expanded
)
822 free (args
[i
].expanded
);
823 if (args
[i
].stringified
)
824 free (args
[i
].stringified
);
828 /* Subroutine of expand_arg to put the unexpanded tokens on the
831 push_arg_context (pfile
, arg
)
835 cpp_context
*context
= next_context (pfile
);
837 context
->list
.first
= arg
->first
;
838 context
->list
.limit
= arg
->first
+ arg
->count
;
844 expand_arg (pfile
, arg
)
849 unsigned int capacity
= 256;
851 /* Loop, reading in the arguments. */
852 arg
->expanded
= (cpp_token
*) xmalloc (capacity
* sizeof (cpp_token
));
854 push_arg_context (pfile
, arg
);
857 if (arg
->expanded_count
>= capacity
)
860 arg
->expanded
= (cpp_token
*)
861 xrealloc (arg
->expanded
, capacity
* sizeof (cpp_token
));
863 token
= &arg
->expanded
[arg
->expanded_count
++];
864 cpp_get_token (pfile
, token
);
866 while (token
->type
!= CPP_EOF
);
868 arg
->expanded_count
--;
870 /* Pop the context we pushed. */
871 pfile
->context
= pfile
->context
->prev
;
875 _cpp_pop_context (pfile
)
878 cpp_context
*context
= pfile
->context
;
880 pfile
->context
= context
->prev
;
881 if (!pfile
->context
->prev
&& !pfile
->state
.parsing_args
)
882 unlock_pools (pfile
);
884 /* Re-enable a macro, temporarily if parsing_args, when leaving its
886 context
->macro
->disabled
= 0;
889 /* Eternal routine to get a token. Also used nearly everywhere
890 internally, except for places where we know we can safely call
891 the lexer directly, such as lexing a directive name.
893 Macro expansions and directives are transparently handled,
894 including entering included files. Thus tokens are post-macro
895 expansion, and after any intervening directives. External callers
896 see CPP_EOF only at EOF. Internal callers also see it when meeting
897 a directive inside a macro call, when at the end of a directive and
898 state.in_directive is still 1, and at the end of argument
901 cpp_get_token (pfile
, token
)
907 cpp_context
*context
= pfile
->context
;
910 take_lookahead_token (pfile
, token
);
911 /* Context->prev == 0 <=> base context. */
912 else if (!context
->prev
)
913 _cpp_lex_token (pfile
, token
);
914 else if (context
->list
.first
!= context
->list
.limit
)
916 *token
= *context
->list
.first
++;
917 token
->flags
|= pfile
->buffer
->saved_flags
;
918 pfile
->buffer
->saved_flags
= 0;
919 /* PASTE_LEFT tokens can only appear in macro expansions. */
920 if (token
->flags
& PASTE_LEFT
)
922 paste_all_tokens (pfile
, token
);
923 pfile
->buffer
->saved_flags
= AVOID_LPASTE
;
930 /* Avoid accidental paste at the end of a macro. */
931 pfile
->buffer
->saved_flags
|= AVOID_LPASTE
;
932 _cpp_pop_context (pfile
);
935 /* End of argument pre-expansion. */
936 token
->type
= CPP_EOF
;
941 if (token
->type
!= CPP_NAME
)
944 /* Handle macros and the _Pragma operator. */
945 if (token
->val
.node
->type
== NT_MACRO
946 && !pfile
->state
.prevent_expansion
947 && !(token
->flags
& NO_EXPAND
))
949 cpp_hashnode
*node
= token
->val
.node
;
951 /* Macros invalidate controlling macros. */
952 pfile
->mi_state
= MI_FAILED
;
954 if (node
->flags
& NODE_BUILTIN
)
956 builtin_macro (pfile
, token
);
957 pfile
->buffer
->saved_flags
= AVOID_LPASTE
;
961 if (node
->value
.macro
->disabled
)
962 token
->flags
|= NO_EXPAND
;
963 else if (enter_macro_context (pfile
, node
))
965 /* Pass AVOID_LPASTE and our PREV_WHITE to next token. */
966 pfile
->buffer
->saved_flags
= ((token
->flags
& PREV_WHITE
)
972 /* Don't interpret _Pragma within directives. The standard is
973 not clear on this, but to me this makes most sense. */
974 if (token
->val
.node
!= pfile
->spec_nodes
.n__Pragma
975 || pfile
->state
.in_directive
)
978 /* Handle it, and loop back for another token. MI is cleared
979 since this token came from either the lexer or a macro. */
980 _cpp_do__Pragma (pfile
);
984 save_lookahead_token (pfile
, token
);
987 /* Returns true if we're expanding an object-like macro that was
988 defined in a system header. Just checks the macro at the top of
989 the stack. Used for diagnostic suppression. */
991 cpp_sys_macro_p (pfile
)
994 cpp_macro
*macro
= pfile
->context
->macro
;
996 return macro
&& macro
->syshdr
;
999 /* Read each token in, until EOF. Directives are transparently
1002 cpp_scan_buffer_nooutput (pfile
, all_buffers
)
1007 cpp_buffer
*buffer
= all_buffers
? 0: pfile
->buffer
->prev
;
1011 cpp_get_token (pfile
, &token
);
1012 while (token
.type
!= CPP_EOF
);
1013 while (cpp_pop_buffer (pfile
) != buffer
);
1016 /* Lookahead handling. */
1019 save_lookahead_token (pfile
, token
)
1021 const cpp_token
*token
;
1023 if (token
->type
!= CPP_EOF
)
1025 cpp_lookahead
*la
= pfile
->la_write
;
1026 cpp_token_with_pos
*twp
;
1028 if (la
->count
== la
->cap
)
1030 la
->cap
+= la
->cap
+ 8;
1031 la
->tokens
= (cpp_token_with_pos
*)
1032 xrealloc (la
->tokens
, la
->cap
* sizeof (cpp_token_with_pos
));
1035 twp
= &la
->tokens
[la
->count
++];
1036 twp
->token
= *token
;
1037 twp
->pos
= *cpp_get_line (pfile
);
1042 take_lookahead_token (pfile
, token
)
1046 cpp_lookahead
*la
= pfile
->la_read
;
1047 cpp_token_with_pos
*twp
= &la
->tokens
[la
->cur
];
1049 *token
= twp
->token
;
1050 pfile
->lexer_pos
= twp
->pos
;
1052 if (++la
->cur
== la
->count
)
1053 _cpp_release_lookahead (pfile
);
1056 /* Moves the lookahead at the front of the read list to the free store. */
1058 _cpp_release_lookahead (pfile
)
1061 cpp_lookahead
*la
= pfile
->la_read
;
1063 pfile
->la_read
= la
->next
;
1064 la
->next
= pfile
->la_unused
;
1065 pfile
->la_unused
= la
;
1066 unlock_pools (pfile
);
1069 /* Take a new lookahead from the free store, or allocate one if none. */
1070 static cpp_lookahead
*
1071 alloc_lookahead (pfile
)
1074 cpp_lookahead
*la
= pfile
->la_unused
;
1077 pfile
->la_unused
= la
->next
;
1080 la
= xnew (cpp_lookahead
);
1085 la
->cur
= la
->count
= 0;
1089 /* Free memory associated with a lookahead list. */
1095 free ((PTR
) la
->tokens
);
1099 /* Free all the lookaheads of a cpp_reader. */
1101 _cpp_free_lookaheads (pfile
)
1104 cpp_lookahead
*la
, *lan
;
1107 free_lookahead (pfile
->la_read
);
1108 if (pfile
->la_write
)
1109 free_lookahead (pfile
->la_write
);
1111 for (la
= pfile
->la_unused
; la
; la
= lan
)
1114 free_lookahead (la
);
1118 /* Allocate a lookahead and move it to the front of the write list. */
1120 cpp_start_lookahead (pfile
)
1123 cpp_lookahead
*la
= alloc_lookahead (pfile
);
1125 la
->next
= pfile
->la_write
;
1126 pfile
->la_write
= la
;
1128 la
->pos
= *cpp_get_line (pfile
);
1130 /* Don't allow memory pools to be re-used whilst we're reading ahead. */
1134 /* Stop reading ahead - either step back, or drop the read ahead. */
1136 cpp_stop_lookahead (pfile
, drop
)
1140 cpp_lookahead
*la
= pfile
->la_write
;
1142 pfile
->la_write
= la
->next
;
1143 la
->next
= pfile
->la_read
;
1144 pfile
->la_read
= la
;
1146 if (drop
|| la
->count
== 0)
1147 _cpp_release_lookahead (pfile
);
1149 pfile
->lexer_pos
= la
->pos
;
1152 /* Push a single token back to the front of the queue. Only to be
1153 used by cpplib, and only then when necessary. POS is the position
1154 to report for the preceding token. */
1156 _cpp_push_token (pfile
, token
, pos
)
1158 const cpp_token
*token
;
1159 const cpp_lexer_pos
*pos
;
1161 cpp_start_lookahead (pfile
);
1162 save_lookahead_token (pfile
, token
);
1163 cpp_stop_lookahead (pfile
, 0);
1164 pfile
->lexer_pos
= *pos
;
1167 /* #define directive parsing and handling. */
1169 /* Returns non-zero if a macro redefinition warning is required. */
1171 warn_of_redefinition (pfile
, node
, macro2
)
1173 const cpp_hashnode
*node
;
1174 const cpp_macro
*macro2
;
1176 const cpp_macro
*macro1
;
1179 /* Some redefinitions need to be warned about regardless. */
1180 if (node
->flags
& NODE_WARN
)
1183 if (! CPP_PEDANTIC (pfile
))
1186 /* Redefinition of a macro is allowed if and only if the old and new
1187 definitions are the same. (6.10.3 paragraph 2). */
1188 macro1
= node
->value
.macro
;
1190 /* The quick failures. */
1191 if (macro1
->count
!= macro2
->count
1192 || macro1
->paramc
!= macro2
->paramc
1193 || macro1
->fun_like
!= macro2
->fun_like
1194 || macro1
->variadic
!= macro2
->variadic
)
1197 /* Check each token. */
1198 for (i
= 0; i
< macro1
->count
; i
++)
1199 if (! _cpp_equiv_tokens (¯o1
->expansion
[i
], ¯o2
->expansion
[i
]))
1202 /* Check parameter spellings. */
1203 for (i
= 0; i
< macro1
->paramc
; i
++)
1204 if (macro1
->params
[i
] != macro2
->params
[i
])
1210 /* Free the definition of hashnode H. */
1213 _cpp_free_definition (h
)
1216 /* Macros and assertions no longer have anything to free. */
1218 /* Clear builtin flag in case of redefinition. */
1219 h
->flags
&= ~NODE_BUILTIN
;
1223 save_parameter (pfile
, macro
, node
)
1228 cpp_hashnode
**dest
;
1230 /* Constraint 6.10.3.6 - duplicate parameter names. */
1231 if (node
->arg_index
)
1233 cpp_error (pfile
, "duplicate macro parameter \"%s\"", node
->name
);
1237 dest
= ¯o
->params
[macro
->paramc
];
1239 /* Check we have room for the parameters. */
1240 if ((unsigned char *) (dest
+ 1) >= POOL_LIMIT (&pfile
->macro_pool
))
1242 _cpp_next_chunk (&pfile
->macro_pool
, sizeof (cpp_hashnode
*),
1243 (unsigned char **) ¯o
->params
);
1244 dest
= ¯o
->params
[macro
->paramc
];
1248 node
->arg_index
= ++macro
->paramc
;
1253 parse_params (pfile
, macro
)
1258 unsigned int prev_ident
= 0;
1260 macro
->params
= (cpp_hashnode
**) POOL_FRONT (&pfile
->macro_pool
);
1263 _cpp_lex_token (pfile
, &token
);
1268 cpp_error (pfile
, "\"%s\" may not appear in macro parameter list",
1269 cpp_token_as_text (pfile
, &token
));
1275 cpp_error (pfile
, "macro parameters must be comma-separated");
1280 if (save_parameter (pfile
, macro
, token
.val
.node
))
1284 case CPP_CLOSE_PAREN
:
1285 if (prev_ident
|| macro
->paramc
== 0)
1288 /* Fall through to pick up the error. */
1292 cpp_error (pfile
, "parameter name missing");
1299 macro
->variadic
= 1;
1302 save_parameter (pfile
, macro
, pfile
->spec_nodes
.n__VA_ARGS__
);
1303 pfile
->state
.va_args_ok
= 1;
1304 if (! CPP_OPTION (pfile
, c99
) && CPP_OPTION (pfile
, pedantic
))
1306 "anonymous variadic macros were introduced in C99");
1308 else if (CPP_OPTION (pfile
, pedantic
))
1309 cpp_pedwarn (pfile
, "ISO C does not permit named variadic macros");
1311 /* We're at the end, and just expect a closing parenthesis. */
1312 _cpp_lex_token (pfile
, &token
);
1313 if (token
.type
== CPP_CLOSE_PAREN
)
1318 cpp_error (pfile
, "missing ')' in macro parameter list");
1322 /* Success. Commit the parameter array. */
1323 POOL_COMMIT (&pfile
->macro_pool
,
1324 macro
->paramc
* sizeof (cpp_hashnode
*));
1329 /* Lex a token from a macro's replacement list. Translate it to a
1330 CPP_MACRO_ARG if appropriate. */
1332 lex_expansion_token (pfile
, macro
)
1336 cpp_token
*token
= ¯o
->expansion
[macro
->count
];
1338 /* Check we have room for the token. */
1339 if ((unsigned char *) (token
+ 1) >= POOL_LIMIT (&pfile
->macro_pool
))
1341 _cpp_next_chunk (&pfile
->macro_pool
, sizeof (cpp_token
),
1342 (unsigned char **) ¯o
->expansion
);
1343 token
= ¯o
->expansion
[macro
->count
];
1347 _cpp_lex_token (pfile
, token
);
1349 /* Is this an argument? */
1350 if (token
->type
== CPP_NAME
&& token
->val
.node
->arg_index
)
1352 token
->type
= CPP_MACRO_ARG
;
1353 token
->val
.arg_no
= token
->val
.node
->arg_index
;
1355 else if (CPP_WTRADITIONAL (pfile
) && macro
->paramc
> 0
1356 && (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
))
1357 check_trad_stringification (pfile
, macro
, &token
->val
.str
);
1362 /* Parse a macro and save its expansion. Returns non-zero on success. */
1364 _cpp_create_definition (pfile
, node
)
1370 unsigned int i
, ok
= 1;
1372 macro
= (cpp_macro
*) _cpp_pool_alloc (&pfile
->macro_pool
,
1373 sizeof (cpp_macro
));
1374 macro
->file
= pfile
->buffer
->nominal_fname
;
1375 macro
->line
= pfile
->directive_pos
.line
;
1378 macro
->fun_like
= 0;
1379 macro
->variadic
= 0;
1381 macro
->expansion
= (cpp_token
*) POOL_FRONT (&pfile
->macro_pool
);
1383 /* Get the first token of the expansion (or the '(' of a
1384 function-like macro). */
1385 token
= lex_expansion_token (pfile
, macro
);
1386 if (token
->type
== CPP_OPEN_PAREN
&& !(token
->flags
& PREV_WHITE
))
1388 if (!(ok
= parse_params (pfile
, macro
)))
1391 macro
->fun_like
= 1;
1392 /* Some of the pool may have been used for the parameter store. */
1393 macro
->expansion
= (cpp_token
*) POOL_FRONT (&pfile
->macro_pool
);
1394 token
= lex_expansion_token (pfile
, macro
);
1396 else if (token
->type
!= CPP_EOF
&& !(token
->flags
& PREV_WHITE
))
1397 cpp_pedwarn (pfile
, "ISO C requires whitespace after the macro name");
1399 /* Setting it here means we don't catch leading comments. */
1400 pfile
->state
.save_comments
= ! CPP_OPTION (pfile
, discard_comments
);
1404 /* Check the stringifying # constraint 6.10.3.2.1 of
1405 function-like macros when lexing the subsequent token. */
1406 if (macro
->count
> 1 && token
[-1].type
== CPP_HASH
&& macro
->fun_like
)
1408 if (token
->type
== CPP_MACRO_ARG
)
1410 token
->flags
&= ~PREV_WHITE
;
1411 token
->flags
|= STRINGIFY_ARG
;
1412 token
->flags
|= token
[-1].flags
& PREV_WHITE
;
1413 token
[-1] = token
[0];
1416 /* Let assembler get away with murder. */
1417 else if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
1420 cpp_error (pfile
, "'#' is not followed by a macro parameter");
1425 if (token
->type
== CPP_EOF
)
1428 /* Paste operator constraint 6.10.3.3.1. */
1429 if (token
->type
== CPP_PASTE
)
1431 /* Token-paste ##, can appear in both object-like and
1432 function-like macros, but not at the ends. */
1433 if (--macro
->count
> 0)
1434 token
= lex_expansion_token (pfile
, macro
);
1436 if (macro
->count
== 0 || token
->type
== CPP_EOF
)
1440 "'##' cannot appear at either end of a macro expansion");
1444 token
[-1].flags
|= PASTE_LEFT
;
1445 /* Give it a PREV_WHITE for -dM etc. */
1446 token
->flags
|= PREV_WHITE
;
1449 token
= lex_expansion_token (pfile
, macro
);
1452 /* Don't count the CPP_EOF. */
1455 /* Clear the whitespace flag from the leading token. */
1456 macro
->expansion
[0].flags
&= ~PREV_WHITE
;
1458 /* Implement the macro-defined-to-itself optimisation. */
1459 macro
->disabled
= (macro
->count
== 1 && !macro
->fun_like
1460 && macro
->expansion
[0].type
== CPP_NAME
1461 && macro
->expansion
[0].val
.node
== node
);
1463 /* To suppress some diagnostics. */
1464 macro
->syshdr
= pfile
->buffer
->sysp
!= 0;
1466 /* Commit the memory. */
1467 POOL_COMMIT (&pfile
->macro_pool
, macro
->count
* sizeof (cpp_token
));
1469 if (node
->type
!= NT_VOID
)
1471 if (warn_of_redefinition (pfile
, node
, macro
))
1473 cpp_pedwarn_with_line (pfile
, pfile
->directive_pos
.line
,
1474 pfile
->directive_pos
.col
,
1475 "\"%s\" redefined", node
->name
);
1477 if (node
->type
== NT_MACRO
&& !(node
->flags
& NODE_BUILTIN
))
1478 cpp_pedwarn_with_file_and_line (pfile
,
1479 node
->value
.macro
->file
,
1480 node
->value
.macro
->line
, 1,
1481 "this is the location of the previous definition");
1483 _cpp_free_definition (node
);
1486 /* Enter definition in hash table. */
1487 node
->type
= NT_MACRO
;
1488 node
->value
.macro
= macro
;
1489 if (! ustrncmp (node
->name
, DSC ("__STDC_")))
1490 node
->flags
|= NODE_WARN
;
1494 /* Stop the lexer accepting __VA_ARGS__. */
1495 pfile
->state
.va_args_ok
= 0;
1497 /* Clear the fast argument lookup indices. */
1498 for (i
= macro
->paramc
; i
-- > 0; )
1499 macro
->params
[i
]->arg_index
= 0;
1504 /* Warn if a token in `string' matches one of the function macro
1505 arguments in `info'. This function assumes that the macro is a
1506 function macro and not an object macro. */
1508 check_trad_stringification (pfile
, macro
, string
)
1510 const cpp_macro
*macro
;
1511 const cpp_string
*string
;
1513 unsigned int i
, len
;
1514 const U_CHAR
*p
, *q
, *limit
= string
->text
+ string
->len
;
1516 /* Loop over the string. */
1517 for (p
= string
->text
; p
< limit
; p
= q
)
1519 /* Find the start of an identifier. */
1520 while (p
< limit
&& !is_idstart (*p
))
1523 /* Find the end of the identifier. */
1525 while (q
< limit
&& is_idchar (*q
))
1530 /* Loop over the function macro arguments to see if the
1531 identifier inside the string matches one of them. */
1532 for (i
= 0; i
< macro
->paramc
; i
++)
1534 const cpp_hashnode
*node
= macro
->params
[i
];
1536 if (node
->length
== len
&& !memcmp (p
, node
->name
, len
))
1539 "macro argument \"%s\" would be stringified with -traditional.",
1547 /* Returns the expansion of a macro, in a format suitable to be read
1548 back in again, and therefore also for DWARF 2 debugging info.
1549 Caller is expected to generate the "#define NAME" bit. The
1550 returned text is temporary, and automatically freed later. */
1552 const unsigned char *
1553 cpp_macro_definition (pfile
, node
)
1555 const cpp_hashnode
*node
;
1557 unsigned int i
, len
;
1558 const cpp_macro
*macro
= node
->value
.macro
;
1559 unsigned char *buffer
;
1561 if (node
->type
!= NT_MACRO
|| (node
->flags
& NODE_BUILTIN
))
1563 cpp_ice (pfile
, "invalid hash type %d in dump_definition", node
->type
);
1567 /* Calculate length. */
1569 if (macro
->fun_like
)
1571 len
+= 3; /* "()" plus possible final "." of ellipsis. */
1572 for (i
= 0; i
< macro
->paramc
; i
++)
1573 len
+= macro
->params
[i
]->length
+ 2; /* ", " */
1576 for (i
= 0; i
< macro
->count
; i
++)
1578 cpp_token
*token
= ¯o
->expansion
[i
];
1580 if (token
->type
== CPP_MACRO_ARG
)
1581 len
+= macro
->params
[token
->val
.arg_no
- 1]->length
;
1583 len
+= cpp_token_len (token
); /* Includes room for ' '. */
1584 if (token
->flags
& STRINGIFY_ARG
)
1586 if (token
->flags
& PASTE_LEFT
)
1587 len
+= 3; /* " ##" */
1590 if (len
> pfile
->macro_buffer_len
)
1592 pfile
->macro_buffer
= (U_CHAR
*) xrealloc (pfile
->macro_buffer
, len
);
1593 pfile
->macro_buffer_len
= len
;
1595 buffer
= pfile
->macro_buffer
;
1597 /* Parameter names. */
1598 if (macro
->fun_like
)
1601 for (i
= 0; i
< macro
->paramc
; i
++)
1603 cpp_hashnode
*param
= macro
->params
[i
];
1605 if (param
!= pfile
->spec_nodes
.n__VA_ARGS__
)
1607 memcpy (buffer
, param
->name
, param
->length
);
1608 buffer
+= param
->length
;
1611 if (i
+ 1 < macro
->paramc
)
1612 *buffer
++ = ',', *buffer
++ = ' ';
1613 else if (macro
->variadic
)
1614 *buffer
++ = '.', *buffer
++ = '.', *buffer
++ = '.';
1619 /* Expansion tokens. */
1623 for (i
= 0; i
< macro
->count
; i
++)
1625 cpp_token
*token
= ¯o
->expansion
[i
];
1627 if (token
->flags
& PREV_WHITE
)
1629 if (token
->flags
& STRINGIFY_ARG
)
1632 if (token
->type
== CPP_MACRO_ARG
)
1634 len
= macro
->params
[token
->val
.arg_no
- 1]->length
;
1635 memcpy (buffer
, macro
->params
[token
->val
.arg_no
- 1]->name
, len
);
1639 buffer
= cpp_spell_token (pfile
, token
, buffer
);
1641 if (token
->flags
& PASTE_LEFT
)
1646 /* Next has PREV_WHITE; see _cpp_create_definition. */
1652 return pfile
->macro_buffer
;