blob: 3a1728d66636f4e9c4958fd5220bac41df650aec [file] [log] [blame]
Neil Booth93c803682000-10-28 17:59:06 +00001/* Part of CPP library. (Macro and #define handling.)
Richard Sandiford500f3ed2013-01-14 18:13:59 +00002 Copyright (C) 1986-2013 Free Software Foundation, Inc.
Zack Weinberg711b8822000-07-18 00:59:49 +00003 Written by Per Bothner, 1994.
4 Based on CCCP program by Paul Rubin, June 1986
5 Adapted to ANSI C, Richard Stallman, Jan 1987
6
7This program is free software; you can redistribute it and/or modify it
8under the terms of the GNU General Public License as published by the
Jakub Jelinek748086b2009-04-09 17:00:19 +02009Free Software Foundation; either version 3, or (at your option) any
Zack Weinberg711b8822000-07-18 00:59:49 +000010later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
Jakub Jelinek748086b2009-04-09 17:00:19 +020018along with this program; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>.
Zack Weinberg711b8822000-07-18 00:59:49 +000020
21 In other words, you are welcome to use, share and improve this program.
22 You are forbidden to forbid anyone else to use, share and improve
23 what you give them. Help stamp out software-hoarding! */
24
25#include "config.h"
26#include "system.h"
27#include "cpplib.h"
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +000028#include "internal.h"
Zack Weinberg711b8822000-07-18 00:59:49 +000029
Neil Booth93c803682000-10-28 17:59:06 +000030typedef struct macro_arg macro_arg;
Tom Tromey92582b72011-10-17 09:59:12 +000031/* This structure represents the tokens of a macro argument. These
32 tokens can be macro themselves, in which case they can be either
33 expanded or unexpanded. When they are expanded, this data
34 structure keeps both the expanded and unexpanded forms. */
Neil Booth93c803682000-10-28 17:59:06 +000035struct macro_arg
36{
Neil Booth4ed5bcf2001-09-24 22:53:12 +000037 const cpp_token **first; /* First token in unexpanded argument. */
Kazu Hirata6d2f8882001-10-10 11:33:39 +000038 const cpp_token **expanded; /* Macro-expanded argument. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +000039 const cpp_token *stringified; /* Stringified argument. */
Neil Booth93c803682000-10-28 17:59:06 +000040 unsigned int count; /* # of tokens in argument. */
41 unsigned int expanded_count; /* # of tokens in expanded argument. */
Tom Tromey92582b72011-10-17 09:59:12 +000042 source_location *virt_locs; /* Where virtual locations for
43 unexpanded tokens are stored. */
44 source_location *expanded_virt_locs; /* Where virtual locations for
45 expanded tokens are
46 stored. */
47};
48
49/* The kind of macro tokens which the instance of
50 macro_arg_token_iter is supposed to iterate over. */
51enum macro_arg_token_kind {
52 MACRO_ARG_TOKEN_NORMAL,
53 /* This is a macro argument token that got transformed into a string
54 litteral, e.g. #foo. */
55 MACRO_ARG_TOKEN_STRINGIFIED,
56 /* This is a token resulting from the expansion of a macro
57 argument that was itself a macro. */
58 MACRO_ARG_TOKEN_EXPANDED
59};
60
61/* An iterator over tokens coming from a function-like macro
62 argument. */
63typedef struct macro_arg_token_iter macro_arg_token_iter;
64struct macro_arg_token_iter
65{
66 /* Whether or not -ftrack-macro-expansion is used. */
67 bool track_macro_exp_p;
68 /* The kind of token over which we are supposed to iterate. */
69 enum macro_arg_token_kind kind;
70 /* A pointer to the current token pointed to by the iterator. */
71 const cpp_token **token_ptr;
72 /* A pointer to the "full" location of the current token. If
Joseph Myers7d9641c2012-05-29 15:53:50 +010073 -ftrack-macro-expansion is used this location tracks loci across
Tom Tromey92582b72011-10-17 09:59:12 +000074 macro expansion. */
75 const source_location *location_ptr;
76#ifdef ENABLE_CHECKING
77 /* The number of times the iterator went forward. This useful only
78 when checking is enabled. */
79 size_t num_forwards;
80#endif
Neil Booth93c803682000-10-28 17:59:06 +000081};
Zack Weinberg711b8822000-07-18 00:59:49 +000082
Neil Booth93c803682000-10-28 17:59:06 +000083/* Macro expansion. */
84
Jakub Jelinek765d6002008-01-25 10:01:27 +010085static int enter_macro_context (cpp_reader *, cpp_hashnode *,
Tom Tromey92582b72011-10-17 09:59:12 +000086 const cpp_token *, source_location);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000087static int builtin_macro (cpp_reader *, cpp_hashnode *);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000088static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
89 const cpp_token **, unsigned int);
Tom Tromey92582b72011-10-17 09:59:12 +000090static void push_extended_tokens_context (cpp_reader *, cpp_hashnode *,
91 _cpp_buff *, source_location *,
92 const cpp_token **, unsigned int);
Jakub Jelinek765d6002008-01-25 10:01:27 +010093static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *,
Tom Tromey92582b72011-10-17 09:59:12 +000094 _cpp_buff **, unsigned *);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000095static cpp_context *next_context (cpp_reader *);
96static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
97static void expand_arg (cpp_reader *, macro_arg *);
98static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
99static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
100static void paste_all_tokens (cpp_reader *, const cpp_token *);
Dodji Seketeli828a7f72012-05-29 09:36:29 +0000101static bool paste_tokens (cpp_reader *, source_location,
102 const cpp_token **, const cpp_token *);
Tom Tromey92582b72011-10-17 09:59:12 +0000103static void alloc_expanded_arg_mem (cpp_reader *, macro_arg *, size_t);
104static void ensure_expanded_arg_room (cpp_reader *, macro_arg *, size_t, size_t *);
105static void delete_macro_args (_cpp_buff*, unsigned num_args);
106static void set_arg_token (macro_arg *, const cpp_token *,
107 source_location, size_t,
108 enum macro_arg_token_kind,
109 bool);
110static const source_location *get_arg_token_location (const macro_arg *,
111 enum macro_arg_token_kind);
112static const cpp_token **arg_token_ptr_at (const macro_arg *,
113 size_t,
114 enum macro_arg_token_kind,
115 source_location **virt_location);
116
117static void macro_arg_token_iter_init (macro_arg_token_iter *, bool,
118 enum macro_arg_token_kind,
119 const macro_arg *,
120 const cpp_token **);
121static const cpp_token *macro_arg_token_iter_get_token
122(const macro_arg_token_iter *it);
123static source_location macro_arg_token_iter_get_location
124(const macro_arg_token_iter *);
125static void macro_arg_token_iter_forward (macro_arg_token_iter *);
126static _cpp_buff *tokens_buff_new (cpp_reader *, size_t,
127 source_location **);
128static size_t tokens_buff_count (_cpp_buff *);
129static const cpp_token **tokens_buff_last_token_ptr (_cpp_buff *);
Dodji Seketeli9b554be2011-12-05 09:20:59 +0000130static inline const cpp_token **tokens_buff_put_token_to (const cpp_token **,
131 source_location *,
132 const cpp_token *,
133 source_location,
134 source_location,
135 const struct line_map *,
136 unsigned int);
Tom Tromey92582b72011-10-17 09:59:12 +0000137
138static const cpp_token **tokens_buff_add_token (_cpp_buff *,
139 source_location *,
140 const cpp_token *,
141 source_location,
142 source_location,
143 const struct line_map *,
144 unsigned int);
Dodji Seketeli9b554be2011-12-05 09:20:59 +0000145static inline void tokens_buff_remove_last_token (_cpp_buff *);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000146static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
Tom Tromey92582b72011-10-17 09:59:12 +0000147 macro_arg *, source_location);
Jakub Jelinek765d6002008-01-25 10:01:27 +0100148static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *,
Tom Tromey92582b72011-10-17 09:59:12 +0000149 _cpp_buff **, unsigned *);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000150static bool create_iso_definition (cpp_reader *, cpp_macro *);
Neil Booth93c803682000-10-28 17:59:06 +0000151
Neil Booth93c803682000-10-28 17:59:06 +0000152/* #define directive parsing and handling. */
153
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000154static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
155static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
Jakub Jelinek8e680db2010-06-11 20:37:34 +0200156static bool warn_of_redefinition (cpp_reader *, cpp_hashnode *,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000157 const cpp_macro *);
158static bool parse_params (cpp_reader *, cpp_macro *);
159static void check_trad_stringification (cpp_reader *, const cpp_macro *,
160 const cpp_string *);
Tom Tromey92582b72011-10-17 09:59:12 +0000161static bool reached_end_of_context (cpp_context *);
162static void consume_next_token_from_context (cpp_reader *pfile,
163 const cpp_token **,
164 source_location *);
165static const cpp_token* cpp_get_token_1 (cpp_reader *, source_location *);
Zack Weinberg711b8822000-07-18 00:59:49 +0000166
Dodji Seketeli36002182012-04-30 11:41:46 +0000167static cpp_hashnode* macro_of_context (cpp_context *context);
168
Dodji Seketeli828a7f72012-05-29 09:36:29 +0000169static bool in_macro_expansion_p (cpp_reader *pfile);
170
Tom Tromey64a1a422011-10-17 09:59:52 +0000171/* Statistical counter tracking the number of macros that got
172 expanded. */
173unsigned num_expanded_macros_counter = 0;
174/* Statistical counter tracking the total number tokens resulting
175 from macro expansion. */
176unsigned num_macro_tokens_counter = 0;
177
Neil Bootha69cbaa2002-07-23 22:57:49 +0000178/* Emits a warning if NODE is a macro defined in the main file that
179 has not been used. */
180int
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000181_cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
182 void *v ATTRIBUTE_UNUSED)
Neil Bootha69cbaa2002-07-23 22:57:49 +0000183{
184 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
185 {
186 cpp_macro *macro = node->value.macro;
187
188 if (!macro->used
Per Bothner50f59cd2004-01-19 21:30:18 -0800189 && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
Simon Baldwin87cf0652010-04-07 17:18:10 +0000190 cpp_warning_with_line (pfile, CPP_W_UNUSED_MACROS, macro->line, 0,
191 "macro \"%s\" is not used", NODE_NAME (node));
Neil Bootha69cbaa2002-07-23 22:57:49 +0000192 }
193
194 return 1;
195}
196
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000197/* Allocates and returns a CPP_STRING token, containing TEXT of length
198 LEN, after null-terminating it. TEXT must be in permanent storage. */
199static const cpp_token *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000200new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
Zack Weinberg711b8822000-07-18 00:59:49 +0000201{
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000202 cpp_token *token = _cpp_temp_token (pfile);
Zack Weinberg711b8822000-07-18 00:59:49 +0000203
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000204 text[len] = '\0';
Neil Booth93c803682000-10-28 17:59:06 +0000205 token->type = CPP_STRING;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000206 token->val.str.len = len;
207 token->val.str.text = text;
Neil Booth93c803682000-10-28 17:59:06 +0000208 token->flags = 0;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000209 return token;
Neil Booth93c803682000-10-28 17:59:06 +0000210}
211
Neil Booth93c803682000-10-28 17:59:06 +0000212static const char * const monthnames[] =
213{
214 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
215 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
216};
217
Zack Weinberg21b11492004-09-09 19:16:56 +0000218/* Helper function for builtin_macro. Returns the text generated by
219 a builtin macro. */
Neil Booth278c4662002-06-19 05:40:08 +0000220const uchar *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000221_cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
Neil Booth93c803682000-10-28 17:59:06 +0000222{
Neil Booth278c4662002-06-19 05:40:08 +0000223 const uchar *result = NULL;
Manuel López-Ibáñez1bb64662008-07-21 09:33:38 +0000224 linenum_type number = 1;
Neil Booth644edda2001-10-02 12:57:24 +0000225
Neil Booth93c803682000-10-28 17:59:06 +0000226 switch (node->value.builtin)
227 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000228 default:
John David Anglin0527bc42003-11-01 22:56:54 +0000229 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
Neil Boothebef4e82002-04-14 18:42:47 +0000230 NODE_NAME (node));
Neil Booth278c4662002-06-19 05:40:08 +0000231 break;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000232
Grigory Zagorodnevbe8ac3e2006-02-18 09:25:31 +0000233 case BT_TIMESTAMP:
234 {
Tobias Burnuse8ff5192013-11-05 21:27:22 +0100235 if (CPP_OPTION (pfile, warn_date_time))
236 cpp_warning (pfile, CPP_W_DATE_TIME, "Macro \"%s\" might prevent "
237 "reproduce builds", NODE_NAME (node));
238
Grigory Zagorodnevbe8ac3e2006-02-18 09:25:31 +0000239 cpp_buffer *pbuffer = cpp_get_buffer (pfile);
240 if (pbuffer->timestamp == NULL)
241 {
242 /* Initialize timestamp value of the assotiated file. */
243 struct _cpp_file *file = cpp_get_file (pbuffer);
244 if (file)
245 {
246 /* Generate __TIMESTAMP__ string, that represents
247 the date and time of the last modification
248 of the current source file. The string constant
249 looks like "Sun Sep 16 01:03:52 1973". */
250 struct tm *tb = NULL;
251 struct stat *st = _cpp_get_file_stat (file);
252 if (st)
253 tb = localtime (&st->st_mtime);
254 if (tb)
255 {
256 char *str = asctime (tb);
257 size_t len = strlen (str);
258 unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
259 buf[0] = '"';
260 strcpy ((char *) buf + 1, str);
261 buf[len] = '"';
262 pbuffer->timestamp = buf;
263 }
264 else
265 {
266 cpp_errno (pfile, CPP_DL_WARNING,
267 "could not determine file timestamp");
Kris Van Heesb6baa672008-04-18 13:58:08 +0000268 pbuffer->timestamp = UC"\"??? ??? ?? ??:??:?? ????\"";
Grigory Zagorodnevbe8ac3e2006-02-18 09:25:31 +0000269 }
270 }
271 }
272 result = pbuffer->timestamp;
273 }
274 break;
Neil Booth93c803682000-10-28 17:59:06 +0000275 case BT_FILE:
276 case BT_BASE_FILE:
Zack Weinberg711b8822000-07-18 00:59:49 +0000277 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000278 unsigned int len;
Neil Booth0bda4762000-12-11 07:45:16 +0000279 const char *name;
Neil Booth562a5c22002-04-21 18:46:42 +0000280 uchar *buf;
Tom Tromey46427372011-10-17 11:58:56 +0200281
282 if (node->value.builtin == BT_FILE)
283 name = linemap_get_expansion_filename (pfile->line_table,
284 pfile->line_table->highest_line);
285 else
286 {
Gary Funckb492b682012-01-09 08:48:43 +0000287 name = _cpp_get_file_name (pfile->main_file);
288 if (!name)
289 abort ();
Tom Tromey46427372011-10-17 11:58:56 +0200290 }
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000291 len = strlen (name);
Andrew Pinski651ed942005-11-04 00:23:01 +0000292 buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
Neil Booth278c4662002-06-19 05:40:08 +0000293 result = buf;
294 *buf = '"';
295 buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
296 *buf++ = '"';
297 *buf = '\0';
Zack Weinberg711b8822000-07-18 00:59:49 +0000298 }
Neil Booth644edda2001-10-02 12:57:24 +0000299 break;
300
Neil Booth93c803682000-10-28 17:59:06 +0000301 case BT_INCLUDE_LEVEL:
Neil Boothd8693c62001-08-21 23:05:12 +0000302 /* The line map depth counts the primary source as level 1, but
303 historically __INCLUDE_DEPTH__ has called the primary source
304 level 0. */
Per Bothner50f59cd2004-01-19 21:30:18 -0800305 number = pfile->line_table->depth - 1;
Neil Booth644edda2001-10-02 12:57:24 +0000306 break;
Neil Booth93c803682000-10-28 17:59:06 +0000307
308 case BT_SPECLINE:
309 /* If __LINE__ is embedded in a macro, it must expand to the
310 line of the macro's invocation, not its definition.
311 Otherwise things like assert() will not work properly. */
Tom Tromey46427372011-10-17 11:58:56 +0200312 number = linemap_get_expansion_line (pfile->line_table,
313 CPP_OPTION (pfile, traditional)
314 ? pfile->line_table->highest_line
315 : pfile->cur_token[-1].src_loc);
Neil Booth644edda2001-10-02 12:57:24 +0000316 break;
Neil Booth93c803682000-10-28 17:59:06 +0000317
Zack Weinberg5279d732002-05-16 19:03:02 +0000318 /* __STDC__ has the value 1 under normal circumstances.
319 However, if (a) we are in a system header, (b) the option
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000320 stdc_0_in_system_headers is true (set by target config), and
321 (c) we are not in strictly conforming mode, then it has the
Jakub Jelinek83900992006-01-23 22:50:15 +0100322 value 0. (b) and (c) are already checked in cpp_init_builtins. */
Neil Booth93c803682000-10-28 17:59:06 +0000323 case BT_STDC:
Jakub Jelinek83900992006-01-23 22:50:15 +0100324 if (cpp_in_system_header (pfile))
325 number = 0;
326 else
327 number = 1;
Neil Booth644edda2001-10-02 12:57:24 +0000328 break;
Neil Booth93c803682000-10-28 17:59:06 +0000329
330 case BT_DATE:
331 case BT_TIME:
Tobias Burnuse8ff5192013-11-05 21:27:22 +0100332 if (CPP_OPTION (pfile, warn_date_time))
333 cpp_warning (pfile, CPP_W_DATE_TIME, "Macro \"%s\" might prevent "
334 "reproduce builds", NODE_NAME (node));
Neil Booth278c4662002-06-19 05:40:08 +0000335 if (pfile->date == NULL)
Neil Booth93c803682000-10-28 17:59:06 +0000336 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000337 /* Allocate __DATE__ and __TIME__ strings from permanent
338 storage. We only do this once, and don't generate them
339 at init time, because time() and localtime() are very
340 slow on some systems. */
Zack Weinberg56da7202002-08-02 04:18:16 +0000341 time_t tt;
342 struct tm *tb = NULL;
Neil Booth93c803682000-10-28 17:59:06 +0000343
Zack Weinberg56da7202002-08-02 04:18:16 +0000344 /* (time_t) -1 is a legitimate value for "number of seconds
345 since the Epoch", so we have to do a little dance to
346 distinguish that from a genuine error. */
347 errno = 0;
348 tt = time(NULL);
349 if (tt != (time_t)-1 || errno == 0)
350 tb = localtime (&tt);
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000351
Zack Weinberg56da7202002-08-02 04:18:16 +0000352 if (tb)
353 {
354 pfile->date = _cpp_unaligned_alloc (pfile,
355 sizeof ("\"Oct 11 1347\""));
356 sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000357 monthnames[tb->tm_mon], tb->tm_mday,
358 tb->tm_year + 1900);
Zack Weinberg56da7202002-08-02 04:18:16 +0000359
360 pfile->time = _cpp_unaligned_alloc (pfile,
361 sizeof ("\"12:34:56\""));
362 sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
363 tb->tm_hour, tb->tm_min, tb->tm_sec);
364 }
365 else
366 {
John David Anglin0527bc42003-11-01 22:56:54 +0000367 cpp_errno (pfile, CPP_DL_WARNING,
Zack Weinberg56da7202002-08-02 04:18:16 +0000368 "could not determine date and time");
369
Kris Van Heesb6baa672008-04-18 13:58:08 +0000370 pfile->date = UC"\"??? ?? ????\"";
371 pfile->time = UC"\"??:??:??\"";
Zack Weinberg56da7202002-08-02 04:18:16 +0000372 }
Neil Booth93c803682000-10-28 17:59:06 +0000373 }
Neil Booth93c803682000-10-28 17:59:06 +0000374
Neil Booth644edda2001-10-02 12:57:24 +0000375 if (node->value.builtin == BT_DATE)
Neil Booth278c4662002-06-19 05:40:08 +0000376 result = pfile->date;
Neil Booth644edda2001-10-02 12:57:24 +0000377 else
Neil Booth278c4662002-06-19 05:40:08 +0000378 result = pfile->time;
Neil Booth644edda2001-10-02 12:57:24 +0000379 break;
Ollie Wilda7020452007-05-24 20:55:36 +0000380
381 case BT_COUNTER:
Ollie Wildccfc4c92007-07-30 18:29:20 +0000382 if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
383 cpp_error (pfile, CPP_DL_ERROR,
384 "__COUNTER__ expanded inside directive with -fdirectives-only");
Ollie Wilda7020452007-05-24 20:55:36 +0000385 number = pfile->counter++;
386 break;
Neil Booth278c4662002-06-19 05:40:08 +0000387 }
Neil Booth644edda2001-10-02 12:57:24 +0000388
Neil Booth278c4662002-06-19 05:40:08 +0000389 if (result == NULL)
390 {
391 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
392 result = _cpp_unaligned_alloc (pfile, 21);
393 sprintf ((char *) result, "%u", number);
394 }
395
396 return result;
397}
398
399/* Convert builtin macros like __FILE__ to a token and push it on the
Zack Weinberg21b11492004-09-09 19:16:56 +0000400 context stack. Also handles _Pragma, for which a new token may not
401 be created. Returns 1 if it generates a new token context, 0 to
Neil Booth278c4662002-06-19 05:40:08 +0000402 return the token to the caller. */
403static int
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000404builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
Neil Booth278c4662002-06-19 05:40:08 +0000405{
406 const uchar *buf;
Neil Booth26aea072003-04-19 00:22:51 +0000407 size_t len;
408 char *nbuf;
Neil Booth278c4662002-06-19 05:40:08 +0000409
410 if (node->value.builtin == BT_PRAGMA)
411 {
Neil Booth644edda2001-10-02 12:57:24 +0000412 /* Don't interpret _Pragma within directives. The standard is
413 not clear on this, but to me this makes most sense. */
414 if (pfile->state.in_directive)
415 return 0;
416
Tom Tromey5b9a40d2007-10-31 14:50:13 +0000417 return _cpp_do__Pragma (pfile);
Neil Booth93c803682000-10-28 17:59:06 +0000418 }
Neil Booth644edda2001-10-02 12:57:24 +0000419
Neil Booth278c4662002-06-19 05:40:08 +0000420 buf = _cpp_builtin_macro_text (pfile, node);
Neil Booth26aea072003-04-19 00:22:51 +0000421 len = ustrlen (buf);
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000422 nbuf = (char *) alloca (len + 1);
Neil Booth26aea072003-04-19 00:22:51 +0000423 memcpy (nbuf, buf, len);
424 nbuf[len]='\n';
Neil Booth278c4662002-06-19 05:40:08 +0000425
Per Bothner40de9f72003-10-02 07:30:34 +0000426 cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
Neil Booth26aea072003-04-19 00:22:51 +0000427 _cpp_clean_line (pfile);
Neil Booth278c4662002-06-19 05:40:08 +0000428
429 /* Set pfile->cur_token as required by _cpp_lex_direct. */
430 pfile->cur_token = _cpp_temp_token (pfile);
Richard Hendersonbc4071d2006-01-04 08:33:38 -0800431 _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
Neil Booth278c4662002-06-19 05:40:08 +0000432 if (pfile->buffer->cur != pfile->buffer->rlimit)
John David Anglin0527bc42003-11-01 22:56:54 +0000433 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
Neil Booth278c4662002-06-19 05:40:08 +0000434 NODE_NAME (node));
435 _cpp_pop_buffer (pfile);
436
Neil Booth644edda2001-10-02 12:57:24 +0000437 return 1;
Neil Booth93c803682000-10-28 17:59:06 +0000438}
439
Neil Boothd15a58c2002-01-03 18:32:55 +0000440/* Copies SRC, of length LEN, to DEST, adding backslashes before all
Andrew Pinski651ed942005-11-04 00:23:01 +0000441 backslashes and double quotes. DEST must be of sufficient size.
442 Returns a pointer to the end of the string. */
Neil Booth562a5c22002-04-21 18:46:42 +0000443uchar *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000444cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
Neil Booth93c803682000-10-28 17:59:06 +0000445{
446 while (len--)
447 {
Neil Booth562a5c22002-04-21 18:46:42 +0000448 uchar c = *src++;
Neil Booth93c803682000-10-28 17:59:06 +0000449
450 if (c == '\\' || c == '"')
451 {
452 *dest++ = '\\';
453 *dest++ = c;
454 }
455 else
Andrew Pinski651ed942005-11-04 00:23:01 +0000456 *dest++ = c;
Neil Booth93c803682000-10-28 17:59:06 +0000457 }
458
459 return dest;
460}
461
Neil Boothd15a58c2002-01-03 18:32:55 +0000462/* Convert a token sequence ARG to a single string token according to
463 the rules of the ISO C #-operator. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000464static const cpp_token *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000465stringify_arg (cpp_reader *pfile, macro_arg *arg)
Neil Booth93c803682000-10-28 17:59:06 +0000466{
Neil Booth6338b352003-04-23 22:44:06 +0000467 unsigned char *dest;
Neil Boothece54d52001-09-28 09:40:22 +0000468 unsigned int i, escape_it, backslash_count = 0;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000469 const cpp_token *source = NULL;
Neil Boothece54d52001-09-28 09:40:22 +0000470 size_t len;
Neil Booth93c803682000-10-28 17:59:06 +0000471
Neil Booth6338b352003-04-23 22:44:06 +0000472 if (BUFF_ROOM (pfile->u_buff) < 3)
473 _cpp_extend_buff (pfile, &pfile->u_buff, 3);
474 dest = BUFF_FRONT (pfile->u_buff);
475 *dest++ = '"';
476
Neil Booth93c803682000-10-28 17:59:06 +0000477 /* Loop, reading in the argument's tokens. */
478 for (i = 0; i < arg->count; i++)
479 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000480 const cpp_token *token = arg->first[i];
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000481
482 if (token->type == CPP_PADDING)
483 {
Joseph Myers18f41a12009-04-12 23:20:02 +0100484 if (source == NULL
485 || (!(source->flags & PREV_WHITE)
486 && token->val.source == NULL))
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000487 source = token->val.source;
488 continue;
489 }
Neil Booth93c803682000-10-28 17:59:06 +0000490
Kris Van Heesb6baa672008-04-18 13:58:08 +0000491 escape_it = (token->type == CPP_STRING || token->type == CPP_CHAR
Ian Lance Taylorfd2ab212009-09-02 17:35:30 +0000492 || token->type == CPP_WSTRING || token->type == CPP_WCHAR
Kris Van Heesb6baa672008-04-18 13:58:08 +0000493 || token->type == CPP_STRING32 || token->type == CPP_CHAR32
Jakub Jelinek2c6e3f52009-10-19 23:41:15 +0200494 || token->type == CPP_STRING16 || token->type == CPP_CHAR16
495 || token->type == CPP_UTF8STRING);
Neil Booth93c803682000-10-28 17:59:06 +0000496
Neil Boothece54d52001-09-28 09:40:22 +0000497 /* Room for each char being written in octal, initial space and
Neil Booth6338b352003-04-23 22:44:06 +0000498 final quote and NUL. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000499 len = cpp_token_len (token);
Neil Booth93c803682000-10-28 17:59:06 +0000500 if (escape_it)
Neil Booth93c803682000-10-28 17:59:06 +0000501 len *= 4;
Neil Booth6338b352003-04-23 22:44:06 +0000502 len += 3;
Neil Booth93c803682000-10-28 17:59:06 +0000503
Neil Boothece54d52001-09-28 09:40:22 +0000504 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
Neil Booth93c803682000-10-28 17:59:06 +0000505 {
Neil Boothece54d52001-09-28 09:40:22 +0000506 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
Neil Booth8c3b2692001-09-30 10:03:11 +0000507 _cpp_extend_buff (pfile, &pfile->u_buff, len);
Neil Boothece54d52001-09-28 09:40:22 +0000508 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
Neil Booth93c803682000-10-28 17:59:06 +0000509 }
510
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000511 /* Leading white space? */
Neil Booth6338b352003-04-23 22:44:06 +0000512 if (dest - 1 != BUFF_FRONT (pfile->u_buff))
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000513 {
514 if (source == NULL)
515 source = token;
516 if (source->flags & PREV_WHITE)
517 *dest++ = ' ';
518 }
519 source = NULL;
Neil Booth93c803682000-10-28 17:59:06 +0000520
521 if (escape_it)
522 {
Neil Boothece54d52001-09-28 09:40:22 +0000523 _cpp_buff *buff = _cpp_get_buff (pfile, len);
524 unsigned char *buf = BUFF_FRONT (buff);
Geoffrey Keating47e20492005-03-12 10:44:06 +0000525 len = cpp_spell_token (pfile, token, buf, true) - buf;
Zack Weinbergdcc229e2002-03-14 18:17:18 +0000526 dest = cpp_quote_string (dest, buf, len);
Neil Boothece54d52001-09-28 09:40:22 +0000527 _cpp_release_buff (pfile, buff);
Neil Booth93c803682000-10-28 17:59:06 +0000528 }
529 else
Geoffrey Keating47e20492005-03-12 10:44:06 +0000530 dest = cpp_spell_token (pfile, token, dest, true);
Neil Booth93c803682000-10-28 17:59:06 +0000531
Neil Booth10676942003-04-22 19:28:00 +0000532 if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
Neil Booth93c803682000-10-28 17:59:06 +0000533 backslash_count++;
534 else
535 backslash_count = 0;
536 }
537
538 /* Ignore the final \ of invalid string literals. */
539 if (backslash_count & 1)
540 {
John David Anglin0527bc42003-11-01 22:56:54 +0000541 cpp_error (pfile, CPP_DL_WARNING,
Neil Boothebef4e82002-04-14 18:42:47 +0000542 "invalid string literal, ignoring final '\\'");
Neil Boothece54d52001-09-28 09:40:22 +0000543 dest--;
Neil Booth93c803682000-10-28 17:59:06 +0000544 }
545
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000546 /* Commit the memory, including NUL, and return the token. */
Neil Booth6338b352003-04-23 22:44:06 +0000547 *dest++ = '"';
Neil Boothece54d52001-09-28 09:40:22 +0000548 len = dest - BUFF_FRONT (pfile->u_buff);
549 BUFF_FRONT (pfile->u_buff) = dest + 1;
550 return new_string_token (pfile, dest - len, len);
Neil Booth93c803682000-10-28 17:59:06 +0000551}
552
Kazu Hiratada7d8302002-09-22 02:03:17 +0000553/* Try to paste two tokens. On success, return nonzero. In any
Neil Boothc9e7a602001-09-27 12:59:38 +0000554 case, PLHS is updated to point to the pasted token, which is
Dodji Seketeli828a7f72012-05-29 09:36:29 +0000555 guaranteed to not have the PASTE_LEFT flag set. LOCATION is
556 the virtual location used for error reporting. */
Neil Boothc9e7a602001-09-27 12:59:38 +0000557static bool
Dodji Seketeli828a7f72012-05-29 09:36:29 +0000558paste_tokens (cpp_reader *pfile, source_location location,
559 const cpp_token **plhs, const cpp_token *rhs)
Neil Boothd63eefb2000-11-20 23:59:26 +0000560{
Jakub Jelinekde000d22006-10-12 11:25:59 +0200561 unsigned char *buf, *end, *lhsend;
Tom Tromeyfca35e12007-05-02 19:33:44 +0000562 cpp_token *lhs;
Neil Boothc9e7a602001-09-27 12:59:38 +0000563 unsigned int len;
Neil Boothd63eefb2000-11-20 23:59:26 +0000564
Tom Tromeyfca35e12007-05-02 19:33:44 +0000565 len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000566 buf = (unsigned char *) alloca (len);
Tom Tromeyfca35e12007-05-02 19:33:44 +0000567 end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
Neil Boothd63eefb2000-11-20 23:59:26 +0000568
Neil Boothc9e7a602001-09-27 12:59:38 +0000569 /* Avoid comment headers, since they are still processed in stage 3.
570 It is simpler to insert a space here, rather than modifying the
571 lexer to ignore comments in some circumstances. Simply returning
572 false doesn't work, since we want to clear the PASTE_LEFT flag. */
Tom Tromeyfca35e12007-05-02 19:33:44 +0000573 if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
Neil Boothc9e7a602001-09-27 12:59:38 +0000574 *end++ = ' ';
Tom Tromeyf373b442007-11-01 18:20:48 +0000575 /* In one obscure case we might see padding here. */
576 if (rhs->type != CPP_PADDING)
577 end = cpp_spell_token (pfile, rhs, end, false);
Neil Booth26aea072003-04-19 00:22:51 +0000578 *end = '\n';
Neil Boothd63eefb2000-11-20 23:59:26 +0000579
Per Bothner40de9f72003-10-02 07:30:34 +0000580 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
Neil Booth26aea072003-04-19 00:22:51 +0000581 _cpp_clean_line (pfile);
Neil Boothd63eefb2000-11-20 23:59:26 +0000582
Neil Boothc9e7a602001-09-27 12:59:38 +0000583 /* Set pfile->cur_token as required by _cpp_lex_direct. */
584 pfile->cur_token = _cpp_temp_token (pfile);
Tom Tromeyfca35e12007-05-02 19:33:44 +0000585 lhs = _cpp_lex_direct (pfile);
Jakub Jelinekde000d22006-10-12 11:25:59 +0200586 if (pfile->buffer->cur != pfile->buffer->rlimit)
587 {
Tom Tromeyfca35e12007-05-02 19:33:44 +0000588 source_location saved_loc = lhs->src_loc;
589
Jakub Jelinekde000d22006-10-12 11:25:59 +0200590 _cpp_pop_buffer (pfile);
591 _cpp_backup_tokens (pfile, 1);
592 *lhsend = '\0';
Neil Boothd63eefb2000-11-20 23:59:26 +0000593
Tom Tromeyfca35e12007-05-02 19:33:44 +0000594 /* We have to remove the PASTE_LEFT flag from the old lhs, but
595 we want to keep the new location. */
596 *lhs = **plhs;
597 *plhs = lhs;
598 lhs->src_loc = saved_loc;
599 lhs->flags &= ~PASTE_LEFT;
600
Jakub Jelinekde000d22006-10-12 11:25:59 +0200601 /* Mandatory error for all apart from assembler. */
602 if (CPP_OPTION (pfile, lang) != CLK_ASM)
Dodji Seketeli828a7f72012-05-29 09:36:29 +0000603 cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
Jakub Jelinekde000d22006-10-12 11:25:59 +0200604 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
605 buf, cpp_token_as_text (pfile, rhs));
606 return false;
607 }
608
Tom Tromeyfca35e12007-05-02 19:33:44 +0000609 *plhs = lhs;
Jakub Jelinekde000d22006-10-12 11:25:59 +0200610 _cpp_pop_buffer (pfile);
611 return true;
Neil Boothd63eefb2000-11-20 23:59:26 +0000612}
613
Neil Boothd15a58c2002-01-03 18:32:55 +0000614/* Handles an arbitrarily long sequence of ## operators, with initial
615 operand LHS. This implementation is left-associative,
616 non-recursive, and finishes a paste before handling succeeding
617 ones. If a paste fails, we back up to the RHS of the failing ##
618 operator before pushing the context containing the result of prior
619 successful pastes, with the effect that the RHS appears in the
620 output stream after the pasted LHS normally. */
Neil Booth93c803682000-10-28 17:59:06 +0000621static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000622paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
Neil Booth93c803682000-10-28 17:59:06 +0000623{
Tom Tromey92582b72011-10-17 09:59:12 +0000624 const cpp_token *rhs = NULL;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000625 cpp_context *context = pfile->context;
Dodji Seketeli0ff2b8a2012-04-30 11:41:21 +0000626 source_location virt_loc = 0;
627
Dodji Seketeli828a7f72012-05-29 09:36:29 +0000628 /* We are expanding a macro and we must have been called on a token
629 that appears at the left hand side of a ## operator. */
630 if (macro_of_context (pfile->context) == NULL
631 || (!(lhs->flags & PASTE_LEFT)))
Dodji Seketeli0ff2b8a2012-04-30 11:41:21 +0000632 abort ();
633
634 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
635 /* The caller must have called consume_next_token_from_context
636 right before calling us. That has incremented the pointer to
637 the current virtual location. So it now points to the location
638 of the token that comes right after *LHS. We want the
639 resulting pasted token to have the location of the current
640 *LHS, though. */
641 virt_loc = context->c.mc->cur_virt_loc[-1];
Dodji Seketeli828a7f72012-05-29 09:36:29 +0000642 else
643 /* We are not tracking macro expansion. So the best virtual
644 location we can get here is the expansion point of the macro we
645 are currently expanding. */
646 virt_loc = pfile->invocation_location;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000647
Neil Booth93c803682000-10-28 17:59:06 +0000648 do
649 {
650 /* Take the token directly from the current context. We can do
651 this, because we are in the replacement list of either an
652 object-like macro, or a function-like macro with arguments
653 inserted. In either case, the constraints to #define
Neil Boothd63eefb2000-11-20 23:59:26 +0000654 guarantee we have at least one more token. */
Tom Tromey92582b72011-10-17 09:59:12 +0000655 if (context->tokens_kind == TOKENS_KIND_DIRECT)
Neil Booth82eda772002-06-04 13:07:06 +0000656 rhs = FIRST (context).token++;
Tom Tromey92582b72011-10-17 09:59:12 +0000657 else if (context->tokens_kind == TOKENS_KIND_INDIRECT)
Neil Booth82eda772002-06-04 13:07:06 +0000658 rhs = *FIRST (context).ptoken++;
Tom Tromey92582b72011-10-17 09:59:12 +0000659 else if (context->tokens_kind == TOKENS_KIND_EXTENDED)
660 {
661 /* So we are in presence of an extended token context, which
662 means that each token in this context has a virtual
663 location attached to it. So let's not forget to update
664 the pointer to the current virtual location of the
665 current token when we update the pointer to the current
666 token */
667
668 rhs = *FIRST (context).ptoken++;
669 /* context->c.mc must be non-null, as if we were not in a
670 macro context, context->tokens_kind could not be equal to
671 TOKENS_KIND_EXTENDED. */
672 context->c.mc->cur_virt_loc++;
673 }
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000674
675 if (rhs->type == CPP_PADDING)
Tom Tromeyf373b442007-11-01 18:20:48 +0000676 {
677 if (rhs->flags & PASTE_LEFT)
678 abort ();
679 }
Dodji Seketeli828a7f72012-05-29 09:36:29 +0000680 if (!paste_tokens (pfile, virt_loc, &lhs, rhs))
Jakub Jelinekde000d22006-10-12 11:25:59 +0200681 break;
Neil Booth93c803682000-10-28 17:59:06 +0000682 }
683 while (rhs->flags & PASTE_LEFT);
684
Neil Boothc9e7a602001-09-27 12:59:38 +0000685 /* Put the resulting token in its own context. */
Dodji Seketeli0ff2b8a2012-04-30 11:41:21 +0000686 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
687 {
688 source_location *virt_locs = NULL;
689 _cpp_buff *token_buf = tokens_buff_new (pfile, 1, &virt_locs);
690 tokens_buff_add_token (token_buf, virt_locs, lhs,
691 virt_loc, 0, NULL, 0);
692 push_extended_tokens_context (pfile, context->c.mc->macro_node,
693 token_buf, virt_locs,
694 (const cpp_token **)token_buf->base, 1);
695 }
696 else
697 _cpp_push_token_context (pfile, NULL, lhs, 1);
Neil Booth93c803682000-10-28 17:59:06 +0000698}
699
Neil Booth1ce676a2002-06-09 20:04:17 +0000700/* Returns TRUE if the number of arguments ARGC supplied in an
701 invocation of the MACRO referenced by NODE is valid. An empty
702 invocation to a macro with no parameters should pass ARGC as zero.
703
704 Note that MACRO cannot necessarily be deduced from NODE, in case
705 NODE was redefined whilst collecting arguments. */
706bool
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000707_cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
Neil Booth1ce676a2002-06-09 20:04:17 +0000708{
709 if (argc == macro->paramc)
710 return true;
711
712 if (argc < macro->paramc)
713 {
714 /* As an extension, a rest argument is allowed to not appear in
715 the invocation at all.
716 e.g. #define debug(format, args...) something
717 debug("string");
718
719 This is exactly the same as if there had been an empty rest
720 argument - debug("string", ). */
721
722 if (argc + 1 == macro->paramc && macro->variadic)
723 {
724 if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
John David Anglin0527bc42003-11-01 22:56:54 +0000725 cpp_error (pfile, CPP_DL_PEDWARN,
Neil Booth1ce676a2002-06-09 20:04:17 +0000726 "ISO C99 requires rest arguments to be used");
727 return true;
728 }
729
John David Anglin0527bc42003-11-01 22:56:54 +0000730 cpp_error (pfile, CPP_DL_ERROR,
Neil Booth1ce676a2002-06-09 20:04:17 +0000731 "macro \"%s\" requires %u arguments, but only %u given",
732 NODE_NAME (node), macro->paramc, argc);
733 }
734 else
John David Anglin0527bc42003-11-01 22:56:54 +0000735 cpp_error (pfile, CPP_DL_ERROR,
Neil Booth1ce676a2002-06-09 20:04:17 +0000736 "macro \"%s\" passed %u arguments, but takes just %u",
737 NODE_NAME (node), argc, macro->paramc);
738
739 return false;
740}
741
Neil Boothd15a58c2002-01-03 18:32:55 +0000742/* Reads and returns the arguments to a function-like macro
743 invocation. Assumes the opening parenthesis has been processed.
744 If there is an error, emits an appropriate diagnostic and returns
745 NULL. Each argument is terminated by a CPP_EOF token, for the
Jakub Jelinek765d6002008-01-25 10:01:27 +0100746 future benefit of expand_arg(). If there are any deferred
747 #pragma directives among macro arguments, store pointers to the
Tom Tromey92582b72011-10-17 09:59:12 +0000748 CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.
749
750 What is returned is the buffer that contains the memory allocated
751 to hold the macro arguments. NODE is the name of the macro this
752 function is dealing with. If NUM_ARGS is non-NULL, *NUM_ARGS is
753 set to the actual number of macro arguments allocated in the
754 returned buffer. */
Neil Boothb8af0ca2001-09-26 17:52:50 +0000755static _cpp_buff *
Jakub Jelinek765d6002008-01-25 10:01:27 +0100756collect_args (cpp_reader *pfile, const cpp_hashnode *node,
Tom Tromey92582b72011-10-17 09:59:12 +0000757 _cpp_buff **pragma_buff, unsigned *num_args)
Neil Booth93c803682000-10-28 17:59:06 +0000758{
Neil Boothb8af0ca2001-09-26 17:52:50 +0000759 _cpp_buff *buff, *base_buff;
760 cpp_macro *macro;
761 macro_arg *args, *arg;
762 const cpp_token *token;
763 unsigned int argc;
Tom Tromey92582b72011-10-17 09:59:12 +0000764 source_location virt_loc;
765 bool track_macro_expansion_p = CPP_OPTION (pfile, track_macro_expansion);
766 unsigned num_args_alloced = 0;
Neil Booth93c803682000-10-28 17:59:06 +0000767
Neil Boothb8af0ca2001-09-26 17:52:50 +0000768 macro = node->value.macro;
769 if (macro->paramc)
770 argc = macro->paramc;
771 else
772 argc = 1;
Tom Tromey92582b72011-10-17 09:59:12 +0000773
774#define DEFAULT_NUM_TOKENS_PER_MACRO_ARG 50
775#define ARG_TOKENS_EXTENT 1000
776
777 buff = _cpp_get_buff (pfile, argc * (DEFAULT_NUM_TOKENS_PER_MACRO_ARG
778 * sizeof (cpp_token *)
Neil Boothb8af0ca2001-09-26 17:52:50 +0000779 + sizeof (macro_arg)));
780 base_buff = buff;
781 args = (macro_arg *) buff->base;
782 memset (args, 0, argc * sizeof (macro_arg));
Neil Boothece54d52001-09-28 09:40:22 +0000783 buff->cur = (unsigned char *) &args[argc];
Neil Boothb8af0ca2001-09-26 17:52:50 +0000784 arg = args, argc = 0;
Neil Booth93c803682000-10-28 17:59:06 +0000785
Neil Boothb8af0ca2001-09-26 17:52:50 +0000786 /* Collect the tokens making up each argument. We don't yet know
787 how many arguments have been supplied, whether too many or too
788 few. Hence the slightly bizarre usage of "argc" and "arg". */
789 do
Neil Booth93c803682000-10-28 17:59:06 +0000790 {
Neil Boothb8af0ca2001-09-26 17:52:50 +0000791 unsigned int paren_depth = 0;
792 unsigned int ntokens = 0;
Tom Tromey92582b72011-10-17 09:59:12 +0000793 unsigned virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
794 num_args_alloced++;
Neil Boothb8af0ca2001-09-26 17:52:50 +0000795
Neil Booth93c803682000-10-28 17:59:06 +0000796 argc++;
Neil Boothb8af0ca2001-09-26 17:52:50 +0000797 arg->first = (const cpp_token **) buff->cur;
Tom Tromey92582b72011-10-17 09:59:12 +0000798 if (track_macro_expansion_p)
799 {
800 virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
801 arg->virt_locs = XNEWVEC (source_location,
802 virt_locs_capacity);
803 }
Neil Booth93c803682000-10-28 17:59:06 +0000804
Neil Boothb8af0ca2001-09-26 17:52:50 +0000805 for (;;)
806 {
807 /* Require space for 2 new tokens (including a CPP_EOF). */
Neil Boothece54d52001-09-28 09:40:22 +0000808 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
Neil Boothb8af0ca2001-09-26 17:52:50 +0000809 {
Neil Booth8c3b2692001-09-30 10:03:11 +0000810 buff = _cpp_append_extend_buff (pfile, buff,
Tom Tromey92582b72011-10-17 09:59:12 +0000811 ARG_TOKENS_EXTENT
812 * sizeof (cpp_token *));
Neil Boothb8af0ca2001-09-26 17:52:50 +0000813 arg->first = (const cpp_token **) buff->cur;
814 }
Tom Tromey92582b72011-10-17 09:59:12 +0000815 if (track_macro_expansion_p
816 && (ntokens + 2 > virt_locs_capacity))
817 {
818 virt_locs_capacity += ARG_TOKENS_EXTENT;
819 arg->virt_locs = XRESIZEVEC (source_location,
820 arg->virt_locs,
821 virt_locs_capacity);
822 }
Neil Booth93c803682000-10-28 17:59:06 +0000823
Tom Tromey92582b72011-10-17 09:59:12 +0000824 token = cpp_get_token_1 (pfile, &virt_loc);
Neil Boothb8af0ca2001-09-26 17:52:50 +0000825
826 if (token->type == CPP_PADDING)
827 {
828 /* Drop leading padding. */
829 if (ntokens == 0)
830 continue;
831 }
832 else if (token->type == CPP_OPEN_PAREN)
833 paren_depth++;
834 else if (token->type == CPP_CLOSE_PAREN)
835 {
836 if (paren_depth-- == 0)
837 break;
838 }
839 else if (token->type == CPP_COMMA)
840 {
841 /* A comma does not terminate an argument within
842 parentheses or as part of a variable argument. */
843 if (paren_depth == 0
844 && ! (macro->variadic && argc == macro->paramc))
845 break;
846 }
847 else if (token->type == CPP_EOF
848 || (token->type == CPP_HASH && token->flags & BOL))
849 break;
Jakub Jelinek765d6002008-01-25 10:01:27 +0100850 else if (token->type == CPP_PRAGMA)
851 {
852 cpp_token *newtok = _cpp_temp_token (pfile);
853
854 /* CPP_PRAGMA token lives in directive_result, which will
855 be overwritten on the next directive. */
856 *newtok = *token;
857 token = newtok;
858 do
859 {
860 if (*pragma_buff == NULL
861 || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
862 {
863 _cpp_buff *next;
864 if (*pragma_buff == NULL)
865 *pragma_buff
866 = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
867 else
868 {
869 next = *pragma_buff;
870 *pragma_buff
871 = _cpp_get_buff (pfile,
872 (BUFF_FRONT (*pragma_buff)
873 - (*pragma_buff)->base) * 2);
874 (*pragma_buff)->next = next;
875 }
876 }
877 *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
878 BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
879 if (token->type == CPP_PRAGMA_EOL)
880 break;
Tom Tromey92582b72011-10-17 09:59:12 +0000881 token = cpp_get_token_1 (pfile, &virt_loc);
Jakub Jelinek765d6002008-01-25 10:01:27 +0100882 }
883 while (token->type != CPP_EOF);
884
885 /* In deferred pragmas parsing_args and prevent_expansion
886 had been changed, reset it. */
887 pfile->state.parsing_args = 2;
888 pfile->state.prevent_expansion = 1;
889
890 if (token->type == CPP_EOF)
891 break;
892 else
893 continue;
894 }
Tom Tromey92582b72011-10-17 09:59:12 +0000895 set_arg_token (arg, token, virt_loc,
896 ntokens, MACRO_ARG_TOKEN_NORMAL,
897 CPP_OPTION (pfile, track_macro_expansion));
898 ntokens++;
Neil Boothb8af0ca2001-09-26 17:52:50 +0000899 }
900
901 /* Drop trailing padding. */
902 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
903 ntokens--;
904
905 arg->count = ntokens;
Tom Tromey92582b72011-10-17 09:59:12 +0000906 set_arg_token (arg, &pfile->eof, pfile->eof.src_loc,
907 ntokens, MACRO_ARG_TOKEN_NORMAL,
908 CPP_OPTION (pfile, track_macro_expansion));
Neil Boothb8af0ca2001-09-26 17:52:50 +0000909
910 /* Terminate the argument. Excess arguments loop back and
911 overwrite the final legitimate argument, before failing. */
912 if (argc <= macro->paramc)
913 {
Neil Boothece54d52001-09-28 09:40:22 +0000914 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
Neil Boothb8af0ca2001-09-26 17:52:50 +0000915 if (argc != macro->paramc)
916 arg++;
917 }
Neil Booth93c803682000-10-28 17:59:06 +0000918 }
Neil Boothe808ec92002-02-27 07:24:53 +0000919 while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
Neil Booth93c803682000-10-28 17:59:06 +0000920
Neil Boothe808ec92002-02-27 07:24:53 +0000921 if (token->type == CPP_EOF)
Neil Booth93c803682000-10-28 17:59:06 +0000922 {
Neil Boothece54d52001-09-28 09:40:22 +0000923 /* We still need the CPP_EOF to end directives, and to end
924 pre-expansion of a macro argument. Step back is not
925 unconditional, since we don't want to return a CPP_EOF to our
926 callers at the end of an -include-d file. */
Neil Boothe808ec92002-02-27 07:24:53 +0000927 if (pfile->context->prev || pfile->state.in_directive)
Neil Boothb8af0ca2001-09-26 17:52:50 +0000928 _cpp_backup_tokens (pfile, 1);
John David Anglin0527bc42003-11-01 22:56:54 +0000929 cpp_error (pfile, CPP_DL_ERROR,
Neil Boothebef4e82002-04-14 18:42:47 +0000930 "unterminated argument list invoking macro \"%s\"",
Neil Bootha28c50352001-05-16 22:02:09 +0000931 NODE_NAME (node));
Neil Booth93c803682000-10-28 17:59:06 +0000932 }
Neil Booth1ce676a2002-06-09 20:04:17 +0000933 else
Neil Booth93c803682000-10-28 17:59:06 +0000934 {
Neil Booth1ce676a2002-06-09 20:04:17 +0000935 /* A single empty argument is counted as no argument. */
936 if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
937 argc = 0;
938 if (_cpp_arguments_ok (pfile, macro, node, argc))
Neil Booth58551c22002-08-06 20:35:46 +0000939 {
940 /* GCC has special semantics for , ## b where b is a varargs
941 parameter: we remove the comma if b was omitted entirely.
942 If b was merely an empty argument, the comma is retained.
943 If the macro takes just one (varargs) parameter, then we
944 retain the comma only if we are standards conforming.
945
946 If FIRST is NULL replace_args () swallows the comma. */
947 if (macro->variadic && (argc < macro->paramc
948 || (argc == 1 && args[0].count == 0
949 && !CPP_OPTION (pfile, std))))
950 args[macro->paramc - 1].first = NULL;
Tom Tromey92582b72011-10-17 09:59:12 +0000951 if (num_args)
952 *num_args = num_args_alloced;
Neil Booth58551c22002-08-06 20:35:46 +0000953 return base_buff;
954 }
Neil Booth93c803682000-10-28 17:59:06 +0000955 }
956
Neil Booth1ce676a2002-06-09 20:04:17 +0000957 /* An error occurred. */
Neil Boothb8af0ca2001-09-26 17:52:50 +0000958 _cpp_release_buff (pfile, base_buff);
959 return NULL;
Neil Booth93c803682000-10-28 17:59:06 +0000960}
961
Neil Boothd6da8362001-10-08 06:15:14 +0000962/* Search for an opening parenthesis to the macro of NODE, in such a
963 way that, if none is found, we don't lose the information in any
964 intervening padding tokens. If we find the parenthesis, collect
Jakub Jelinek765d6002008-01-25 10:01:27 +0100965 the arguments and return the buffer containing them. PRAGMA_BUFF
Tom Tromey92582b72011-10-17 09:59:12 +0000966 argument is the same as in collect_args. If NUM_ARGS is non-NULL,
967 *NUM_ARGS is set to the number of arguments contained in the
968 returned buffer. */
Neil Boothd6da8362001-10-08 06:15:14 +0000969static _cpp_buff *
Jakub Jelinek765d6002008-01-25 10:01:27 +0100970funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
Tom Tromey92582b72011-10-17 09:59:12 +0000971 _cpp_buff **pragma_buff, unsigned *num_args)
Neil Booth93c803682000-10-28 17:59:06 +0000972{
Neil Boothd6da8362001-10-08 06:15:14 +0000973 const cpp_token *token, *padding = NULL;
Neil Booth93c803682000-10-28 17:59:06 +0000974
Neil Boothd6da8362001-10-08 06:15:14 +0000975 for (;;)
Neil Boothbdcbe492001-09-13 20:05:17 +0000976 {
Neil Boothd6da8362001-10-08 06:15:14 +0000977 token = cpp_get_token (pfile);
978 if (token->type != CPP_PADDING)
979 break;
980 if (padding == NULL
981 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
982 padding = token;
Neil Boothbdcbe492001-09-13 20:05:17 +0000983 }
Neil Booth93c803682000-10-28 17:59:06 +0000984
Neil Boothd6da8362001-10-08 06:15:14 +0000985 if (token->type == CPP_OPEN_PAREN)
Neil Booth93c803682000-10-28 17:59:06 +0000986 {
Neil Boothd6da8362001-10-08 06:15:14 +0000987 pfile->state.parsing_args = 2;
Tom Tromey92582b72011-10-17 09:59:12 +0000988 return collect_args (pfile, node, pragma_buff, num_args);
Neil Booth93c803682000-10-28 17:59:06 +0000989 }
990
Neil Booth9ac3b1b2002-04-21 16:17:55 +0000991 /* CPP_EOF can be the end of macro arguments, or the end of the
992 file. We mustn't back up over the latter. Ugh. */
993 if (token->type != CPP_EOF || token == &pfile->eof)
994 {
995 /* Back up. We may have skipped padding, in which case backing
996 up more than one token when expanding macros is in general
997 too difficult. We re-insert it in its own context. */
998 _cpp_backup_tokens (pfile, 1);
999 if (padding)
Richard Hendersonbc4071d2006-01-04 08:33:38 -08001000 _cpp_push_token_context (pfile, NULL, padding, 1);
Neil Booth9ac3b1b2002-04-21 16:17:55 +00001001 }
Neil Boothd6da8362001-10-08 06:15:14 +00001002
1003 return NULL;
Neil Booth93c803682000-10-28 17:59:06 +00001004}
1005
Joseph Myersaa508502009-04-19 18:10:56 +01001006/* Return the real number of tokens in the expansion of MACRO. */
1007static inline unsigned int
1008macro_real_token_count (const cpp_macro *macro)
1009{
1010 unsigned int i;
1011 if (__builtin_expect (!macro->extra_tokens, true))
1012 return macro->count;
1013 for (i = 0; i < macro->count; i++)
1014 if (macro->exp.tokens[i].type == CPP_PASTE)
1015 return i;
1016 abort ();
1017}
1018
Neil Boothd15a58c2002-01-03 18:32:55 +00001019/* Push the context of a macro with hash entry NODE onto the context
1020 stack. If we can successfully expand the macro, we push a context
1021 containing its yet-to-be-rescanned replacement list and return one.
Tom Tromey92582b72011-10-17 09:59:12 +00001022 If there were additionally any unexpanded deferred #pragma
1023 directives among macro arguments, push another context containing
1024 the pragma tokens before the yet-to-be-rescanned replacement list
1025 and return two. Otherwise, we don't push a context and return
1026 zero. LOCATION is the location of the expansion point of the
1027 macro. */
Neil Booth93c803682000-10-28 17:59:06 +00001028static int
Jakub Jelinek765d6002008-01-25 10:01:27 +01001029enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
Tom Tromey92582b72011-10-17 09:59:12 +00001030 const cpp_token *result, source_location location)
Neil Booth93c803682000-10-28 17:59:06 +00001031{
Neil Boothd15a58c2002-01-03 18:32:55 +00001032 /* The presence of a macro invalidates a file's controlling macro. */
Neil Booth644edda2001-10-02 12:57:24 +00001033 pfile->mi_valid = false;
1034
Neil Booth36207112002-05-24 19:26:30 +00001035 pfile->state.angled_headers = false;
1036
Dodji Seketeli828a7f72012-05-29 09:36:29 +00001037 /* From here to when we push the context for the macro later down
1038 this function, we need to flag the fact that we are about to
1039 expand a macro. This is useful when -ftrack-macro-expansion is
1040 turned off. In that case, we need to record the location of the
1041 expansion point of the top-most macro we are about to to expand,
1042 into pfile->invocation_location. But we must not record any such
1043 location once the process of expanding the macro starts; that is,
1044 we must not do that recording between now and later down this
1045 function where set this flag to FALSE. */
1046 pfile->about_to_expand_macro_p = true;
1047
Joseph Myers93d45d92008-04-02 20:42:53 +01001048 if ((node->flags & NODE_BUILTIN) && !(node->flags & NODE_USED))
1049 {
1050 node->flags |= NODE_USED;
Jakub Jelinek8e680db2010-06-11 20:37:34 +02001051 if ((!pfile->cb.user_builtin_macro
1052 || !pfile->cb.user_builtin_macro (pfile, node))
1053 && pfile->cb.used_define)
Joseph Myers93d45d92008-04-02 20:42:53 +01001054 pfile->cb.used_define (pfile, pfile->directive_line, node);
1055 }
1056
Neil Boothd15a58c2002-01-03 18:32:55 +00001057 /* Handle standard macros. */
Neil Booth644edda2001-10-02 12:57:24 +00001058 if (! (node->flags & NODE_BUILTIN))
Neil Booth93c803682000-10-28 17:59:06 +00001059 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001060 cpp_macro *macro = node->value.macro;
Jakub Jelinek765d6002008-01-25 10:01:27 +01001061 _cpp_buff *pragma_buff = NULL;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001062
Neil Boothd6da8362001-10-08 06:15:14 +00001063 if (macro->fun_like)
1064 {
1065 _cpp_buff *buff;
Tom Tromey92582b72011-10-17 09:59:12 +00001066 unsigned num_args = 0;
Neil Boothd6da8362001-10-08 06:15:14 +00001067
1068 pfile->state.prevent_expansion++;
1069 pfile->keep_tokens++;
1070 pfile->state.parsing_args = 1;
Tom Tromey92582b72011-10-17 09:59:12 +00001071 buff = funlike_invocation_p (pfile, node, &pragma_buff,
1072 &num_args);
Neil Boothd6da8362001-10-08 06:15:14 +00001073 pfile->state.parsing_args = 0;
1074 pfile->keep_tokens--;
1075 pfile->state.prevent_expansion--;
1076
1077 if (buff == NULL)
1078 {
1079 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
Simon Baldwin87cf0652010-04-07 17:18:10 +00001080 cpp_warning (pfile, CPP_W_TRADITIONAL,
Neil Boothd6da8362001-10-08 06:15:14 +00001081 "function-like macro \"%s\" must be used with arguments in traditional C",
Simon Baldwin87cf0652010-04-07 17:18:10 +00001082 NODE_NAME (node));
Neil Boothd6da8362001-10-08 06:15:14 +00001083
Jakub Jelinek765d6002008-01-25 10:01:27 +01001084 if (pragma_buff)
1085 _cpp_release_buff (pfile, pragma_buff);
1086
Dodji Seketeli828a7f72012-05-29 09:36:29 +00001087 pfile->about_to_expand_macro_p = false;
Neil Boothd6da8362001-10-08 06:15:14 +00001088 return 0;
1089 }
1090
Neil Boothe808ec92002-02-27 07:24:53 +00001091 if (macro->paramc > 0)
Tom Tromey92582b72011-10-17 09:59:12 +00001092 replace_args (pfile, node, macro,
1093 (macro_arg *) buff->base,
1094 location);
1095 /* Free the memory used by the arguments of this
1096 function-like macro. This memory has been allocated by
1097 funlike_invocation_p and by replace_args. */
1098 delete_macro_args (buff, num_args);
Neil Boothd6da8362001-10-08 06:15:14 +00001099 }
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001100
1101 /* Disable the macro within its expansion. */
Neil Booth644edda2001-10-02 12:57:24 +00001102 node->flags |= NODE_DISABLED;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001103
Joseph Myers93d45d92008-04-02 20:42:53 +01001104 if (!(node->flags & NODE_USED))
1105 {
1106 node->flags |= NODE_USED;
1107 if (pfile->cb.used_define)
1108 pfile->cb.used_define (pfile, pfile->directive_line, node);
1109 }
1110
Arnaud Charlet3de8a542009-11-20 08:18:16 +00001111 if (pfile->cb.used)
Tom Tromey92582b72011-10-17 09:59:12 +00001112 pfile->cb.used (pfile, location, node);
Arnaud Charlet3de8a542009-11-20 08:18:16 +00001113
Neil Bootha69cbaa2002-07-23 22:57:49 +00001114 macro->used = 1;
1115
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001116 if (macro->paramc == 0)
Tom Tromey92582b72011-10-17 09:59:12 +00001117 {
1118 if (CPP_OPTION (pfile, track_macro_expansion))
1119 {
1120 unsigned int i, count = macro->count;
1121 const cpp_token *src = macro->exp.tokens;
1122 const struct line_map *map;
1123 source_location *virt_locs = NULL;
1124 _cpp_buff *macro_tokens =
1125 tokens_buff_new (pfile, count, &virt_locs);
1126
1127 /* Create a macro map to record the locations of the
1128 tokens that are involved in the expansion. LOCATION
1129 is the location of the macro expansion point. */
1130 map = linemap_enter_macro (pfile->line_table,
1131 node, location, count);
1132 for (i = 0; i < count; ++i)
1133 {
1134 tokens_buff_add_token (macro_tokens, virt_locs,
1135 src, src->src_loc,
1136 src->src_loc, map, i);
1137 ++src;
1138 }
1139 push_extended_tokens_context (pfile, node,
1140 macro_tokens,
1141 virt_locs,
1142 (const cpp_token **)
1143 macro_tokens->base,
1144 count);
Tom Tromey64a1a422011-10-17 09:59:52 +00001145 num_macro_tokens_counter += count;
Tom Tromey92582b72011-10-17 09:59:12 +00001146 }
1147 else
Tom Tromey64a1a422011-10-17 09:59:52 +00001148 {
1149 unsigned tokens_count = macro_real_token_count (macro);
1150 _cpp_push_token_context (pfile, node, macro->exp.tokens,
1151 tokens_count);
1152 num_macro_tokens_counter += tokens_count;
1153 }
Tom Tromey92582b72011-10-17 09:59:12 +00001154 }
Neil Booth644edda2001-10-02 12:57:24 +00001155
Jakub Jelinek765d6002008-01-25 10:01:27 +01001156 if (pragma_buff)
1157 {
1158 if (!pfile->state.in_directive)
1159 _cpp_push_token_context (pfile, NULL,
1160 padding_token (pfile, result), 1);
1161 do
1162 {
Tom Tromey64a1a422011-10-17 09:59:52 +00001163 unsigned tokens_count;
Jakub Jelinek765d6002008-01-25 10:01:27 +01001164 _cpp_buff *tail = pragma_buff->next;
1165 pragma_buff->next = NULL;
Tom Tromey64a1a422011-10-17 09:59:52 +00001166 tokens_count = ((const cpp_token **) BUFF_FRONT (pragma_buff)
1167 - (const cpp_token **) pragma_buff->base);
Jakub Jelinek765d6002008-01-25 10:01:27 +01001168 push_ptoken_context (pfile, NULL, pragma_buff,
1169 (const cpp_token **) pragma_buff->base,
Tom Tromey64a1a422011-10-17 09:59:52 +00001170 tokens_count);
Jakub Jelinek765d6002008-01-25 10:01:27 +01001171 pragma_buff = tail;
Tom Tromey64a1a422011-10-17 09:59:52 +00001172 if (!CPP_OPTION (pfile, track_macro_expansion))
1173 num_macro_tokens_counter += tokens_count;
1174
Jakub Jelinek765d6002008-01-25 10:01:27 +01001175 }
1176 while (pragma_buff != NULL);
Dodji Seketeli828a7f72012-05-29 09:36:29 +00001177 pfile->about_to_expand_macro_p = false;
Jakub Jelinek765d6002008-01-25 10:01:27 +01001178 return 2;
1179 }
1180
Dodji Seketeli828a7f72012-05-29 09:36:29 +00001181 pfile->about_to_expand_macro_p = false;
Neil Booth644edda2001-10-02 12:57:24 +00001182 return 1;
Neil Booth93c803682000-10-28 17:59:06 +00001183 }
Neil Booth644edda2001-10-02 12:57:24 +00001184
Dodji Seketeli828a7f72012-05-29 09:36:29 +00001185 pfile->about_to_expand_macro_p = false;
Neil Boothd15a58c2002-01-03 18:32:55 +00001186 /* Handle built-in macros and the _Pragma operator. */
Neil Booth644edda2001-10-02 12:57:24 +00001187 return builtin_macro (pfile, node);
Zack Weinberg711b8822000-07-18 00:59:49 +00001188}
1189
Tom Tromey92582b72011-10-17 09:59:12 +00001190/* De-allocate the memory used by BUFF which is an array of instances
1191 of macro_arg. NUM_ARGS is the number of instances of macro_arg
1192 present in BUFF. */
1193static void
1194delete_macro_args (_cpp_buff *buff, unsigned num_args)
1195{
1196 macro_arg *macro_args;
1197 unsigned i;
1198
1199 if (buff == NULL)
1200 return;
1201
1202 macro_args = (macro_arg *) buff->base;
1203
1204 /* Walk instances of macro_arg to free their expanded tokens as well
1205 as their macro_arg::virt_locs members. */
1206 for (i = 0; i < num_args; ++i)
1207 {
1208 if (macro_args[i].expanded)
1209 {
1210 free (macro_args[i].expanded);
1211 macro_args[i].expanded = NULL;
1212 }
1213 if (macro_args[i].virt_locs)
1214 {
1215 free (macro_args[i].virt_locs);
1216 macro_args[i].virt_locs = NULL;
1217 }
1218 if (macro_args[i].expanded_virt_locs)
1219 {
1220 free (macro_args[i].expanded_virt_locs);
1221 macro_args[i].expanded_virt_locs = NULL;
1222 }
1223 }
1224 _cpp_free_buff (buff);
1225}
1226
1227/* Set the INDEXth token of the macro argument ARG. TOKEN is the token
1228 to set, LOCATION is its virtual location. "Virtual" location means
Joseph Myers7d9641c2012-05-29 15:53:50 +01001229 the location that encodes loci across macro expansion. Otherwise
Tom Tromey92582b72011-10-17 09:59:12 +00001230 it has to be TOKEN->SRC_LOC. KIND is the kind of tokens the
1231 argument ARG is supposed to contain. Note that ARG must be
1232 tailored so that it has enough room to contain INDEX + 1 numbers of
1233 tokens, at least. */
1234static void
1235set_arg_token (macro_arg *arg, const cpp_token *token,
1236 source_location location, size_t index,
1237 enum macro_arg_token_kind kind,
1238 bool track_macro_exp_p)
1239{
1240 const cpp_token **token_ptr;
1241 source_location *loc = NULL;
1242
1243 token_ptr =
1244 arg_token_ptr_at (arg, index, kind,
1245 track_macro_exp_p ? &loc : NULL);
1246 *token_ptr = token;
1247
1248 if (loc != NULL)
1249 {
1250#ifdef ENABLE_CHECKING
1251 if (kind == MACRO_ARG_TOKEN_STRINGIFIED
1252 || !track_macro_exp_p)
1253 /* We can't set the location of a stringified argument
1254 token and we can't set any location if we aren't tracking
1255 macro expansion locations. */
1256 abort ();
1257#endif
1258 *loc = location;
1259 }
1260}
1261
1262/* Get the pointer to the location of the argument token of the
1263 function-like macro argument ARG. This function must be called
1264 only when we -ftrack-macro-expansion is on. */
1265static const source_location *
1266get_arg_token_location (const macro_arg *arg,
1267 enum macro_arg_token_kind kind)
1268{
1269 const source_location *loc = NULL;
1270 const cpp_token **token_ptr =
1271 arg_token_ptr_at (arg, 0, kind, (source_location **) &loc);
1272
1273 if (token_ptr == NULL)
1274 return NULL;
1275
1276 return loc;
1277}
1278
1279/* Return the pointer to the INDEXth token of the macro argument ARG.
1280 KIND specifies the kind of token the macro argument ARG contains.
1281 If VIRT_LOCATION is non NULL, *VIRT_LOCATION is set to the address
1282 of the virtual location of the returned token if the
1283 -ftrack-macro-expansion flag is on; otherwise, it's set to the
1284 spelling location of the returned token. */
1285static const cpp_token **
1286arg_token_ptr_at (const macro_arg *arg, size_t index,
1287 enum macro_arg_token_kind kind,
1288 source_location **virt_location)
1289{
1290 const cpp_token **tokens_ptr = NULL;
1291
1292 switch (kind)
1293 {
1294 case MACRO_ARG_TOKEN_NORMAL:
1295 tokens_ptr = arg->first;
1296 break;
1297 case MACRO_ARG_TOKEN_STRINGIFIED:
1298 tokens_ptr = (const cpp_token **) &arg->stringified;
1299 break;
1300 case MACRO_ARG_TOKEN_EXPANDED:
1301 tokens_ptr = arg->expanded;
1302 break;
1303 }
1304
1305 if (tokens_ptr == NULL)
1306 /* This can happen for e.g, an empty token argument to a
1307 funtion-like macro. */
1308 return tokens_ptr;
1309
1310 if (virt_location)
1311 {
1312 if (kind == MACRO_ARG_TOKEN_NORMAL)
1313 *virt_location = &arg->virt_locs[index];
1314 else if (kind == MACRO_ARG_TOKEN_EXPANDED)
1315 *virt_location = &arg->expanded_virt_locs[index];
1316 else if (kind == MACRO_ARG_TOKEN_STRINGIFIED)
1317 *virt_location =
1318 (source_location *) &tokens_ptr[index]->src_loc;
1319 }
1320 return &tokens_ptr[index];
1321}
1322
1323/* Initialize an iterator so that it iterates over the tokens of a
1324 function-like macro argument. KIND is the kind of tokens we want
1325 ITER to iterate over. TOKEN_PTR points the first token ITER will
1326 iterate over. */
1327static void
1328macro_arg_token_iter_init (macro_arg_token_iter *iter,
1329 bool track_macro_exp_p,
1330 enum macro_arg_token_kind kind,
1331 const macro_arg *arg,
1332 const cpp_token **token_ptr)
1333{
1334 iter->track_macro_exp_p = track_macro_exp_p;
1335 iter->kind = kind;
1336 iter->token_ptr = token_ptr;
Dodji Seketelid17687f2011-10-18 08:44:49 +00001337 /* Unconditionally initialize this so that the compiler doesn't warn
1338 about iter->location_ptr being possibly uninitialized later after
1339 this code has been inlined somewhere. */
1340 iter->location_ptr = NULL;
Tom Tromey92582b72011-10-17 09:59:12 +00001341 if (track_macro_exp_p)
1342 iter->location_ptr = get_arg_token_location (arg, kind);
1343#ifdef ENABLE_CHECKING
1344 iter->num_forwards = 0;
1345 if (track_macro_exp_p
1346 && token_ptr != NULL
1347 && iter->location_ptr == NULL)
1348 abort ();
1349#endif
1350}
1351
1352/* Move the iterator one token forward. Note that if IT was
1353 initialized on an argument that has a stringified token, moving it
Joseph Myers7d9641c2012-05-29 15:53:50 +01001354 forward doesn't make sense as a stringified token is essentially one
Tom Tromey92582b72011-10-17 09:59:12 +00001355 string. */
1356static void
1357macro_arg_token_iter_forward (macro_arg_token_iter *it)
1358{
1359 switch (it->kind)
1360 {
1361 case MACRO_ARG_TOKEN_NORMAL:
1362 case MACRO_ARG_TOKEN_EXPANDED:
1363 it->token_ptr++;
1364 if (it->track_macro_exp_p)
1365 it->location_ptr++;
1366 break;
1367 case MACRO_ARG_TOKEN_STRINGIFIED:
1368#ifdef ENABLE_CHECKING
1369 if (it->num_forwards > 0)
1370 abort ();
1371#endif
1372 break;
1373 }
1374
1375#ifdef ENABLE_CHECKING
1376 it->num_forwards++;
1377#endif
1378}
1379
1380/* Return the token pointed to by the iterator. */
1381static const cpp_token *
1382macro_arg_token_iter_get_token (const macro_arg_token_iter *it)
1383{
1384#ifdef ENABLE_CHECKING
1385 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1386 && it->num_forwards > 0)
1387 abort ();
1388#endif
1389 if (it->token_ptr == NULL)
1390 return NULL;
1391 return *it->token_ptr;
1392}
1393
1394/* Return the location of the token pointed to by the iterator.*/
1395static source_location
1396macro_arg_token_iter_get_location (const macro_arg_token_iter *it)
1397{
1398#ifdef ENABLE_CHECKING
1399 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1400 && it->num_forwards > 0)
1401 abort ();
1402#endif
1403 if (it->track_macro_exp_p)
1404 return *it->location_ptr;
1405 else
1406 return (*it->token_ptr)->src_loc;
1407}
1408
1409/* Return the index of a token [resulting from macro expansion] inside
1410 the total list of tokens resulting from a given macro
1411 expansion. The index can be different depending on whether if we
1412 want each tokens resulting from function-like macro arguments
1413 expansion to have a different location or not.
1414
1415 E.g, consider this function-like macro:
1416
1417 #define M(x) x - 3
1418
1419 Then consider us "calling" it (and thus expanding it) like:
1420
1421 M(1+4)
1422
1423 It will be expanded into:
1424
1425 1+4-3
1426
1427 Let's consider the case of the token '4'.
1428
1429 Its index can be 2 (it's the third token of the set of tokens
1430 resulting from the expansion) or it can be 0 if we consider that
1431 all tokens resulting from the expansion of the argument "1+2" have
1432 the same index, which is 0. In this later case, the index of token
1433 '-' would then be 1 and the index of token '3' would be 2.
1434
1435 The later case is useful to use less memory e.g, for the case of
1436 the user using the option -ftrack-macro-expansion=1.
1437
1438 ABSOLUTE_TOKEN_INDEX is the index of the macro argument token we
1439 are interested in. CUR_REPLACEMENT_TOKEN is the token of the macro
1440 parameter (inside the macro replacement list) that corresponds to
1441 the macro argument for which ABSOLUTE_TOKEN_INDEX is a token index
1442 of.
1443
1444 If we refer to the example above, for the '4' argument token,
1445 ABSOLUTE_TOKEN_INDEX would be set to 2, and CUR_REPLACEMENT_TOKEN
1446 would be set to the token 'x', in the replacement list "x - 3" of
1447 macro M.
1448
1449 This is a subroutine of replace_args. */
1450inline static unsigned
1451expanded_token_index (cpp_reader *pfile, cpp_macro *macro,
1452 const cpp_token *cur_replacement_token,
1453 unsigned absolute_token_index)
1454{
1455 if (CPP_OPTION (pfile, track_macro_expansion) > 1)
1456 return absolute_token_index;
1457 return cur_replacement_token - macro->exp.tokens;
1458}
1459
Neil Boothd15a58c2002-01-03 18:32:55 +00001460/* Replace the parameters in a function-like macro of NODE with the
1461 actual ARGS, and place the result in a newly pushed token context.
1462 Expand each argument before replacing, unless it is operated upon
Tom Tromey92582b72011-10-17 09:59:12 +00001463 by the # or ## operators. EXPANSION_POINT_LOC is the location of
1464 the expansion point of the macro. E.g, the location of the
1465 function-like macro invocation. */
Neil Booth93c803682000-10-28 17:59:06 +00001466static void
Tom Tromey92582b72011-10-17 09:59:12 +00001467replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
1468 macro_arg *args, source_location expansion_point_loc)
Neil Booth93c803682000-10-28 17:59:06 +00001469{
1470 unsigned int i, total;
1471 const cpp_token *src, *limit;
Tom Tromey92582b72011-10-17 09:59:12 +00001472 const cpp_token **first = NULL;
Neil Booth93c803682000-10-28 17:59:06 +00001473 macro_arg *arg;
Tom Tromey92582b72011-10-17 09:59:12 +00001474 _cpp_buff *buff = NULL;
1475 source_location *virt_locs = NULL;
1476 unsigned int exp_count;
1477 const struct line_map *map = NULL;
1478 int track_macro_exp;
Neil Booth93c803682000-10-28 17:59:06 +00001479
Neil Booth93c803682000-10-28 17:59:06 +00001480 /* First, fully macro-expand arguments, calculating the number of
Neil Booth1e013d22001-09-26 21:44:35 +00001481 tokens in the final expansion as we go. The ordering of the if
1482 statements below is subtle; we must handle stringification before
1483 pasting. */
Tom Tromey92582b72011-10-17 09:59:12 +00001484
1485 /* EXP_COUNT is the number of tokens in the macro replacement
1486 list. TOTAL is the number of tokens /after/ macro parameters
1487 have been replaced by their arguments. */
1488 exp_count = macro_real_token_count (macro);
1489 total = exp_count;
1490 limit = macro->exp.tokens + exp_count;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001491
Neil Booth601328b2002-05-16 05:53:24 +00001492 for (src = macro->exp.tokens; src < limit; src++)
Neil Booth93c803682000-10-28 17:59:06 +00001493 if (src->type == CPP_MACRO_ARG)
1494 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001495 /* Leading and trailing padding tokens. */
1496 total += 2;
Tom Tromey92582b72011-10-17 09:59:12 +00001497 /* Account for leading and padding tokens in exp_count too.
1498 This is going to be important later down this function,
1499 when we want to handle the case of (track_macro_exp <
1500 2). */
1501 exp_count += 2;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001502
Neil Booth93c803682000-10-28 17:59:06 +00001503 /* We have an argument. If it is not being stringified or
1504 pasted it is macro-replaced before insertion. */
Joseph Myers9a0c6182009-05-10 15:27:32 +01001505 arg = &args[src->val.macro_arg.arg_no - 1];
Neil Booth4c2b6472000-11-11 13:19:01 +00001506
Neil Booth93c803682000-10-28 17:59:06 +00001507 if (src->flags & STRINGIFY_ARG)
1508 {
1509 if (!arg->stringified)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001510 arg->stringified = stringify_arg (pfile, arg);
Neil Booth93c803682000-10-28 17:59:06 +00001511 }
1512 else if ((src->flags & PASTE_LEFT)
Neil Booth601328b2002-05-16 05:53:24 +00001513 || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
Neil Booth93c803682000-10-28 17:59:06 +00001514 total += arg->count - 1;
1515 else
1516 {
1517 if (!arg->expanded)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001518 expand_arg (pfile, arg);
Neil Booth93c803682000-10-28 17:59:06 +00001519 total += arg->expanded_count - 1;
1520 }
1521 }
1522
Tom Tromey92582b72011-10-17 09:59:12 +00001523 /* When the compiler is called with the -ftrack-macro-expansion
1524 flag, we need to keep track of the location of each token that
1525 results from macro expansion.
Neil Booth93c803682000-10-28 17:59:06 +00001526
Tom Tromey92582b72011-10-17 09:59:12 +00001527 A token resulting from macro expansion is not a new token. It is
1528 simply the same token as the token coming from the macro
1529 definition. The new things that are allocated are the buffer
1530 that holds the tokens resulting from macro expansion and a new
1531 location that records many things like the locus of the expansion
1532 point as well as the original locus inside the definition of the
1533 macro. This location is called a virtual location.
1534
1535 So the buffer BUFF holds a set of cpp_token*, and the buffer
1536 VIRT_LOCS holds the virtual locations of the tokens held by BUFF.
1537
1538 Both of these two buffers are going to be hung off of the macro
1539 context, when the latter is pushed. The memory allocated to
1540 store the tokens and their locations is going to be freed once
1541 the context of macro expansion is popped.
1542
1543 As far as tokens are concerned, the memory overhead of
1544 -ftrack-macro-expansion is proportional to the number of
1545 macros that get expanded multiplied by sizeof (source_location).
1546 The good news is that extra memory gets freed when the macro
1547 context is freed, i.e shortly after the macro got expanded. */
1548
1549 /* Is the -ftrack-macro-expansion flag in effect? */
1550 track_macro_exp = CPP_OPTION (pfile, track_macro_expansion);
1551
1552 /* Now allocate memory space for tokens and locations resulting from
1553 the macro expansion, copy the tokens and replace the arguments.
1554 This memory must be freed when the context of the macro MACRO is
1555 popped. */
1556 buff = tokens_buff_new (pfile, total, track_macro_exp ? &virt_locs : NULL);
1557
1558 first = (const cpp_token **) buff->base;
1559
1560 /* Create a macro map to record the locations of the tokens that are
1561 involved in the expansion. Note that the expansion point is set
1562 to the location of the closing parenthesis. Otherwise, the
1563 subsequent map created for the first token that comes after the
1564 macro map might have a wrong line number. That would lead to
1565 tokens with wrong line numbers after the macro expansion. This
1566 adds up to the memory overhead of the -ftrack-macro-expansion
1567 flag; for every macro that is expanded, a "macro map" is
1568 created. */
1569 if (track_macro_exp)
1570 {
1571 int num_macro_tokens = total;
1572 if (track_macro_exp < 2)
1573 /* Then the number of macro tokens won't take in account the
1574 fact that function-like macro arguments can expand to
1575 multiple tokens. This is to save memory at the expense of
1576 accuracy.
1577
1578 Suppose we have #define SQARE(A) A * A
1579
1580 And then we do SQARE(2+3)
1581
1582 Then the tokens 2, +, 3, will have the same location,
1583 saying they come from the expansion of the argument A. */
1584 num_macro_tokens = exp_count;
1585 map = linemap_enter_macro (pfile->line_table, node,
1586 expansion_point_loc,
1587 num_macro_tokens);
1588 }
1589 i = 0;
Neil Booth601328b2002-05-16 05:53:24 +00001590 for (src = macro->exp.tokens; src < limit; src++)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001591 {
Tom Tromey92582b72011-10-17 09:59:12 +00001592 unsigned int arg_tokens_count;
1593 macro_arg_token_iter from;
1594 const cpp_token **paste_flag = NULL;
1595 const cpp_token **tmp_token_ptr;
Neil Booth93c803682000-10-28 17:59:06 +00001596
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001597 if (src->type != CPP_MACRO_ARG)
1598 {
Tom Tromey92582b72011-10-17 09:59:12 +00001599 /* Allocate a virtual location for token SRC, and add that
1600 token and its virtual location into the buffers BUFF and
1601 VIRT_LOCS. */
1602 unsigned index = expanded_token_index (pfile, macro, src, i);
1603 tokens_buff_add_token (buff, virt_locs, src,
1604 src->src_loc, src->src_loc,
1605 map, index);
1606 i += 1;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001607 continue;
1608 }
1609
1610 paste_flag = 0;
Joseph Myers9a0c6182009-05-10 15:27:32 +01001611 arg = &args[src->val.macro_arg.arg_no - 1];
Tom Tromey92582b72011-10-17 09:59:12 +00001612 /* SRC is a macro parameter that we need to replace with its
1613 corresponding argument. So at some point we'll need to
1614 iterate over the tokens of the macro argument and copy them
1615 into the "place" now holding the correspondig macro
1616 parameter. We are going to use the iterator type
1617 macro_argo_token_iter to handle that iterating. The 'if'
1618 below is to initialize the iterator depending on the type of
1619 tokens the macro argument has. It also does some adjustment
1620 related to padding tokens and some pasting corner cases. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001621 if (src->flags & STRINGIFY_ARG)
Tom Tromey92582b72011-10-17 09:59:12 +00001622 {
1623 arg_tokens_count = 1;
1624 macro_arg_token_iter_init (&from,
1625 CPP_OPTION (pfile,
1626 track_macro_expansion),
1627 MACRO_ARG_TOKEN_STRINGIFIED,
1628 arg, &arg->stringified);
1629 }
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001630 else if (src->flags & PASTE_LEFT)
Tom Tromey92582b72011-10-17 09:59:12 +00001631 {
1632 arg_tokens_count = arg->count;
1633 macro_arg_token_iter_init (&from,
1634 CPP_OPTION (pfile,
1635 track_macro_expansion),
1636 MACRO_ARG_TOKEN_NORMAL,
1637 arg, arg->first);
1638 }
Neil Booth601328b2002-05-16 05:53:24 +00001639 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001640 {
Tom Tromey92582b72011-10-17 09:59:12 +00001641 int num_toks;
1642 arg_tokens_count = arg->count;
1643 macro_arg_token_iter_init (&from,
1644 CPP_OPTION (pfile,
1645 track_macro_expansion),
1646 MACRO_ARG_TOKEN_NORMAL,
1647 arg, arg->first);
1648
1649 num_toks = tokens_buff_count (buff);
1650
1651 if (num_toks != 0)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001652 {
Tom Tromey92582b72011-10-17 09:59:12 +00001653 /* So the current parameter token is pasted to the previous
1654 token in the replacement list. Let's look at what
1655 we have as previous and current arguments. */
1656
1657 /* This is the previous argument's token ... */
1658 tmp_token_ptr = tokens_buff_last_token_ptr (buff);
1659
1660 if ((*tmp_token_ptr)->type == CPP_COMMA
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001661 && macro->variadic
Joseph Myers9a0c6182009-05-10 15:27:32 +01001662 && src->val.macro_arg.arg_no == macro->paramc)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001663 {
Tom Tromey92582b72011-10-17 09:59:12 +00001664 /* ... which is a comma; and the current parameter
1665 is the last parameter of a variadic function-like
1666 macro. If the argument to the current last
1667 parameter is NULL, then swallow the comma,
1668 otherwise drop the paste flag. */
1669 if (macro_arg_token_iter_get_token (&from) == NULL)
1670 tokens_buff_remove_last_token (buff);
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001671 else
Tom Tromey92582b72011-10-17 09:59:12 +00001672 paste_flag = tmp_token_ptr;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001673 }
1674 /* Remove the paste flag if the RHS is a placemarker. */
Tom Tromey92582b72011-10-17 09:59:12 +00001675 else if (arg_tokens_count == 0)
1676 paste_flag = tmp_token_ptr;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001677 }
1678 }
1679 else
Tom Tromey92582b72011-10-17 09:59:12 +00001680 {
1681 arg_tokens_count = arg->expanded_count;
1682 macro_arg_token_iter_init (&from,
1683 CPP_OPTION (pfile,
1684 track_macro_expansion),
1685 MACRO_ARG_TOKEN_EXPANDED,
1686 arg, arg->expanded);
1687 }
Neil Booth93c803682000-10-28 17:59:06 +00001688
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001689 /* Padding on the left of an argument (unless RHS of ##). */
Zack Weinberga8d0dda2003-02-21 18:06:30 +00001690 if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
Neil Booth601328b2002-05-16 05:53:24 +00001691 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001692 {
Tom Tromey92582b72011-10-17 09:59:12 +00001693 const cpp_token *t = padding_token (pfile, src);
1694 unsigned index = expanded_token_index (pfile, macro, src, i);
1695 /* Allocate a virtual location for the padding token and
1696 append the token and its location to BUFF and
1697 VIRT_LOCS. */
1698 tokens_buff_add_token (buff, virt_locs, t,
1699 t->src_loc, t->src_loc,
1700 map, index);
1701 }
1702
1703 if (arg_tokens_count)
1704 {
1705 /* So now we've got the number of tokens that make up the
1706 argument that is going to replace the current parameter
1707 in the macro's replacement list. */
1708 unsigned int j;
1709 for (j = 0; j < arg_tokens_count; ++j)
1710 {
1711 /* So if track_macro_exp is < 2, the user wants to
1712 save extra memory while tracking macro expansion
1713 locations. So in that case here is what we do:
1714
1715 Suppose we have #define SQARE(A) A * A
1716
1717 And then we do SQARE(2+3)
1718
1719 Then the tokens 2, +, 3, will have the same location,
1720 saying they come from the expansion of the argument
1721 A.
1722
1723 So that means we are going to ignore the COUNT tokens
1724 resulting from the expansion of the current macro
1725 arugment. In other words all the ARG_TOKENS_COUNT tokens
1726 resulting from the expansion of the macro argument will
1727 have the index I. Normally, each of those token should
1728 have index I+J. */
1729 unsigned token_index = i;
1730 unsigned index;
1731 if (track_macro_exp > 1)
1732 token_index += j;
1733
1734 index = expanded_token_index (pfile, macro, src, token_index);
1735 tokens_buff_add_token (buff, virt_locs,
1736 macro_arg_token_iter_get_token (&from),
1737 macro_arg_token_iter_get_location (&from),
1738 src->src_loc, map, index);
1739 macro_arg_token_iter_forward (&from);
1740 }
Neil Booth93c803682000-10-28 17:59:06 +00001741
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001742 /* With a non-empty argument on the LHS of ##, the last
1743 token should be flagged PASTE_LEFT. */
1744 if (src->flags & PASTE_LEFT)
Tom Tromey92582b72011-10-17 09:59:12 +00001745 paste_flag =
1746 (const cpp_token **) tokens_buff_last_token_ptr (buff);
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001747 }
Andrew Haleye85edc92008-07-03 10:31:50 +00001748 else if (CPP_PEDANTIC (pfile) && ! macro->syshdr
1749 && ! CPP_OPTION (pfile, c99)
1750 && ! cpp_in_system_header (pfile))
1751 {
1752 cpp_error (pfile, CPP_DL_PEDWARN,
1753 "invoking macro %s argument %d: "
1754 "empty macro arguments are undefined"
1755 " in ISO C90 and ISO C++98",
1756 NODE_NAME (node),
Joseph Myers9a0c6182009-05-10 15:27:32 +01001757 src->val.macro_arg.arg_no);
Andrew Haleye85edc92008-07-03 10:31:50 +00001758 }
Neil Booth4c2b6472000-11-11 13:19:01 +00001759
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001760 /* Avoid paste on RHS (even case count == 0). */
1761 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
Tom Tromey92582b72011-10-17 09:59:12 +00001762 {
1763 const cpp_token *t = &pfile->avoid_paste;
1764 tokens_buff_add_token (buff, virt_locs,
1765 t, t->src_loc, t->src_loc,
1766 NULL, 0);
1767 }
Neil Booth26ec42e2001-01-28 11:22:23 +00001768
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001769 /* Add a new paste flag, or remove an unwanted one. */
1770 if (paste_flag)
1771 {
1772 cpp_token *token = _cpp_temp_token (pfile);
1773 token->type = (*paste_flag)->type;
Jakub Jelinek73096712005-03-04 16:33:23 +01001774 token->val = (*paste_flag)->val;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001775 if (src->flags & PASTE_LEFT)
1776 token->flags = (*paste_flag)->flags | PASTE_LEFT;
1777 else
1778 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1779 *paste_flag = token;
1780 }
Tom Tromey92582b72011-10-17 09:59:12 +00001781
1782 i += arg_tokens_count;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001783 }
Neil Booth4c2b6472000-11-11 13:19:01 +00001784
Tom Tromey92582b72011-10-17 09:59:12 +00001785 if (track_macro_exp)
1786 push_extended_tokens_context (pfile, node, buff, virt_locs, first,
1787 tokens_buff_count (buff));
1788 else
1789 push_ptoken_context (pfile, node, buff, first,
1790 tokens_buff_count (buff));
Tom Tromey64a1a422011-10-17 09:59:52 +00001791
1792 num_macro_tokens_counter += tokens_buff_count (buff);
Neil Booth93c803682000-10-28 17:59:06 +00001793}
1794
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001795/* Return a special padding token, with padding inherited from SOURCE. */
1796static const cpp_token *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001797padding_token (cpp_reader *pfile, const cpp_token *source)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001798{
1799 cpp_token *result = _cpp_temp_token (pfile);
1800
1801 result->type = CPP_PADDING;
Paolo Bonzinibe0f1e52005-02-14 08:52:24 +00001802
1803 /* Data in GCed data structures cannot be made const so far, so we
1804 need a cast here. */
1805 result->val.source = (cpp_token *) source;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001806 result->flags = 0;
1807 return result;
1808}
1809
Neil Boothd15a58c2002-01-03 18:32:55 +00001810/* Get a new uninitialized context. Create a new one if we cannot
1811 re-use an old one. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001812static cpp_context *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001813next_context (cpp_reader *pfile)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001814{
1815 cpp_context *result = pfile->context->next;
1816
1817 if (result == 0)
1818 {
Bernardo Innocenti72bb2c32004-07-24 20:04:42 +02001819 result = XNEW (cpp_context);
Tom Tromey92582b72011-10-17 09:59:12 +00001820 memset (result, 0, sizeof (cpp_context));
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001821 result->prev = pfile->context;
1822 result->next = 0;
1823 pfile->context->next = result;
1824 }
1825
1826 pfile->context = result;
1827 return result;
1828}
1829
1830/* Push a list of pointers to tokens. */
1831static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001832push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
1833 const cpp_token **first, unsigned int count)
Neil Booth93c803682000-10-28 17:59:06 +00001834{
1835 cpp_context *context = next_context (pfile);
Neil Booth93c803682000-10-28 17:59:06 +00001836
Tom Tromey92582b72011-10-17 09:59:12 +00001837 context->tokens_kind = TOKENS_KIND_INDIRECT;
1838 context->c.macro = macro;
Neil Booth1e013d22001-09-26 21:44:35 +00001839 context->buff = buff;
Neil Booth82eda772002-06-04 13:07:06 +00001840 FIRST (context).ptoken = first;
1841 LAST (context).ptoken = first + count;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001842}
1843
Dodji Seketeli36002182012-04-30 11:41:46 +00001844/* Push a list of tokens.
1845
1846 A NULL macro means that we should continue the current macro
1847 expansion, in essence. That means that if we are currently in a
1848 macro expansion context, we'll make the new pfile->context refer to
1849 the current macro. */
Richard Hendersonbc4071d2006-01-04 08:33:38 -08001850void
1851_cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
1852 const cpp_token *first, unsigned int count)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001853{
Dodji Seketeli36002182012-04-30 11:41:46 +00001854 cpp_context *context;
1855
1856 if (macro == NULL)
1857 macro = macro_of_context (pfile->context);
1858
1859 context = next_context (pfile);
Tom Tromey92582b72011-10-17 09:59:12 +00001860 context->tokens_kind = TOKENS_KIND_DIRECT;
1861 context->c.macro = macro;
1862 context->buff = NULL;
Dodji Seketeli36002182012-04-30 11:41:46 +00001863 FIRST (context).token = first;
1864 LAST (context).token = first + count;
Neil Booth93c803682000-10-28 17:59:06 +00001865}
1866
Tom Tromey92582b72011-10-17 09:59:12 +00001867/* Build a context containing a list of tokens as well as their
1868 virtual locations and push it. TOKENS_BUFF is the buffer that
1869 contains the tokens pointed to by FIRST. If TOKENS_BUFF is
1870 non-NULL, it means that the context owns it, meaning that
1871 _cpp_pop_context will free it as well as VIRT_LOCS_BUFF that
Dodji Seketeli36002182012-04-30 11:41:46 +00001872 contains the virtual locations.
1873
1874 A NULL macro means that we should continue the current macro
1875 expansion, in essence. That means that if we are currently in a
1876 macro expansion context, we'll make the new pfile->context refer to
1877 the current macro. */
Tom Tromey92582b72011-10-17 09:59:12 +00001878static void
1879push_extended_tokens_context (cpp_reader *pfile,
1880 cpp_hashnode *macro,
1881 _cpp_buff *token_buff,
1882 source_location *virt_locs,
1883 const cpp_token **first,
1884 unsigned int count)
1885{
Dodji Seketeli36002182012-04-30 11:41:46 +00001886 cpp_context *context;
Tom Tromey92582b72011-10-17 09:59:12 +00001887 macro_context *m;
1888
Dodji Seketeli36002182012-04-30 11:41:46 +00001889 if (macro == NULL)
1890 macro = macro_of_context (pfile->context);
1891
1892 context = next_context (pfile);
Tom Tromey92582b72011-10-17 09:59:12 +00001893 context->tokens_kind = TOKENS_KIND_EXTENDED;
1894 context->buff = token_buff;
1895
1896 m = XNEW (macro_context);
1897 m->macro_node = macro;
1898 m->virt_locs = virt_locs;
1899 m->cur_virt_loc = virt_locs;
1900 context->c.mc = m;
1901 FIRST (context).ptoken = first;
1902 LAST (context).ptoken = first + count;
1903}
1904
Neil Boothcbc69f82002-06-05 20:27:12 +00001905/* Push a traditional macro's replacement text. */
1906void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001907_cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
1908 const uchar *start, size_t len)
Neil Boothcbc69f82002-06-05 20:27:12 +00001909{
1910 cpp_context *context = next_context (pfile);
1911
Tom Tromey92582b72011-10-17 09:59:12 +00001912 context->tokens_kind = TOKENS_KIND_DIRECT;
1913 context->c.macro = macro;
Neil Boothcbc69f82002-06-05 20:27:12 +00001914 context->buff = NULL;
1915 CUR (context) = start;
Neil Booth1ce676a2002-06-09 20:04:17 +00001916 RLIMIT (context) = start + len;
Neil Booth974c43f2002-06-13 06:25:28 +00001917 macro->flags |= NODE_DISABLED;
Neil Boothcbc69f82002-06-05 20:27:12 +00001918}
1919
Tom Tromey92582b72011-10-17 09:59:12 +00001920/* Creates a buffer that holds tokens a.k.a "token buffer", usually
1921 for the purpose of storing them on a cpp_context. If VIRT_LOCS is
1922 non-null (which means that -ftrack-macro-expansion is on),
1923 *VIRT_LOCS is set to a newly allocated buffer that is supposed to
1924 hold the virtual locations of the tokens resulting from macro
1925 expansion. */
1926static _cpp_buff*
1927tokens_buff_new (cpp_reader *pfile, size_t len,
1928 source_location **virt_locs)
1929{
1930 size_t tokens_size = len * sizeof (cpp_token *);
1931 size_t locs_size = len * sizeof (source_location);
1932
1933 if (virt_locs != NULL)
1934 *virt_locs = XNEWVEC (source_location, locs_size);
1935 return _cpp_get_buff (pfile, tokens_size);
1936}
1937
1938/* Returns the number of tokens contained in a token buffer. The
1939 buffer holds a set of cpp_token*. */
1940static size_t
1941tokens_buff_count (_cpp_buff *buff)
1942{
1943 return (BUFF_FRONT (buff) - buff->base) / sizeof (cpp_token *);
1944}
1945
1946/* Return a pointer to the last token contained in the token buffer
1947 BUFF. */
1948static const cpp_token **
1949tokens_buff_last_token_ptr (_cpp_buff *buff)
1950{
1951 return &((const cpp_token **) BUFF_FRONT (buff))[-1];
1952}
1953
1954/* Remove the last token contained in the token buffer TOKENS_BUFF.
1955 If VIRT_LOCS_BUFF is non-NULL, it should point at the buffer
1956 containing the virtual locations of the tokens in TOKENS_BUFF; in
1957 which case the function updates that buffer as well. */
1958static inline void
1959tokens_buff_remove_last_token (_cpp_buff *tokens_buff)
1960
1961{
1962 if (BUFF_FRONT (tokens_buff) > tokens_buff->base)
1963 BUFF_FRONT (tokens_buff) =
1964 (unsigned char *) &((cpp_token **) BUFF_FRONT (tokens_buff))[-1];
1965}
1966
1967/* Insert a token into the token buffer at the position pointed to by
1968 DEST. Note that the buffer is not enlarged so the previous token
1969 that was at *DEST is overwritten. VIRT_LOC_DEST, if non-null,
1970 means -ftrack-macro-expansion is effect; it then points to where to
1971 insert the virtual location of TOKEN. TOKEN is the token to
1972 insert. VIRT_LOC is the virtual location of the token, i.e, the
Joseph Myers7d9641c2012-05-29 15:53:50 +01001973 location possibly encoding its locus across macro expansion. If
Tom Tromey92582b72011-10-17 09:59:12 +00001974 TOKEN is an argument of a function-like macro (inside a macro
1975 replacement list), PARM_DEF_LOC is the spelling location of the
1976 macro parameter that TOKEN is replacing, in the replacement list of
1977 the macro. If TOKEN is not an argument of a function-like macro or
1978 if it doesn't come from a macro expansion, then VIRT_LOC can just
1979 be set to the same value as PARM_DEF_LOC. If MAP is non null, it
1980 means TOKEN comes from a macro expansion and MAP is the macro map
1981 associated to the macro. MACRO_TOKEN_INDEX points to the index of
1982 the token in the macro map; it is not considered if MAP is NULL.
1983
1984 Upon successful completion this function returns the a pointer to
1985 the position of the token coming right after the insertion
1986 point. */
1987static inline const cpp_token **
1988tokens_buff_put_token_to (const cpp_token **dest,
1989 source_location *virt_loc_dest,
1990 const cpp_token *token,
1991 source_location virt_loc,
1992 source_location parm_def_loc,
1993 const struct line_map *map,
1994 unsigned int macro_token_index)
1995{
1996 source_location macro_loc = virt_loc;
1997 const cpp_token **result;
1998
1999 if (virt_loc_dest)
2000 {
2001 /* -ftrack-macro-expansion is on. */
2002 if (map)
2003 macro_loc = linemap_add_macro_token (map, macro_token_index,
2004 virt_loc, parm_def_loc);
2005 *virt_loc_dest = macro_loc;
2006 }
2007 *dest = token;
2008 result = &dest[1];
2009
2010 return result;
2011}
2012
2013/* Adds a token at the end of the tokens contained in BUFFER. Note
2014 that this function doesn't enlarge BUFFER when the number of tokens
2015 reaches BUFFER's size; it aborts in that situation.
2016
2017 TOKEN is the token to append. VIRT_LOC is the virtual location of
Joseph Myers7d9641c2012-05-29 15:53:50 +01002018 the token, i.e, the location possibly encoding its locus across
Tom Tromey92582b72011-10-17 09:59:12 +00002019 macro expansion. If TOKEN is an argument of a function-like macro
2020 (inside a macro replacement list), PARM_DEF_LOC is the location of
2021 the macro parameter that TOKEN is replacing. If TOKEN doesn't come
2022 from a macro expansion, then VIRT_LOC can just be set to the same
2023 value as PARM_DEF_LOC. If MAP is non null, it means TOKEN comes
2024 from a macro expansion and MAP is the macro map associated to the
2025 macro. MACRO_TOKEN_INDEX points to the index of the token in the
2026 macro map; It is not considered if MAP is NULL. If VIRT_LOCS is
2027 non-null, it means -ftrack-macro-expansion is on; in which case
2028 this function adds the virtual location DEF_LOC to the VIRT_LOCS
2029 array, at the same index as the one of TOKEN in BUFFER. Upon
2030 successful completion this function returns the a pointer to the
2031 position of the token coming right after the insertion point. */
2032static const cpp_token **
2033tokens_buff_add_token (_cpp_buff *buffer,
2034 source_location *virt_locs,
2035 const cpp_token *token,
2036 source_location virt_loc,
2037 source_location parm_def_loc,
2038 const struct line_map *map,
2039 unsigned int macro_token_index)
2040{
2041 const cpp_token **result;
2042 source_location *virt_loc_dest = NULL;
2043 unsigned token_index =
2044 (BUFF_FRONT (buffer) - buffer->base) / sizeof (cpp_token *);
2045
2046 /* Abort if we pass the end the buffer. */
2047 if (BUFF_FRONT (buffer) > BUFF_LIMIT (buffer))
2048 abort ();
2049
2050 if (virt_locs != NULL)
2051 virt_loc_dest = &virt_locs[token_index];
2052
2053 result =
2054 tokens_buff_put_token_to ((const cpp_token **) BUFF_FRONT (buffer),
2055 virt_loc_dest, token, virt_loc, parm_def_loc,
2056 map, macro_token_index);
2057
2058 BUFF_FRONT (buffer) = (unsigned char *) result;
2059 return result;
2060}
2061
2062/* Allocate space for the function-like macro argument ARG to store
2063 the tokens resulting from the macro-expansion of the tokens that
2064 make up ARG itself. That space is allocated in ARG->expanded and
2065 needs to be freed using free. */
2066static void
2067alloc_expanded_arg_mem (cpp_reader *pfile, macro_arg *arg, size_t capacity)
2068{
2069#ifdef ENABLE_CHECKING
2070 if (arg->expanded != NULL
2071 || arg->expanded_virt_locs != NULL)
2072 abort ();
2073#endif
2074 arg->expanded = XNEWVEC (const cpp_token *, capacity);
2075 if (CPP_OPTION (pfile, track_macro_expansion))
2076 arg->expanded_virt_locs = XNEWVEC (source_location, capacity);
2077
2078}
2079
2080/* If necessary, enlarge ARG->expanded to so that it can contain SIZE
2081 tokens. */
2082static void
2083ensure_expanded_arg_room (cpp_reader *pfile, macro_arg *arg,
2084 size_t size, size_t *expanded_capacity)
2085{
2086 if (size <= *expanded_capacity)
2087 return;
2088
2089 size *= 2;
2090
2091 arg->expanded =
2092 XRESIZEVEC (const cpp_token *, arg->expanded, size);
2093 *expanded_capacity = size;
2094
2095 if (CPP_OPTION (pfile, track_macro_expansion))
2096 {
2097 if (arg->expanded_virt_locs == NULL)
2098 arg->expanded_virt_locs = XNEWVEC (source_location, size);
2099 else
2100 arg->expanded_virt_locs = XRESIZEVEC (source_location,
2101 arg->expanded_virt_locs,
2102 size);
2103 }
2104}
2105
Neil Boothd15a58c2002-01-03 18:32:55 +00002106/* Expand an argument ARG before replacing parameters in a
2107 function-like macro. This works by pushing a context with the
2108 argument's tokens, and then expanding that into a temporary buffer
2109 as if it were a normal part of the token stream. collect_args()
2110 has terminated the argument's tokens with a CPP_EOF so that we know
2111 when we have fully expanded the argument. */
Neil Booth93c803682000-10-28 17:59:06 +00002112static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002113expand_arg (cpp_reader *pfile, macro_arg *arg)
Neil Booth93c803682000-10-28 17:59:06 +00002114{
Tom Tromey92582b72011-10-17 09:59:12 +00002115 size_t capacity;
Neil Booth56941bf2002-09-20 19:44:09 +00002116 bool saved_warn_trad;
Tom Tromey92582b72011-10-17 09:59:12 +00002117 bool track_macro_exp_p = CPP_OPTION (pfile, track_macro_expansion);
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002118
Tom Tromey92582b72011-10-17 09:59:12 +00002119 if (arg->count == 0
2120 || arg->expanded != NULL)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002121 return;
Neil Booth93c803682000-10-28 17:59:06 +00002122
Neil Booth56941bf2002-09-20 19:44:09 +00002123 /* Don't warn about funlike macros when pre-expanding. */
2124 saved_warn_trad = CPP_WTRADITIONAL (pfile);
2125 CPP_WTRADITIONAL (pfile) = 0;
2126
Tom Tromey92582b72011-10-17 09:59:12 +00002127 /* Loop, reading in the tokens of the argument. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002128 capacity = 256;
Tom Tromey92582b72011-10-17 09:59:12 +00002129 alloc_expanded_arg_mem (pfile, arg, capacity);
Neil Booth93c803682000-10-28 17:59:06 +00002130
Tom Tromey92582b72011-10-17 09:59:12 +00002131 if (track_macro_exp_p)
2132 push_extended_tokens_context (pfile, NULL, NULL,
2133 arg->virt_locs,
2134 arg->first,
2135 arg->count + 1);
2136 else
2137 push_ptoken_context (pfile, NULL, NULL,
2138 arg->first, arg->count + 1);
2139
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002140 for (;;)
Neil Booth93c803682000-10-28 17:59:06 +00002141 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002142 const cpp_token *token;
Tom Tromey92582b72011-10-17 09:59:12 +00002143 source_location location;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002144
Tom Tromey92582b72011-10-17 09:59:12 +00002145 ensure_expanded_arg_room (pfile, arg, arg->expanded_count + 1,
2146 &capacity);
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002147
Tom Tromey92582b72011-10-17 09:59:12 +00002148 token = cpp_get_token_1 (pfile, &location);
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002149
2150 if (token->type == CPP_EOF)
2151 break;
2152
Tom Tromey92582b72011-10-17 09:59:12 +00002153 set_arg_token (arg, token, location,
2154 arg->expanded_count, MACRO_ARG_TOKEN_EXPANDED,
2155 CPP_OPTION (pfile, track_macro_expansion));
2156 arg->expanded_count++;
Neil Booth93c803682000-10-28 17:59:06 +00002157 }
Neil Booth93c803682000-10-28 17:59:06 +00002158
Neil Booth1e013d22001-09-26 21:44:35 +00002159 _cpp_pop_context (pfile);
Neil Booth56941bf2002-09-20 19:44:09 +00002160
2161 CPP_WTRADITIONAL (pfile) = saved_warn_trad;
Neil Booth93c803682000-10-28 17:59:06 +00002162}
2163
Dodji Seketeli36002182012-04-30 11:41:46 +00002164/* Returns the macro associated to the current context if we are in
2165 the context a macro expansion, NULL otherwise. */
2166static cpp_hashnode*
2167macro_of_context (cpp_context *context)
2168{
2169 if (context == NULL)
2170 return NULL;
2171
2172 return (context->tokens_kind == TOKENS_KIND_EXTENDED)
2173 ? context->c.mc->macro_node
2174 : context->c.macro;
2175}
2176
Dodji Seketeli828a7f72012-05-29 09:36:29 +00002177/* Return TRUE iff we are expanding a macro or are about to start
2178 expanding one. If we are effectively expanding a macro, the
2179 function macro_of_context returns a pointer to the macro being
2180 expanded. */
2181static bool
2182in_macro_expansion_p (cpp_reader *pfile)
2183{
2184 if (pfile == NULL)
2185 return false;
2186
2187 return (pfile->about_to_expand_macro_p
2188 || macro_of_context (pfile->context));
2189}
2190
Neil Boothd15a58c2002-01-03 18:32:55 +00002191/* Pop the current context off the stack, re-enabling the macro if the
Tom Tromey92582b72011-10-17 09:59:12 +00002192 context represented a macro's replacement list. Initially the
2193 context structure was not freed so that we can re-use it later, but
2194 now we do free it to reduce peak memory consumption. */
Neil Booth93c803682000-10-28 17:59:06 +00002195void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002196_cpp_pop_context (cpp_reader *pfile)
Neil Booth93c803682000-10-28 17:59:06 +00002197{
Neil Booth1e013d22001-09-26 21:44:35 +00002198 cpp_context *context = pfile->context;
Neil Booth93c803682000-10-28 17:59:06 +00002199
Dodji Seketeli3ad64f52012-05-02 16:55:19 +00002200 /* We should not be popping the base context. */
2201 if (context == &pfile->base_context)
2202 abort ();
2203
Tom Tromey92582b72011-10-17 09:59:12 +00002204 if (context->c.macro)
2205 {
2206 cpp_hashnode *macro;
2207 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
2208 {
2209 macro_context *mc = context->c.mc;
2210 macro = mc->macro_node;
2211 /* If context->buff is set, it means the life time of tokens
2212 is bound to the life time of this context; so we must
2213 free the tokens; that means we must free the virtual
2214 locations of these tokens too. */
2215 if (context->buff && mc->virt_locs)
2216 {
2217 free (mc->virt_locs);
2218 mc->virt_locs = NULL;
2219 }
2220 free (mc);
2221 context->c.mc = NULL;
2222 }
2223 else
2224 macro = context->c.macro;
2225
2226 /* Beware that MACRO can be NULL in cases like when we are
2227 called from expand_arg. In those cases, a dummy context with
2228 tokens is pushed just for the purpose of walking them using
2229 cpp_get_token_1. In that case, no 'macro' field is set into
2230 the dummy context. */
Dodji Seketeli36002182012-04-30 11:41:46 +00002231 if (macro != NULL
2232 /* Several contiguous macro expansion contexts can be
2233 associated to the same macro; that means it's the same
Joseph Myers7d9641c2012-05-29 15:53:50 +01002234 macro expansion that spans across all these (sub)
Dodji Seketeli36002182012-04-30 11:41:46 +00002235 contexts. So we should re-enable an expansion-disabled
2236 macro only when we are sure we are really out of that
2237 macro expansion. */
2238 && macro_of_context (context->prev) != macro)
Tom Tromey92582b72011-10-17 09:59:12 +00002239 macro->flags &= ~NODE_DISABLED;
2240 }
Neil Booth1e013d22001-09-26 21:44:35 +00002241
2242 if (context->buff)
Tom Tromey92582b72011-10-17 09:59:12 +00002243 {
2244 /* Decrease memory peak consumption by freeing the memory used
2245 by the context. */
2246 _cpp_free_buff (context->buff);
2247 }
Neil Booth1e013d22001-09-26 21:44:35 +00002248
2249 pfile->context = context->prev;
Tom Tromey92582b72011-10-17 09:59:12 +00002250 /* decrease peak memory consumption by feeing the context. */
2251 pfile->context->next = NULL;
2252 free (context);
Neil Booth93c803682000-10-28 17:59:06 +00002253}
2254
Tom Tromey92582b72011-10-17 09:59:12 +00002255/* Return TRUE if we reached the end of the set of tokens stored in
2256 CONTEXT, FALSE otherwise. */
2257static inline bool
2258reached_end_of_context (cpp_context *context)
2259{
2260 if (context->tokens_kind == TOKENS_KIND_DIRECT)
2261 return FIRST (context).token == LAST (context).token;
2262 else if (context->tokens_kind == TOKENS_KIND_INDIRECT
2263 || context->tokens_kind == TOKENS_KIND_EXTENDED)
2264 return FIRST (context).ptoken == LAST (context).ptoken;
2265 else
2266 abort ();
2267}
2268
2269/* Consume the next token contained in the current context of PFILE,
2270 and return it in *TOKEN. It's "full location" is returned in
2271 *LOCATION. If -ftrack-macro-location is in effeect, fFull location"
Joseph Myers7d9641c2012-05-29 15:53:50 +01002272 means the location encoding the locus of the token across macro
Tom Tromey92582b72011-10-17 09:59:12 +00002273 expansion; otherwise it's just is the "normal" location of the
2274 token which (*TOKEN)->src_loc. */
2275static inline void
2276consume_next_token_from_context (cpp_reader *pfile,
2277 const cpp_token ** token,
2278 source_location *location)
2279{
2280 cpp_context *c = pfile->context;
2281
2282 if ((c)->tokens_kind == TOKENS_KIND_DIRECT)
2283 {
2284 *token = FIRST (c).token;
2285 *location = (*token)->src_loc;
2286 FIRST (c).token++;
2287 }
2288 else if ((c)->tokens_kind == TOKENS_KIND_INDIRECT)
2289 {
2290 *token = *FIRST (c).ptoken;
2291 *location = (*token)->src_loc;
2292 FIRST (c).ptoken++;
2293 }
2294 else if ((c)->tokens_kind == TOKENS_KIND_EXTENDED)
2295 {
2296 macro_context *m = c->c.mc;
2297 *token = *FIRST (c).ptoken;
2298 if (m->virt_locs)
2299 {
2300 *location = *m->cur_virt_loc;
2301 m->cur_virt_loc++;
2302 }
2303 else
2304 *location = (*token)->src_loc;
2305 FIRST (c).ptoken++;
2306 }
2307 else
2308 abort ();
2309}
2310
2311/* In the traditional mode of the preprocessor, if we are currently in
2312 a directive, the location of a token must be the location of the
2313 start of the directive line. This function returns the proper
2314 location if we are in the traditional mode, and just returns
2315 LOCATION otherwise. */
2316
2317static inline source_location
2318maybe_adjust_loc_for_trad_cpp (cpp_reader *pfile, source_location location)
2319{
2320 if (CPP_OPTION (pfile, traditional))
2321 {
2322 if (pfile->state.in_directive)
2323 return pfile->directive_line;
2324 }
2325 return location;
2326}
2327
2328/* Routine to get a token as well as its location.
Neil Booth7f2f1a62000-11-14 18:32:06 +00002329
2330 Macro expansions and directives are transparently handled,
2331 including entering included files. Thus tokens are post-macro
2332 expansion, and after any intervening directives. External callers
2333 see CPP_EOF only at EOF. Internal callers also see it when meeting
2334 a directive inside a macro call, when at the end of a directive and
2335 state.in_directive is still 1, and at the end of argument
Tom Tromey92582b72011-10-17 09:59:12 +00002336 pre-expansion.
2337
2338 LOC is an out parameter; *LOC is set to the location "as expected
2339 by the user". Please read the comment of
2340 cpp_get_token_with_location to learn more about the meaning of this
2341 location. */
2342static const cpp_token*
2343cpp_get_token_1 (cpp_reader *pfile, source_location *location)
Neil Booth93c803682000-10-28 17:59:06 +00002344{
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002345 const cpp_token *result;
Tom Tromey92582b72011-10-17 09:59:12 +00002346 /* This token is a virtual token that either encodes a location
2347 related to macro expansion or a spelling location. */
2348 source_location virt_loc = 0;
Dodji Seketeli828a7f72012-05-29 09:36:29 +00002349 /* pfile->about_to_expand_macro_p can be overriden by indirect calls
2350 to functions that push macro contexts. So let's save it so that
2351 we can restore it when we are about to leave this routine. */
2352 bool saved_about_to_expand_macro = pfile->about_to_expand_macro_p;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002353
Neil Booth29b10742000-11-13 18:40:37 +00002354 for (;;)
Neil Booth93c803682000-10-28 17:59:06 +00002355 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002356 cpp_hashnode *node;
Neil Booth93c803682000-10-28 17:59:06 +00002357 cpp_context *context = pfile->context;
2358
Neil Booth93c803682000-10-28 17:59:06 +00002359 /* Context->prev == 0 <=> base context. */
Neil Boothbdcbe492001-09-13 20:05:17 +00002360 if (!context->prev)
Neil Booth29b10742000-11-13 18:40:37 +00002361 {
Tom Tromey92582b72011-10-17 09:59:12 +00002362 result = _cpp_lex_token (pfile);
2363 virt_loc = result->src_loc;
2364 }
2365 else if (!reached_end_of_context (context))
2366 {
2367 consume_next_token_from_context (pfile, &result,
2368 &virt_loc);
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002369 if (result->flags & PASTE_LEFT)
Neil Boothec1a23e2001-01-31 07:48:54 +00002370 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002371 paste_all_tokens (pfile, result);
2372 if (pfile->state.in_directive)
2373 continue;
Tom Tromey92582b72011-10-17 09:59:12 +00002374 result = padding_token (pfile, result);
2375 goto out;
Neil Boothec1a23e2001-01-31 07:48:54 +00002376 }
Neil Booth29b10742000-11-13 18:40:37 +00002377 }
Neil Booth93c803682000-10-28 17:59:06 +00002378 else
2379 {
Tom Tromey64a1a422011-10-17 09:59:52 +00002380 if (pfile->context->c.macro)
2381 ++num_expanded_macros_counter;
Neil Boothbdcbe492001-09-13 20:05:17 +00002382 _cpp_pop_context (pfile);
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002383 if (pfile->state.in_directive)
2384 continue;
Tom Tromey92582b72011-10-17 09:59:12 +00002385 result = &pfile->avoid_paste;
2386 goto out;
Neil Booth93c803682000-10-28 17:59:06 +00002387 }
Neil Booth93c803682000-10-28 17:59:06 +00002388
Jason Thorpe477cdac2002-04-07 03:12:23 +00002389 if (pfile->state.in_directive && result->type == CPP_COMMENT)
2390 continue;
2391
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002392 if (result->type != CPP_NAME)
Neil Booth93c803682000-10-28 17:59:06 +00002393 break;
2394
Joseph Myers9a0c6182009-05-10 15:27:32 +01002395 node = result->val.node.node;
Neil Booth4c2b6472000-11-11 13:19:01 +00002396
Neil Booth644edda2001-10-02 12:57:24 +00002397 if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
2398 break;
Kazu Hiratadf383482002-05-22 22:02:16 +00002399
Neil Booth644edda2001-10-02 12:57:24 +00002400 if (!(node->flags & NODE_DISABLED))
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002401 {
Ben Elliston5950c3c2008-07-14 05:09:48 +00002402 int ret = 0;
Tom Tromey5ffeb9132007-09-06 16:24:05 +00002403 /* If not in a macro context, and we're going to start an
2404 expansion, record the location. */
Dodji Seketeli828a7f72012-05-29 09:36:29 +00002405 if (!in_macro_expansion_p (pfile))
Tom Tromey5ffeb9132007-09-06 16:24:05 +00002406 pfile->invocation_location = result->src_loc;
Jakub Jelinek765d6002008-01-25 10:01:27 +01002407 if (pfile->state.prevent_expansion)
2408 break;
Ben Elliston5950c3c2008-07-14 05:09:48 +00002409
2410 /* Conditional macros require that a predicate be evaluated
2411 first. */
Jakub Jelineka37a7b82009-03-30 17:00:52 +02002412 if ((node->flags & NODE_CONDITIONAL) != 0)
2413 {
2414 if (pfile->cb.macro_to_expand)
2415 {
2416 bool whitespace_after;
2417 const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
2418
2419 whitespace_after = (peek_tok->type == CPP_PADDING
2420 || (peek_tok->flags & PREV_WHITE));
2421 node = pfile->cb.macro_to_expand (pfile, result);
2422 if (node)
Tom Tromey92582b72011-10-17 09:59:12 +00002423 ret = enter_macro_context (pfile, node, result,
2424 virt_loc);
Jakub Jelineka37a7b82009-03-30 17:00:52 +02002425 else if (whitespace_after)
2426 {
2427 /* If macro_to_expand hook returned NULL and it
2428 ate some tokens, see if we don't need to add
2429 a padding token in between this and the
2430 next token. */
2431 peek_tok = cpp_peek_token (pfile, 0);
2432 if (peek_tok->type != CPP_PADDING
2433 && (peek_tok->flags & PREV_WHITE) == 0)
2434 _cpp_push_token_context (pfile, NULL,
2435 padding_token (pfile,
2436 peek_tok), 1);
2437 }
2438 }
2439 }
2440 else
Tom Tromey92582b72011-10-17 09:59:12 +00002441 ret = enter_macro_context (pfile, node, result,
2442 virt_loc);
Jakub Jelineka37a7b82009-03-30 17:00:52 +02002443 if (ret)
Ben Elliston5950c3c2008-07-14 05:09:48 +00002444 {
Jakub Jelinek765d6002008-01-25 10:01:27 +01002445 if (pfile->state.in_directive || ret == 2)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002446 continue;
Tom Tromey92582b72011-10-17 09:59:12 +00002447 result = padding_token (pfile, result);
2448 goto out;
Neil Boothbd969772001-02-01 19:13:53 +00002449 }
Neil Booth93c803682000-10-28 17:59:06 +00002450 }
Neil Booth644edda2001-10-02 12:57:24 +00002451 else
2452 {
Neil Boothd15a58c2002-01-03 18:32:55 +00002453 /* Flag this token as always unexpandable. FIXME: move this
2454 to collect_args()?. */
Neil Booth644edda2001-10-02 12:57:24 +00002455 cpp_token *t = _cpp_temp_token (pfile);
2456 t->type = result->type;
2457 t->flags = result->flags | NO_EXPAND;
Jakub Jelinek73096712005-03-04 16:33:23 +01002458 t->val = result->val;
Neil Booth644edda2001-10-02 12:57:24 +00002459 result = t;
2460 }
Neil Bootha5c3ccc2000-10-30 22:29:00 +00002461
Neil Booth644edda2001-10-02 12:57:24 +00002462 break;
Neil Booth93c803682000-10-28 17:59:06 +00002463 }
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002464
Tom Tromey92582b72011-10-17 09:59:12 +00002465 out:
2466 if (location != NULL)
2467 {
2468 if (virt_loc == 0)
2469 virt_loc = result->src_loc;
2470 *location = virt_loc;
2471
2472 if (!CPP_OPTION (pfile, track_macro_expansion)
Dodji Seketeli828a7f72012-05-29 09:36:29 +00002473 && macro_of_context (pfile->context) != NULL)
Tom Tromey92582b72011-10-17 09:59:12 +00002474 /* We are in a macro expansion context, are not tracking
2475 virtual location, but were asked to report the location
2476 of the expansion point of the macro being expanded. */
2477 *location = pfile->invocation_location;
2478
2479 *location = maybe_adjust_loc_for_trad_cpp (pfile, *location);
2480 }
Dodji Seketeli828a7f72012-05-29 09:36:29 +00002481
2482 pfile->about_to_expand_macro_p = saved_about_to_expand_macro;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00002483 return result;
Neil Booth93c803682000-10-28 17:59:06 +00002484}
2485
Tom Tromey92582b72011-10-17 09:59:12 +00002486/* External routine to get a token. Also used nearly everywhere
2487 internally, except for places where we know we can safely call
2488 _cpp_lex_token directly, such as lexing a directive name.
2489
2490 Macro expansions and directives are transparently handled,
2491 including entering included files. Thus tokens are post-macro
2492 expansion, and after any intervening directives. External callers
2493 see CPP_EOF only at EOF. Internal callers also see it when meeting
2494 a directive inside a macro call, when at the end of a directive and
2495 state.in_directive is still 1, and at the end of argument
2496 pre-expansion. */
2497const cpp_token *
2498cpp_get_token (cpp_reader *pfile)
2499{
2500 return cpp_get_token_1 (pfile, NULL);
2501}
2502
2503/* Like cpp_get_token, but also returns a virtual token location
2504 separate from the spelling location carried by the returned token.
2505
2506 LOC is an out parameter; *LOC is set to the location "as expected
2507 by the user". This matters when a token results from macro
2508 expansion; in that case the token's spelling location indicates the
2509 locus of the token in the definition of the macro but *LOC
2510 virtually encodes all the other meaningful locuses associated to
2511 the token.
2512
2513 What? virtual location? Yes, virtual location.
2514
2515 If the token results from macro expansion and if macro expansion
2516 location tracking is enabled its virtual location encodes (at the
2517 same time):
2518
2519 - the spelling location of the token
2520
2521 - the locus of the macro expansion point
2522
2523 - the locus of the point where the token got instantiated as part
2524 of the macro expansion process.
2525
2526 You have to use the linemap API to get the locus you are interested
2527 in from a given virtual location.
2528
2529 Note however that virtual locations are not necessarily ordered for
2530 relations '<' and '>'. One must use the function
2531 linemap_location_before_p instead of using the relational operator
2532 '<'.
2533
2534 If macro expansion tracking is off and if the token results from
2535 macro expansion the virtual location is the expansion point of the
2536 macro that got expanded.
2537
2538 When the token doesn't result from macro expansion, the virtual
2539 location is just the same thing as its spelling location. */
2540
Tom Tromey5ffeb9132007-09-06 16:24:05 +00002541const cpp_token *
2542cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
2543{
Dodji Seketeli828a7f72012-05-29 09:36:29 +00002544 return cpp_get_token_1 (pfile, loc);
Tom Tromey5ffeb9132007-09-06 16:24:05 +00002545}
2546
Neil Booth7065e132001-02-14 07:38:20 +00002547/* Returns true if we're expanding an object-like macro that was
2548 defined in a system header. Just checks the macro at the top of
2549 the stack. Used for diagnostic suppression. */
2550int
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002551cpp_sys_macro_p (cpp_reader *pfile)
Neil Booth7065e132001-02-14 07:38:20 +00002552{
Dodji Seketeli4e65a472012-04-30 11:41:08 +00002553 cpp_hashnode *node = NULL;
2554
2555 if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2556 node = pfile->context->c.mc->macro_node;
2557 else
2558 node = pfile->context->c.macro;
Neil Booth7065e132001-02-14 07:38:20 +00002559
Neil Booth644edda2001-10-02 12:57:24 +00002560 return node && node->value.macro && node->value.macro->syshdr;
Neil Booth7065e132001-02-14 07:38:20 +00002561}
2562
Neil Boothaf0d16c2002-04-22 17:48:02 +00002563/* Read each token in, until end of the current file. Directives are
2564 transparently processed. */
Neil Booth93c803682000-10-28 17:59:06 +00002565void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002566cpp_scan_nooutput (cpp_reader *pfile)
Neil Booth93c803682000-10-28 17:59:06 +00002567{
Per Bothner22234f52004-02-18 14:02:39 -08002568 /* Request a CPP_EOF token at the end of this file, rather than
2569 transparently continuing with the including file. */
2570 pfile->buffer->return_at_eof = true;
2571
Zack Weinbergc6e83802004-06-05 20:58:06 +00002572 pfile->state.discarding_output++;
2573 pfile->state.prevent_expansion++;
2574
Neil Booth590e1982002-07-01 12:47:54 +00002575 if (CPP_OPTION (pfile, traditional))
2576 while (_cpp_read_logical_line_trad (pfile))
2577 ;
2578 else
2579 while (cpp_get_token (pfile)->type != CPP_EOF)
2580 ;
Zack Weinbergc6e83802004-06-05 20:58:06 +00002581
2582 pfile->state.discarding_output--;
2583 pfile->state.prevent_expansion--;
Neil Booth93c803682000-10-28 17:59:06 +00002584}
2585
Ben Elliston5950c3c2008-07-14 05:09:48 +00002586/* Step back one or more tokens obtained from the lexer. */
2587void
2588_cpp_backup_tokens_direct (cpp_reader *pfile, unsigned int count)
2589{
2590 pfile->lookaheads += count;
2591 while (count--)
2592 {
2593 pfile->cur_token--;
2594 if (pfile->cur_token == pfile->cur_run->base
2595 /* Possible with -fpreprocessed and no leading #line. */
2596 && pfile->cur_run->prev != NULL)
2597 {
2598 pfile->cur_run = pfile->cur_run->prev;
2599 pfile->cur_token = pfile->cur_run->limit;
2600 }
2601 }
2602}
2603
Jakub Jelinek1c90c6f2006-06-09 23:13:25 +02002604/* Step back one (or more) tokens. Can only step back more than 1 if
Neil Boothbdcbe492001-09-13 20:05:17 +00002605 they are from the lexer, and not from macro expansion. */
Neil Boothb528a072000-11-12 11:46:21 +00002606void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002607_cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
Neil Booth93c803682000-10-28 17:59:06 +00002608{
Neil Boothbdcbe492001-09-13 20:05:17 +00002609 if (pfile->context->prev == NULL)
Ben Elliston5950c3c2008-07-14 05:09:48 +00002610 _cpp_backup_tokens_direct (pfile, count);
Neil Booth93c803682000-10-28 17:59:06 +00002611 else
2612 {
Neil Boothbdcbe492001-09-13 20:05:17 +00002613 if (count != 1)
2614 abort ();
Tom Tromey92582b72011-10-17 09:59:12 +00002615 if (pfile->context->tokens_kind == TOKENS_KIND_DIRECT)
Neil Booth82eda772002-06-04 13:07:06 +00002616 FIRST (pfile->context).token--;
Tom Tromey92582b72011-10-17 09:59:12 +00002617 else if (pfile->context->tokens_kind == TOKENS_KIND_INDIRECT)
Neil Booth82eda772002-06-04 13:07:06 +00002618 FIRST (pfile->context).ptoken--;
Tom Tromey92582b72011-10-17 09:59:12 +00002619 else if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2620 {
2621 FIRST (pfile->context).ptoken--;
2622 if (pfile->context->c.macro)
2623 {
2624 macro_context *m = pfile->context->c.mc;
2625 m->cur_virt_loc--;
2626#ifdef ENABLE_CHECKING
2627 if (m->cur_virt_loc < m->virt_locs)
2628 abort ();
2629#endif
2630 }
2631 else
2632 abort ();
2633 }
2634 else
2635 abort ();
Neil Booth93c803682000-10-28 17:59:06 +00002636 }
Neil Booth93c803682000-10-28 17:59:06 +00002637}
2638
2639/* #define directive parsing and handling. */
2640
Kazu Hiratada7d8302002-09-22 02:03:17 +00002641/* Returns nonzero if a macro redefinition warning is required. */
Neil Boothcbc69f82002-06-05 20:27:12 +00002642static bool
Jakub Jelinek8e680db2010-06-11 20:37:34 +02002643warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002644 const cpp_macro *macro2)
Neil Booth93c803682000-10-28 17:59:06 +00002645{
2646 const cpp_macro *macro1;
2647 unsigned int i;
2648
Neil Booth618cdda2001-02-25 09:43:03 +00002649 /* Some redefinitions need to be warned about regardless. */
2650 if (node->flags & NODE_WARN)
Neil Boothcbc69f82002-06-05 20:27:12 +00002651 return true;
Neil Booth93c803682000-10-28 17:59:06 +00002652
Simon Baldwinc047ce92008-09-18 15:39:08 +00002653 /* Suppress warnings for builtins that lack the NODE_WARN flag. */
2654 if (node->flags & NODE_BUILTIN)
Jakub Jelinek8e680db2010-06-11 20:37:34 +02002655 {
2656 if (!pfile->cb.user_builtin_macro
2657 || !pfile->cb.user_builtin_macro (pfile, node))
2658 return false;
2659 }
Simon Baldwinc047ce92008-09-18 15:39:08 +00002660
Ben Elliston5950c3c2008-07-14 05:09:48 +00002661 /* Redefinitions of conditional (context-sensitive) macros, on
2662 the other hand, must be allowed silently. */
2663 if (node->flags & NODE_CONDITIONAL)
2664 return false;
2665
Neil Booth618cdda2001-02-25 09:43:03 +00002666 /* Redefinition of a macro is allowed if and only if the old and new
Kazu Hirataec5c56d2001-08-01 17:57:27 +00002667 definitions are the same. (6.10.3 paragraph 2). */
Neil Booth93c803682000-10-28 17:59:06 +00002668 macro1 = node->value.macro;
2669
Neil Booth6618c5d2002-06-10 06:03:13 +00002670 /* Don't check count here as it can be different in valid
2671 traditional redefinitions with just whitespace differences. */
2672 if (macro1->paramc != macro2->paramc
Neil Booth93c803682000-10-28 17:59:06 +00002673 || macro1->fun_like != macro2->fun_like
Neil Booth28e0f042000-12-09 12:06:37 +00002674 || macro1->variadic != macro2->variadic)
Neil Boothcbc69f82002-06-05 20:27:12 +00002675 return true;
Neil Booth93c803682000-10-28 17:59:06 +00002676
2677 /* Check parameter spellings. */
2678 for (i = 0; i < macro1->paramc; i++)
2679 if (macro1->params[i] != macro2->params[i])
Neil Boothcbc69f82002-06-05 20:27:12 +00002680 return true;
Neil Booth93c803682000-10-28 17:59:06 +00002681
Neil Boothcbc69f82002-06-05 20:27:12 +00002682 /* Check the replacement text or tokens. */
2683 if (CPP_OPTION (pfile, traditional))
Neil Booth6618c5d2002-06-10 06:03:13 +00002684 return _cpp_expansions_different_trad (macro1, macro2);
Neil Boothcbc69f82002-06-05 20:27:12 +00002685
DJ Deloriea7f36da2003-06-01 14:55:15 -04002686 if (macro1->count != macro2->count)
2687 return true;
2688
2689 for (i = 0; i < macro1->count; i++)
2690 if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
2691 return true;
Neil Boothcbc69f82002-06-05 20:27:12 +00002692
2693 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00002694}
2695
Neil Booth93c803682000-10-28 17:59:06 +00002696/* Free the definition of hashnode H. */
Neil Booth93c803682000-10-28 17:59:06 +00002697void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002698_cpp_free_definition (cpp_hashnode *h)
Zack Weinberg711b8822000-07-18 00:59:49 +00002699{
Neil Booth93c803682000-10-28 17:59:06 +00002700 /* Macros and assertions no longer have anything to free. */
2701 h->type = NT_VOID;
2702 /* Clear builtin flag in case of redefinition. */
Joseph Myers93d45d92008-04-02 20:42:53 +01002703 h->flags &= ~(NODE_BUILTIN | NODE_DISABLED | NODE_USED);
Neil Booth93c803682000-10-28 17:59:06 +00002704}
Zack Weinberg711b8822000-07-18 00:59:49 +00002705
Neil Booth14baae02001-09-17 18:26:12 +00002706/* Save parameter NODE to the parameter list of macro MACRO. Returns
Kazu Hiratada7d8302002-09-22 02:03:17 +00002707 zero on success, nonzero if the parameter is a duplicate. */
Neil Boothc70f6ed2002-06-07 06:26:32 +00002708bool
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002709_cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
Neil Booth93c803682000-10-28 17:59:06 +00002710{
Zack Weinberg4977bab2002-12-16 18:23:00 +00002711 unsigned int len;
Neil Booth93c803682000-10-28 17:59:06 +00002712 /* Constraint 6.10.3.6 - duplicate parameter names. */
Zack Weinberg4977bab2002-12-16 18:23:00 +00002713 if (node->flags & NODE_MACRO_ARG)
Zack Weinberg711b8822000-07-18 00:59:49 +00002714 {
John David Anglin0527bc42003-11-01 22:56:54 +00002715 cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
Neil Boothebef4e82002-04-14 18:42:47 +00002716 NODE_NAME (node));
Neil Booth23ff0222002-07-17 17:27:14 +00002717 return true;
Neil Booth93c803682000-10-28 17:59:06 +00002718 }
2719
Neil Booth8c3b2692001-09-30 10:03:11 +00002720 if (BUFF_ROOM (pfile->a_buff)
2721 < (macro->paramc + 1) * sizeof (cpp_hashnode *))
2722 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
Neil Booth93c803682000-10-28 17:59:06 +00002723
Neil Booth8c3b2692001-09-30 10:03:11 +00002724 ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
Zack Weinberg4977bab2002-12-16 18:23:00 +00002725 node->flags |= NODE_MACRO_ARG;
2726 len = macro->paramc * sizeof (union _cpp_hashnode_value);
2727 if (len > pfile->macro_buffer_len)
2728 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00002729 pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
2730 len);
Zack Weinberg4977bab2002-12-16 18:23:00 +00002731 pfile->macro_buffer_len = len;
2732 }
2733 ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
2734 = node->value;
2735
2736 node->value.arg_index = macro->paramc;
Neil Booth23ff0222002-07-17 17:27:14 +00002737 return false;
Neil Booth93c803682000-10-28 17:59:06 +00002738}
2739
Neil Booth23ff0222002-07-17 17:27:14 +00002740/* Check the syntax of the parameters in a MACRO definition. Returns
2741 false if an error occurs. */
2742static bool
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002743parse_params (cpp_reader *pfile, cpp_macro *macro)
Neil Booth93c803682000-10-28 17:59:06 +00002744{
Neil Booth93c803682000-10-28 17:59:06 +00002745 unsigned int prev_ident = 0;
2746
Neil Booth93c803682000-10-28 17:59:06 +00002747 for (;;)
2748 {
Neil Booth345894b2001-09-16 13:44:29 +00002749 const cpp_token *token = _cpp_lex_token (pfile);
Neil Booth93c803682000-10-28 17:59:06 +00002750
Neil Booth345894b2001-09-16 13:44:29 +00002751 switch (token->type)
Zack Weinberg711b8822000-07-18 00:59:49 +00002752 {
2753 default:
Jason Thorpe477cdac2002-04-07 03:12:23 +00002754 /* Allow/ignore comments in parameter lists if we are
2755 preserving comments in macro expansions. */
2756 if (token->type == CPP_COMMENT
2757 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
2758 continue;
2759
John David Anglin0527bc42003-11-01 22:56:54 +00002760 cpp_error (pfile, CPP_DL_ERROR,
Neil Boothebef4e82002-04-14 18:42:47 +00002761 "\"%s\" may not appear in macro parameter list",
Neil Booth345894b2001-09-16 13:44:29 +00002762 cpp_token_as_text (pfile, token));
Neil Booth23ff0222002-07-17 17:27:14 +00002763 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00002764
Zack Weinberg711b8822000-07-18 00:59:49 +00002765 case CPP_NAME:
2766 if (prev_ident)
2767 {
John David Anglin0527bc42003-11-01 22:56:54 +00002768 cpp_error (pfile, CPP_DL_ERROR,
Neil Boothebef4e82002-04-14 18:42:47 +00002769 "macro parameters must be comma-separated");
Neil Booth23ff0222002-07-17 17:27:14 +00002770 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00002771 }
Zack Weinberg711b8822000-07-18 00:59:49 +00002772 prev_ident = 1;
Neil Booth93c803682000-10-28 17:59:06 +00002773
Joseph Myers9a0c6182009-05-10 15:27:32 +01002774 if (_cpp_save_parameter (pfile, macro, token->val.node.node))
Neil Booth23ff0222002-07-17 17:27:14 +00002775 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00002776 continue;
2777
2778 case CPP_CLOSE_PAREN:
Neil Booth93c803682000-10-28 17:59:06 +00002779 if (prev_ident || macro->paramc == 0)
Neil Booth23ff0222002-07-17 17:27:14 +00002780 return true;
Zack Weinberg711b8822000-07-18 00:59:49 +00002781
2782 /* Fall through to pick up the error. */
2783 case CPP_COMMA:
2784 if (!prev_ident)
2785 {
John David Anglin0527bc42003-11-01 22:56:54 +00002786 cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
Neil Booth23ff0222002-07-17 17:27:14 +00002787 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00002788 }
2789 prev_ident = 0;
2790 continue;
2791
2792 case CPP_ELLIPSIS:
Neil Booth28e0f042000-12-09 12:06:37 +00002793 macro->variadic = 1;
Zack Weinberg711b8822000-07-18 00:59:49 +00002794 if (!prev_ident)
2795 {
Neil Boothc70f6ed2002-06-07 06:26:32 +00002796 _cpp_save_parameter (pfile, macro,
2797 pfile->spec_nodes.n__VA_ARGS__);
Neil Booth93c803682000-10-28 17:59:06 +00002798 pfile->state.va_args_ok = 1;
Richard Hendersone5b79212004-02-19 14:18:50 -08002799 if (! CPP_OPTION (pfile, c99)
Joseph Myerse3339d02010-09-29 15:49:14 +01002800 && CPP_OPTION (pfile, cpp_pedantic)
Richard Hendersone5b79212004-02-19 14:18:50 -08002801 && CPP_OPTION (pfile, warn_variadic_macros))
Simon Baldwin87cf0652010-04-07 17:18:10 +00002802 cpp_pedwarning
2803 (pfile, CPP_W_VARIADIC_MACROS,
2804 "anonymous variadic macros were introduced in C99");
Zack Weinberg711b8822000-07-18 00:59:49 +00002805 }
Joseph Myerse3339d02010-09-29 15:49:14 +01002806 else if (CPP_OPTION (pfile, cpp_pedantic)
Richard Hendersone5b79212004-02-19 14:18:50 -08002807 && CPP_OPTION (pfile, warn_variadic_macros))
Simon Baldwin87cf0652010-04-07 17:18:10 +00002808 cpp_pedwarning (pfile, CPP_W_VARIADIC_MACROS,
2809 "ISO C does not permit named variadic macros");
Zack Weinberg711b8822000-07-18 00:59:49 +00002810
Neil Booth93c803682000-10-28 17:59:06 +00002811 /* We're at the end, and just expect a closing parenthesis. */
Neil Booth345894b2001-09-16 13:44:29 +00002812 token = _cpp_lex_token (pfile);
2813 if (token->type == CPP_CLOSE_PAREN)
Neil Booth23ff0222002-07-17 17:27:14 +00002814 return true;
Neil Booth93c803682000-10-28 17:59:06 +00002815 /* Fall through. */
2816
2817 case CPP_EOF:
John David Anglin0527bc42003-11-01 22:56:54 +00002818 cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
Neil Booth23ff0222002-07-17 17:27:14 +00002819 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00002820 }
Zack Weinberg711b8822000-07-18 00:59:49 +00002821 }
2822}
2823
Neil Booth14baae02001-09-17 18:26:12 +00002824/* Allocate room for a token from a macro's replacement list. */
Neil Booth93c803682000-10-28 17:59:06 +00002825static cpp_token *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002826alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
Zack Weinberg711b8822000-07-18 00:59:49 +00002827{
Neil Booth8c3b2692001-09-30 10:03:11 +00002828 if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
2829 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
Zack Weinberg711b8822000-07-18 00:59:49 +00002830
Neil Booth8c3b2692001-09-30 10:03:11 +00002831 return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
Neil Booth14baae02001-09-17 18:26:12 +00002832}
2833
Neil Boothd15a58c2002-01-03 18:32:55 +00002834/* Lex a token from the expansion of MACRO, but mark parameters as we
2835 find them and warn of traditional stringification. */
Neil Booth14baae02001-09-17 18:26:12 +00002836static cpp_token *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002837lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
Neil Booth14baae02001-09-17 18:26:12 +00002838{
Tom Tromeyee380362007-01-30 15:46:01 +00002839 cpp_token *token, *saved_cur_token;
Neil Booth14baae02001-09-17 18:26:12 +00002840
Tom Tromeyee380362007-01-30 15:46:01 +00002841 saved_cur_token = pfile->cur_token;
Neil Booth14baae02001-09-17 18:26:12 +00002842 pfile->cur_token = alloc_expansion_token (pfile, macro);
2843 token = _cpp_lex_direct (pfile);
Tom Tromeyee380362007-01-30 15:46:01 +00002844 pfile->cur_token = saved_cur_token;
Neil Booth93c803682000-10-28 17:59:06 +00002845
Neil Boothd15a58c2002-01-03 18:32:55 +00002846 /* Is this a parameter? */
Zack Weinberg4977bab2002-12-16 18:23:00 +00002847 if (token->type == CPP_NAME
Joseph Myers9a0c6182009-05-10 15:27:32 +01002848 && (token->val.node.node->flags & NODE_MACRO_ARG) != 0)
Zack Weinberg711b8822000-07-18 00:59:49 +00002849 {
Neil Booth93c803682000-10-28 17:59:06 +00002850 token->type = CPP_MACRO_ARG;
Joseph Myers9a0c6182009-05-10 15:27:32 +01002851 token->val.macro_arg.arg_no = token->val.node.node->value.arg_index;
Zack Weinberg711b8822000-07-18 00:59:49 +00002852 }
Neil Booth93c803682000-10-28 17:59:06 +00002853 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
2854 && (token->type == CPP_STRING || token->type == CPP_CHAR))
2855 check_trad_stringification (pfile, macro, &token->val.str);
Zack Weinberg711b8822000-07-18 00:59:49 +00002856
Neil Booth93c803682000-10-28 17:59:06 +00002857 return token;
Zack Weinberg711b8822000-07-18 00:59:49 +00002858}
2859
Neil Boothcbc69f82002-06-05 20:27:12 +00002860static bool
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00002861create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
Zack Weinberg711b8822000-07-18 00:59:49 +00002862{
Neil Boothcbc69f82002-06-05 20:27:12 +00002863 cpp_token *token;
Neil Booth14baae02001-09-17 18:26:12 +00002864 const cpp_token *ctoken;
Simon Martin126e0732007-05-23 20:58:34 +00002865 bool following_paste_op = false;
2866 const char *paste_op_error_msg =
2867 N_("'##' cannot appear at either end of a macro expansion");
Joseph Myersaa508502009-04-19 18:10:56 +01002868 unsigned int num_extra_tokens = 0;
Zack Weinberg711b8822000-07-18 00:59:49 +00002869
Neil Booth93c803682000-10-28 17:59:06 +00002870 /* Get the first token of the expansion (or the '(' of a
2871 function-like macro). */
Neil Booth14baae02001-09-17 18:26:12 +00002872 ctoken = _cpp_lex_token (pfile);
2873
2874 if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
Zack Weinberg711b8822000-07-18 00:59:49 +00002875 {
Neil Boothcbc69f82002-06-05 20:27:12 +00002876 bool ok = parse_params (pfile, macro);
Neil Booth8c3b2692001-09-30 10:03:11 +00002877 macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
2878 if (!ok)
Neil Boothcbc69f82002-06-05 20:27:12 +00002879 return false;
Neil Booth8c3b2692001-09-30 10:03:11 +00002880
Geoffrey Keatingd8044162004-06-09 20:10:13 +00002881 /* Success. Commit or allocate the parameter array. */
2882 if (pfile->hash_table->alloc_subobject)
2883 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00002884 cpp_hashnode **params =
2885 (cpp_hashnode **) pfile->hash_table->alloc_subobject
2886 (sizeof (cpp_hashnode *) * macro->paramc);
Paolo Bonzinibe0f1e52005-02-14 08:52:24 +00002887 memcpy (params, macro->params,
2888 sizeof (cpp_hashnode *) * macro->paramc);
2889 macro->params = params;
Geoffrey Keatingd8044162004-06-09 20:10:13 +00002890 }
2891 else
2892 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
Neil Booth93c803682000-10-28 17:59:06 +00002893 macro->fun_like = 1;
Neil Booth93c803682000-10-28 17:59:06 +00002894 }
Neil Booth14baae02001-09-17 18:26:12 +00002895 else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
Jakub Jelinekcae064e2005-04-05 22:07:06 +02002896 {
2897 /* While ISO C99 requires whitespace before replacement text
2898 in a macro definition, ISO C90 with TC1 allows there characters
2899 from the basic source character set. */
2900 if (CPP_OPTION (pfile, c99))
2901 cpp_error (pfile, CPP_DL_PEDWARN,
2902 "ISO C99 requires whitespace after the macro name");
2903 else
2904 {
2905 int warntype = CPP_DL_WARNING;
2906 switch (ctoken->type)
2907 {
2908 case CPP_ATSIGN:
2909 case CPP_AT_NAME:
2910 case CPP_OBJC_STRING:
2911 /* '@' is not in basic character set. */
2912 warntype = CPP_DL_PEDWARN;
2913 break;
2914 case CPP_OTHER:
2915 /* Basic character set sans letters, digits and _. */
2916 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
2917 ctoken->val.str.text[0]) == NULL)
2918 warntype = CPP_DL_PEDWARN;
2919 break;
2920 default:
2921 /* All other tokens start with a character from basic
2922 character set. */
2923 break;
2924 }
2925 cpp_error (pfile, warntype,
2926 "missing whitespace after the macro name");
2927 }
2928 }
Neil Booth93c803682000-10-28 17:59:06 +00002929
Neil Booth14baae02001-09-17 18:26:12 +00002930 if (macro->fun_like)
2931 token = lex_expansion_token (pfile, macro);
2932 else
2933 {
2934 token = alloc_expansion_token (pfile, macro);
2935 *token = *ctoken;
2936 }
Neil Booth93c803682000-10-28 17:59:06 +00002937
2938 for (;;)
2939 {
2940 /* Check the stringifying # constraint 6.10.3.2.1 of
2941 function-like macros when lexing the subsequent token. */
2942 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
Zack Weinberg711b8822000-07-18 00:59:49 +00002943 {
Neil Booth93c803682000-10-28 17:59:06 +00002944 if (token->type == CPP_MACRO_ARG)
2945 {
Joseph Myersaa508502009-04-19 18:10:56 +01002946 if (token->flags & PREV_WHITE)
2947 token->flags |= SP_PREV_WHITE;
2948 if (token[-1].flags & DIGRAPH)
2949 token->flags |= SP_DIGRAPH;
Neil Booth93c803682000-10-28 17:59:06 +00002950 token->flags &= ~PREV_WHITE;
2951 token->flags |= STRINGIFY_ARG;
2952 token->flags |= token[-1].flags & PREV_WHITE;
2953 token[-1] = token[0];
2954 macro->count--;
2955 }
2956 /* Let assembler get away with murder. */
Neil Boothbdb05a72000-11-26 17:31:13 +00002957 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
Neil Booth93c803682000-10-28 17:59:06 +00002958 {
John David Anglin0527bc42003-11-01 22:56:54 +00002959 cpp_error (pfile, CPP_DL_ERROR,
Neil Boothebef4e82002-04-14 18:42:47 +00002960 "'#' is not followed by a macro parameter");
Neil Boothcbc69f82002-06-05 20:27:12 +00002961 return false;
Neil Booth93c803682000-10-28 17:59:06 +00002962 }
2963 }
2964
2965 if (token->type == CPP_EOF)
Simon Martin126e0732007-05-23 20:58:34 +00002966 {
2967 /* Paste operator constraint 6.10.3.3.1:
2968 Token-paste ##, can appear in both object-like and
2969 function-like macros, but not at the end. */
2970 if (following_paste_op)
2971 {
2972 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
2973 return false;
2974 }
2975 break;
2976 }
Neil Booth93c803682000-10-28 17:59:06 +00002977
2978 /* Paste operator constraint 6.10.3.3.1. */
2979 if (token->type == CPP_PASTE)
2980 {
2981 /* Token-paste ##, can appear in both object-like and
Simon Martin126e0732007-05-23 20:58:34 +00002982 function-like macros, but not at the beginning. */
2983 if (macro->count == 1)
Neil Booth93c803682000-10-28 17:59:06 +00002984 {
Simon Martin126e0732007-05-23 20:58:34 +00002985 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
Neil Boothcbc69f82002-06-05 20:27:12 +00002986 return false;
Neil Booth93c803682000-10-28 17:59:06 +00002987 }
2988
Joseph Myersaa508502009-04-19 18:10:56 +01002989 if (token[-1].flags & PASTE_LEFT)
2990 {
2991 macro->extra_tokens = 1;
2992 num_extra_tokens++;
Joseph Myers9a0c6182009-05-10 15:27:32 +01002993 token->val.token_no = macro->count - 1;
Joseph Myersaa508502009-04-19 18:10:56 +01002994 }
2995 else
2996 {
2997 --macro->count;
2998 token[-1].flags |= PASTE_LEFT;
2999 if (token->flags & DIGRAPH)
3000 token[-1].flags |= SP_DIGRAPH;
3001 if (token->flags & PREV_WHITE)
3002 token[-1].flags |= SP_PREV_WHITE;
3003 }
Neil Booth93c803682000-10-28 17:59:06 +00003004 }
3005
Simon Martin126e0732007-05-23 20:58:34 +00003006 following_paste_op = (token->type == CPP_PASTE);
Neil Booth93c803682000-10-28 17:59:06 +00003007 token = lex_expansion_token (pfile, macro);
3008 }
3009
Neil Booth601328b2002-05-16 05:53:24 +00003010 macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
Geoffrey Keatingd8044162004-06-09 20:10:13 +00003011 macro->traditional = 0;
Neil Booth8c3b2692001-09-30 10:03:11 +00003012
Neil Booth4c2b6472000-11-11 13:19:01 +00003013 /* Don't count the CPP_EOF. */
3014 macro->count--;
Neil Booth93c803682000-10-28 17:59:06 +00003015
Neil Boothd15a58c2002-01-03 18:32:55 +00003016 /* Clear whitespace on first token for warn_of_redefinition(). */
Neil Booth8c3b2692001-09-30 10:03:11 +00003017 if (macro->count)
Neil Booth601328b2002-05-16 05:53:24 +00003018 macro->exp.tokens[0].flags &= ~PREV_WHITE;
Neil Booth8c3b2692001-09-30 10:03:11 +00003019
Geoffrey Keatingd8044162004-06-09 20:10:13 +00003020 /* Commit or allocate the memory. */
3021 if (pfile->hash_table->alloc_subobject)
3022 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00003023 cpp_token *tokns =
3024 (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
3025 * macro->count);
Joseph Myersaa508502009-04-19 18:10:56 +01003026 if (num_extra_tokens)
3027 {
3028 /* Place second and subsequent ## or %:%: tokens in
3029 sequences of consecutive such tokens at the end of the
3030 list to preserve information about where they appear, how
3031 they are spelt and whether they are preceded by
3032 whitespace without otherwise interfering with macro
3033 expansion. */
3034 cpp_token *normal_dest = tokns;
3035 cpp_token *extra_dest = tokns + macro->count - num_extra_tokens;
3036 unsigned int i;
3037 for (i = 0; i < macro->count; i++)
3038 {
3039 if (macro->exp.tokens[i].type == CPP_PASTE)
3040 *extra_dest++ = macro->exp.tokens[i];
3041 else
3042 *normal_dest++ = macro->exp.tokens[i];
3043 }
3044 }
3045 else
3046 memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
Geoffrey Keatingd8044162004-06-09 20:10:13 +00003047 macro->exp.tokens = tokns;
3048 }
3049 else
3050 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
Neil Booth8c3b2692001-09-30 10:03:11 +00003051
Neil Boothcbc69f82002-06-05 20:27:12 +00003052 return true;
3053}
Neil Booth44ed91a2000-10-29 11:37:18 +00003054
Kazu Hiratada7d8302002-09-22 02:03:17 +00003055/* Parse a macro and save its expansion. Returns nonzero on success. */
Neil Boothcbc69f82002-06-05 20:27:12 +00003056bool
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00003057_cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
Neil Boothcbc69f82002-06-05 20:27:12 +00003058{
3059 cpp_macro *macro;
3060 unsigned int i;
3061 bool ok;
3062
Geoffrey Keatingd8044162004-06-09 20:10:13 +00003063 if (pfile->hash_table->alloc_subobject)
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00003064 macro = (cpp_macro *) pfile->hash_table->alloc_subobject
3065 (sizeof (cpp_macro));
Geoffrey Keatingd8044162004-06-09 20:10:13 +00003066 else
3067 macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
Neil Boothcbc69f82002-06-05 20:27:12 +00003068 macro->line = pfile->directive_line;
3069 macro->params = 0;
3070 macro->paramc = 0;
3071 macro->variadic = 0;
Neil Booth23345bb2003-03-14 21:47:50 +00003072 macro->used = !CPP_OPTION (pfile, warn_unused_macros);
Neil Boothcbc69f82002-06-05 20:27:12 +00003073 macro->count = 0;
3074 macro->fun_like = 0;
Joseph Myersaa508502009-04-19 18:10:56 +01003075 macro->extra_tokens = 0;
Neil Booth7065e132001-02-14 07:38:20 +00003076 /* To suppress some diagnostics. */
Per Bothner12f9df42004-02-11 07:29:30 -08003077 macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
Neil Booth7065e132001-02-14 07:38:20 +00003078
Neil Boothcbc69f82002-06-05 20:27:12 +00003079 if (CPP_OPTION (pfile, traditional))
3080 ok = _cpp_create_trad_definition (pfile, macro);
3081 else
3082 {
Neil Boothcbc69f82002-06-05 20:27:12 +00003083 ok = create_iso_definition (pfile, macro);
3084
Tom Tromeyee380362007-01-30 15:46:01 +00003085 /* We set the type for SEEN_EOL() in directives.c.
Neil Boothcbc69f82002-06-05 20:27:12 +00003086
3087 Longer term we should lex the whole line before coming here,
3088 and just copy the expansion. */
Neil Boothcbc69f82002-06-05 20:27:12 +00003089
3090 /* Stop the lexer accepting __VA_ARGS__. */
3091 pfile->state.va_args_ok = 0;
3092 }
3093
3094 /* Clear the fast argument lookup indices. */
3095 for (i = macro->paramc; i-- > 0; )
Zack Weinberg4977bab2002-12-16 18:23:00 +00003096 {
3097 struct cpp_hashnode *node = macro->params[i];
3098 node->flags &= ~ NODE_MACRO_ARG;
3099 node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
3100 }
Neil Boothcbc69f82002-06-05 20:27:12 +00003101
3102 if (!ok)
3103 return ok;
3104
Neil Boothc2734e02002-07-26 16:29:31 +00003105 if (node->type == NT_MACRO)
Neil Booth93c803682000-10-28 17:59:06 +00003106 {
Neil Bootha69cbaa2002-07-23 22:57:49 +00003107 if (CPP_OPTION (pfile, warn_unused_macros))
3108 _cpp_warn_if_unused_macro (pfile, node, NULL);
3109
Neil Boothcbc69f82002-06-05 20:27:12 +00003110 if (warn_of_redefinition (pfile, node, macro))
Neil Booth93c803682000-10-28 17:59:06 +00003111 {
Simon Baldwin87cf0652010-04-07 17:18:10 +00003112 const int reason = (node->flags & NODE_BUILTIN)
3113 ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
Joseph Myers148e4212009-03-29 23:56:07 +01003114 bool warned;
Simon Baldwin87cf0652010-04-07 17:18:10 +00003115
3116 warned = cpp_pedwarning_with_line (pfile, reason,
3117 pfile->directive_line, 0,
3118 "\"%s\" redefined",
3119 NODE_NAME (node));
Neil Booth93c803682000-10-28 17:59:06 +00003120
Joseph Myers148e4212009-03-29 23:56:07 +01003121 if (warned && node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
3122 cpp_error_with_line (pfile, CPP_DL_NOTE,
Neil Boothcbc69f82002-06-05 20:27:12 +00003123 node->value.macro->line, 0,
3124 "this is the location of the previous definition");
Zack Weinberg711b8822000-07-18 00:59:49 +00003125 }
Zack Weinberg711b8822000-07-18 00:59:49 +00003126 }
3127
Neil Boothc2734e02002-07-26 16:29:31 +00003128 if (node->type != NT_VOID)
3129 _cpp_free_definition (node);
3130
Zack Weinberg711b8822000-07-18 00:59:49 +00003131 /* Enter definition in hash table. */
Neil Booth93c803682000-10-28 17:59:06 +00003132 node->type = NT_MACRO;
3133 node->value.macro = macro;
Tom Tromey607f74e2007-11-30 18:24:01 +00003134 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
Tom Tromeyec460532008-01-22 21:43:49 +00003135 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
3136 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
3137 in the C standard, as something that one must use in C++.
3138 However DR#593 indicates that these aren't actually mentioned
3139 in the C++ standard. We special-case them anyway. */
3140 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
3141 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
Neil Booth618cdda2001-02-25 09:43:03 +00003142 node->flags |= NODE_WARN;
Zack Weinberg711b8822000-07-18 00:59:49 +00003143
Ben Elliston5950c3c2008-07-14 05:09:48 +00003144 /* If user defines one of the conditional macros, remove the
3145 conditional flag */
3146 node->flags &= ~NODE_CONDITIONAL;
3147
Neil Booth93c803682000-10-28 17:59:06 +00003148 return ok;
Zack Weinberg711b8822000-07-18 00:59:49 +00003149}
3150
Neil Boothd15a58c2002-01-03 18:32:55 +00003151/* Warn if a token in STRING matches one of a function-like MACRO's
3152 parameters. */
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00003153static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00003154check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
3155 const cpp_string *string)
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00003156{
Neil Booth93c803682000-10-28 17:59:06 +00003157 unsigned int i, len;
Neil Booth6338b352003-04-23 22:44:06 +00003158 const uchar *p, *q, *limit;
Kazu Hiratadf383482002-05-22 22:02:16 +00003159
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00003160 /* Loop over the string. */
Neil Booth6338b352003-04-23 22:44:06 +00003161 limit = string->text + string->len - 1;
3162 for (p = string->text + 1; p < limit; p = q)
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00003163 {
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00003164 /* Find the start of an identifier. */
Greg McGary61c16b12000-09-15 21:25:02 +00003165 while (p < limit && !is_idstart (*p))
3166 p++;
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00003167
3168 /* Find the end of the identifier. */
3169 q = p;
Greg McGary61c16b12000-09-15 21:25:02 +00003170 while (q < limit && is_idchar (*q))
3171 q++;
Neil Booth93c803682000-10-28 17:59:06 +00003172
3173 len = q - p;
3174
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00003175 /* Loop over the function macro arguments to see if the
3176 identifier inside the string matches one of them. */
Neil Booth93c803682000-10-28 17:59:06 +00003177 for (i = 0; i < macro->paramc; i++)
3178 {
3179 const cpp_hashnode *node = macro->params[i];
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00003180
Neil Booth2a967f32001-05-20 06:26:45 +00003181 if (NODE_LEN (node) == len
3182 && !memcmp (p, NODE_NAME (node), len))
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00003183 {
John David Anglin0527bc42003-11-01 22:56:54 +00003184 cpp_error (pfile, CPP_DL_WARNING,
Zack Weinbergf458d1d2002-02-27 18:48:07 +00003185 "macro argument \"%s\" would be stringified in traditional C",
Neil Boothebef4e82002-04-14 18:42:47 +00003186 NODE_NAME (node));
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00003187 break;
3188 }
3189 }
3190 }
3191}
Neil Booth93c803682000-10-28 17:59:06 +00003192
Neil Booth70961712001-06-23 11:34:41 +00003193/* Returns the name, arguments and expansion of a macro, in a format
3194 suitable to be read back in again, and therefore also for DWARF 2
3195 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
3196 Caller is expected to generate the "#define" bit if needed. The
Neil Booth93c803682000-10-28 17:59:06 +00003197 returned text is temporary, and automatically freed later. */
Neil Booth93c803682000-10-28 17:59:06 +00003198const unsigned char *
Jakub Jelinek8e680db2010-06-11 20:37:34 +02003199cpp_macro_definition (cpp_reader *pfile, cpp_hashnode *node)
Neil Booth93c803682000-10-28 17:59:06 +00003200{
3201 unsigned int i, len;
Jakub Jelinek8e680db2010-06-11 20:37:34 +02003202 const cpp_macro *macro;
Neil Booth93c803682000-10-28 17:59:06 +00003203 unsigned char *buffer;
3204
3205 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
3206 {
Jakub Jelinek8e680db2010-06-11 20:37:34 +02003207 if (node->type != NT_MACRO
3208 || !pfile->cb.user_builtin_macro
3209 || !pfile->cb.user_builtin_macro (pfile, node))
3210 {
3211 cpp_error (pfile, CPP_DL_ICE,
3212 "invalid hash type %d in cpp_macro_definition",
3213 node->type);
3214 return 0;
3215 }
Neil Booth93c803682000-10-28 17:59:06 +00003216 }
3217
Jakub Jelinek8e680db2010-06-11 20:37:34 +02003218 macro = node->value.macro;
Neil Booth93c803682000-10-28 17:59:06 +00003219 /* Calculate length. */
Neil Booth8dc901d2002-05-29 19:30:07 +00003220 len = NODE_LEN (node) + 2; /* ' ' and NUL. */
Neil Booth93c803682000-10-28 17:59:06 +00003221 if (macro->fun_like)
3222 {
Jim Blandy64d08262002-04-05 00:12:40 +00003223 len += 4; /* "()" plus possible final ".." of named
3224 varargs (we have + 1 below). */
Neil Booth93c803682000-10-28 17:59:06 +00003225 for (i = 0; i < macro->paramc; i++)
Jim Blandy64d08262002-04-05 00:12:40 +00003226 len += NODE_LEN (macro->params[i]) + 1; /* "," */
Neil Booth93c803682000-10-28 17:59:06 +00003227 }
3228
Eric Christopher6da55c02005-02-15 23:18:04 +00003229 /* This should match below where we fill in the buffer. */
Neil Booth278c4662002-06-19 05:40:08 +00003230 if (CPP_OPTION (pfile, traditional))
3231 len += _cpp_replacement_text_len (macro);
3232 else
Neil Booth93c803682000-10-28 17:59:06 +00003233 {
Joseph Myersaa508502009-04-19 18:10:56 +01003234 unsigned int count = macro_real_token_count (macro);
3235 for (i = 0; i < count; i++)
Neil Booth278c4662002-06-19 05:40:08 +00003236 {
3237 cpp_token *token = &macro->exp.tokens[i];
Neil Booth93c803682000-10-28 17:59:06 +00003238
Neil Booth278c4662002-06-19 05:40:08 +00003239 if (token->type == CPP_MACRO_ARG)
Joseph Myers9a0c6182009-05-10 15:27:32 +01003240 len += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
Neil Booth278c4662002-06-19 05:40:08 +00003241 else
Eric Christopher6da55c02005-02-15 23:18:04 +00003242 len += cpp_token_len (token);
3243
Neil Booth278c4662002-06-19 05:40:08 +00003244 if (token->flags & STRINGIFY_ARG)
3245 len++; /* "#" */
3246 if (token->flags & PASTE_LEFT)
3247 len += 3; /* " ##" */
Eric Christopher6da55c02005-02-15 23:18:04 +00003248 if (token->flags & PREV_WHITE)
3249 len++; /* " " */
Neil Booth278c4662002-06-19 05:40:08 +00003250 }
Neil Booth93c803682000-10-28 17:59:06 +00003251 }
3252
3253 if (len > pfile->macro_buffer_len)
Alexandre Oliva4b49c362001-01-09 09:30:43 +00003254 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00003255 pfile->macro_buffer = XRESIZEVEC (unsigned char,
3256 pfile->macro_buffer, len);
Alexandre Oliva4b49c362001-01-09 09:30:43 +00003257 pfile->macro_buffer_len = len;
3258 }
Neil Booth70961712001-06-23 11:34:41 +00003259
3260 /* Fill in the buffer. Start with the macro name. */
Neil Booth93c803682000-10-28 17:59:06 +00003261 buffer = pfile->macro_buffer;
Neil Booth70961712001-06-23 11:34:41 +00003262 memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
3263 buffer += NODE_LEN (node);
Neil Booth93c803682000-10-28 17:59:06 +00003264
3265 /* Parameter names. */
3266 if (macro->fun_like)
3267 {
3268 *buffer++ = '(';
3269 for (i = 0; i < macro->paramc; i++)
3270 {
3271 cpp_hashnode *param = macro->params[i];
3272
3273 if (param != pfile->spec_nodes.n__VA_ARGS__)
3274 {
Neil Bootha28c50352001-05-16 22:02:09 +00003275 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
3276 buffer += NODE_LEN (param);
Neil Booth93c803682000-10-28 17:59:06 +00003277 }
3278
3279 if (i + 1 < macro->paramc)
Kazu Hiratadf383482002-05-22 22:02:16 +00003280 /* Don't emit a space after the comma here; we're trying
3281 to emit a Dwarf-friendly definition, and the Dwarf spec
3282 forbids spaces in the argument list. */
Jim Blandy64d08262002-04-05 00:12:40 +00003283 *buffer++ = ',';
Neil Booth28e0f042000-12-09 12:06:37 +00003284 else if (macro->variadic)
Neil Booth93c803682000-10-28 17:59:06 +00003285 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
3286 }
3287 *buffer++ = ')';
3288 }
3289
Jim Blandye37b38d2002-03-19 21:43:39 +00003290 /* The Dwarf spec requires a space after the macro name, even if the
3291 definition is the empty string. */
3292 *buffer++ = ' ';
3293
Neil Booth278c4662002-06-19 05:40:08 +00003294 if (CPP_OPTION (pfile, traditional))
3295 buffer = _cpp_copy_replacement_text (macro, buffer);
3296 else if (macro->count)
Neil Booth93c803682000-10-28 17:59:06 +00003297 /* Expansion tokens. */
Neil Booth93c803682000-10-28 17:59:06 +00003298 {
Joseph Myersaa508502009-04-19 18:10:56 +01003299 unsigned int count = macro_real_token_count (macro);
3300 for (i = 0; i < count; i++)
Neil Booth93c803682000-10-28 17:59:06 +00003301 {
Neil Booth601328b2002-05-16 05:53:24 +00003302 cpp_token *token = &macro->exp.tokens[i];
Neil Booth93c803682000-10-28 17:59:06 +00003303
3304 if (token->flags & PREV_WHITE)
3305 *buffer++ = ' ';
3306 if (token->flags & STRINGIFY_ARG)
3307 *buffer++ = '#';
3308
3309 if (token->type == CPP_MACRO_ARG)
3310 {
Neil Bootha28c50352001-05-16 22:02:09 +00003311 memcpy (buffer,
Joseph Myers9a0c6182009-05-10 15:27:32 +01003312 NODE_NAME (macro->params[token->val.macro_arg.arg_no - 1]),
3313 NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]));
3314 buffer += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
Neil Booth93c803682000-10-28 17:59:06 +00003315 }
3316 else
Geoffrey Keating47e20492005-03-12 10:44:06 +00003317 buffer = cpp_spell_token (pfile, token, buffer, false);
Neil Booth93c803682000-10-28 17:59:06 +00003318
3319 if (token->flags & PASTE_LEFT)
3320 {
3321 *buffer++ = ' ';
3322 *buffer++ = '#';
3323 *buffer++ = '#';
3324 /* Next has PREV_WHITE; see _cpp_create_definition. */
3325 }
3326 }
3327 }
3328
3329 *buffer = '\0';
3330 return pfile->macro_buffer;
3331}