1 /* Part of CPP library. (Macro and #define handling.)
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
3 1999, 2000 Free Software Foundation, Inc.
4 Written by Per Bothner, 1994.
5 Based on CCCP program by Paul Rubin, June 1986
6 Adapted to ANSI C, Richard Stallman, Jan 1987
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. */
32 #ifndef STDC_0_IN_SYSTEM_HEADERS
33 #define STDC_0_IN_SYSTEM_HEADERS 0 /* Boolean macro. */
38 cpp_hashnode
**params
; /* Parameters, if any. */
39 cpp_token
*expansion
; /* First token of replacement list. */
40 const char *file
; /* Defined in file name. */
41 unsigned int line
; /* Starting line number. */
42 unsigned int count
; /* Number of tokens in expansion. */
43 unsigned short paramc
; /* Number of parameters. */
44 unsigned int fun_like
: 1; /* If a function-like macro. */
45 unsigned int var_args
: 1; /* If a variable-args macro. */
46 unsigned int disabled
: 1; /* If macro is disabled. */
49 typedef struct macro_arg macro_arg
;
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. */
59 /* Macro expansion. */
61 static void lock_pools
PARAMS ((cpp_reader
*));
62 static void unlock_pools
PARAMS ((cpp_reader
*));
63 static int enter_macro_context
PARAMS ((cpp_reader
*, cpp_hashnode
*));
64 static void builtin_macro
PARAMS ((cpp_reader
*, cpp_token
*));
65 static cpp_context
*push_arg_context
PARAMS ((cpp_reader
*, macro_arg
*));
66 static enum cpp_ttype parse_arg
PARAMS ((cpp_reader
*, macro_arg
*, int));
67 static macro_arg
*parse_args
PARAMS ((cpp_reader
*, const cpp_hashnode
*));
68 static cpp_context
*next_context
PARAMS ((cpp_reader
*));
69 static void expand_arg
PARAMS ((cpp_reader
*, macro_arg
*));
70 static unsigned char *quote_string
PARAMS ((unsigned char *,
71 const unsigned char *,
73 static void make_string_token
PARAMS ((cpp_pool
*, cpp_token
*,
74 const U_CHAR
*, unsigned int));
75 static void make_number_token
PARAMS ((cpp_reader
*, cpp_token
*, int));
76 static void stringify_arg
PARAMS ((cpp_reader
*, macro_arg
*));
77 static void paste_all_tokens
PARAMS ((cpp_reader
*, cpp_token
*));
78 static int paste_tokens
PARAMS ((cpp_reader
*, cpp_token
*, cpp_token
*));
79 static int funlike_invocation_p
PARAMS ((cpp_reader
*, const cpp_hashnode
*,
81 static void replace_args
PARAMS ((cpp_reader
*, cpp_macro
*, macro_arg
*,
86 static void save_lookahead_token
PARAMS ((cpp_reader
*, const cpp_token
*));
87 static void take_lookahead_token
PARAMS ((cpp_reader
*, cpp_token
*));
88 static cpp_lookahead
*alloc_lookahead
PARAMS ((cpp_reader
*));
89 static void free_lookahead
PARAMS ((cpp_lookahead
*));
91 /* #define directive parsing and handling. */
93 static cpp_token
*lex_expansion_token
PARAMS ((cpp_reader
*, cpp_macro
*));
94 static int check_macro_redefinition
PARAMS ((cpp_reader
*,
97 static int save_parameter
PARAMS ((cpp_reader
*, cpp_macro
*, cpp_hashnode
*));
98 static int parse_params
PARAMS ((cpp_reader
*, cpp_macro
*));
99 static void check_trad_stringification
PARAMS ((cpp_reader
*,
101 const cpp_string
*));
103 /* Allocates a buffer to hold a token's TEXT, and converts TOKEN to a
104 CPP_STRING token containing TEXT in quoted form. */
106 make_string_token (pool
, token
, text
, len
)
112 U_CHAR
*buf
= _cpp_pool_alloc (pool
, len
* 4);
114 token
->type
= CPP_STRING
;
115 token
->val
.str
.text
= buf
;
116 token
->val
.str
.len
= quote_string (buf
, text
, len
) - buf
;
120 /* Allocates and converts a temporary token to a CPP_NUMBER token,
121 evaluating to NUMBER. */
123 make_number_token (pfile
, token
, number
)
128 unsigned char *buf
= _cpp_pool_alloc (pfile
->string_pool
, 20);
130 sprintf ((char *) buf
, "%d", number
);
131 token
->type
= CPP_NUMBER
;
132 token
->val
.str
.text
= buf
;
133 token
->val
.str
.len
= ustrlen (buf
);
137 static const char * const monthnames
[] =
139 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
140 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
143 /* Handle builtin macros like __FILE__. */
145 builtin_macro (pfile
, token
)
149 unsigned char flags
= token
->flags
& PREV_WHITE
;
150 cpp_hashnode
*node
= token
->val
.node
;
153 switch (node
->value
.builtin
)
160 ip
= CPP_BUFFER (pfile
);
165 if (node
->value
.builtin
== BT_BASE_FILE
)
166 while (CPP_PREV_BUFFER (ip
) != NULL
)
167 ip
= CPP_PREV_BUFFER (ip
);
169 file
= ip
->nominal_fname
;
171 make_string_token (pfile
->string_pool
, token
,
172 (const U_CHAR
*) file
, strlen (file
));
176 case BT_INCLUDE_LEVEL
:
177 /* pfile->include_depth counts the primary source as level 1,
178 but historically __INCLUDE_DEPTH__ has called the primary
180 make_number_token (pfile
, token
, pfile
->include_depth
- 1);
184 /* If __LINE__ is embedded in a macro, it must expand to the
185 line of the macro's invocation, not its definition.
186 Otherwise things like assert() will not work properly. */
187 make_number_token (pfile
, token
, cpp_get_line (pfile
)->line
);
194 if (STDC_0_IN_SYSTEM_HEADERS
&& CPP_IN_SYSTEM_HEADER (pfile
)
195 && pfile
->spec_nodes
.n__STRICT_ANSI__
->type
== NT_VOID
)
197 make_number_token (pfile
, token
, stdc
);
203 if (pfile
->date
.type
== CPP_EOF
)
205 /* Allocate __DATE__ and __TIME__ from permanent storage,
206 and save them in pfile so we don't have to do this again.
207 We don't generate these strings at init time because
208 time() and localtime() are very slow on some systems. */
209 time_t tt
= time (NULL
);
210 struct tm
*tb
= localtime (&tt
);
212 make_string_token (&pfile
->ident_pool
, &pfile
->date
,
214 make_string_token (&pfile
->ident_pool
, &pfile
->time
,
217 sprintf ((char *) pfile
->date
.val
.str
.text
, "%s %2d %4d",
218 monthnames
[tb
->tm_mon
], tb
->tm_mday
, tb
->tm_year
+ 1900);
219 sprintf ((char *) pfile
->time
.val
.str
.text
, "%02d:%02d:%02d",
220 tb
->tm_hour
, tb
->tm_min
, tb
->tm_sec
);
222 *token
= node
->value
.builtin
== BT_DATE
? pfile
->date
: pfile
->time
;
226 cpp_ice (pfile
, "invalid builtin macro \"%s\"", node
->name
);
230 token
->flags
= flags
;
233 /* Used by cpperror.c to obtain the correct line and column to report
235 const cpp_lexer_pos
*
239 /* Within a macro expansion, return the position of the outermost
241 if (pfile
->context
->prev
)
242 return &pfile
->macro_pos
;
243 return &pfile
->lexer_pos
;
250 _cpp_lock_pool (&pfile
->temp_string_pool
);
251 _cpp_lock_pool (&pfile
->argument_pool
);
258 _cpp_unlock_pool (&pfile
->temp_string_pool
);
259 _cpp_unlock_pool (&pfile
->argument_pool
);
262 /* Adds backslashes before all backslashes and double quotes appearing
263 in strings. Non-printable characters are converted to octal. */
265 quote_string (dest
, src
, len
)
274 if (c
== '\\' || c
== '"')
285 sprintf ((char *) dest
, "\\%03o", c
);
294 /* Convert a token sequence to a single string token according to the
295 rules of the ISO C #-operator. */
297 stringify_arg (pfile
, arg
)
301 cpp_pool
*pool
= pfile
->string_pool
;
302 unsigned char *start
= POOL_FRONT (pool
);
303 unsigned int i
, escape_it
, total_len
= 0, backslash_count
= 0;
305 /* Loop, reading in the argument's tokens. */
306 for (i
= 0; i
< arg
->count
; i
++)
309 const cpp_token
*token
= &arg
->first
[i
];
310 unsigned int len
= cpp_token_len (token
);
312 escape_it
= (token
->type
== CPP_STRING
|| token
->type
== CPP_WSTRING
313 || token
->type
== CPP_CHAR
|| token
->type
== CPP_WCHAR
314 || token
->type
== CPP_OSTRING
);
317 /* Worst case is each char is octal. */
319 len
++; /* Room for initial space. */
321 dest
= &start
[total_len
];
322 if (dest
+ len
> POOL_LIMIT (pool
))
324 _cpp_next_chunk (pool
, len
, (unsigned char **) &start
);
325 dest
= &start
[total_len
];
328 /* No leading white space. */
329 if (token
->flags
& PREV_WHITE
&& total_len
> 0)
334 unsigned char *buf
= (unsigned char *) xmalloc (len
);
336 len
= cpp_spell_token (pfile
, token
, buf
) - buf
;
337 dest
= quote_string (dest
, buf
, len
);
341 dest
= cpp_spell_token (pfile
, token
, dest
);
342 total_len
= dest
- start
;
344 if (token
->type
== CPP_OTHER
&& token
->val
.c
== '\\')
350 /* Ignore the final \ of invalid string literals. */
351 if (backslash_count
& 1)
353 cpp_warning (pfile
, "invalid string literal, ignoring final '\\'");
357 POOL_COMMIT (pool
, total_len
);
359 arg
->stringified
= xnew (cpp_token
);
360 arg
->stringified
->flags
= 0;
361 arg
->stringified
->type
= CPP_STRING
;
362 arg
->stringified
->val
.str
.text
= start
;
363 arg
->stringified
->val
.str
.len
= total_len
;
366 /* Try to paste two tokens. On success, the LHS becomes the pasted
367 token, and 0 is returned. For failure, we update the flags of the
368 RHS appropriately and return non-zero. */
370 paste_tokens (pfile
, lhs
, rhs
)
372 cpp_token
*lhs
, *rhs
;
378 type
= cpp_can_paste (pfile
, lhs
, rhs
, &digraph
);
382 if (CPP_OPTION (pfile
, warn_paste
))
384 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
385 cpp_token_as_text (pfile
, lhs
),
386 cpp_token_as_text (pfile
, rhs
));
388 /* The standard states that behaviour is undefined. By the
389 principle of least surpise, we step back before the RHS, and
390 mark it to prevent macro expansion. Tests in the testsuite
391 rely on clearing PREV_WHITE here, though you could argue we
392 should actually set it. */
393 rhs
->flags
&= ~PREV_WHITE
;
394 rhs
->flags
|= NO_EXPAND
;
398 flags
= lhs
->flags
& ~DIGRAPH
;
402 /* Identifiers and numbers need spellings to be pasted. */
403 if (type
== CPP_NAME
|| type
== CPP_NUMBER
)
405 unsigned int total_len
= cpp_token_len (lhs
) + cpp_token_len (rhs
);
406 unsigned char *result
, *end
;
409 pool
= type
== CPP_NAME
? &pfile
->ident_pool
: pfile
->string_pool
;
410 result
= _cpp_pool_alloc (pool
, total_len
+ 1);
412 /* Paste the spellings and null terminate. */
413 end
= cpp_spell_token (pfile
, rhs
, cpp_spell_token (pfile
, lhs
, result
));
415 total_len
= end
- result
;
417 if (type
== CPP_NAME
)
419 lhs
->val
.node
= cpp_lookup (pfile
, result
, total_len
);
420 if (lhs
->val
.node
->flags
& NODE_OPERATOR
)
423 lhs
->type
= lhs
->val
.node
->value
.operator;
428 lhs
->val
.str
.text
= result
;
429 lhs
->val
.str
.len
= total_len
;
432 else if (type
== CPP_WCHAR
|| type
== CPP_WSTRING
)
433 lhs
->val
.str
= rhs
->val
.str
;
435 /* Set type and flags after pasting spellings. */
442 /* Handles an arbitrarily long sequence of ## operators. This
443 implementation is left-associative, non-recursive, and finishes a
444 paste before handling succeeding ones. If the paste fails, we back
445 up a token to just after the ## operator, with the effect that it
446 appears in the output stream normally. */
448 paste_all_tokens (pfile
, lhs
)
453 unsigned char orig_flags
= lhs
->flags
;
457 /* Take the token directly from the current context. We can do
458 this, because we are in the replacement list of either an
459 object-like macro, or a function-like macro with arguments
460 inserted. In either case, the constraints to #define
461 guarantee we have at least one more token. */
462 rhs
= pfile
->context
->list
.first
++;
463 if (paste_tokens (pfile
, lhs
, rhs
))
465 /* We failed. Step back so we read the RHS in next. */
466 pfile
->context
->list
.first
--;
470 while (rhs
->flags
& PASTE_LEFT
);
472 /* The pasted token has the PREV_WHITE flag of the LHS, is no longer
473 PASTE_LEFT, and is subject to macro expansion. */
474 lhs
->flags
&= ~(PREV_WHITE
| PASTE_LEFT
| NO_EXPAND
);
475 lhs
->flags
|= orig_flags
& PREV_WHITE
;
478 /* Reads the unexpanded tokens of a macro argument into ARG. VAR_ARGS
479 is non-zero if this is a variable argument. Returns the type of
480 the token that caused reading to finish. */
481 static enum cpp_ttype
482 parse_arg (pfile
, arg
, var_args
)
484 struct macro_arg
*arg
;
487 enum cpp_ttype result
;
488 unsigned int paren
= 0;
490 arg
->first
= (cpp_token
*) POOL_FRONT (&pfile
->argument_pool
);
491 for (;; arg
->count
++)
493 cpp_token
*token
= &arg
->first
[arg
->count
];
494 if ((unsigned char *) (token
+ 1) >= POOL_LIMIT (&pfile
->argument_pool
))
496 _cpp_next_chunk (&pfile
->argument_pool
, sizeof (cpp_token
),
497 (unsigned char **) &arg
->first
);
498 token
= &arg
->first
[arg
->count
];
501 cpp_get_token (pfile
, token
);
502 result
= token
->type
;
504 if (result
== CPP_OPEN_PAREN
)
506 else if (result
== CPP_CLOSE_PAREN
&& paren
-- == 0)
508 /* Commas are not terminators within parantheses or var_args. */
509 else if (result
== CPP_COMMA
&& paren
== 0 && !var_args
)
511 else if (result
== CPP_EOF
)
512 break; /* Error reported by caller. */
515 /* Commit the memory used to store the arguments. */
516 POOL_COMMIT (&pfile
->argument_pool
, arg
->count
* sizeof (cpp_token
));
521 /* Parse the arguments making up a macro invocation. */
523 parse_args (pfile
, node
)
525 const cpp_hashnode
*node
;
527 cpp_macro
*macro
= node
->value
.macro
;
528 macro_arg
*args
, *cur
;
532 /* Allocate room for at least one argument, and zero it out. */
533 argc
= macro
->paramc
? macro
->paramc
: 1;
534 args
= xcnewvec (macro_arg
, argc
);
536 for (cur
= args
, argc
= 0; ;)
540 type
= parse_arg (pfile
, cur
, argc
== macro
->paramc
&& macro
->var_args
);
541 if (type
== CPP_CLOSE_PAREN
|| type
== CPP_EOF
)
544 /* Re-use the last argument for excess arguments. */
545 if (argc
< macro
->paramc
)
551 cpp_error (pfile
, "unterminated argument list invoking macro \"%s\"",
555 else if (argc
< macro
->paramc
)
557 /* As an extension, a rest argument is allowed to not appear in
558 the invocation at all.
559 e.g. #define debug(format, args...) something
562 This is exactly the same as if there had been an empty rest
563 argument - debug("string", ). */
565 if (argc
+ 1 == macro
->paramc
&& macro
->var_args
)
567 if (CPP_OPTION (pfile
, c99
) && CPP_PEDANTIC (pfile
))
568 cpp_pedwarn (pfile
, "ISO C99 requires rest arguments to be used");
573 "macro \"%s\" requires %u arguments, but only %u given",
574 node
->name
, macro
->paramc
, argc
);
578 else if (argc
> macro
->paramc
)
580 /* Empty argument to a macro taking no arguments is OK. */
581 if (argc
!= 1 || cur
->count
)
584 "macro \"%s\" passed %u arguments, but takes just %u",
585 node
->name
, argc
, macro
->paramc
);
600 funlike_invocation_p (pfile
, node
, list
)
602 const cpp_hashnode
*node
;
603 struct toklist
*list
;
605 cpp_context
*orig_context
;
606 cpp_token maybe_paren
;
609 pfile
->state
.parsing_args
= 1;
610 pfile
->state
.prevent_expansion
++;
611 orig_context
= pfile
->context
;
613 cpp_start_lookahead (pfile
);
614 cpp_get_token (pfile
, &maybe_paren
);
615 cpp_stop_lookahead (pfile
, maybe_paren
.type
== CPP_OPEN_PAREN
);
617 if (maybe_paren
.type
== CPP_OPEN_PAREN
)
618 args
= parse_args (pfile
, node
);
619 else if (CPP_WTRADITIONAL (pfile
))
621 "function-like macro \"%s\" must be used with arguments in traditional C",
624 /* Restore original context. */
625 pfile
->context
= orig_context
;
626 pfile
->state
.prevent_expansion
--;
627 pfile
->state
.parsing_args
= 0;
631 if (node
->value
.macro
->paramc
> 0)
633 /* Don't save tokens during pre-expansion. */
634 struct cpp_lookahead
*la_saved
= pfile
->la_write
;
636 replace_args (pfile
, node
->value
.macro
, args
, list
);
637 pfile
->la_write
= la_saved
;
645 /* Push the context of a macro onto the context stack. TOKEN is the
646 macro name. If we can successfully start expanding the macro,
647 TOKEN is replaced with the first token of the expansion, and we
650 enter_macro_context (pfile
, node
)
654 cpp_context
*context
;
655 cpp_macro
*macro
= node
->value
.macro
;
658 /* Save the position of the outermost macro invocation. */
659 if (!pfile
->context
->prev
)
661 pfile
->macro_pos
= pfile
->lexer_pos
;
665 if (macro
->fun_like
&& !funlike_invocation_p (pfile
, node
, &list
))
667 if (!pfile
->context
->prev
)
668 unlock_pools (pfile
);
672 if (macro
->paramc
== 0)
674 list
.first
= macro
->expansion
;
675 list
.limit
= macro
->expansion
+ macro
->count
;
678 if (list
.first
!= list
.limit
)
680 /* Push its context. */
681 context
= next_context (pfile
);
682 context
->list
= list
;
683 context
->macro
= macro
;
685 /* Disable the macro within its expansion. */
692 /* Move to the next context. Create one if there is none. */
697 cpp_context
*prev
= pfile
->context
;
698 cpp_context
*result
= prev
->next
;
702 result
= xnew (cpp_context
);
708 pfile
->context
= result
;
713 replace_args (pfile
, macro
, args
, list
)
717 struct toklist
*list
;
719 unsigned int i
, total
;
720 const cpp_token
*src
, *limit
;
724 src
= macro
->expansion
;
725 limit
= src
+ macro
->count
;
727 /* First, fully macro-expand arguments, calculating the number of
728 tokens in the final expansion as we go. This ensures that the
729 possible recursive use of argument_pool is fine. */
731 for (; src
< limit
; src
++)
732 if (src
->type
== CPP_MACRO_ARG
)
734 /* We have an argument. If it is not being stringified or
735 pasted it is macro-replaced before insertion. */
736 arg
= &args
[src
->val
.arg_no
- 1];
738 if (src
->flags
& STRINGIFY_ARG
)
740 if (!arg
->stringified
)
741 stringify_arg (pfile
, arg
);
743 else if ((src
->flags
& PASTE_LEFT
)
744 || (src
> macro
->expansion
&& (src
[-1].flags
& PASTE_LEFT
)))
745 total
+= arg
->count
- 1;
750 arg
->expanded_count
= 0;
752 expand_arg (pfile
, arg
);
754 total
+= arg
->expanded_count
- 1;
758 dest
= (cpp_token
*) _cpp_pool_alloc (&pfile
->argument_pool
,
759 total
* sizeof (cpp_token
));
762 for (src
= macro
->expansion
; src
< limit
; src
++)
763 if (src
->type
== CPP_MACRO_ARG
)
766 const cpp_token
*from
;
768 arg
= &args
[src
->val
.arg_no
- 1];
769 if (src
->flags
& STRINGIFY_ARG
)
770 from
= arg
->stringified
, count
= 1;
771 else if (src
->flags
& PASTE_LEFT
)
772 count
= arg
->count
, from
= arg
->first
;
773 else if (src
> macro
->expansion
&& (src
[-1].flags
& PASTE_LEFT
))
775 count
= arg
->count
, from
= arg
->first
;
776 if (dest
!= list
->first
)
778 /* GCC has special semantics for , ## b where b is a
779 varargs parameter: the comma disappears if b was
780 given no actual arguments (not merely if b is an
781 empty argument); otherwise pasting is turned off. */
782 if (dest
[-1].type
== CPP_COMMA
784 && src
->val
.arg_no
== macro
->paramc
)
789 dest
[-1].flags
&= ~PASTE_LEFT
;
791 /* Count == 0 is the RHS a placemarker case. */
793 dest
[-1].flags
&= ~PASTE_LEFT
;
797 count
= arg
->expanded_count
, from
= arg
->expanded
;
799 /* Count == 0 is the LHS a placemarker case. */
802 memcpy (dest
, from
, count
* sizeof (cpp_token
));
804 /* The first token gets PREV_WHITE of the CPP_MACRO_ARG. */
805 dest
->flags
&= ~PREV_WHITE
;
806 dest
->flags
|= src
->flags
& PREV_WHITE
;
808 /* The last token gets the PASTE_LEFT of the CPP_MACRO_ARG. */
809 dest
[count
- 1].flags
|= src
->flags
& PASTE_LEFT
;
819 /* Free the expanded arguments. */
820 for (i
= 0; i
< macro
->paramc
; i
++)
822 if (args
[i
].expanded
)
823 free (args
[i
].expanded
);
824 if (args
[i
].stringified
)
825 free (args
[i
].stringified
);
829 /* Subroutine of expand_arg to put the unexpanded tokens on the
832 push_arg_context (pfile
, arg
)
836 cpp_context
*context
= next_context (pfile
);
838 context
->list
.first
= arg
->first
;
839 context
->list
.limit
= arg
->first
+ arg
->count
;
845 expand_arg (pfile
, arg
)
850 unsigned int capacity
= 256;
852 /* Loop, reading in the arguments. */
853 arg
->expanded
= (cpp_token
*) xmalloc (capacity
* sizeof (cpp_token
));
855 push_arg_context (pfile
, arg
);
858 if (arg
->expanded_count
>= capacity
)
861 arg
->expanded
= (cpp_token
*)
862 xrealloc (arg
->expanded
, capacity
* sizeof (cpp_token
));
864 token
= &arg
->expanded
[arg
->expanded_count
++];
865 cpp_get_token (pfile
, token
);
867 while (token
->type
!= CPP_EOF
);
869 arg
->expanded_count
--;
871 /* Pop the context we pushed. */
872 pfile
->context
= pfile
->context
->prev
;
876 _cpp_pop_context (pfile
)
879 cpp_context
*context
= pfile
->context
;
881 pfile
->context
= context
->prev
;
882 /* Re-enable a macro and free resources when leaving its expansion. */
883 if (!pfile
->state
.parsing_args
)
885 if (!pfile
->context
->prev
)
886 unlock_pools (pfile
);
887 context
->macro
->disabled
= 0;
891 /* Eternal routine to get a token. Also used nearly everywhere
892 internally, except for places where we know we can safely call
893 the lexer directly, such as lexing a directive name.
895 Macro expansions and directives are transparently handled,
896 including entering included files. Thus tokens are post-macro
897 expansion, and after any intervening directives. External callers
898 see CPP_EOF only at EOF. Internal callers also see it when meeting
899 a directive inside a macro call, when at the end of a directive and
900 state.in_directive is still 1, and at the end of argument
903 cpp_get_token (pfile
, token
)
907 unsigned char flags
= 0;
911 cpp_context
*context
= pfile
->context
;
914 take_lookahead_token (pfile
, token
);
915 /* Context->prev == 0 <=> base context. */
916 else if (!context
->prev
)
917 _cpp_lex_token (pfile
, token
);
918 else if (context
->list
.first
!= context
->list
.limit
)
920 *token
= *context
->list
.first
++;
921 token
->flags
|= flags
;
923 /* PASTE_LEFT tokens can only appear in macro expansions. */
924 if (token
->flags
& PASTE_LEFT
&& !pfile
->skipping
)
925 paste_all_tokens (pfile
, token
);
931 _cpp_pop_context (pfile
);
934 /* End of argument pre-expansion. */
935 token
->type
= CPP_EOF
;
940 /* Loop until we're not skipping. */
944 if (token
->type
!= CPP_NAME
)
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
))
952 cpp_hashnode
*node
= token
->val
.node
;
954 /* Macros invalidate controlling macros. */
955 pfile
->mi_state
= MI_FAILED
;
957 if (node
->flags
& NODE_BUILTIN
)
959 builtin_macro (pfile
, token
);
963 /* Merge PREV_WHITE of tokens. */
964 flags
= token
->flags
& PREV_WHITE
;
966 if (node
->value
.macro
->disabled
)
967 token
->flags
|= NO_EXPAND
;
968 else if (enter_macro_context (pfile
, node
))
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 /* Read each token in, until EOF. Directives are transparently
990 cpp_scan_buffer_nooutput (pfile
)
997 cpp_get_token (pfile
, &token
);
998 while (token
.type
!= CPP_EOF
);
999 while (cpp_pop_buffer (pfile
) != 0);
1002 /* Lookahead handling. */
1005 save_lookahead_token (pfile
, token
)
1007 const cpp_token
*token
;
1009 if (token
->type
!= CPP_EOF
)
1011 cpp_lookahead
*la
= pfile
->la_write
;
1012 cpp_token_with_pos
*twp
;
1014 if (la
->count
== la
->cap
)
1016 la
->cap
+= la
->cap
+ 8;
1017 la
->tokens
= (cpp_token_with_pos
*)
1018 xrealloc (la
->tokens
, la
->cap
* sizeof (cpp_token_with_pos
));
1021 twp
= &la
->tokens
[la
->count
++];
1022 twp
->token
= *token
;
1023 twp
->pos
= *cpp_get_line (pfile
);
1028 take_lookahead_token (pfile
, token
)
1032 cpp_lookahead
*la
= pfile
->la_read
;
1033 cpp_token_with_pos
*twp
= &la
->tokens
[la
->cur
];
1035 *token
= twp
->token
;
1036 pfile
->lexer_pos
= twp
->pos
;
1038 if (++la
->cur
== la
->count
)
1039 _cpp_release_lookahead (pfile
);
1042 /* Moves the lookahead at the front of the read list to the free store. */
1044 _cpp_release_lookahead (pfile
)
1047 cpp_lookahead
*la
= pfile
->la_read
;
1049 pfile
->la_read
= la
->next
;
1050 la
->next
= pfile
->la_unused
;
1051 pfile
->la_unused
= la
;
1052 unlock_pools (pfile
);
1055 /* Take a new lookahead from the free store, or allocate one if none. */
1056 static cpp_lookahead
*
1057 alloc_lookahead (pfile
)
1060 cpp_lookahead
*la
= pfile
->la_unused
;
1063 pfile
->la_unused
= la
->next
;
1066 la
= xnew (cpp_lookahead
);
1071 la
->cur
= la
->count
= 0;
1075 /* Free memory associated with a lookahead list. */
1081 free ((PTR
) la
->tokens
);
1085 /* Free all the lookaheads of a cpp_reader. */
1087 _cpp_free_lookaheads (pfile
)
1090 cpp_lookahead
*la
, *lan
;
1093 free_lookahead (pfile
->la_read
);
1094 if (pfile
->la_write
)
1095 free_lookahead (pfile
->la_write
);
1097 for (la
= pfile
->la_unused
; la
; la
= lan
)
1100 free_lookahead (la
);
1104 /* Allocate a lookahead and move it to the front of the write list. */
1106 cpp_start_lookahead (pfile
)
1109 cpp_lookahead
*la
= alloc_lookahead (pfile
);
1111 la
->next
= pfile
->la_write
;
1112 pfile
->la_write
= la
;
1114 la
->pos
= *cpp_get_line (pfile
);
1116 /* Don't allow memory pools to be re-used whilst we're reading ahead. */
1120 /* Stop reading ahead - either step back, or drop the read ahead. */
1122 cpp_stop_lookahead (pfile
, drop
)
1126 cpp_lookahead
*la
= pfile
->la_write
;
1128 pfile
->la_write
= la
->next
;
1129 la
->next
= pfile
->la_read
;
1130 pfile
->la_read
= la
;
1132 if (drop
|| la
->count
== 0)
1133 _cpp_release_lookahead (pfile
);
1135 pfile
->lexer_pos
= la
->pos
;
1138 /* Push a single token back to the front of the queue. Only to be
1139 used by cpplib, and only then when necessary. POS is the position
1140 to report for the preceding token. */
1142 _cpp_push_token (pfile
, token
, pos
)
1144 const cpp_token
*token
;
1145 const cpp_lexer_pos
*pos
;
1147 cpp_start_lookahead (pfile
);
1148 save_lookahead_token (pfile
, token
);
1149 cpp_stop_lookahead (pfile
, 0);
1150 pfile
->lexer_pos
= *pos
;
1153 /* #define directive parsing and handling. */
1155 /* Returns non-zero if a macro redefinition is trivial. */
1157 check_macro_redefinition (pfile
, node
, macro2
)
1159 const cpp_hashnode
*node
;
1160 const cpp_macro
*macro2
;
1162 const cpp_macro
*macro1
;
1165 if (node
->type
!= NT_MACRO
|| node
->flags
& NODE_BUILTIN
)
1166 return ! pfile
->done_initializing
;
1168 macro1
= node
->value
.macro
;
1170 /* The quick failures. */
1171 if (macro1
->count
!= macro2
->count
1172 || macro1
->paramc
!= macro2
->paramc
1173 || macro1
->fun_like
!= macro2
->fun_like
1174 || macro1
->var_args
!= macro2
->var_args
)
1177 /* Check each token. */
1178 for (i
= 0; i
< macro1
->count
; i
++)
1179 if (! _cpp_equiv_tokens (¯o1
->expansion
[i
], ¯o2
->expansion
[i
]))
1182 /* Check parameter spellings. */
1183 for (i
= 0; i
< macro1
->paramc
; i
++)
1184 if (macro1
->params
[i
] != macro2
->params
[i
])
1190 /* Free the definition of hashnode H. */
1193 _cpp_free_definition (h
)
1196 /* Macros and assertions no longer have anything to free. */
1198 /* Clear builtin flag in case of redefinition. */
1199 h
->flags
&= ~NODE_BUILTIN
;
1203 save_parameter (pfile
, macro
, node
)
1208 cpp_hashnode
**dest
;
1210 /* Constraint 6.10.3.6 - duplicate parameter names. */
1211 if (node
->arg_index
)
1213 cpp_error (pfile
, "duplicate macro parameter \"%s\"", node
->name
);
1217 dest
= ¯o
->params
[macro
->paramc
];
1219 /* Check we have room for the parameters. */
1220 if ((unsigned char *) (dest
+ 1) >= POOL_LIMIT (&pfile
->macro_pool
))
1222 _cpp_next_chunk (&pfile
->macro_pool
, sizeof (cpp_hashnode
*),
1223 (unsigned char **) ¯o
->params
);
1224 dest
= ¯o
->params
[macro
->paramc
];
1228 node
->arg_index
= ++macro
->paramc
;
1233 parse_params (pfile
, macro
)
1238 unsigned int prev_ident
= 0;
1240 macro
->params
= (cpp_hashnode
**) POOL_FRONT (&pfile
->macro_pool
);
1243 _cpp_lex_token (pfile
, &token
);
1248 cpp_error (pfile
, "\"%s\" may not appear in macro parameter list",
1249 cpp_token_as_text (pfile
, &token
));
1255 cpp_error (pfile
, "macro parameters must be comma-separated");
1260 if (save_parameter (pfile
, macro
, token
.val
.node
))
1264 case CPP_CLOSE_PAREN
:
1265 if (prev_ident
|| macro
->paramc
== 0)
1268 /* Fall through to pick up the error. */
1272 cpp_error (pfile
, "parameter name missing");
1279 macro
->var_args
= 1;
1282 save_parameter (pfile
, macro
, pfile
->spec_nodes
.n__VA_ARGS__
);
1283 pfile
->state
.va_args_ok
= 1;
1284 if (! CPP_OPTION (pfile
, c99
) && CPP_OPTION (pfile
, pedantic
))
1286 "C89 does not permit anonymous variable arguments");
1288 else if (CPP_OPTION (pfile
, pedantic
))
1290 "ISO C does not permit named variable arguments");
1292 /* We're at the end, and just expect a closing parenthesis. */
1293 _cpp_lex_token (pfile
, &token
);
1294 if (token
.type
== CPP_CLOSE_PAREN
)
1299 cpp_error (pfile
, "missing ')' in macro parameter list");
1303 /* Success. Commit the parameter array. */
1304 POOL_COMMIT (&pfile
->macro_pool
,
1305 macro
->paramc
* sizeof (cpp_hashnode
*));
1310 /* Lex a token from a macro's replacement list. Translate it to a
1311 CPP_MACRO_ARG if appropriate. */
1313 lex_expansion_token (pfile
, macro
)
1317 cpp_token
*token
= ¯o
->expansion
[macro
->count
];
1319 /* Check we have room for the token. */
1320 if ((unsigned char *) (token
+ 1) >= POOL_LIMIT (&pfile
->macro_pool
))
1322 _cpp_next_chunk (&pfile
->macro_pool
, sizeof (cpp_token
),
1323 (unsigned char **) ¯o
->expansion
);
1324 token
= ¯o
->expansion
[macro
->count
];
1328 _cpp_lex_token (pfile
, token
);
1330 /* Is this an argument? */
1331 if (token
->type
== CPP_NAME
&& token
->val
.node
->arg_index
)
1333 token
->type
= CPP_MACRO_ARG
;
1334 token
->val
.arg_no
= token
->val
.node
->arg_index
;
1336 else if (CPP_WTRADITIONAL (pfile
) && macro
->paramc
> 0
1337 && (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
))
1338 check_trad_stringification (pfile
, macro
, &token
->val
.str
);
1343 /* Parse a macro and save its expansion. Returns non-zero on success. */
1345 _cpp_create_definition (pfile
, node
)
1351 unsigned int i
, ok
= 1;
1353 macro
= (cpp_macro
*) _cpp_pool_alloc (&pfile
->macro_pool
,
1354 sizeof (cpp_macro
));
1355 macro
->file
= pfile
->buffer
->nominal_fname
;
1356 macro
->line
= pfile
->directive_pos
.line
;
1359 macro
->fun_like
= 0;
1360 macro
->var_args
= 0;
1362 macro
->expansion
= (cpp_token
*) POOL_FRONT (&pfile
->macro_pool
);
1364 /* Get the first token of the expansion (or the '(' of a
1365 function-like macro). */
1366 token
= lex_expansion_token (pfile
, macro
);
1367 if (token
->type
== CPP_OPEN_PAREN
&& !(token
->flags
& PREV_WHITE
))
1369 if (!(ok
= parse_params (pfile
, macro
)))
1372 macro
->fun_like
= 1;
1373 /* Some of the pool may have been used for the parameter store. */
1374 macro
->expansion
= (cpp_token
*) POOL_FRONT (&pfile
->macro_pool
);
1375 token
= lex_expansion_token (pfile
, macro
);
1377 else if (token
->type
!= CPP_EOF
&& !(token
->flags
& PREV_WHITE
))
1378 cpp_pedwarn (pfile
, "ISO C requires whitespace after the macro name");
1380 /* Setting it here means we don't catch leading comments. */
1381 pfile
->state
.save_comments
= ! CPP_OPTION (pfile
, discard_comments
);
1385 /* Check the stringifying # constraint 6.10.3.2.1 of
1386 function-like macros when lexing the subsequent token. */
1387 if (macro
->count
> 1 && token
[-1].type
== CPP_HASH
&& macro
->fun_like
)
1389 if (token
->type
== CPP_MACRO_ARG
)
1391 token
->flags
&= ~PREV_WHITE
;
1392 token
->flags
|= STRINGIFY_ARG
;
1393 token
->flags
|= token
[-1].flags
& PREV_WHITE
;
1394 token
[-1] = token
[0];
1397 /* Let assembler get away with murder. */
1398 else if (!CPP_OPTION (pfile
, lang_asm
))
1401 cpp_error (pfile
, "'#' is not followed by a macro parameter");
1406 if (token
->type
== CPP_EOF
)
1409 /* Paste operator constraint 6.10.3.3.1. */
1410 if (token
->type
== CPP_PASTE
)
1412 /* Token-paste ##, can appear in both object-like and
1413 function-like macros, but not at the ends. */
1414 if (--macro
->count
> 0)
1415 token
= lex_expansion_token (pfile
, macro
);
1417 if (macro
->count
== 0 || token
->type
== CPP_EOF
)
1421 "'##' cannot appear at either end of a macro expansion");
1425 token
[-1].flags
|= PASTE_LEFT
;
1426 /* Give it a PREV_WHITE for -dM etc. */
1427 token
->flags
|= PREV_WHITE
;
1430 token
= lex_expansion_token (pfile
, macro
);
1433 /* Don't count the CPP_EOF. */
1436 /* Clear the whitespace flag from the leading token. */
1437 macro
->expansion
[0].flags
&= ~PREV_WHITE
;
1439 /* Implement the macro-defined-to-itself optimisation. */
1440 macro
->disabled
= (macro
->count
== 1 && !macro
->fun_like
1441 && macro
->expansion
[0].type
== CPP_NAME
1442 && macro
->expansion
[0].val
.node
== node
);
1444 /* Commit the memory. */
1445 POOL_COMMIT (&pfile
->macro_pool
, macro
->count
* sizeof (cpp_token
));
1447 /* Redefinition of a macro is allowed if and only if the old and new
1448 definitions are the same. (6.10.3 paragraph 2). */
1449 if (node
->type
!= NT_VOID
)
1451 if (CPP_PEDANTIC (pfile
)
1452 && !check_macro_redefinition (pfile
, node
, macro
))
1454 cpp_pedwarn_with_line (pfile
, pfile
->directive_pos
.line
,
1455 pfile
->directive_pos
.col
,
1456 "\"%s\" redefined", node
->name
);
1458 if (pfile
->done_initializing
&& node
->type
== NT_MACRO
1459 && !(node
->flags
& NODE_BUILTIN
))
1460 cpp_pedwarn_with_file_and_line (pfile
,
1461 node
->value
.macro
->file
,
1462 node
->value
.macro
->line
, 1,
1463 "this is the location of the previous definition");
1465 _cpp_free_definition (node
);
1468 /* Enter definition in hash table. */
1469 node
->type
= NT_MACRO
;
1470 node
->value
.macro
= macro
;
1474 /* Stop the lexer accepting __VA_ARGS__. */
1475 pfile
->state
.va_args_ok
= 0;
1477 /* Clear the fast argument lookup indices. */
1478 for (i
= macro
->paramc
; i
-- > 0; )
1479 macro
->params
[i
]->arg_index
= 0;
1484 /* Warn if a token in `string' matches one of the function macro
1485 arguments in `info'. This function assumes that the macro is a
1486 function macro and not an object macro. */
1488 check_trad_stringification (pfile
, macro
, string
)
1490 const cpp_macro
*macro
;
1491 const cpp_string
*string
;
1493 unsigned int i
, len
;
1494 const U_CHAR
*p
, *q
, *limit
= string
->text
+ string
->len
;
1496 /* Loop over the string. */
1497 for (p
= string
->text
; p
< limit
; p
= q
)
1499 /* Find the start of an identifier. */
1500 while (p
< limit
&& !is_idstart (*p
))
1503 /* Find the end of the identifier. */
1505 while (q
< limit
&& is_idchar (*q
))
1510 /* Loop over the function macro arguments to see if the
1511 identifier inside the string matches one of them. */
1512 for (i
= 0; i
< macro
->paramc
; i
++)
1514 const cpp_hashnode
*node
= macro
->params
[i
];
1516 if (node
->length
== len
&& !memcmp (p
, node
->name
, len
))
1519 "macro argument \"%s\" would be stringified with -traditional.",
1527 /* Returns the expansion of a macro, in a format suitable to be read
1528 back in again, and therefore also for DWARF 2 debugging info.
1529 Caller is expected to generate the "#define NAME" bit. The
1530 returned text is temporary, and automatically freed later. */
1532 const unsigned char *
1533 cpp_macro_definition (pfile
, node
)
1535 const cpp_hashnode
*node
;
1537 unsigned int i
, len
;
1538 const cpp_macro
*macro
= node
->value
.macro
;
1539 unsigned char *buffer
;
1541 if (node
->type
!= NT_MACRO
|| (node
->flags
& NODE_BUILTIN
))
1543 cpp_ice (pfile
, "invalid hash type %d in dump_definition", node
->type
);
1547 /* Calculate length. */
1549 if (macro
->fun_like
)
1551 len
+= 3; /* "()" plus possible final "." of ellipsis. */
1552 for (i
= 0; i
< macro
->paramc
; i
++)
1553 len
+= macro
->params
[i
]->length
+ 2; /* ", " */
1556 for (i
= 0; i
< macro
->count
; i
++)
1558 cpp_token
*token
= ¯o
->expansion
[i
];
1560 if (token
->type
== CPP_MACRO_ARG
)
1561 len
+= macro
->params
[token
->val
.arg_no
- 1]->length
;
1563 len
+= cpp_token_len (token
); /* Includes room for ' '. */
1564 if (token
->flags
& STRINGIFY_ARG
)
1566 if (token
->flags
& PASTE_LEFT
)
1567 len
+= 3; /* " ##" */
1570 if (len
> pfile
->macro_buffer_len
)
1571 pfile
->macro_buffer
= (U_CHAR
*) xrealloc (pfile
->macro_buffer
, len
);
1572 buffer
= pfile
->macro_buffer
;
1574 /* Parameter names. */
1575 if (macro
->fun_like
)
1578 for (i
= 0; i
< macro
->paramc
; i
++)
1580 cpp_hashnode
*param
= macro
->params
[i
];
1582 if (param
!= pfile
->spec_nodes
.n__VA_ARGS__
)
1584 memcpy (buffer
, param
->name
, param
->length
);
1585 buffer
+= param
->length
;
1588 if (i
+ 1 < macro
->paramc
)
1589 *buffer
++ = ',', *buffer
++ = ' ';
1590 else if (macro
->var_args
)
1591 *buffer
++ = '.', *buffer
++ = '.', *buffer
++ = '.';
1596 /* Expansion tokens. */
1600 for (i
= 0; i
< macro
->count
; i
++)
1602 cpp_token
*token
= ¯o
->expansion
[i
];
1604 if (token
->flags
& PREV_WHITE
)
1606 if (token
->flags
& STRINGIFY_ARG
)
1609 if (token
->type
== CPP_MACRO_ARG
)
1611 len
= macro
->params
[token
->val
.arg_no
- 1]->length
;
1612 memcpy (buffer
, macro
->params
[token
->val
.arg_no
- 1]->name
, len
);
1616 buffer
= cpp_spell_token (pfile
, token
, buffer
);
1618 if (token
->flags
& PASTE_LEFT
)
1623 /* Next has PREV_WHITE; see _cpp_create_definition. */
1629 return pfile
->macro_buffer
;