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. */
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 variadic
: 1; /* If a variadic 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
->ident_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
;
152 switch (node
->value
.builtin
)
158 cpp_buffer
*buffer
= pfile
->buffer
;
160 if (node
->value
.builtin
== BT_BASE_FILE
)
162 buffer
= buffer
->prev
;
164 name
= buffer
->nominal_fname
;
165 make_string_token (&pfile
->ident_pool
, token
,
166 (const unsigned char *) name
, strlen (name
));
170 case BT_INCLUDE_LEVEL
:
171 /* pfile->include_depth counts the primary source as level 1,
172 but historically __INCLUDE_DEPTH__ has called the primary
174 make_number_token (pfile
, token
, pfile
->include_depth
- 1);
178 /* If __LINE__ is embedded in a macro, it must expand to the
179 line of the macro's invocation, not its definition.
180 Otherwise things like assert() will not work properly. */
181 make_number_token (pfile
, token
, cpp_get_line (pfile
)->line
);
188 if (STDC_0_IN_SYSTEM_HEADERS
&& CPP_IN_SYSTEM_HEADER (pfile
)
189 && pfile
->spec_nodes
.n__STRICT_ANSI__
->type
== NT_VOID
)
191 make_number_token (pfile
, token
, stdc
);
197 if (pfile
->date
.type
== CPP_EOF
)
199 /* Allocate __DATE__ and __TIME__ from permanent storage,
200 and save them in pfile so we don't have to do this again.
201 We don't generate these strings at init time because
202 time() and localtime() are very slow on some systems. */
203 time_t tt
= time (NULL
);
204 struct tm
*tb
= localtime (&tt
);
206 make_string_token (&pfile
->ident_pool
, &pfile
->date
,
208 make_string_token (&pfile
->ident_pool
, &pfile
->time
,
211 sprintf ((char *) pfile
->date
.val
.str
.text
, "%s %2d %4d",
212 monthnames
[tb
->tm_mon
], tb
->tm_mday
, tb
->tm_year
+ 1900);
213 sprintf ((char *) pfile
->time
.val
.str
.text
, "%02d:%02d:%02d",
214 tb
->tm_hour
, tb
->tm_min
, tb
->tm_sec
);
216 *token
= node
->value
.builtin
== BT_DATE
? pfile
->date
: pfile
->time
;
220 cpp_ice (pfile
, "invalid builtin macro \"%s\"", node
->name
);
224 token
->flags
= flags
;
227 /* Used by cpperror.c to obtain the correct line and column to report
229 const cpp_lexer_pos
*
233 return &pfile
->lexer_pos
;
240 _cpp_lock_pool (&pfile
->argument_pool
);
247 _cpp_unlock_pool (&pfile
->argument_pool
);
250 /* Adds backslashes before all backslashes and double quotes appearing
251 in strings. Non-printable characters are converted to octal. */
253 quote_string (dest
, src
, len
)
262 if (c
== '\\' || c
== '"')
273 sprintf ((char *) dest
, "\\%03o", c
);
282 /* Convert a token sequence to a single string token according to the
283 rules of the ISO C #-operator. */
285 stringify_arg (pfile
, arg
)
289 cpp_pool
*pool
= &pfile
->ident_pool
;
290 unsigned char *start
= POOL_FRONT (pool
);
291 unsigned int i
, escape_it
, total_len
= 0, backslash_count
= 0;
293 /* Loop, reading in the argument's tokens. */
294 for (i
= 0; i
< arg
->count
; i
++)
297 const cpp_token
*token
= &arg
->first
[i
];
298 unsigned int len
= cpp_token_len (token
);
300 escape_it
= (token
->type
== CPP_STRING
|| token
->type
== CPP_WSTRING
301 || token
->type
== CPP_CHAR
|| token
->type
== CPP_WCHAR
302 || token
->type
== CPP_OSTRING
);
305 /* Worst case is each char is octal. */
307 len
++; /* Room for initial space. */
309 dest
= &start
[total_len
];
310 if (dest
+ len
> POOL_LIMIT (pool
))
312 _cpp_next_chunk (pool
, len
, (unsigned char **) &start
);
313 dest
= &start
[total_len
];
316 /* No leading white space. */
317 if (token
->flags
& PREV_WHITE
&& total_len
> 0)
322 unsigned char *buf
= (unsigned char *) xmalloc (len
);
324 len
= cpp_spell_token (pfile
, token
, buf
) - buf
;
325 dest
= quote_string (dest
, buf
, len
);
329 dest
= cpp_spell_token (pfile
, token
, dest
);
330 total_len
= dest
- start
;
332 if (token
->type
== CPP_OTHER
&& token
->val
.c
== '\\')
338 /* Ignore the final \ of invalid string literals. */
339 if (backslash_count
& 1)
341 cpp_warning (pfile
, "invalid string literal, ignoring final '\\'");
345 POOL_COMMIT (pool
, total_len
);
347 arg
->stringified
= xnew (cpp_token
);
348 arg
->stringified
->flags
= 0;
349 arg
->stringified
->type
= CPP_STRING
;
350 arg
->stringified
->val
.str
.text
= start
;
351 arg
->stringified
->val
.str
.len
= total_len
;
354 /* Try to paste two tokens. On success, the LHS becomes the pasted
355 token, and 0 is returned. For failure, we update the flags of the
356 RHS appropriately and return non-zero. */
358 paste_tokens (pfile
, lhs
, rhs
)
360 cpp_token
*lhs
, *rhs
;
366 type
= cpp_can_paste (pfile
, lhs
, rhs
, &digraph
);
370 /* Mandatory warning for all apart from assembler. */
371 if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
373 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
374 cpp_token_as_text (pfile
, lhs
),
375 cpp_token_as_text (pfile
, rhs
));
377 /* The standard states that behaviour is undefined. By the
378 principle of least surpise, we step back before the RHS, and
379 mark it to prevent macro expansion. Tests in the testsuite
380 rely on clearing PREV_WHITE here, though you could argue we
381 should actually set it. Assembler can have '.' in labels and
382 so requires that we don't insert spaces there. Maybe we should
383 change this to put out a space unless it's assembler. */
384 rhs
->flags
&= ~PREV_WHITE
;
385 rhs
->flags
|= NO_EXPAND
;
389 flags
= lhs
->flags
& ~DIGRAPH
;
393 /* Identifiers and numbers need spellings to be pasted. */
394 if (type
== CPP_NAME
|| type
== CPP_NUMBER
)
396 unsigned int total_len
= cpp_token_len (lhs
) + cpp_token_len (rhs
);
397 unsigned char *result
, *end
;
399 result
= _cpp_pool_alloc (&pfile
->ident_pool
, total_len
+ 1);
401 /* Paste the spellings and null terminate. */
402 end
= cpp_spell_token (pfile
, rhs
, cpp_spell_token (pfile
, lhs
, result
));
404 total_len
= end
- result
;
406 if (type
== CPP_NAME
)
408 lhs
->val
.node
= cpp_lookup (pfile
, result
, total_len
);
409 if (lhs
->val
.node
->flags
& NODE_OPERATOR
)
412 lhs
->type
= lhs
->val
.node
->value
.operator;
417 lhs
->val
.str
.text
= result
;
418 lhs
->val
.str
.len
= total_len
;
421 else if (type
== CPP_WCHAR
|| type
== CPP_WSTRING
)
422 lhs
->val
.str
= rhs
->val
.str
;
424 /* Set type and flags after pasting spellings. */
431 /* Handles an arbitrarily long sequence of ## operators. This
432 implementation is left-associative, non-recursive, and finishes a
433 paste before handling succeeding ones. If the paste fails, we back
434 up a token to just after the ## operator, with the effect that it
435 appears in the output stream normally. */
437 paste_all_tokens (pfile
, lhs
)
442 unsigned char orig_flags
= lhs
->flags
;
446 /* Take the token directly from the current context. We can do
447 this, because we are in the replacement list of either an
448 object-like macro, or a function-like macro with arguments
449 inserted. In either case, the constraints to #define
450 guarantee we have at least one more token. */
451 rhs
= pfile
->context
->list
.first
++;
452 if (paste_tokens (pfile
, lhs
, rhs
))
454 /* We failed. Step back so we read the RHS in next. */
455 pfile
->context
->list
.first
--;
459 while (rhs
->flags
& PASTE_LEFT
);
461 /* The pasted token has the PREV_WHITE flag of the LHS, is no longer
462 PASTE_LEFT, and is subject to macro expansion. */
463 lhs
->flags
&= ~(PREV_WHITE
| PASTE_LEFT
| NO_EXPAND
);
464 lhs
->flags
|= orig_flags
& PREV_WHITE
;
467 /* Reads the unexpanded tokens of a macro argument into ARG. VAR_ARGS
468 is non-zero if this is a variadic macro. Returns the type of the
469 token that caused reading to finish. */
470 static enum cpp_ttype
471 parse_arg (pfile
, arg
, variadic
)
473 struct macro_arg
*arg
;
476 enum cpp_ttype result
;
477 unsigned int paren
= 0;
480 arg
->first
= (cpp_token
*) POOL_FRONT (&pfile
->argument_pool
);
481 for (;; arg
->count
++)
483 cpp_token
*token
= &arg
->first
[arg
->count
];
484 if ((unsigned char *) (token
+ 1) >= POOL_LIMIT (&pfile
->argument_pool
))
486 _cpp_next_chunk (&pfile
->argument_pool
, sizeof (cpp_token
),
487 (unsigned char **) &arg
->first
);
488 token
= &arg
->first
[arg
->count
];
491 /* Newlines in arguments are white space (6.10.3.10). */
492 line
= pfile
->lexer_pos
.output_line
;
493 cpp_get_token (pfile
, token
);
494 if (line
!= pfile
->lexer_pos
.output_line
)
495 token
->flags
|= PREV_WHITE
;
497 result
= token
->type
;
498 if (result
== CPP_OPEN_PAREN
)
500 else if (result
== CPP_CLOSE_PAREN
&& paren
-- == 0)
502 /* Commas are not terminators within parantheses or variadic. */
503 else if (result
== CPP_COMMA
&& paren
== 0 && !variadic
)
505 else if (result
== CPP_EOF
)
506 break; /* Error reported by caller. */
509 /* Commit the memory used to store the arguments. */
510 POOL_COMMIT (&pfile
->argument_pool
, arg
->count
* sizeof (cpp_token
));
515 /* Parse the arguments making up a macro invocation. */
517 parse_args (pfile
, node
)
519 const cpp_hashnode
*node
;
521 cpp_macro
*macro
= node
->value
.macro
;
522 macro_arg
*args
, *cur
;
526 /* Allocate room for at least one argument, and zero it out. */
527 argc
= macro
->paramc
? macro
->paramc
: 1;
528 args
= xcnewvec (macro_arg
, argc
);
530 for (cur
= args
, argc
= 0; ;)
534 type
= parse_arg (pfile
, cur
, argc
== macro
->paramc
&& macro
->variadic
);
535 if (type
== CPP_CLOSE_PAREN
|| type
== CPP_EOF
)
538 /* Re-use the last argument for excess arguments. */
539 if (argc
< macro
->paramc
)
545 cpp_error (pfile
, "unterminated argument list invoking macro \"%s\"",
549 else if (argc
< macro
->paramc
)
551 /* As an extension, a rest argument is allowed to not appear in
552 the invocation at all.
553 e.g. #define debug(format, args...) something
556 This is exactly the same as if there had been an empty rest
557 argument - debug("string", ). */
559 if (argc
+ 1 == macro
->paramc
&& macro
->variadic
)
561 if (CPP_PEDANTIC (pfile
))
562 cpp_pedwarn (pfile
, "ISO C99 requires rest arguments to be used");
567 "macro \"%s\" requires %u arguments, but only %u given",
568 node
->name
, macro
->paramc
, argc
);
572 else if (argc
> macro
->paramc
)
574 /* Empty argument to a macro taking no arguments is OK. */
575 if (argc
!= 1 || cur
->count
)
578 "macro \"%s\" passed %u arguments, but takes just %u",
579 node
->name
, argc
, macro
->paramc
);
594 funlike_invocation_p (pfile
, node
, list
)
596 const cpp_hashnode
*node
;
597 struct toklist
*list
;
600 cpp_token maybe_paren
;
602 cpp_lexer_pos macro_pos
;
604 macro_pos
= pfile
->lexer_pos
;
605 pfile
->state
.parsing_args
= 1;
606 pfile
->state
.prevent_expansion
++;
607 orig
= pfile
->context
;
609 cpp_start_lookahead (pfile
);
610 cpp_get_token (pfile
, &maybe_paren
);
611 cpp_stop_lookahead (pfile
, maybe_paren
.type
== CPP_OPEN_PAREN
);
613 if (maybe_paren
.type
== CPP_OPEN_PAREN
)
614 args
= parse_args (pfile
, node
);
615 else if (CPP_WTRADITIONAL (pfile
))
617 "function-like macro \"%s\" must be used with arguments in traditional C",
620 /* Restore original context. */
621 pfile
->context
= orig
;
622 pfile
->state
.prevent_expansion
--;
623 pfile
->state
.parsing_args
= 0;
627 /* The macro's expansion appears where the name would have. */
628 pfile
->lexer_pos
= macro_pos
;
630 if (node
->value
.macro
->paramc
> 0)
632 /* Don't save tokens during pre-expansion. */
633 struct cpp_lookahead
*la_saved
= pfile
->la_write
;
635 replace_args (pfile
, node
->value
.macro
, args
, list
);
636 pfile
->la_write
= la_saved
;
644 /* Push the context of a macro onto the context stack. TOKEN is the
645 macro name. If we can successfully start expanding the macro,
646 TOKEN is replaced with the first token of the expansion, and we
649 enter_macro_context (pfile
, node
)
653 cpp_context
*context
;
654 cpp_macro
*macro
= node
->value
.macro
;
657 /* Save the position of the outermost macro invocation. */
658 if (!pfile
->context
->prev
)
661 if (macro
->fun_like
&& !funlike_invocation_p (pfile
, node
, &list
))
663 if (!pfile
->context
->prev
)
664 unlock_pools (pfile
);
668 if (macro
->paramc
== 0)
670 list
.first
= macro
->expansion
;
671 list
.limit
= macro
->expansion
+ macro
->count
;
674 if (list
.first
!= list
.limit
)
676 /* Push its context. */
677 context
= next_context (pfile
);
678 context
->list
= list
;
679 context
->macro
= macro
;
681 /* Disable the macro within its expansion. */
688 /* Move to the next context. Create one if there is none. */
693 cpp_context
*prev
= pfile
->context
;
694 cpp_context
*result
= prev
->next
;
698 result
= xnew (cpp_context
);
704 pfile
->context
= result
;
709 replace_args (pfile
, macro
, args
, list
)
713 struct toklist
*list
;
715 unsigned int i
, total
;
716 const cpp_token
*src
, *limit
;
720 src
= macro
->expansion
;
721 limit
= src
+ macro
->count
;
723 /* First, fully macro-expand arguments, calculating the number of
724 tokens in the final expansion as we go. This ensures that the
725 possible recursive use of argument_pool is fine. */
727 for (; src
< limit
; src
++)
728 if (src
->type
== CPP_MACRO_ARG
)
730 /* We have an argument. If it is not being stringified or
731 pasted it is macro-replaced before insertion. */
732 arg
= &args
[src
->val
.arg_no
- 1];
734 if (src
->flags
& STRINGIFY_ARG
)
736 if (!arg
->stringified
)
737 stringify_arg (pfile
, arg
);
739 else if ((src
->flags
& PASTE_LEFT
)
740 || (src
> macro
->expansion
&& (src
[-1].flags
& PASTE_LEFT
)))
741 total
+= arg
->count
- 1;
746 arg
->expanded_count
= 0;
748 expand_arg (pfile
, arg
);
750 total
+= arg
->expanded_count
- 1;
754 dest
= (cpp_token
*) _cpp_pool_alloc (&pfile
->argument_pool
,
755 total
* sizeof (cpp_token
));
758 for (src
= macro
->expansion
; src
< limit
; src
++)
759 if (src
->type
== CPP_MACRO_ARG
)
762 const cpp_token
*from
;
764 arg
= &args
[src
->val
.arg_no
- 1];
765 if (src
->flags
& STRINGIFY_ARG
)
766 from
= arg
->stringified
, count
= 1;
767 else if (src
->flags
& PASTE_LEFT
)
768 count
= arg
->count
, from
= arg
->first
;
769 else if (src
> macro
->expansion
&& (src
[-1].flags
& PASTE_LEFT
))
771 count
= arg
->count
, from
= arg
->first
;
772 if (dest
!= list
->first
)
774 /* GCC has special semantics for , ## b where b is a
775 varargs parameter: the comma disappears if b was
776 given no actual arguments (not merely if b is an
777 empty argument); otherwise pasting is turned off. */
778 if (dest
[-1].type
== CPP_COMMA
780 && src
->val
.arg_no
== macro
->paramc
)
785 dest
[-1].flags
&= ~PASTE_LEFT
;
787 /* Count == 0 is the RHS a placemarker case. */
789 dest
[-1].flags
&= ~PASTE_LEFT
;
793 count
= arg
->expanded_count
, from
= arg
->expanded
;
795 /* Count == 0 is the LHS a placemarker case. */
798 memcpy (dest
, from
, count
* sizeof (cpp_token
));
800 /* The first token gets PREV_WHITE of the CPP_MACRO_ARG. */
801 dest
->flags
&= ~PREV_WHITE
;
802 dest
->flags
|= src
->flags
& PREV_WHITE
;
804 /* The last token gets the PASTE_LEFT of the CPP_MACRO_ARG. */
805 dest
[count
- 1].flags
|= src
->flags
& PASTE_LEFT
;
815 /* Free the expanded arguments. */
816 for (i
= 0; i
< macro
->paramc
; i
++)
818 if (args
[i
].expanded
)
819 free (args
[i
].expanded
);
820 if (args
[i
].stringified
)
821 free (args
[i
].stringified
);
825 /* Subroutine of expand_arg to put the unexpanded tokens on the
828 push_arg_context (pfile
, arg
)
832 cpp_context
*context
= next_context (pfile
);
834 context
->list
.first
= arg
->first
;
835 context
->list
.limit
= arg
->first
+ arg
->count
;
841 expand_arg (pfile
, arg
)
846 unsigned int capacity
= 256;
848 /* Loop, reading in the arguments. */
849 arg
->expanded
= (cpp_token
*) xmalloc (capacity
* sizeof (cpp_token
));
851 push_arg_context (pfile
, arg
);
854 if (arg
->expanded_count
>= capacity
)
857 arg
->expanded
= (cpp_token
*)
858 xrealloc (arg
->expanded
, capacity
* sizeof (cpp_token
));
860 token
= &arg
->expanded
[arg
->expanded_count
++];
861 cpp_get_token (pfile
, token
);
863 while (token
->type
!= CPP_EOF
);
865 arg
->expanded_count
--;
867 /* Pop the context we pushed. */
868 pfile
->context
= pfile
->context
->prev
;
872 _cpp_pop_context (pfile
)
875 cpp_context
*context
= pfile
->context
;
877 pfile
->context
= context
->prev
;
878 if (!pfile
->context
->prev
&& !pfile
->state
.parsing_args
)
879 unlock_pools (pfile
);
881 /* Re-enable a macro, temporarily if parsing_args, when leaving its
883 context
->macro
->disabled
= 0;
886 /* Eternal routine to get a token. Also used nearly everywhere
887 internally, except for places where we know we can safely call
888 the lexer directly, such as lexing a directive name.
890 Macro expansions and directives are transparently handled,
891 including entering included files. Thus tokens are post-macro
892 expansion, and after any intervening directives. External callers
893 see CPP_EOF only at EOF. Internal callers also see it when meeting
894 a directive inside a macro call, when at the end of a directive and
895 state.in_directive is still 1, and at the end of argument
898 cpp_get_token (pfile
, token
)
902 unsigned char flags
= 0;
906 cpp_context
*context
= pfile
->context
;
909 take_lookahead_token (pfile
, token
);
910 /* Context->prev == 0 <=> base context. */
911 else if (!context
->prev
)
912 _cpp_lex_token (pfile
, token
);
913 else if (context
->list
.first
!= context
->list
.limit
)
915 *token
= *context
->list
.first
++;
916 token
->flags
|= flags
;
918 /* PASTE_LEFT tokens can only appear in macro expansions. */
919 if (token
->flags
& PASTE_LEFT
)
920 paste_all_tokens (pfile
, token
);
926 _cpp_pop_context (pfile
);
929 /* End of argument pre-expansion. */
930 token
->type
= CPP_EOF
;
935 if (token
->type
!= CPP_NAME
)
938 /* Handle macros and the _Pragma operator. */
939 if (token
->val
.node
->type
== NT_MACRO
940 && !pfile
->state
.prevent_expansion
941 && !(token
->flags
& NO_EXPAND
))
943 cpp_hashnode
*node
= token
->val
.node
;
945 /* Macros invalidate controlling macros. */
946 pfile
->mi_state
= MI_FAILED
;
948 if (node
->flags
& NODE_BUILTIN
)
950 builtin_macro (pfile
, token
);
954 /* Merge PREV_WHITE of tokens. */
955 flags
= token
->flags
& PREV_WHITE
;
957 if (node
->value
.macro
->disabled
)
958 token
->flags
|= NO_EXPAND
;
959 else if (enter_macro_context (pfile
, node
))
963 /* Don't interpret _Pragma within directives. The standard is
964 not clear on this, but to me this makes most sense. */
965 if (token
->val
.node
!= pfile
->spec_nodes
.n__Pragma
966 || pfile
->state
.in_directive
)
969 /* Handle it, and loop back for another token. MI is cleared
970 since this token came from either the lexer or a macro. */
971 _cpp_do__Pragma (pfile
);
975 save_lookahead_token (pfile
, token
);
978 /* Read each token in, until EOF. Directives are transparently
981 cpp_scan_buffer_nooutput (pfile
, all_buffers
)
986 cpp_buffer
*buffer
= all_buffers
? 0: pfile
->buffer
->prev
;
990 cpp_get_token (pfile
, &token
);
991 while (token
.type
!= CPP_EOF
);
992 while (cpp_pop_buffer (pfile
) != buffer
);
995 /* Lookahead handling. */
998 save_lookahead_token (pfile
, token
)
1000 const cpp_token
*token
;
1002 if (token
->type
!= CPP_EOF
)
1004 cpp_lookahead
*la
= pfile
->la_write
;
1005 cpp_token_with_pos
*twp
;
1007 if (la
->count
== la
->cap
)
1009 la
->cap
+= la
->cap
+ 8;
1010 la
->tokens
= (cpp_token_with_pos
*)
1011 xrealloc (la
->tokens
, la
->cap
* sizeof (cpp_token_with_pos
));
1014 twp
= &la
->tokens
[la
->count
++];
1015 twp
->token
= *token
;
1016 twp
->pos
= *cpp_get_line (pfile
);
1021 take_lookahead_token (pfile
, token
)
1025 cpp_lookahead
*la
= pfile
->la_read
;
1026 cpp_token_with_pos
*twp
= &la
->tokens
[la
->cur
];
1028 *token
= twp
->token
;
1029 pfile
->lexer_pos
= twp
->pos
;
1031 if (++la
->cur
== la
->count
)
1032 _cpp_release_lookahead (pfile
);
1035 /* Moves the lookahead at the front of the read list to the free store. */
1037 _cpp_release_lookahead (pfile
)
1040 cpp_lookahead
*la
= pfile
->la_read
;
1042 pfile
->la_read
= la
->next
;
1043 la
->next
= pfile
->la_unused
;
1044 pfile
->la_unused
= la
;
1045 unlock_pools (pfile
);
1048 /* Take a new lookahead from the free store, or allocate one if none. */
1049 static cpp_lookahead
*
1050 alloc_lookahead (pfile
)
1053 cpp_lookahead
*la
= pfile
->la_unused
;
1056 pfile
->la_unused
= la
->next
;
1059 la
= xnew (cpp_lookahead
);
1064 la
->cur
= la
->count
= 0;
1068 /* Free memory associated with a lookahead list. */
1074 free ((PTR
) la
->tokens
);
1078 /* Free all the lookaheads of a cpp_reader. */
1080 _cpp_free_lookaheads (pfile
)
1083 cpp_lookahead
*la
, *lan
;
1086 free_lookahead (pfile
->la_read
);
1087 if (pfile
->la_write
)
1088 free_lookahead (pfile
->la_write
);
1090 for (la
= pfile
->la_unused
; la
; la
= lan
)
1093 free_lookahead (la
);
1097 /* Allocate a lookahead and move it to the front of the write list. */
1099 cpp_start_lookahead (pfile
)
1102 cpp_lookahead
*la
= alloc_lookahead (pfile
);
1104 la
->next
= pfile
->la_write
;
1105 pfile
->la_write
= la
;
1107 la
->pos
= *cpp_get_line (pfile
);
1109 /* Don't allow memory pools to be re-used whilst we're reading ahead. */
1113 /* Stop reading ahead - either step back, or drop the read ahead. */
1115 cpp_stop_lookahead (pfile
, drop
)
1119 cpp_lookahead
*la
= pfile
->la_write
;
1121 pfile
->la_write
= la
->next
;
1122 la
->next
= pfile
->la_read
;
1123 pfile
->la_read
= la
;
1125 if (drop
|| la
->count
== 0)
1126 _cpp_release_lookahead (pfile
);
1128 pfile
->lexer_pos
= la
->pos
;
1131 /* Push a single token back to the front of the queue. Only to be
1132 used by cpplib, and only then when necessary. POS is the position
1133 to report for the preceding token. */
1135 _cpp_push_token (pfile
, token
, pos
)
1137 const cpp_token
*token
;
1138 const cpp_lexer_pos
*pos
;
1140 cpp_start_lookahead (pfile
);
1141 save_lookahead_token (pfile
, token
);
1142 cpp_stop_lookahead (pfile
, 0);
1143 pfile
->lexer_pos
= *pos
;
1146 /* #define directive parsing and handling. */
1148 /* Returns non-zero if a macro redefinition is trivial. */
1150 check_macro_redefinition (pfile
, node
, macro2
)
1152 const cpp_hashnode
*node
;
1153 const cpp_macro
*macro2
;
1155 const cpp_macro
*macro1
;
1158 if (node
->type
!= NT_MACRO
|| node
->flags
& NODE_BUILTIN
)
1159 return ! pfile
->done_initializing
;
1161 macro1
= node
->value
.macro
;
1163 /* The quick failures. */
1164 if (macro1
->count
!= macro2
->count
1165 || macro1
->paramc
!= macro2
->paramc
1166 || macro1
->fun_like
!= macro2
->fun_like
1167 || macro1
->variadic
!= macro2
->variadic
)
1170 /* Check each token. */
1171 for (i
= 0; i
< macro1
->count
; i
++)
1172 if (! _cpp_equiv_tokens (¯o1
->expansion
[i
], ¯o2
->expansion
[i
]))
1175 /* Check parameter spellings. */
1176 for (i
= 0; i
< macro1
->paramc
; i
++)
1177 if (macro1
->params
[i
] != macro2
->params
[i
])
1183 /* Free the definition of hashnode H. */
1186 _cpp_free_definition (h
)
1189 /* Macros and assertions no longer have anything to free. */
1191 /* Clear builtin flag in case of redefinition. */
1192 h
->flags
&= ~NODE_BUILTIN
;
1196 save_parameter (pfile
, macro
, node
)
1201 cpp_hashnode
**dest
;
1203 /* Constraint 6.10.3.6 - duplicate parameter names. */
1204 if (node
->arg_index
)
1206 cpp_error (pfile
, "duplicate macro parameter \"%s\"", node
->name
);
1210 dest
= ¯o
->params
[macro
->paramc
];
1212 /* Check we have room for the parameters. */
1213 if ((unsigned char *) (dest
+ 1) >= POOL_LIMIT (&pfile
->macro_pool
))
1215 _cpp_next_chunk (&pfile
->macro_pool
, sizeof (cpp_hashnode
*),
1216 (unsigned char **) ¯o
->params
);
1217 dest
= ¯o
->params
[macro
->paramc
];
1221 node
->arg_index
= ++macro
->paramc
;
1226 parse_params (pfile
, macro
)
1231 unsigned int prev_ident
= 0;
1233 macro
->params
= (cpp_hashnode
**) POOL_FRONT (&pfile
->macro_pool
);
1236 _cpp_lex_token (pfile
, &token
);
1241 cpp_error (pfile
, "\"%s\" may not appear in macro parameter list",
1242 cpp_token_as_text (pfile
, &token
));
1248 cpp_error (pfile
, "macro parameters must be comma-separated");
1253 if (save_parameter (pfile
, macro
, token
.val
.node
))
1257 case CPP_CLOSE_PAREN
:
1258 if (prev_ident
|| macro
->paramc
== 0)
1261 /* Fall through to pick up the error. */
1265 cpp_error (pfile
, "parameter name missing");
1272 macro
->variadic
= 1;
1275 save_parameter (pfile
, macro
, pfile
->spec_nodes
.n__VA_ARGS__
);
1276 pfile
->state
.va_args_ok
= 1;
1277 if (! CPP_OPTION (pfile
, c99
) && CPP_OPTION (pfile
, pedantic
))
1279 "anonymous variadic macros were introduced in C99");
1281 else if (CPP_OPTION (pfile
, pedantic
))
1282 cpp_pedwarn (pfile
, "ISO C does not permit named variadic macros");
1284 /* We're at the end, and just expect a closing parenthesis. */
1285 _cpp_lex_token (pfile
, &token
);
1286 if (token
.type
== CPP_CLOSE_PAREN
)
1291 cpp_error (pfile
, "missing ')' in macro parameter list");
1295 /* Success. Commit the parameter array. */
1296 POOL_COMMIT (&pfile
->macro_pool
,
1297 macro
->paramc
* sizeof (cpp_hashnode
*));
1302 /* Lex a token from a macro's replacement list. Translate it to a
1303 CPP_MACRO_ARG if appropriate. */
1305 lex_expansion_token (pfile
, macro
)
1309 cpp_token
*token
= ¯o
->expansion
[macro
->count
];
1311 /* Check we have room for the token. */
1312 if ((unsigned char *) (token
+ 1) >= POOL_LIMIT (&pfile
->macro_pool
))
1314 _cpp_next_chunk (&pfile
->macro_pool
, sizeof (cpp_token
),
1315 (unsigned char **) ¯o
->expansion
);
1316 token
= ¯o
->expansion
[macro
->count
];
1320 _cpp_lex_token (pfile
, token
);
1322 /* Is this an argument? */
1323 if (token
->type
== CPP_NAME
&& token
->val
.node
->arg_index
)
1325 token
->type
= CPP_MACRO_ARG
;
1326 token
->val
.arg_no
= token
->val
.node
->arg_index
;
1328 else if (CPP_WTRADITIONAL (pfile
) && macro
->paramc
> 0
1329 && (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
))
1330 check_trad_stringification (pfile
, macro
, &token
->val
.str
);
1335 /* Parse a macro and save its expansion. Returns non-zero on success. */
1337 _cpp_create_definition (pfile
, node
)
1343 unsigned int i
, ok
= 1;
1345 macro
= (cpp_macro
*) _cpp_pool_alloc (&pfile
->macro_pool
,
1346 sizeof (cpp_macro
));
1347 macro
->file
= pfile
->buffer
->nominal_fname
;
1348 macro
->line
= pfile
->directive_pos
.line
;
1351 macro
->fun_like
= 0;
1352 macro
->variadic
= 0;
1354 macro
->expansion
= (cpp_token
*) POOL_FRONT (&pfile
->macro_pool
);
1356 /* Get the first token of the expansion (or the '(' of a
1357 function-like macro). */
1358 token
= lex_expansion_token (pfile
, macro
);
1359 if (token
->type
== CPP_OPEN_PAREN
&& !(token
->flags
& PREV_WHITE
))
1361 if (!(ok
= parse_params (pfile
, macro
)))
1364 macro
->fun_like
= 1;
1365 /* Some of the pool may have been used for the parameter store. */
1366 macro
->expansion
= (cpp_token
*) POOL_FRONT (&pfile
->macro_pool
);
1367 token
= lex_expansion_token (pfile
, macro
);
1369 else if (token
->type
!= CPP_EOF
&& !(token
->flags
& PREV_WHITE
))
1370 cpp_pedwarn (pfile
, "ISO C requires whitespace after the macro name");
1372 /* Setting it here means we don't catch leading comments. */
1373 pfile
->state
.save_comments
= ! CPP_OPTION (pfile
, discard_comments
);
1377 /* Check the stringifying # constraint 6.10.3.2.1 of
1378 function-like macros when lexing the subsequent token. */
1379 if (macro
->count
> 1 && token
[-1].type
== CPP_HASH
&& macro
->fun_like
)
1381 if (token
->type
== CPP_MACRO_ARG
)
1383 token
->flags
&= ~PREV_WHITE
;
1384 token
->flags
|= STRINGIFY_ARG
;
1385 token
->flags
|= token
[-1].flags
& PREV_WHITE
;
1386 token
[-1] = token
[0];
1389 /* Let assembler get away with murder. */
1390 else if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
1393 cpp_error (pfile
, "'#' is not followed by a macro parameter");
1398 if (token
->type
== CPP_EOF
)
1401 /* Paste operator constraint 6.10.3.3.1. */
1402 if (token
->type
== CPP_PASTE
)
1404 /* Token-paste ##, can appear in both object-like and
1405 function-like macros, but not at the ends. */
1406 if (--macro
->count
> 0)
1407 token
= lex_expansion_token (pfile
, macro
);
1409 if (macro
->count
== 0 || token
->type
== CPP_EOF
)
1413 "'##' cannot appear at either end of a macro expansion");
1417 token
[-1].flags
|= PASTE_LEFT
;
1418 /* Give it a PREV_WHITE for -dM etc. */
1419 token
->flags
|= PREV_WHITE
;
1422 token
= lex_expansion_token (pfile
, macro
);
1425 /* Don't count the CPP_EOF. */
1428 /* Clear the whitespace flag from the leading token. */
1429 macro
->expansion
[0].flags
&= ~PREV_WHITE
;
1431 /* Implement the macro-defined-to-itself optimisation. */
1432 macro
->disabled
= (macro
->count
== 1 && !macro
->fun_like
1433 && macro
->expansion
[0].type
== CPP_NAME
1434 && macro
->expansion
[0].val
.node
== node
);
1436 /* Commit the memory. */
1437 POOL_COMMIT (&pfile
->macro_pool
, macro
->count
* sizeof (cpp_token
));
1439 /* Redefinition of a macro is allowed if and only if the old and new
1440 definitions are the same. (6.10.3 paragraph 2). */
1441 if (node
->type
!= NT_VOID
)
1443 if (CPP_PEDANTIC (pfile
)
1444 && !check_macro_redefinition (pfile
, node
, macro
))
1446 cpp_pedwarn_with_line (pfile
, pfile
->directive_pos
.line
,
1447 pfile
->directive_pos
.col
,
1448 "\"%s\" redefined", node
->name
);
1450 if (pfile
->done_initializing
&& node
->type
== NT_MACRO
1451 && !(node
->flags
& NODE_BUILTIN
))
1452 cpp_pedwarn_with_file_and_line (pfile
,
1453 node
->value
.macro
->file
,
1454 node
->value
.macro
->line
, 1,
1455 "this is the location of the previous definition");
1457 _cpp_free_definition (node
);
1460 /* Enter definition in hash table. */
1461 node
->type
= NT_MACRO
;
1462 node
->value
.macro
= macro
;
1466 /* Stop the lexer accepting __VA_ARGS__. */
1467 pfile
->state
.va_args_ok
= 0;
1469 /* Clear the fast argument lookup indices. */
1470 for (i
= macro
->paramc
; i
-- > 0; )
1471 macro
->params
[i
]->arg_index
= 0;
1476 /* Warn if a token in `string' matches one of the function macro
1477 arguments in `info'. This function assumes that the macro is a
1478 function macro and not an object macro. */
1480 check_trad_stringification (pfile
, macro
, string
)
1482 const cpp_macro
*macro
;
1483 const cpp_string
*string
;
1485 unsigned int i
, len
;
1486 const U_CHAR
*p
, *q
, *limit
= string
->text
+ string
->len
;
1488 /* Loop over the string. */
1489 for (p
= string
->text
; p
< limit
; p
= q
)
1491 /* Find the start of an identifier. */
1492 while (p
< limit
&& !is_idstart (*p
))
1495 /* Find the end of the identifier. */
1497 while (q
< limit
&& is_idchar (*q
))
1502 /* Loop over the function macro arguments to see if the
1503 identifier inside the string matches one of them. */
1504 for (i
= 0; i
< macro
->paramc
; i
++)
1506 const cpp_hashnode
*node
= macro
->params
[i
];
1508 if (node
->length
== len
&& !memcmp (p
, node
->name
, len
))
1511 "macro argument \"%s\" would be stringified with -traditional.",
1519 /* Returns the expansion of a macro, in a format suitable to be read
1520 back in again, and therefore also for DWARF 2 debugging info.
1521 Caller is expected to generate the "#define NAME" bit. The
1522 returned text is temporary, and automatically freed later. */
1524 const unsigned char *
1525 cpp_macro_definition (pfile
, node
)
1527 const cpp_hashnode
*node
;
1529 unsigned int i
, len
;
1530 const cpp_macro
*macro
= node
->value
.macro
;
1531 unsigned char *buffer
;
1533 if (node
->type
!= NT_MACRO
|| (node
->flags
& NODE_BUILTIN
))
1535 cpp_ice (pfile
, "invalid hash type %d in dump_definition", node
->type
);
1539 /* Calculate length. */
1541 if (macro
->fun_like
)
1543 len
+= 3; /* "()" plus possible final "." of ellipsis. */
1544 for (i
= 0; i
< macro
->paramc
; i
++)
1545 len
+= macro
->params
[i
]->length
+ 2; /* ", " */
1548 for (i
= 0; i
< macro
->count
; i
++)
1550 cpp_token
*token
= ¯o
->expansion
[i
];
1552 if (token
->type
== CPP_MACRO_ARG
)
1553 len
+= macro
->params
[token
->val
.arg_no
- 1]->length
;
1555 len
+= cpp_token_len (token
); /* Includes room for ' '. */
1556 if (token
->flags
& STRINGIFY_ARG
)
1558 if (token
->flags
& PASTE_LEFT
)
1559 len
+= 3; /* " ##" */
1562 if (len
> pfile
->macro_buffer_len
)
1564 pfile
->macro_buffer
= (U_CHAR
*) xrealloc (pfile
->macro_buffer
, len
);
1565 pfile
->macro_buffer_len
= len
;
1567 buffer
= pfile
->macro_buffer
;
1569 /* Parameter names. */
1570 if (macro
->fun_like
)
1573 for (i
= 0; i
< macro
->paramc
; i
++)
1575 cpp_hashnode
*param
= macro
->params
[i
];
1577 if (param
!= pfile
->spec_nodes
.n__VA_ARGS__
)
1579 memcpy (buffer
, param
->name
, param
->length
);
1580 buffer
+= param
->length
;
1583 if (i
+ 1 < macro
->paramc
)
1584 *buffer
++ = ',', *buffer
++ = ' ';
1585 else if (macro
->variadic
)
1586 *buffer
++ = '.', *buffer
++ = '.', *buffer
++ = '.';
1591 /* Expansion tokens. */
1595 for (i
= 0; i
< macro
->count
; i
++)
1597 cpp_token
*token
= ¯o
->expansion
[i
];
1599 if (token
->flags
& PREV_WHITE
)
1601 if (token
->flags
& STRINGIFY_ARG
)
1604 if (token
->type
== CPP_MACRO_ARG
)
1606 len
= macro
->params
[token
->val
.arg_no
- 1]->length
;
1607 memcpy (buffer
, macro
->params
[token
->val
.arg_no
- 1]->name
, len
);
1611 buffer
= cpp_spell_token (pfile
, token
, buffer
);
1613 if (token
->flags
& PASTE_LEFT
)
1618 /* Next has PREV_WHITE; see _cpp_create_definition. */
1624 return pfile
->macro_buffer
;