blob: 31de4156c6420fa04399f4921ada0b297a836b6f [file] [log] [blame]
Neil Booth93c803682000-10-28 17:59:06 +00001/* Part of CPP library. (Macro and #define handling.)
Zack Weinberg711b8822000-07-18 00:59:49 +00002 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
Tom Tromeyee380362007-01-30 15:46:01 +00003 1999, 2000, 2001, 2002, 2003, 2004, 2005,
Joseph Myers148e4212009-03-29 23:56:07 +01004 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
Zack Weinberg711b8822000-07-18 00:59:49 +00005 Written by Per Bothner, 1994.
6 Based on CCCP program by Paul Rubin, June 1986
7 Adapted to ANSI C, Richard Stallman, Jan 1987
8
9This program is free software; you can redistribute it and/or modify it
10under the terms of the GNU General Public License as published by the
Jakub Jelinek748086b2009-04-09 17:00:19 +020011Free Software Foundation; either version 3, or (at your option) any
Zack Weinberg711b8822000-07-18 00:59:49 +000012later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
Jakub Jelinek748086b2009-04-09 17:00:19 +020020along with this program; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>.
Zack Weinberg711b8822000-07-18 00:59:49 +000022
23 In other words, you are welcome to use, share and improve this program.
24 You are forbidden to forbid anyone else to use, share and improve
25 what you give them. Help stamp out software-hoarding! */
26
27#include "config.h"
28#include "system.h"
29#include "cpplib.h"
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +000030#include "internal.h"
Zack Weinberg711b8822000-07-18 00:59:49 +000031
Neil Booth93c803682000-10-28 17:59:06 +000032typedef struct macro_arg macro_arg;
33struct macro_arg
34{
Neil Booth4ed5bcf2001-09-24 22:53:12 +000035 const cpp_token **first; /* First token in unexpanded argument. */
Kazu Hirata6d2f8882001-10-10 11:33:39 +000036 const cpp_token **expanded; /* Macro-expanded argument. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +000037 const cpp_token *stringified; /* Stringified argument. */
Neil Booth93c803682000-10-28 17:59:06 +000038 unsigned int count; /* # of tokens in argument. */
39 unsigned int expanded_count; /* # of tokens in expanded argument. */
40};
Zack Weinberg711b8822000-07-18 00:59:49 +000041
Neil Booth93c803682000-10-28 17:59:06 +000042/* Macro expansion. */
43
Jakub Jelinek765d6002008-01-25 10:01:27 +010044static int enter_macro_context (cpp_reader *, cpp_hashnode *,
45 const cpp_token *);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000046static int builtin_macro (cpp_reader *, cpp_hashnode *);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000047static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
48 const cpp_token **, unsigned int);
Jakub Jelinek765d6002008-01-25 10:01:27 +010049static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *,
50 _cpp_buff **);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000051static cpp_context *next_context (cpp_reader *);
52static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
53static void expand_arg (cpp_reader *, macro_arg *);
54static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
55static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
56static void paste_all_tokens (cpp_reader *, const cpp_token *);
57static bool paste_tokens (cpp_reader *, const cpp_token **, const cpp_token *);
58static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
59 macro_arg *);
Jakub Jelinek765d6002008-01-25 10:01:27 +010060static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *,
61 _cpp_buff **);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000062static bool create_iso_definition (cpp_reader *, cpp_macro *);
Neil Booth93c803682000-10-28 17:59:06 +000063
Neil Booth93c803682000-10-28 17:59:06 +000064/* #define directive parsing and handling. */
65
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000066static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
67static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
Jakub Jelinek8e680db2010-06-11 20:37:34 +020068static bool warn_of_redefinition (cpp_reader *, cpp_hashnode *,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000069 const cpp_macro *);
70static bool parse_params (cpp_reader *, cpp_macro *);
71static void check_trad_stringification (cpp_reader *, const cpp_macro *,
72 const cpp_string *);
Zack Weinberg711b8822000-07-18 00:59:49 +000073
Neil Bootha69cbaa2002-07-23 22:57:49 +000074/* Emits a warning if NODE is a macro defined in the main file that
75 has not been used. */
76int
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000077_cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
78 void *v ATTRIBUTE_UNUSED)
Neil Bootha69cbaa2002-07-23 22:57:49 +000079{
80 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
81 {
82 cpp_macro *macro = node->value.macro;
83
84 if (!macro->used
Per Bothner50f59cd2004-01-19 21:30:18 -080085 && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
Simon Baldwin87cf0652010-04-07 17:18:10 +000086 cpp_warning_with_line (pfile, CPP_W_UNUSED_MACROS, macro->line, 0,
87 "macro \"%s\" is not used", NODE_NAME (node));
Neil Bootha69cbaa2002-07-23 22:57:49 +000088 }
89
90 return 1;
91}
92
Neil Booth4ed5bcf2001-09-24 22:53:12 +000093/* Allocates and returns a CPP_STRING token, containing TEXT of length
94 LEN, after null-terminating it. TEXT must be in permanent storage. */
95static const cpp_token *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000096new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
Zack Weinberg711b8822000-07-18 00:59:49 +000097{
Neil Booth4ed5bcf2001-09-24 22:53:12 +000098 cpp_token *token = _cpp_temp_token (pfile);
Zack Weinberg711b8822000-07-18 00:59:49 +000099
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000100 text[len] = '\0';
Neil Booth93c803682000-10-28 17:59:06 +0000101 token->type = CPP_STRING;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000102 token->val.str.len = len;
103 token->val.str.text = text;
Neil Booth93c803682000-10-28 17:59:06 +0000104 token->flags = 0;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000105 return token;
Neil Booth93c803682000-10-28 17:59:06 +0000106}
107
Neil Booth93c803682000-10-28 17:59:06 +0000108static const char * const monthnames[] =
109{
110 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
111 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
112};
113
Zack Weinberg21b11492004-09-09 19:16:56 +0000114/* Helper function for builtin_macro. Returns the text generated by
115 a builtin macro. */
Neil Booth278c4662002-06-19 05:40:08 +0000116const uchar *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000117_cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
Neil Booth93c803682000-10-28 17:59:06 +0000118{
Per Bothner12f9df42004-02-11 07:29:30 -0800119 const struct line_map *map;
Neil Booth278c4662002-06-19 05:40:08 +0000120 const uchar *result = NULL;
Manuel López-Ibáñez1bb64662008-07-21 09:33:38 +0000121 linenum_type number = 1;
Neil Booth644edda2001-10-02 12:57:24 +0000122
Neil Booth93c803682000-10-28 17:59:06 +0000123 switch (node->value.builtin)
124 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000125 default:
John David Anglin0527bc42003-11-01 22:56:54 +0000126 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
Neil Boothebef4e82002-04-14 18:42:47 +0000127 NODE_NAME (node));
Neil Booth278c4662002-06-19 05:40:08 +0000128 break;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000129
Grigory Zagorodnevbe8ac3e2006-02-18 09:25:31 +0000130 case BT_TIMESTAMP:
131 {
132 cpp_buffer *pbuffer = cpp_get_buffer (pfile);
133 if (pbuffer->timestamp == NULL)
134 {
135 /* Initialize timestamp value of the assotiated file. */
136 struct _cpp_file *file = cpp_get_file (pbuffer);
137 if (file)
138 {
139 /* Generate __TIMESTAMP__ string, that represents
140 the date and time of the last modification
141 of the current source file. The string constant
142 looks like "Sun Sep 16 01:03:52 1973". */
143 struct tm *tb = NULL;
144 struct stat *st = _cpp_get_file_stat (file);
145 if (st)
146 tb = localtime (&st->st_mtime);
147 if (tb)
148 {
149 char *str = asctime (tb);
150 size_t len = strlen (str);
151 unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
152 buf[0] = '"';
153 strcpy ((char *) buf + 1, str);
154 buf[len] = '"';
155 pbuffer->timestamp = buf;
156 }
157 else
158 {
159 cpp_errno (pfile, CPP_DL_WARNING,
160 "could not determine file timestamp");
Kris Van Heesb6baa672008-04-18 13:58:08 +0000161 pbuffer->timestamp = UC"\"??? ??? ?? ??:??:?? ????\"";
Grigory Zagorodnevbe8ac3e2006-02-18 09:25:31 +0000162 }
163 }
164 }
165 result = pbuffer->timestamp;
166 }
167 break;
Neil Booth93c803682000-10-28 17:59:06 +0000168 case BT_FILE:
169 case BT_BASE_FILE:
Zack Weinberg711b8822000-07-18 00:59:49 +0000170 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000171 unsigned int len;
Neil Booth0bda4762000-12-11 07:45:16 +0000172 const char *name;
Neil Booth562a5c22002-04-21 18:46:42 +0000173 uchar *buf;
Per Bothner500bee02004-04-22 19:22:27 -0700174 map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line);
Neil Booth93c803682000-10-28 17:59:06 +0000175
Neil Booth0bda4762000-12-11 07:45:16 +0000176 if (node->value.builtin == BT_BASE_FILE)
Neil Boothbb74c962001-08-17 22:23:49 +0000177 while (! MAIN_FILE_P (map))
Per Bothner50f59cd2004-01-19 21:30:18 -0800178 map = INCLUDED_FROM (pfile->line_table, map);
Neil Booth93c803682000-10-28 17:59:06 +0000179
Neil Boothbb74c962001-08-17 22:23:49 +0000180 name = map->to_file;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000181 len = strlen (name);
Andrew Pinski651ed942005-11-04 00:23:01 +0000182 buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
Neil Booth278c4662002-06-19 05:40:08 +0000183 result = buf;
184 *buf = '"';
185 buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
186 *buf++ = '"';
187 *buf = '\0';
Zack Weinberg711b8822000-07-18 00:59:49 +0000188 }
Neil Booth644edda2001-10-02 12:57:24 +0000189 break;
190
Neil Booth93c803682000-10-28 17:59:06 +0000191 case BT_INCLUDE_LEVEL:
Neil Boothd8693c62001-08-21 23:05:12 +0000192 /* The line map depth counts the primary source as level 1, but
193 historically __INCLUDE_DEPTH__ has called the primary source
194 level 0. */
Per Bothner50f59cd2004-01-19 21:30:18 -0800195 number = pfile->line_table->depth - 1;
Neil Booth644edda2001-10-02 12:57:24 +0000196 break;
Neil Booth93c803682000-10-28 17:59:06 +0000197
198 case BT_SPECLINE:
Per Bothner500bee02004-04-22 19:22:27 -0700199 map = &pfile->line_table->maps[pfile->line_table->used-1];
Neil Booth93c803682000-10-28 17:59:06 +0000200 /* If __LINE__ is embedded in a macro, it must expand to the
201 line of the macro's invocation, not its definition.
202 Otherwise things like assert() will not work properly. */
Manuel López-Ibáñez1bb64662008-07-21 09:33:38 +0000203 number = SOURCE_LINE (map,
204 CPP_OPTION (pfile, traditional)
205 ? pfile->line_table->highest_line
206 : pfile->cur_token[-1].src_loc);
Neil Booth644edda2001-10-02 12:57:24 +0000207 break;
Neil Booth93c803682000-10-28 17:59:06 +0000208
Zack Weinberg5279d732002-05-16 19:03:02 +0000209 /* __STDC__ has the value 1 under normal circumstances.
210 However, if (a) we are in a system header, (b) the option
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000211 stdc_0_in_system_headers is true (set by target config), and
212 (c) we are not in strictly conforming mode, then it has the
Jakub Jelinek83900992006-01-23 22:50:15 +0100213 value 0. (b) and (c) are already checked in cpp_init_builtins. */
Neil Booth93c803682000-10-28 17:59:06 +0000214 case BT_STDC:
Jakub Jelinek83900992006-01-23 22:50:15 +0100215 if (cpp_in_system_header (pfile))
216 number = 0;
217 else
218 number = 1;
Neil Booth644edda2001-10-02 12:57:24 +0000219 break;
Neil Booth93c803682000-10-28 17:59:06 +0000220
221 case BT_DATE:
222 case BT_TIME:
Neil Booth278c4662002-06-19 05:40:08 +0000223 if (pfile->date == NULL)
Neil Booth93c803682000-10-28 17:59:06 +0000224 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000225 /* Allocate __DATE__ and __TIME__ strings from permanent
226 storage. We only do this once, and don't generate them
227 at init time, because time() and localtime() are very
228 slow on some systems. */
Zack Weinberg56da7202002-08-02 04:18:16 +0000229 time_t tt;
230 struct tm *tb = NULL;
Neil Booth93c803682000-10-28 17:59:06 +0000231
Zack Weinberg56da7202002-08-02 04:18:16 +0000232 /* (time_t) -1 is a legitimate value for "number of seconds
233 since the Epoch", so we have to do a little dance to
234 distinguish that from a genuine error. */
235 errno = 0;
236 tt = time(NULL);
237 if (tt != (time_t)-1 || errno == 0)
238 tb = localtime (&tt);
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000239
Zack Weinberg56da7202002-08-02 04:18:16 +0000240 if (tb)
241 {
242 pfile->date = _cpp_unaligned_alloc (pfile,
243 sizeof ("\"Oct 11 1347\""));
244 sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000245 monthnames[tb->tm_mon], tb->tm_mday,
246 tb->tm_year + 1900);
Zack Weinberg56da7202002-08-02 04:18:16 +0000247
248 pfile->time = _cpp_unaligned_alloc (pfile,
249 sizeof ("\"12:34:56\""));
250 sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
251 tb->tm_hour, tb->tm_min, tb->tm_sec);
252 }
253 else
254 {
John David Anglin0527bc42003-11-01 22:56:54 +0000255 cpp_errno (pfile, CPP_DL_WARNING,
Zack Weinberg56da7202002-08-02 04:18:16 +0000256 "could not determine date and time");
257
Kris Van Heesb6baa672008-04-18 13:58:08 +0000258 pfile->date = UC"\"??? ?? ????\"";
259 pfile->time = UC"\"??:??:??\"";
Zack Weinberg56da7202002-08-02 04:18:16 +0000260 }
Neil Booth93c803682000-10-28 17:59:06 +0000261 }
Neil Booth93c803682000-10-28 17:59:06 +0000262
Neil Booth644edda2001-10-02 12:57:24 +0000263 if (node->value.builtin == BT_DATE)
Neil Booth278c4662002-06-19 05:40:08 +0000264 result = pfile->date;
Neil Booth644edda2001-10-02 12:57:24 +0000265 else
Neil Booth278c4662002-06-19 05:40:08 +0000266 result = pfile->time;
Neil Booth644edda2001-10-02 12:57:24 +0000267 break;
Ollie Wilda7020452007-05-24 20:55:36 +0000268
269 case BT_COUNTER:
Ollie Wildccfc4c92007-07-30 18:29:20 +0000270 if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
271 cpp_error (pfile, CPP_DL_ERROR,
272 "__COUNTER__ expanded inside directive with -fdirectives-only");
Ollie Wilda7020452007-05-24 20:55:36 +0000273 number = pfile->counter++;
274 break;
Neil Booth278c4662002-06-19 05:40:08 +0000275 }
Neil Booth644edda2001-10-02 12:57:24 +0000276
Neil Booth278c4662002-06-19 05:40:08 +0000277 if (result == NULL)
278 {
279 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
280 result = _cpp_unaligned_alloc (pfile, 21);
281 sprintf ((char *) result, "%u", number);
282 }
283
284 return result;
285}
286
287/* Convert builtin macros like __FILE__ to a token and push it on the
Zack Weinberg21b11492004-09-09 19:16:56 +0000288 context stack. Also handles _Pragma, for which a new token may not
289 be created. Returns 1 if it generates a new token context, 0 to
Neil Booth278c4662002-06-19 05:40:08 +0000290 return the token to the caller. */
291static int
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000292builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
Neil Booth278c4662002-06-19 05:40:08 +0000293{
294 const uchar *buf;
Neil Booth26aea072003-04-19 00:22:51 +0000295 size_t len;
296 char *nbuf;
Neil Booth278c4662002-06-19 05:40:08 +0000297
298 if (node->value.builtin == BT_PRAGMA)
299 {
Neil Booth644edda2001-10-02 12:57:24 +0000300 /* Don't interpret _Pragma within directives. The standard is
301 not clear on this, but to me this makes most sense. */
302 if (pfile->state.in_directive)
303 return 0;
304
Tom Tromey5b9a40d2007-10-31 14:50:13 +0000305 return _cpp_do__Pragma (pfile);
Neil Booth93c803682000-10-28 17:59:06 +0000306 }
Neil Booth644edda2001-10-02 12:57:24 +0000307
Neil Booth278c4662002-06-19 05:40:08 +0000308 buf = _cpp_builtin_macro_text (pfile, node);
Neil Booth26aea072003-04-19 00:22:51 +0000309 len = ustrlen (buf);
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000310 nbuf = (char *) alloca (len + 1);
Neil Booth26aea072003-04-19 00:22:51 +0000311 memcpy (nbuf, buf, len);
312 nbuf[len]='\n';
Neil Booth278c4662002-06-19 05:40:08 +0000313
Per Bothner40de9f72003-10-02 07:30:34 +0000314 cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
Neil Booth26aea072003-04-19 00:22:51 +0000315 _cpp_clean_line (pfile);
Neil Booth278c4662002-06-19 05:40:08 +0000316
317 /* Set pfile->cur_token as required by _cpp_lex_direct. */
318 pfile->cur_token = _cpp_temp_token (pfile);
Richard Hendersonbc4071d2006-01-04 08:33:38 -0800319 _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
Neil Booth278c4662002-06-19 05:40:08 +0000320 if (pfile->buffer->cur != pfile->buffer->rlimit)
John David Anglin0527bc42003-11-01 22:56:54 +0000321 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
Neil Booth278c4662002-06-19 05:40:08 +0000322 NODE_NAME (node));
323 _cpp_pop_buffer (pfile);
324
Neil Booth644edda2001-10-02 12:57:24 +0000325 return 1;
Neil Booth93c803682000-10-28 17:59:06 +0000326}
327
Neil Boothd15a58c2002-01-03 18:32:55 +0000328/* Copies SRC, of length LEN, to DEST, adding backslashes before all
Andrew Pinski651ed942005-11-04 00:23:01 +0000329 backslashes and double quotes. DEST must be of sufficient size.
330 Returns a pointer to the end of the string. */
Neil Booth562a5c22002-04-21 18:46:42 +0000331uchar *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000332cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
Neil Booth93c803682000-10-28 17:59:06 +0000333{
334 while (len--)
335 {
Neil Booth562a5c22002-04-21 18:46:42 +0000336 uchar c = *src++;
Neil Booth93c803682000-10-28 17:59:06 +0000337
338 if (c == '\\' || c == '"')
339 {
340 *dest++ = '\\';
341 *dest++ = c;
342 }
343 else
Andrew Pinski651ed942005-11-04 00:23:01 +0000344 *dest++ = c;
Neil Booth93c803682000-10-28 17:59:06 +0000345 }
346
347 return dest;
348}
349
Neil Boothd15a58c2002-01-03 18:32:55 +0000350/* Convert a token sequence ARG to a single string token according to
351 the rules of the ISO C #-operator. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000352static const cpp_token *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000353stringify_arg (cpp_reader *pfile, macro_arg *arg)
Neil Booth93c803682000-10-28 17:59:06 +0000354{
Neil Booth6338b352003-04-23 22:44:06 +0000355 unsigned char *dest;
Neil Boothece54d52001-09-28 09:40:22 +0000356 unsigned int i, escape_it, backslash_count = 0;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000357 const cpp_token *source = NULL;
Neil Boothece54d52001-09-28 09:40:22 +0000358 size_t len;
Neil Booth93c803682000-10-28 17:59:06 +0000359
Neil Booth6338b352003-04-23 22:44:06 +0000360 if (BUFF_ROOM (pfile->u_buff) < 3)
361 _cpp_extend_buff (pfile, &pfile->u_buff, 3);
362 dest = BUFF_FRONT (pfile->u_buff);
363 *dest++ = '"';
364
Neil Booth93c803682000-10-28 17:59:06 +0000365 /* Loop, reading in the argument's tokens. */
366 for (i = 0; i < arg->count; i++)
367 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000368 const cpp_token *token = arg->first[i];
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000369
370 if (token->type == CPP_PADDING)
371 {
Joseph Myers18f41a12009-04-12 23:20:02 +0100372 if (source == NULL
373 || (!(source->flags & PREV_WHITE)
374 && token->val.source == NULL))
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000375 source = token->val.source;
376 continue;
377 }
Neil Booth93c803682000-10-28 17:59:06 +0000378
Kris Van Heesb6baa672008-04-18 13:58:08 +0000379 escape_it = (token->type == CPP_STRING || token->type == CPP_CHAR
Ian Lance Taylorfd2ab212009-09-02 17:35:30 +0000380 || token->type == CPP_WSTRING || token->type == CPP_WCHAR
Kris Van Heesb6baa672008-04-18 13:58:08 +0000381 || token->type == CPP_STRING32 || token->type == CPP_CHAR32
Jakub Jelinek2c6e3f52009-10-19 23:41:15 +0200382 || token->type == CPP_STRING16 || token->type == CPP_CHAR16
383 || token->type == CPP_UTF8STRING);
Neil Booth93c803682000-10-28 17:59:06 +0000384
Neil Boothece54d52001-09-28 09:40:22 +0000385 /* Room for each char being written in octal, initial space and
Neil Booth6338b352003-04-23 22:44:06 +0000386 final quote and NUL. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000387 len = cpp_token_len (token);
Neil Booth93c803682000-10-28 17:59:06 +0000388 if (escape_it)
Neil Booth93c803682000-10-28 17:59:06 +0000389 len *= 4;
Neil Booth6338b352003-04-23 22:44:06 +0000390 len += 3;
Neil Booth93c803682000-10-28 17:59:06 +0000391
Neil Boothece54d52001-09-28 09:40:22 +0000392 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
Neil Booth93c803682000-10-28 17:59:06 +0000393 {
Neil Boothece54d52001-09-28 09:40:22 +0000394 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
Neil Booth8c3b2692001-09-30 10:03:11 +0000395 _cpp_extend_buff (pfile, &pfile->u_buff, len);
Neil Boothece54d52001-09-28 09:40:22 +0000396 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
Neil Booth93c803682000-10-28 17:59:06 +0000397 }
398
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000399 /* Leading white space? */
Neil Booth6338b352003-04-23 22:44:06 +0000400 if (dest - 1 != BUFF_FRONT (pfile->u_buff))
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000401 {
402 if (source == NULL)
403 source = token;
404 if (source->flags & PREV_WHITE)
405 *dest++ = ' ';
406 }
407 source = NULL;
Neil Booth93c803682000-10-28 17:59:06 +0000408
409 if (escape_it)
410 {
Neil Boothece54d52001-09-28 09:40:22 +0000411 _cpp_buff *buff = _cpp_get_buff (pfile, len);
412 unsigned char *buf = BUFF_FRONT (buff);
Geoffrey Keating47e20492005-03-12 10:44:06 +0000413 len = cpp_spell_token (pfile, token, buf, true) - buf;
Zack Weinbergdcc229e2002-03-14 18:17:18 +0000414 dest = cpp_quote_string (dest, buf, len);
Neil Boothece54d52001-09-28 09:40:22 +0000415 _cpp_release_buff (pfile, buff);
Neil Booth93c803682000-10-28 17:59:06 +0000416 }
417 else
Geoffrey Keating47e20492005-03-12 10:44:06 +0000418 dest = cpp_spell_token (pfile, token, dest, true);
Neil Booth93c803682000-10-28 17:59:06 +0000419
Neil Booth10676942003-04-22 19:28:00 +0000420 if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
Neil Booth93c803682000-10-28 17:59:06 +0000421 backslash_count++;
422 else
423 backslash_count = 0;
424 }
425
426 /* Ignore the final \ of invalid string literals. */
427 if (backslash_count & 1)
428 {
John David Anglin0527bc42003-11-01 22:56:54 +0000429 cpp_error (pfile, CPP_DL_WARNING,
Neil Boothebef4e82002-04-14 18:42:47 +0000430 "invalid string literal, ignoring final '\\'");
Neil Boothece54d52001-09-28 09:40:22 +0000431 dest--;
Neil Booth93c803682000-10-28 17:59:06 +0000432 }
433
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000434 /* Commit the memory, including NUL, and return the token. */
Neil Booth6338b352003-04-23 22:44:06 +0000435 *dest++ = '"';
Neil Boothece54d52001-09-28 09:40:22 +0000436 len = dest - BUFF_FRONT (pfile->u_buff);
437 BUFF_FRONT (pfile->u_buff) = dest + 1;
438 return new_string_token (pfile, dest - len, len);
Neil Booth93c803682000-10-28 17:59:06 +0000439}
440
Kazu Hiratada7d8302002-09-22 02:03:17 +0000441/* Try to paste two tokens. On success, return nonzero. In any
Neil Boothc9e7a602001-09-27 12:59:38 +0000442 case, PLHS is updated to point to the pasted token, which is
443 guaranteed to not have the PASTE_LEFT flag set. */
444static bool
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000445paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
Neil Boothd63eefb2000-11-20 23:59:26 +0000446{
Jakub Jelinekde000d22006-10-12 11:25:59 +0200447 unsigned char *buf, *end, *lhsend;
Tom Tromeyfca35e12007-05-02 19:33:44 +0000448 cpp_token *lhs;
Neil Boothc9e7a602001-09-27 12:59:38 +0000449 unsigned int len;
Neil Boothd63eefb2000-11-20 23:59:26 +0000450
Tom Tromeyfca35e12007-05-02 19:33:44 +0000451 len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000452 buf = (unsigned char *) alloca (len);
Tom Tromeyfca35e12007-05-02 19:33:44 +0000453 end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
Neil Boothd63eefb2000-11-20 23:59:26 +0000454
Neil Boothc9e7a602001-09-27 12:59:38 +0000455 /* Avoid comment headers, since they are still processed in stage 3.
456 It is simpler to insert a space here, rather than modifying the
457 lexer to ignore comments in some circumstances. Simply returning
458 false doesn't work, since we want to clear the PASTE_LEFT flag. */
Tom Tromeyfca35e12007-05-02 19:33:44 +0000459 if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
Neil Boothc9e7a602001-09-27 12:59:38 +0000460 *end++ = ' ';
Tom Tromeyf373b442007-11-01 18:20:48 +0000461 /* In one obscure case we might see padding here. */
462 if (rhs->type != CPP_PADDING)
463 end = cpp_spell_token (pfile, rhs, end, false);
Neil Booth26aea072003-04-19 00:22:51 +0000464 *end = '\n';
Neil Boothd63eefb2000-11-20 23:59:26 +0000465
Per Bothner40de9f72003-10-02 07:30:34 +0000466 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
Neil Booth26aea072003-04-19 00:22:51 +0000467 _cpp_clean_line (pfile);
Neil Boothd63eefb2000-11-20 23:59:26 +0000468
Neil Boothc9e7a602001-09-27 12:59:38 +0000469 /* Set pfile->cur_token as required by _cpp_lex_direct. */
470 pfile->cur_token = _cpp_temp_token (pfile);
Tom Tromeyfca35e12007-05-02 19:33:44 +0000471 lhs = _cpp_lex_direct (pfile);
Jakub Jelinekde000d22006-10-12 11:25:59 +0200472 if (pfile->buffer->cur != pfile->buffer->rlimit)
473 {
Tom Tromeyfca35e12007-05-02 19:33:44 +0000474 source_location saved_loc = lhs->src_loc;
475
Jakub Jelinekde000d22006-10-12 11:25:59 +0200476 _cpp_pop_buffer (pfile);
477 _cpp_backup_tokens (pfile, 1);
478 *lhsend = '\0';
Neil Boothd63eefb2000-11-20 23:59:26 +0000479
Tom Tromeyfca35e12007-05-02 19:33:44 +0000480 /* We have to remove the PASTE_LEFT flag from the old lhs, but
481 we want to keep the new location. */
482 *lhs = **plhs;
483 *plhs = lhs;
484 lhs->src_loc = saved_loc;
485 lhs->flags &= ~PASTE_LEFT;
486
Jakub Jelinekde000d22006-10-12 11:25:59 +0200487 /* Mandatory error for all apart from assembler. */
488 if (CPP_OPTION (pfile, lang) != CLK_ASM)
489 cpp_error (pfile, CPP_DL_ERROR,
490 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
491 buf, cpp_token_as_text (pfile, rhs));
492 return false;
493 }
494
Tom Tromeyfca35e12007-05-02 19:33:44 +0000495 *plhs = lhs;
Jakub Jelinekde000d22006-10-12 11:25:59 +0200496 _cpp_pop_buffer (pfile);
497 return true;
Neil Boothd63eefb2000-11-20 23:59:26 +0000498}
499
Neil Boothd15a58c2002-01-03 18:32:55 +0000500/* Handles an arbitrarily long sequence of ## operators, with initial
501 operand LHS. This implementation is left-associative,
502 non-recursive, and finishes a paste before handling succeeding
503 ones. If a paste fails, we back up to the RHS of the failing ##
504 operator before pushing the context containing the result of prior
505 successful pastes, with the effect that the RHS appears in the
506 output stream after the pasted LHS normally. */
Neil Booth93c803682000-10-28 17:59:06 +0000507static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000508paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
Neil Booth93c803682000-10-28 17:59:06 +0000509{
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000510 const cpp_token *rhs;
511 cpp_context *context = pfile->context;
512
Neil Booth93c803682000-10-28 17:59:06 +0000513 do
514 {
515 /* Take the token directly from the current context. We can do
516 this, because we are in the replacement list of either an
517 object-like macro, or a function-like macro with arguments
518 inserted. In either case, the constraints to #define
Neil Boothd63eefb2000-11-20 23:59:26 +0000519 guarantee we have at least one more token. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000520 if (context->direct_p)
Neil Booth82eda772002-06-04 13:07:06 +0000521 rhs = FIRST (context).token++;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000522 else
Neil Booth82eda772002-06-04 13:07:06 +0000523 rhs = *FIRST (context).ptoken++;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000524
525 if (rhs->type == CPP_PADDING)
Tom Tromeyf373b442007-11-01 18:20:48 +0000526 {
527 if (rhs->flags & PASTE_LEFT)
528 abort ();
529 }
Neil Boothc9e7a602001-09-27 12:59:38 +0000530 if (!paste_tokens (pfile, &lhs, rhs))
Jakub Jelinekde000d22006-10-12 11:25:59 +0200531 break;
Neil Booth93c803682000-10-28 17:59:06 +0000532 }
533 while (rhs->flags & PASTE_LEFT);
534
Neil Boothc9e7a602001-09-27 12:59:38 +0000535 /* Put the resulting token in its own context. */
Richard Hendersonbc4071d2006-01-04 08:33:38 -0800536 _cpp_push_token_context (pfile, NULL, lhs, 1);
Neil Booth93c803682000-10-28 17:59:06 +0000537}
538
Neil Booth1ce676a2002-06-09 20:04:17 +0000539/* Returns TRUE if the number of arguments ARGC supplied in an
540 invocation of the MACRO referenced by NODE is valid. An empty
541 invocation to a macro with no parameters should pass ARGC as zero.
542
543 Note that MACRO cannot necessarily be deduced from NODE, in case
544 NODE was redefined whilst collecting arguments. */
545bool
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000546_cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
Neil Booth1ce676a2002-06-09 20:04:17 +0000547{
548 if (argc == macro->paramc)
549 return true;
550
551 if (argc < macro->paramc)
552 {
553 /* As an extension, a rest argument is allowed to not appear in
554 the invocation at all.
555 e.g. #define debug(format, args...) something
556 debug("string");
557
558 This is exactly the same as if there had been an empty rest
559 argument - debug("string", ). */
560
561 if (argc + 1 == macro->paramc && macro->variadic)
562 {
563 if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
John David Anglin0527bc42003-11-01 22:56:54 +0000564 cpp_error (pfile, CPP_DL_PEDWARN,
Neil Booth1ce676a2002-06-09 20:04:17 +0000565 "ISO C99 requires rest arguments to be used");
566 return true;
567 }
568
John David Anglin0527bc42003-11-01 22:56:54 +0000569 cpp_error (pfile, CPP_DL_ERROR,
Neil Booth1ce676a2002-06-09 20:04:17 +0000570 "macro \"%s\" requires %u arguments, but only %u given",
571 NODE_NAME (node), macro->paramc, argc);
572 }
573 else
John David Anglin0527bc42003-11-01 22:56:54 +0000574 cpp_error (pfile, CPP_DL_ERROR,
Neil Booth1ce676a2002-06-09 20:04:17 +0000575 "macro \"%s\" passed %u arguments, but takes just %u",
576 NODE_NAME (node), argc, macro->paramc);
577
578 return false;
579}
580
Neil Boothd15a58c2002-01-03 18:32:55 +0000581/* Reads and returns the arguments to a function-like macro
582 invocation. Assumes the opening parenthesis has been processed.
583 If there is an error, emits an appropriate diagnostic and returns
584 NULL. Each argument is terminated by a CPP_EOF token, for the
Jakub Jelinek765d6002008-01-25 10:01:27 +0100585 future benefit of expand_arg(). If there are any deferred
586 #pragma directives among macro arguments, store pointers to the
587 CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer. */
Neil Boothb8af0ca2001-09-26 17:52:50 +0000588static _cpp_buff *
Jakub Jelinek765d6002008-01-25 10:01:27 +0100589collect_args (cpp_reader *pfile, const cpp_hashnode *node,
590 _cpp_buff **pragma_buff)
Neil Booth93c803682000-10-28 17:59:06 +0000591{
Neil Boothb8af0ca2001-09-26 17:52:50 +0000592 _cpp_buff *buff, *base_buff;
593 cpp_macro *macro;
594 macro_arg *args, *arg;
595 const cpp_token *token;
596 unsigned int argc;
Neil Booth93c803682000-10-28 17:59:06 +0000597
Neil Boothb8af0ca2001-09-26 17:52:50 +0000598 macro = node->value.macro;
599 if (macro->paramc)
600 argc = macro->paramc;
601 else
602 argc = 1;
603 buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
604 + sizeof (macro_arg)));
605 base_buff = buff;
606 args = (macro_arg *) buff->base;
607 memset (args, 0, argc * sizeof (macro_arg));
Neil Boothece54d52001-09-28 09:40:22 +0000608 buff->cur = (unsigned char *) &args[argc];
Neil Boothb8af0ca2001-09-26 17:52:50 +0000609 arg = args, argc = 0;
Neil Booth93c803682000-10-28 17:59:06 +0000610
Neil Boothb8af0ca2001-09-26 17:52:50 +0000611 /* Collect the tokens making up each argument. We don't yet know
612 how many arguments have been supplied, whether too many or too
613 few. Hence the slightly bizarre usage of "argc" and "arg". */
614 do
Neil Booth93c803682000-10-28 17:59:06 +0000615 {
Neil Boothb8af0ca2001-09-26 17:52:50 +0000616 unsigned int paren_depth = 0;
617 unsigned int ntokens = 0;
618
Neil Booth93c803682000-10-28 17:59:06 +0000619 argc++;
Neil Boothb8af0ca2001-09-26 17:52:50 +0000620 arg->first = (const cpp_token **) buff->cur;
Neil Booth93c803682000-10-28 17:59:06 +0000621
Neil Boothb8af0ca2001-09-26 17:52:50 +0000622 for (;;)
623 {
624 /* Require space for 2 new tokens (including a CPP_EOF). */
Neil Boothece54d52001-09-28 09:40:22 +0000625 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
Neil Boothb8af0ca2001-09-26 17:52:50 +0000626 {
Neil Booth8c3b2692001-09-30 10:03:11 +0000627 buff = _cpp_append_extend_buff (pfile, buff,
628 1000 * sizeof (cpp_token *));
Neil Boothb8af0ca2001-09-26 17:52:50 +0000629 arg->first = (const cpp_token **) buff->cur;
630 }
Neil Booth93c803682000-10-28 17:59:06 +0000631
Neil Boothb8af0ca2001-09-26 17:52:50 +0000632 token = cpp_get_token (pfile);
633
634 if (token->type == CPP_PADDING)
635 {
636 /* Drop leading padding. */
637 if (ntokens == 0)
638 continue;
639 }
640 else if (token->type == CPP_OPEN_PAREN)
641 paren_depth++;
642 else if (token->type == CPP_CLOSE_PAREN)
643 {
644 if (paren_depth-- == 0)
645 break;
646 }
647 else if (token->type == CPP_COMMA)
648 {
649 /* A comma does not terminate an argument within
650 parentheses or as part of a variable argument. */
651 if (paren_depth == 0
652 && ! (macro->variadic && argc == macro->paramc))
653 break;
654 }
655 else if (token->type == CPP_EOF
656 || (token->type == CPP_HASH && token->flags & BOL))
657 break;
Jakub Jelinek765d6002008-01-25 10:01:27 +0100658 else if (token->type == CPP_PRAGMA)
659 {
660 cpp_token *newtok = _cpp_temp_token (pfile);
661
662 /* CPP_PRAGMA token lives in directive_result, which will
663 be overwritten on the next directive. */
664 *newtok = *token;
665 token = newtok;
666 do
667 {
668 if (*pragma_buff == NULL
669 || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
670 {
671 _cpp_buff *next;
672 if (*pragma_buff == NULL)
673 *pragma_buff
674 = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
675 else
676 {
677 next = *pragma_buff;
678 *pragma_buff
679 = _cpp_get_buff (pfile,
680 (BUFF_FRONT (*pragma_buff)
681 - (*pragma_buff)->base) * 2);
682 (*pragma_buff)->next = next;
683 }
684 }
685 *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
686 BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
687 if (token->type == CPP_PRAGMA_EOL)
688 break;
689 token = cpp_get_token (pfile);
690 }
691 while (token->type != CPP_EOF);
692
693 /* In deferred pragmas parsing_args and prevent_expansion
694 had been changed, reset it. */
695 pfile->state.parsing_args = 2;
696 pfile->state.prevent_expansion = 1;
697
698 if (token->type == CPP_EOF)
699 break;
700 else
701 continue;
702 }
Neil Boothb8af0ca2001-09-26 17:52:50 +0000703
704 arg->first[ntokens++] = token;
705 }
706
707 /* Drop trailing padding. */
708 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
709 ntokens--;
710
711 arg->count = ntokens;
712 arg->first[ntokens] = &pfile->eof;
713
714 /* Terminate the argument. Excess arguments loop back and
715 overwrite the final legitimate argument, before failing. */
716 if (argc <= macro->paramc)
717 {
Neil Boothece54d52001-09-28 09:40:22 +0000718 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
Neil Boothb8af0ca2001-09-26 17:52:50 +0000719 if (argc != macro->paramc)
720 arg++;
721 }
Neil Booth93c803682000-10-28 17:59:06 +0000722 }
Neil Boothe808ec92002-02-27 07:24:53 +0000723 while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
Neil Booth93c803682000-10-28 17:59:06 +0000724
Neil Boothe808ec92002-02-27 07:24:53 +0000725 if (token->type == CPP_EOF)
Neil Booth93c803682000-10-28 17:59:06 +0000726 {
Neil Boothece54d52001-09-28 09:40:22 +0000727 /* We still need the CPP_EOF to end directives, and to end
728 pre-expansion of a macro argument. Step back is not
729 unconditional, since we don't want to return a CPP_EOF to our
730 callers at the end of an -include-d file. */
Neil Boothe808ec92002-02-27 07:24:53 +0000731 if (pfile->context->prev || pfile->state.in_directive)
Neil Boothb8af0ca2001-09-26 17:52:50 +0000732 _cpp_backup_tokens (pfile, 1);
John David Anglin0527bc42003-11-01 22:56:54 +0000733 cpp_error (pfile, CPP_DL_ERROR,
Neil Boothebef4e82002-04-14 18:42:47 +0000734 "unterminated argument list invoking macro \"%s\"",
Neil Bootha28c50352001-05-16 22:02:09 +0000735 NODE_NAME (node));
Neil Booth93c803682000-10-28 17:59:06 +0000736 }
Neil Booth1ce676a2002-06-09 20:04:17 +0000737 else
Neil Booth93c803682000-10-28 17:59:06 +0000738 {
Neil Booth1ce676a2002-06-09 20:04:17 +0000739 /* A single empty argument is counted as no argument. */
740 if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
741 argc = 0;
742 if (_cpp_arguments_ok (pfile, macro, node, argc))
Neil Booth58551c22002-08-06 20:35:46 +0000743 {
744 /* GCC has special semantics for , ## b where b is a varargs
745 parameter: we remove the comma if b was omitted entirely.
746 If b was merely an empty argument, the comma is retained.
747 If the macro takes just one (varargs) parameter, then we
748 retain the comma only if we are standards conforming.
749
750 If FIRST is NULL replace_args () swallows the comma. */
751 if (macro->variadic && (argc < macro->paramc
752 || (argc == 1 && args[0].count == 0
753 && !CPP_OPTION (pfile, std))))
754 args[macro->paramc - 1].first = NULL;
755 return base_buff;
756 }
Neil Booth93c803682000-10-28 17:59:06 +0000757 }
758
Neil Booth1ce676a2002-06-09 20:04:17 +0000759 /* An error occurred. */
Neil Boothb8af0ca2001-09-26 17:52:50 +0000760 _cpp_release_buff (pfile, base_buff);
761 return NULL;
Neil Booth93c803682000-10-28 17:59:06 +0000762}
763
Neil Boothd6da8362001-10-08 06:15:14 +0000764/* Search for an opening parenthesis to the macro of NODE, in such a
765 way that, if none is found, we don't lose the information in any
766 intervening padding tokens. If we find the parenthesis, collect
Jakub Jelinek765d6002008-01-25 10:01:27 +0100767 the arguments and return the buffer containing them. PRAGMA_BUFF
768 argument is the same as in collect_args. */
Neil Boothd6da8362001-10-08 06:15:14 +0000769static _cpp_buff *
Jakub Jelinek765d6002008-01-25 10:01:27 +0100770funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
771 _cpp_buff **pragma_buff)
Neil Booth93c803682000-10-28 17:59:06 +0000772{
Neil Boothd6da8362001-10-08 06:15:14 +0000773 const cpp_token *token, *padding = NULL;
Neil Booth93c803682000-10-28 17:59:06 +0000774
Neil Boothd6da8362001-10-08 06:15:14 +0000775 for (;;)
Neil Boothbdcbe492001-09-13 20:05:17 +0000776 {
Neil Boothd6da8362001-10-08 06:15:14 +0000777 token = cpp_get_token (pfile);
778 if (token->type != CPP_PADDING)
779 break;
780 if (padding == NULL
781 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
782 padding = token;
Neil Boothbdcbe492001-09-13 20:05:17 +0000783 }
Neil Booth93c803682000-10-28 17:59:06 +0000784
Neil Boothd6da8362001-10-08 06:15:14 +0000785 if (token->type == CPP_OPEN_PAREN)
Neil Booth93c803682000-10-28 17:59:06 +0000786 {
Neil Boothd6da8362001-10-08 06:15:14 +0000787 pfile->state.parsing_args = 2;
Jakub Jelinek765d6002008-01-25 10:01:27 +0100788 return collect_args (pfile, node, pragma_buff);
Neil Booth93c803682000-10-28 17:59:06 +0000789 }
790
Neil Booth9ac3b1b2002-04-21 16:17:55 +0000791 /* CPP_EOF can be the end of macro arguments, or the end of the
792 file. We mustn't back up over the latter. Ugh. */
793 if (token->type != CPP_EOF || token == &pfile->eof)
794 {
795 /* Back up. We may have skipped padding, in which case backing
796 up more than one token when expanding macros is in general
797 too difficult. We re-insert it in its own context. */
798 _cpp_backup_tokens (pfile, 1);
799 if (padding)
Richard Hendersonbc4071d2006-01-04 08:33:38 -0800800 _cpp_push_token_context (pfile, NULL, padding, 1);
Neil Booth9ac3b1b2002-04-21 16:17:55 +0000801 }
Neil Boothd6da8362001-10-08 06:15:14 +0000802
803 return NULL;
Neil Booth93c803682000-10-28 17:59:06 +0000804}
805
Joseph Myersaa508502009-04-19 18:10:56 +0100806/* Return the real number of tokens in the expansion of MACRO. */
807static inline unsigned int
808macro_real_token_count (const cpp_macro *macro)
809{
810 unsigned int i;
811 if (__builtin_expect (!macro->extra_tokens, true))
812 return macro->count;
813 for (i = 0; i < macro->count; i++)
814 if (macro->exp.tokens[i].type == CPP_PASTE)
815 return i;
816 abort ();
817}
818
Neil Boothd15a58c2002-01-03 18:32:55 +0000819/* Push the context of a macro with hash entry NODE onto the context
820 stack. If we can successfully expand the macro, we push a context
821 containing its yet-to-be-rescanned replacement list and return one.
Jakub Jelinek765d6002008-01-25 10:01:27 +0100822 If there were additionally any unexpanded deferred #pragma directives
823 among macro arguments, push another context containing the
824 pragma tokens before the yet-to-be-rescanned replacement list
825 and return two. Otherwise, we don't push a context and return zero. */
Neil Booth93c803682000-10-28 17:59:06 +0000826static int
Jakub Jelinek765d6002008-01-25 10:01:27 +0100827enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
828 const cpp_token *result)
Neil Booth93c803682000-10-28 17:59:06 +0000829{
Neil Boothd15a58c2002-01-03 18:32:55 +0000830 /* The presence of a macro invalidates a file's controlling macro. */
Neil Booth644edda2001-10-02 12:57:24 +0000831 pfile->mi_valid = false;
832
Neil Booth36207112002-05-24 19:26:30 +0000833 pfile->state.angled_headers = false;
834
Joseph Myers93d45d92008-04-02 20:42:53 +0100835 if ((node->flags & NODE_BUILTIN) && !(node->flags & NODE_USED))
836 {
837 node->flags |= NODE_USED;
Jakub Jelinek8e680db2010-06-11 20:37:34 +0200838 if ((!pfile->cb.user_builtin_macro
839 || !pfile->cb.user_builtin_macro (pfile, node))
840 && pfile->cb.used_define)
Joseph Myers93d45d92008-04-02 20:42:53 +0100841 pfile->cb.used_define (pfile, pfile->directive_line, node);
842 }
843
Neil Boothd15a58c2002-01-03 18:32:55 +0000844 /* Handle standard macros. */
Neil Booth644edda2001-10-02 12:57:24 +0000845 if (! (node->flags & NODE_BUILTIN))
Neil Booth93c803682000-10-28 17:59:06 +0000846 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000847 cpp_macro *macro = node->value.macro;
Jakub Jelinek765d6002008-01-25 10:01:27 +0100848 _cpp_buff *pragma_buff = NULL;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000849
Neil Boothd6da8362001-10-08 06:15:14 +0000850 if (macro->fun_like)
851 {
852 _cpp_buff *buff;
853
854 pfile->state.prevent_expansion++;
855 pfile->keep_tokens++;
856 pfile->state.parsing_args = 1;
Jakub Jelinek765d6002008-01-25 10:01:27 +0100857 buff = funlike_invocation_p (pfile, node, &pragma_buff);
Neil Boothd6da8362001-10-08 06:15:14 +0000858 pfile->state.parsing_args = 0;
859 pfile->keep_tokens--;
860 pfile->state.prevent_expansion--;
861
862 if (buff == NULL)
863 {
864 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
Simon Baldwin87cf0652010-04-07 17:18:10 +0000865 cpp_warning (pfile, CPP_W_TRADITIONAL,
Neil Boothd6da8362001-10-08 06:15:14 +0000866 "function-like macro \"%s\" must be used with arguments in traditional C",
Simon Baldwin87cf0652010-04-07 17:18:10 +0000867 NODE_NAME (node));
Neil Boothd6da8362001-10-08 06:15:14 +0000868
Jakub Jelinek765d6002008-01-25 10:01:27 +0100869 if (pragma_buff)
870 _cpp_release_buff (pfile, pragma_buff);
871
Neil Boothd6da8362001-10-08 06:15:14 +0000872 return 0;
873 }
874
Neil Boothe808ec92002-02-27 07:24:53 +0000875 if (macro->paramc > 0)
876 replace_args (pfile, node, macro, (macro_arg *) buff->base);
Neil Boothd6da8362001-10-08 06:15:14 +0000877 _cpp_release_buff (pfile, buff);
878 }
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000879
880 /* Disable the macro within its expansion. */
Neil Booth644edda2001-10-02 12:57:24 +0000881 node->flags |= NODE_DISABLED;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000882
Joseph Myers93d45d92008-04-02 20:42:53 +0100883 if (!(node->flags & NODE_USED))
884 {
885 node->flags |= NODE_USED;
886 if (pfile->cb.used_define)
887 pfile->cb.used_define (pfile, pfile->directive_line, node);
888 }
889
Arnaud Charlet3de8a542009-11-20 08:18:16 +0000890 if (pfile->cb.used)
891 pfile->cb.used (pfile, result->src_loc, node);
892
Neil Bootha69cbaa2002-07-23 22:57:49 +0000893 macro->used = 1;
894
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000895 if (macro->paramc == 0)
Joseph Myersaa508502009-04-19 18:10:56 +0100896 _cpp_push_token_context (pfile, node, macro->exp.tokens,
897 macro_real_token_count (macro));
Neil Booth644edda2001-10-02 12:57:24 +0000898
Jakub Jelinek765d6002008-01-25 10:01:27 +0100899 if (pragma_buff)
900 {
901 if (!pfile->state.in_directive)
902 _cpp_push_token_context (pfile, NULL,
903 padding_token (pfile, result), 1);
904 do
905 {
906 _cpp_buff *tail = pragma_buff->next;
907 pragma_buff->next = NULL;
908 push_ptoken_context (pfile, NULL, pragma_buff,
909 (const cpp_token **) pragma_buff->base,
910 ((const cpp_token **) BUFF_FRONT (pragma_buff)
911 - (const cpp_token **) pragma_buff->base));
912 pragma_buff = tail;
913 }
914 while (pragma_buff != NULL);
915 return 2;
916 }
917
Neil Booth644edda2001-10-02 12:57:24 +0000918 return 1;
Neil Booth93c803682000-10-28 17:59:06 +0000919 }
Neil Booth644edda2001-10-02 12:57:24 +0000920
Neil Boothd15a58c2002-01-03 18:32:55 +0000921 /* Handle built-in macros and the _Pragma operator. */
Neil Booth644edda2001-10-02 12:57:24 +0000922 return builtin_macro (pfile, node);
Zack Weinberg711b8822000-07-18 00:59:49 +0000923}
924
Neil Boothd15a58c2002-01-03 18:32:55 +0000925/* Replace the parameters in a function-like macro of NODE with the
926 actual ARGS, and place the result in a newly pushed token context.
927 Expand each argument before replacing, unless it is operated upon
928 by the # or ## operators. */
Neil Booth93c803682000-10-28 17:59:06 +0000929static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000930replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro, macro_arg *args)
Neil Booth93c803682000-10-28 17:59:06 +0000931{
932 unsigned int i, total;
933 const cpp_token *src, *limit;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000934 const cpp_token **dest, **first;
Neil Booth93c803682000-10-28 17:59:06 +0000935 macro_arg *arg;
Neil Booth1e013d22001-09-26 21:44:35 +0000936 _cpp_buff *buff;
Joseph Myersaa508502009-04-19 18:10:56 +0100937 unsigned int count;
Neil Booth93c803682000-10-28 17:59:06 +0000938
Neil Booth93c803682000-10-28 17:59:06 +0000939 /* First, fully macro-expand arguments, calculating the number of
Neil Booth1e013d22001-09-26 21:44:35 +0000940 tokens in the final expansion as we go. The ordering of the if
941 statements below is subtle; we must handle stringification before
942 pasting. */
Joseph Myersaa508502009-04-19 18:10:56 +0100943 count = macro_real_token_count (macro);
944 total = count;
945 limit = macro->exp.tokens + count;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000946
Neil Booth601328b2002-05-16 05:53:24 +0000947 for (src = macro->exp.tokens; src < limit; src++)
Neil Booth93c803682000-10-28 17:59:06 +0000948 if (src->type == CPP_MACRO_ARG)
949 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000950 /* Leading and trailing padding tokens. */
951 total += 2;
952
Neil Booth93c803682000-10-28 17:59:06 +0000953 /* We have an argument. If it is not being stringified or
954 pasted it is macro-replaced before insertion. */
Joseph Myers9a0c6182009-05-10 15:27:32 +0100955 arg = &args[src->val.macro_arg.arg_no - 1];
Neil Booth4c2b6472000-11-11 13:19:01 +0000956
Neil Booth93c803682000-10-28 17:59:06 +0000957 if (src->flags & STRINGIFY_ARG)
958 {
959 if (!arg->stringified)
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000960 arg->stringified = stringify_arg (pfile, arg);
Neil Booth93c803682000-10-28 17:59:06 +0000961 }
962 else if ((src->flags & PASTE_LEFT)
Neil Booth601328b2002-05-16 05:53:24 +0000963 || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
Neil Booth93c803682000-10-28 17:59:06 +0000964 total += arg->count - 1;
965 else
966 {
967 if (!arg->expanded)
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000968 expand_arg (pfile, arg);
Neil Booth93c803682000-10-28 17:59:06 +0000969 total += arg->expanded_count - 1;
970 }
971 }
972
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000973 /* Now allocate space for the expansion, copy the tokens and replace
974 the arguments. */
Neil Booth1e013d22001-09-26 21:44:35 +0000975 buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
976 first = (const cpp_token **) buff->base;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000977 dest = first;
Neil Booth93c803682000-10-28 17:59:06 +0000978
Neil Booth601328b2002-05-16 05:53:24 +0000979 for (src = macro->exp.tokens; src < limit; src++)
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000980 {
981 unsigned int count;
982 const cpp_token **from, **paste_flag;
Neil Booth93c803682000-10-28 17:59:06 +0000983
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000984 if (src->type != CPP_MACRO_ARG)
985 {
986 *dest++ = src;
987 continue;
988 }
989
990 paste_flag = 0;
Joseph Myers9a0c6182009-05-10 15:27:32 +0100991 arg = &args[src->val.macro_arg.arg_no - 1];
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000992 if (src->flags & STRINGIFY_ARG)
993 count = 1, from = &arg->stringified;
994 else if (src->flags & PASTE_LEFT)
995 count = arg->count, from = arg->first;
Neil Booth601328b2002-05-16 05:53:24 +0000996 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000997 {
Neil Booth93c803682000-10-28 17:59:06 +0000998 count = arg->count, from = arg->first;
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000999 if (dest != first)
1000 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001001 if (dest[-1]->type == CPP_COMMA
1002 && macro->variadic
Joseph Myers9a0c6182009-05-10 15:27:32 +01001003 && src->val.macro_arg.arg_no == macro->paramc)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001004 {
Neil Booth58551c22002-08-06 20:35:46 +00001005 /* Swallow a pasted comma if from == NULL, otherwise
1006 drop the paste flag. */
1007 if (from == NULL)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001008 dest--;
1009 else
1010 paste_flag = dest - 1;
1011 }
1012 /* Remove the paste flag if the RHS is a placemarker. */
1013 else if (count == 0)
1014 paste_flag = dest - 1;
1015 }
1016 }
1017 else
1018 count = arg->expanded_count, from = arg->expanded;
Neil Booth93c803682000-10-28 17:59:06 +00001019
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001020 /* Padding on the left of an argument (unless RHS of ##). */
Zack Weinberga8d0dda2003-02-21 18:06:30 +00001021 if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
Neil Booth601328b2002-05-16 05:53:24 +00001022 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001023 *dest++ = padding_token (pfile, src);
Neil Booth93c803682000-10-28 17:59:06 +00001024
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001025 if (count)
1026 {
1027 memcpy (dest, from, count * sizeof (cpp_token *));
1028 dest += count;
Neil Booth93c803682000-10-28 17:59:06 +00001029
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001030 /* With a non-empty argument on the LHS of ##, the last
1031 token should be flagged PASTE_LEFT. */
1032 if (src->flags & PASTE_LEFT)
1033 paste_flag = dest - 1;
1034 }
Andrew Haleye85edc92008-07-03 10:31:50 +00001035 else if (CPP_PEDANTIC (pfile) && ! macro->syshdr
1036 && ! CPP_OPTION (pfile, c99)
1037 && ! cpp_in_system_header (pfile))
1038 {
1039 cpp_error (pfile, CPP_DL_PEDWARN,
1040 "invoking macro %s argument %d: "
1041 "empty macro arguments are undefined"
1042 " in ISO C90 and ISO C++98",
1043 NODE_NAME (node),
Joseph Myers9a0c6182009-05-10 15:27:32 +01001044 src->val.macro_arg.arg_no);
Andrew Haleye85edc92008-07-03 10:31:50 +00001045 }
Neil Booth4c2b6472000-11-11 13:19:01 +00001046
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001047 /* Avoid paste on RHS (even case count == 0). */
1048 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
1049 *dest++ = &pfile->avoid_paste;
Neil Booth26ec42e2001-01-28 11:22:23 +00001050
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001051 /* Add a new paste flag, or remove an unwanted one. */
1052 if (paste_flag)
1053 {
1054 cpp_token *token = _cpp_temp_token (pfile);
1055 token->type = (*paste_flag)->type;
Jakub Jelinek73096712005-03-04 16:33:23 +01001056 token->val = (*paste_flag)->val;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001057 if (src->flags & PASTE_LEFT)
1058 token->flags = (*paste_flag)->flags | PASTE_LEFT;
1059 else
1060 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1061 *paste_flag = token;
1062 }
1063 }
Neil Booth4c2b6472000-11-11 13:19:01 +00001064
Neil Booth93c803682000-10-28 17:59:06 +00001065 /* Free the expanded arguments. */
1066 for (i = 0; i < macro->paramc; i++)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001067 if (args[i].expanded)
1068 free (args[i].expanded);
1069
Neil Booth644edda2001-10-02 12:57:24 +00001070 push_ptoken_context (pfile, node, buff, first, dest - first);
Neil Booth93c803682000-10-28 17:59:06 +00001071}
1072
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001073/* Return a special padding token, with padding inherited from SOURCE. */
1074static const cpp_token *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001075padding_token (cpp_reader *pfile, const cpp_token *source)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001076{
1077 cpp_token *result = _cpp_temp_token (pfile);
1078
1079 result->type = CPP_PADDING;
Paolo Bonzinibe0f1e52005-02-14 08:52:24 +00001080
1081 /* Data in GCed data structures cannot be made const so far, so we
1082 need a cast here. */
1083 result->val.source = (cpp_token *) source;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001084 result->flags = 0;
1085 return result;
1086}
1087
Neil Boothd15a58c2002-01-03 18:32:55 +00001088/* Get a new uninitialized context. Create a new one if we cannot
1089 re-use an old one. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001090static cpp_context *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001091next_context (cpp_reader *pfile)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001092{
1093 cpp_context *result = pfile->context->next;
1094
1095 if (result == 0)
1096 {
Bernardo Innocenti72bb2c32004-07-24 20:04:42 +02001097 result = XNEW (cpp_context);
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001098 result->prev = pfile->context;
1099 result->next = 0;
1100 pfile->context->next = result;
1101 }
1102
1103 pfile->context = result;
1104 return result;
1105}
1106
1107/* Push a list of pointers to tokens. */
1108static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001109push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
1110 const cpp_token **first, unsigned int count)
Neil Booth93c803682000-10-28 17:59:06 +00001111{
1112 cpp_context *context = next_context (pfile);
Neil Booth93c803682000-10-28 17:59:06 +00001113
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001114 context->direct_p = false;
1115 context->macro = macro;
Neil Booth1e013d22001-09-26 21:44:35 +00001116 context->buff = buff;
Neil Booth82eda772002-06-04 13:07:06 +00001117 FIRST (context).ptoken = first;
1118 LAST (context).ptoken = first + count;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001119}
1120
1121/* Push a list of tokens. */
Richard Hendersonbc4071d2006-01-04 08:33:38 -08001122void
1123_cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
1124 const cpp_token *first, unsigned int count)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001125{
1126 cpp_context *context = next_context (pfile);
1127
1128 context->direct_p = true;
1129 context->macro = macro;
Neil Booth1e013d22001-09-26 21:44:35 +00001130 context->buff = NULL;
Neil Booth82eda772002-06-04 13:07:06 +00001131 FIRST (context).token = first;
1132 LAST (context).token = first + count;
Neil Booth93c803682000-10-28 17:59:06 +00001133}
1134
Neil Boothcbc69f82002-06-05 20:27:12 +00001135/* Push a traditional macro's replacement text. */
1136void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001137_cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
1138 const uchar *start, size_t len)
Neil Boothcbc69f82002-06-05 20:27:12 +00001139{
1140 cpp_context *context = next_context (pfile);
1141
1142 context->direct_p = true;
1143 context->macro = macro;
1144 context->buff = NULL;
1145 CUR (context) = start;
Neil Booth1ce676a2002-06-09 20:04:17 +00001146 RLIMIT (context) = start + len;
Neil Booth974c43f2002-06-13 06:25:28 +00001147 macro->flags |= NODE_DISABLED;
Neil Boothcbc69f82002-06-05 20:27:12 +00001148}
1149
Neil Boothd15a58c2002-01-03 18:32:55 +00001150/* Expand an argument ARG before replacing parameters in a
1151 function-like macro. This works by pushing a context with the
1152 argument's tokens, and then expanding that into a temporary buffer
1153 as if it were a normal part of the token stream. collect_args()
1154 has terminated the argument's tokens with a CPP_EOF so that we know
1155 when we have fully expanded the argument. */
Neil Booth93c803682000-10-28 17:59:06 +00001156static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001157expand_arg (cpp_reader *pfile, macro_arg *arg)
Neil Booth93c803682000-10-28 17:59:06 +00001158{
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001159 unsigned int capacity;
Neil Booth56941bf2002-09-20 19:44:09 +00001160 bool saved_warn_trad;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001161
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001162 if (arg->count == 0)
1163 return;
Neil Booth93c803682000-10-28 17:59:06 +00001164
Neil Booth56941bf2002-09-20 19:44:09 +00001165 /* Don't warn about funlike macros when pre-expanding. */
1166 saved_warn_trad = CPP_WTRADITIONAL (pfile);
1167 CPP_WTRADITIONAL (pfile) = 0;
1168
Neil Booth93c803682000-10-28 17:59:06 +00001169 /* Loop, reading in the arguments. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001170 capacity = 256;
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00001171 arg->expanded = XNEWVEC (const cpp_token *, capacity);
Neil Booth93c803682000-10-28 17:59:06 +00001172
Neil Booth1e013d22001-09-26 21:44:35 +00001173 push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1);
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001174 for (;;)
Neil Booth93c803682000-10-28 17:59:06 +00001175 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001176 const cpp_token *token;
1177
1178 if (arg->expanded_count + 1 >= capacity)
Neil Booth93c803682000-10-28 17:59:06 +00001179 {
1180 capacity *= 2;
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00001181 arg->expanded = XRESIZEVEC (const cpp_token *, arg->expanded,
1182 capacity);
Neil Booth93c803682000-10-28 17:59:06 +00001183 }
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001184
1185 token = cpp_get_token (pfile);
1186
1187 if (token->type == CPP_EOF)
1188 break;
1189
1190 arg->expanded[arg->expanded_count++] = token;
Neil Booth93c803682000-10-28 17:59:06 +00001191 }
Neil Booth93c803682000-10-28 17:59:06 +00001192
Neil Booth1e013d22001-09-26 21:44:35 +00001193 _cpp_pop_context (pfile);
Neil Booth56941bf2002-09-20 19:44:09 +00001194
1195 CPP_WTRADITIONAL (pfile) = saved_warn_trad;
Neil Booth93c803682000-10-28 17:59:06 +00001196}
1197
Neil Boothd15a58c2002-01-03 18:32:55 +00001198/* Pop the current context off the stack, re-enabling the macro if the
1199 context represented a macro's replacement list. The context
1200 structure is not freed so that we can re-use it later. */
Neil Booth93c803682000-10-28 17:59:06 +00001201void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001202_cpp_pop_context (cpp_reader *pfile)
Neil Booth93c803682000-10-28 17:59:06 +00001203{
Neil Booth1e013d22001-09-26 21:44:35 +00001204 cpp_context *context = pfile->context;
Neil Booth93c803682000-10-28 17:59:06 +00001205
Neil Booth1e013d22001-09-26 21:44:35 +00001206 if (context->macro)
Neil Booth644edda2001-10-02 12:57:24 +00001207 context->macro->flags &= ~NODE_DISABLED;
Neil Booth1e013d22001-09-26 21:44:35 +00001208
1209 if (context->buff)
1210 _cpp_release_buff (pfile, context->buff);
1211
1212 pfile->context = context->prev;
Neil Booth93c803682000-10-28 17:59:06 +00001213}
1214
Martin Schaffner48c47212003-06-25 23:01:10 +02001215/* External routine to get a token. Also used nearly everywhere
Neil Booth7f2f1a62000-11-14 18:32:06 +00001216 internally, except for places where we know we can safely call
Martin Schaffner48c47212003-06-25 23:01:10 +02001217 _cpp_lex_token directly, such as lexing a directive name.
Neil Booth7f2f1a62000-11-14 18:32:06 +00001218
1219 Macro expansions and directives are transparently handled,
1220 including entering included files. Thus tokens are post-macro
1221 expansion, and after any intervening directives. External callers
1222 see CPP_EOF only at EOF. Internal callers also see it when meeting
1223 a directive inside a macro call, when at the end of a directive and
1224 state.in_directive is still 1, and at the end of argument
1225 pre-expansion. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001226const cpp_token *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001227cpp_get_token (cpp_reader *pfile)
Neil Booth93c803682000-10-28 17:59:06 +00001228{
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001229 const cpp_token *result;
Tom Tromey5ffeb9132007-09-06 16:24:05 +00001230 bool can_set = pfile->set_invocation_location;
1231 pfile->set_invocation_location = false;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001232
Neil Booth29b10742000-11-13 18:40:37 +00001233 for (;;)
Neil Booth93c803682000-10-28 17:59:06 +00001234 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001235 cpp_hashnode *node;
Neil Booth93c803682000-10-28 17:59:06 +00001236 cpp_context *context = pfile->context;
1237
Neil Booth93c803682000-10-28 17:59:06 +00001238 /* Context->prev == 0 <=> base context. */
Neil Boothbdcbe492001-09-13 20:05:17 +00001239 if (!context->prev)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001240 result = _cpp_lex_token (pfile);
Neil Booth82eda772002-06-04 13:07:06 +00001241 else if (FIRST (context).token != LAST (context).token)
Neil Booth29b10742000-11-13 18:40:37 +00001242 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001243 if (context->direct_p)
Neil Booth82eda772002-06-04 13:07:06 +00001244 result = FIRST (context).token++;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001245 else
Neil Booth82eda772002-06-04 13:07:06 +00001246 result = *FIRST (context).ptoken++;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001247
1248 if (result->flags & PASTE_LEFT)
Neil Boothec1a23e2001-01-31 07:48:54 +00001249 {
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001250 paste_all_tokens (pfile, result);
1251 if (pfile->state.in_directive)
1252 continue;
1253 return padding_token (pfile, result);
Neil Boothec1a23e2001-01-31 07:48:54 +00001254 }
Neil Booth29b10742000-11-13 18:40:37 +00001255 }
Neil Booth93c803682000-10-28 17:59:06 +00001256 else
1257 {
Neil Boothbdcbe492001-09-13 20:05:17 +00001258 _cpp_pop_context (pfile);
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001259 if (pfile->state.in_directive)
1260 continue;
1261 return &pfile->avoid_paste;
Neil Booth93c803682000-10-28 17:59:06 +00001262 }
Neil Booth93c803682000-10-28 17:59:06 +00001263
Jason Thorpe477cdac2002-04-07 03:12:23 +00001264 if (pfile->state.in_directive && result->type == CPP_COMMENT)
1265 continue;
1266
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001267 if (result->type != CPP_NAME)
Neil Booth93c803682000-10-28 17:59:06 +00001268 break;
1269
Joseph Myers9a0c6182009-05-10 15:27:32 +01001270 node = result->val.node.node;
Neil Booth4c2b6472000-11-11 13:19:01 +00001271
Neil Booth644edda2001-10-02 12:57:24 +00001272 if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
1273 break;
Kazu Hiratadf383482002-05-22 22:02:16 +00001274
Neil Booth644edda2001-10-02 12:57:24 +00001275 if (!(node->flags & NODE_DISABLED))
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001276 {
Ben Elliston5950c3c2008-07-14 05:09:48 +00001277 int ret = 0;
Tom Tromey5ffeb9132007-09-06 16:24:05 +00001278 /* If not in a macro context, and we're going to start an
1279 expansion, record the location. */
1280 if (can_set && !context->macro)
1281 pfile->invocation_location = result->src_loc;
Jakub Jelinek765d6002008-01-25 10:01:27 +01001282 if (pfile->state.prevent_expansion)
1283 break;
Ben Elliston5950c3c2008-07-14 05:09:48 +00001284
1285 /* Conditional macros require that a predicate be evaluated
1286 first. */
Jakub Jelineka37a7b82009-03-30 17:00:52 +02001287 if ((node->flags & NODE_CONDITIONAL) != 0)
1288 {
1289 if (pfile->cb.macro_to_expand)
1290 {
1291 bool whitespace_after;
1292 const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
1293
1294 whitespace_after = (peek_tok->type == CPP_PADDING
1295 || (peek_tok->flags & PREV_WHITE));
1296 node = pfile->cb.macro_to_expand (pfile, result);
1297 if (node)
1298 ret = enter_macro_context (pfile, node, result);
1299 else if (whitespace_after)
1300 {
1301 /* If macro_to_expand hook returned NULL and it
1302 ate some tokens, see if we don't need to add
1303 a padding token in between this and the
1304 next token. */
1305 peek_tok = cpp_peek_token (pfile, 0);
1306 if (peek_tok->type != CPP_PADDING
1307 && (peek_tok->flags & PREV_WHITE) == 0)
1308 _cpp_push_token_context (pfile, NULL,
1309 padding_token (pfile,
1310 peek_tok), 1);
1311 }
1312 }
1313 }
1314 else
1315 ret = enter_macro_context (pfile, node, result);
1316 if (ret)
Ben Elliston5950c3c2008-07-14 05:09:48 +00001317 {
Jakub Jelinek765d6002008-01-25 10:01:27 +01001318 if (pfile->state.in_directive || ret == 2)
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001319 continue;
1320 return padding_token (pfile, result);
Neil Boothbd969772001-02-01 19:13:53 +00001321 }
Neil Booth93c803682000-10-28 17:59:06 +00001322 }
Neil Booth644edda2001-10-02 12:57:24 +00001323 else
1324 {
Neil Boothd15a58c2002-01-03 18:32:55 +00001325 /* Flag this token as always unexpandable. FIXME: move this
1326 to collect_args()?. */
Neil Booth644edda2001-10-02 12:57:24 +00001327 cpp_token *t = _cpp_temp_token (pfile);
1328 t->type = result->type;
1329 t->flags = result->flags | NO_EXPAND;
Jakub Jelinek73096712005-03-04 16:33:23 +01001330 t->val = result->val;
Neil Booth644edda2001-10-02 12:57:24 +00001331 result = t;
1332 }
Neil Bootha5c3ccc2000-10-30 22:29:00 +00001333
Neil Booth644edda2001-10-02 12:57:24 +00001334 break;
Neil Booth93c803682000-10-28 17:59:06 +00001335 }
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001336
1337 return result;
Neil Booth93c803682000-10-28 17:59:06 +00001338}
1339
Tom Tromey5ffeb9132007-09-06 16:24:05 +00001340/* Like cpp_get_token, but also returns a location separate from the
1341 one provided by the returned token. LOC is an out parameter; *LOC
1342 is set to the location "as expected by the user". This matters
1343 when a token results from macro expansion -- the token's location
1344 will indicate where the macro is defined, but *LOC will be the
1345 location of the start of the expansion. */
1346const cpp_token *
1347cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
1348{
1349 const cpp_token *result;
1350
1351 pfile->set_invocation_location = true;
1352 result = cpp_get_token (pfile);
1353 if (pfile->context->macro)
1354 *loc = pfile->invocation_location;
1355 else
1356 *loc = result->src_loc;
1357
1358 return result;
1359}
1360
Neil Booth7065e132001-02-14 07:38:20 +00001361/* Returns true if we're expanding an object-like macro that was
1362 defined in a system header. Just checks the macro at the top of
1363 the stack. Used for diagnostic suppression. */
1364int
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001365cpp_sys_macro_p (cpp_reader *pfile)
Neil Booth7065e132001-02-14 07:38:20 +00001366{
Neil Booth644edda2001-10-02 12:57:24 +00001367 cpp_hashnode *node = pfile->context->macro;
Neil Booth7065e132001-02-14 07:38:20 +00001368
Neil Booth644edda2001-10-02 12:57:24 +00001369 return node && node->value.macro && node->value.macro->syshdr;
Neil Booth7065e132001-02-14 07:38:20 +00001370}
1371
Neil Boothaf0d16c2002-04-22 17:48:02 +00001372/* Read each token in, until end of the current file. Directives are
1373 transparently processed. */
Neil Booth93c803682000-10-28 17:59:06 +00001374void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001375cpp_scan_nooutput (cpp_reader *pfile)
Neil Booth93c803682000-10-28 17:59:06 +00001376{
Per Bothner22234f52004-02-18 14:02:39 -08001377 /* Request a CPP_EOF token at the end of this file, rather than
1378 transparently continuing with the including file. */
1379 pfile->buffer->return_at_eof = true;
1380
Zack Weinbergc6e83802004-06-05 20:58:06 +00001381 pfile->state.discarding_output++;
1382 pfile->state.prevent_expansion++;
1383
Neil Booth590e1982002-07-01 12:47:54 +00001384 if (CPP_OPTION (pfile, traditional))
1385 while (_cpp_read_logical_line_trad (pfile))
1386 ;
1387 else
1388 while (cpp_get_token (pfile)->type != CPP_EOF)
1389 ;
Zack Weinbergc6e83802004-06-05 20:58:06 +00001390
1391 pfile->state.discarding_output--;
1392 pfile->state.prevent_expansion--;
Neil Booth93c803682000-10-28 17:59:06 +00001393}
1394
Ben Elliston5950c3c2008-07-14 05:09:48 +00001395/* Step back one or more tokens obtained from the lexer. */
1396void
1397_cpp_backup_tokens_direct (cpp_reader *pfile, unsigned int count)
1398{
1399 pfile->lookaheads += count;
1400 while (count--)
1401 {
1402 pfile->cur_token--;
1403 if (pfile->cur_token == pfile->cur_run->base
1404 /* Possible with -fpreprocessed and no leading #line. */
1405 && pfile->cur_run->prev != NULL)
1406 {
1407 pfile->cur_run = pfile->cur_run->prev;
1408 pfile->cur_token = pfile->cur_run->limit;
1409 }
1410 }
1411}
1412
Jakub Jelinek1c90c6f2006-06-09 23:13:25 +02001413/* Step back one (or more) tokens. Can only step back more than 1 if
Neil Boothbdcbe492001-09-13 20:05:17 +00001414 they are from the lexer, and not from macro expansion. */
Neil Boothb528a072000-11-12 11:46:21 +00001415void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001416_cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
Neil Booth93c803682000-10-28 17:59:06 +00001417{
Neil Boothbdcbe492001-09-13 20:05:17 +00001418 if (pfile->context->prev == NULL)
Ben Elliston5950c3c2008-07-14 05:09:48 +00001419 _cpp_backup_tokens_direct (pfile, count);
Neil Booth93c803682000-10-28 17:59:06 +00001420 else
1421 {
Neil Boothbdcbe492001-09-13 20:05:17 +00001422 if (count != 1)
1423 abort ();
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001424 if (pfile->context->direct_p)
Neil Booth82eda772002-06-04 13:07:06 +00001425 FIRST (pfile->context).token--;
Neil Booth4ed5bcf2001-09-24 22:53:12 +00001426 else
Neil Booth82eda772002-06-04 13:07:06 +00001427 FIRST (pfile->context).ptoken--;
Neil Booth93c803682000-10-28 17:59:06 +00001428 }
Neil Booth93c803682000-10-28 17:59:06 +00001429}
1430
1431/* #define directive parsing and handling. */
1432
Kazu Hiratada7d8302002-09-22 02:03:17 +00001433/* Returns nonzero if a macro redefinition warning is required. */
Neil Boothcbc69f82002-06-05 20:27:12 +00001434static bool
Jakub Jelinek8e680db2010-06-11 20:37:34 +02001435warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001436 const cpp_macro *macro2)
Neil Booth93c803682000-10-28 17:59:06 +00001437{
1438 const cpp_macro *macro1;
1439 unsigned int i;
1440
Neil Booth618cdda2001-02-25 09:43:03 +00001441 /* Some redefinitions need to be warned about regardless. */
1442 if (node->flags & NODE_WARN)
Neil Boothcbc69f82002-06-05 20:27:12 +00001443 return true;
Neil Booth93c803682000-10-28 17:59:06 +00001444
Simon Baldwinc047ce92008-09-18 15:39:08 +00001445 /* Suppress warnings for builtins that lack the NODE_WARN flag. */
1446 if (node->flags & NODE_BUILTIN)
Jakub Jelinek8e680db2010-06-11 20:37:34 +02001447 {
1448 if (!pfile->cb.user_builtin_macro
1449 || !pfile->cb.user_builtin_macro (pfile, node))
1450 return false;
1451 }
Simon Baldwinc047ce92008-09-18 15:39:08 +00001452
Ben Elliston5950c3c2008-07-14 05:09:48 +00001453 /* Redefinitions of conditional (context-sensitive) macros, on
1454 the other hand, must be allowed silently. */
1455 if (node->flags & NODE_CONDITIONAL)
1456 return false;
1457
Neil Booth618cdda2001-02-25 09:43:03 +00001458 /* Redefinition of a macro is allowed if and only if the old and new
Kazu Hirataec5c56d2001-08-01 17:57:27 +00001459 definitions are the same. (6.10.3 paragraph 2). */
Neil Booth93c803682000-10-28 17:59:06 +00001460 macro1 = node->value.macro;
1461
Neil Booth6618c5d2002-06-10 06:03:13 +00001462 /* Don't check count here as it can be different in valid
1463 traditional redefinitions with just whitespace differences. */
1464 if (macro1->paramc != macro2->paramc
Neil Booth93c803682000-10-28 17:59:06 +00001465 || macro1->fun_like != macro2->fun_like
Neil Booth28e0f042000-12-09 12:06:37 +00001466 || macro1->variadic != macro2->variadic)
Neil Boothcbc69f82002-06-05 20:27:12 +00001467 return true;
Neil Booth93c803682000-10-28 17:59:06 +00001468
1469 /* Check parameter spellings. */
1470 for (i = 0; i < macro1->paramc; i++)
1471 if (macro1->params[i] != macro2->params[i])
Neil Boothcbc69f82002-06-05 20:27:12 +00001472 return true;
Neil Booth93c803682000-10-28 17:59:06 +00001473
Neil Boothcbc69f82002-06-05 20:27:12 +00001474 /* Check the replacement text or tokens. */
1475 if (CPP_OPTION (pfile, traditional))
Neil Booth6618c5d2002-06-10 06:03:13 +00001476 return _cpp_expansions_different_trad (macro1, macro2);
Neil Boothcbc69f82002-06-05 20:27:12 +00001477
DJ Deloriea7f36da2003-06-01 14:55:15 -04001478 if (macro1->count != macro2->count)
1479 return true;
1480
1481 for (i = 0; i < macro1->count; i++)
1482 if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
1483 return true;
Neil Boothcbc69f82002-06-05 20:27:12 +00001484
1485 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00001486}
1487
Neil Booth93c803682000-10-28 17:59:06 +00001488/* Free the definition of hashnode H. */
Neil Booth93c803682000-10-28 17:59:06 +00001489void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001490_cpp_free_definition (cpp_hashnode *h)
Zack Weinberg711b8822000-07-18 00:59:49 +00001491{
Neil Booth93c803682000-10-28 17:59:06 +00001492 /* Macros and assertions no longer have anything to free. */
1493 h->type = NT_VOID;
1494 /* Clear builtin flag in case of redefinition. */
Joseph Myers93d45d92008-04-02 20:42:53 +01001495 h->flags &= ~(NODE_BUILTIN | NODE_DISABLED | NODE_USED);
Neil Booth93c803682000-10-28 17:59:06 +00001496}
Zack Weinberg711b8822000-07-18 00:59:49 +00001497
Neil Booth14baae02001-09-17 18:26:12 +00001498/* Save parameter NODE to the parameter list of macro MACRO. Returns
Kazu Hiratada7d8302002-09-22 02:03:17 +00001499 zero on success, nonzero if the parameter is a duplicate. */
Neil Boothc70f6ed2002-06-07 06:26:32 +00001500bool
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001501_cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
Neil Booth93c803682000-10-28 17:59:06 +00001502{
Zack Weinberg4977bab2002-12-16 18:23:00 +00001503 unsigned int len;
Neil Booth93c803682000-10-28 17:59:06 +00001504 /* Constraint 6.10.3.6 - duplicate parameter names. */
Zack Weinberg4977bab2002-12-16 18:23:00 +00001505 if (node->flags & NODE_MACRO_ARG)
Zack Weinberg711b8822000-07-18 00:59:49 +00001506 {
John David Anglin0527bc42003-11-01 22:56:54 +00001507 cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
Neil Boothebef4e82002-04-14 18:42:47 +00001508 NODE_NAME (node));
Neil Booth23ff0222002-07-17 17:27:14 +00001509 return true;
Neil Booth93c803682000-10-28 17:59:06 +00001510 }
1511
Neil Booth8c3b2692001-09-30 10:03:11 +00001512 if (BUFF_ROOM (pfile->a_buff)
1513 < (macro->paramc + 1) * sizeof (cpp_hashnode *))
1514 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
Neil Booth93c803682000-10-28 17:59:06 +00001515
Neil Booth8c3b2692001-09-30 10:03:11 +00001516 ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
Zack Weinberg4977bab2002-12-16 18:23:00 +00001517 node->flags |= NODE_MACRO_ARG;
1518 len = macro->paramc * sizeof (union _cpp_hashnode_value);
1519 if (len > pfile->macro_buffer_len)
1520 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00001521 pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
1522 len);
Zack Weinberg4977bab2002-12-16 18:23:00 +00001523 pfile->macro_buffer_len = len;
1524 }
1525 ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
1526 = node->value;
1527
1528 node->value.arg_index = macro->paramc;
Neil Booth23ff0222002-07-17 17:27:14 +00001529 return false;
Neil Booth93c803682000-10-28 17:59:06 +00001530}
1531
Neil Booth23ff0222002-07-17 17:27:14 +00001532/* Check the syntax of the parameters in a MACRO definition. Returns
1533 false if an error occurs. */
1534static bool
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001535parse_params (cpp_reader *pfile, cpp_macro *macro)
Neil Booth93c803682000-10-28 17:59:06 +00001536{
Neil Booth93c803682000-10-28 17:59:06 +00001537 unsigned int prev_ident = 0;
1538
Neil Booth93c803682000-10-28 17:59:06 +00001539 for (;;)
1540 {
Neil Booth345894b2001-09-16 13:44:29 +00001541 const cpp_token *token = _cpp_lex_token (pfile);
Neil Booth93c803682000-10-28 17:59:06 +00001542
Neil Booth345894b2001-09-16 13:44:29 +00001543 switch (token->type)
Zack Weinberg711b8822000-07-18 00:59:49 +00001544 {
1545 default:
Jason Thorpe477cdac2002-04-07 03:12:23 +00001546 /* Allow/ignore comments in parameter lists if we are
1547 preserving comments in macro expansions. */
1548 if (token->type == CPP_COMMENT
1549 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
1550 continue;
1551
John David Anglin0527bc42003-11-01 22:56:54 +00001552 cpp_error (pfile, CPP_DL_ERROR,
Neil Boothebef4e82002-04-14 18:42:47 +00001553 "\"%s\" may not appear in macro parameter list",
Neil Booth345894b2001-09-16 13:44:29 +00001554 cpp_token_as_text (pfile, token));
Neil Booth23ff0222002-07-17 17:27:14 +00001555 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00001556
Zack Weinberg711b8822000-07-18 00:59:49 +00001557 case CPP_NAME:
1558 if (prev_ident)
1559 {
John David Anglin0527bc42003-11-01 22:56:54 +00001560 cpp_error (pfile, CPP_DL_ERROR,
Neil Boothebef4e82002-04-14 18:42:47 +00001561 "macro parameters must be comma-separated");
Neil Booth23ff0222002-07-17 17:27:14 +00001562 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00001563 }
Zack Weinberg711b8822000-07-18 00:59:49 +00001564 prev_ident = 1;
Neil Booth93c803682000-10-28 17:59:06 +00001565
Joseph Myers9a0c6182009-05-10 15:27:32 +01001566 if (_cpp_save_parameter (pfile, macro, token->val.node.node))
Neil Booth23ff0222002-07-17 17:27:14 +00001567 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00001568 continue;
1569
1570 case CPP_CLOSE_PAREN:
Neil Booth93c803682000-10-28 17:59:06 +00001571 if (prev_ident || macro->paramc == 0)
Neil Booth23ff0222002-07-17 17:27:14 +00001572 return true;
Zack Weinberg711b8822000-07-18 00:59:49 +00001573
1574 /* Fall through to pick up the error. */
1575 case CPP_COMMA:
1576 if (!prev_ident)
1577 {
John David Anglin0527bc42003-11-01 22:56:54 +00001578 cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
Neil Booth23ff0222002-07-17 17:27:14 +00001579 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00001580 }
1581 prev_ident = 0;
1582 continue;
1583
1584 case CPP_ELLIPSIS:
Neil Booth28e0f042000-12-09 12:06:37 +00001585 macro->variadic = 1;
Zack Weinberg711b8822000-07-18 00:59:49 +00001586 if (!prev_ident)
1587 {
Neil Boothc70f6ed2002-06-07 06:26:32 +00001588 _cpp_save_parameter (pfile, macro,
1589 pfile->spec_nodes.n__VA_ARGS__);
Neil Booth93c803682000-10-28 17:59:06 +00001590 pfile->state.va_args_ok = 1;
Richard Hendersone5b79212004-02-19 14:18:50 -08001591 if (! CPP_OPTION (pfile, c99)
1592 && CPP_OPTION (pfile, pedantic)
1593 && CPP_OPTION (pfile, warn_variadic_macros))
Simon Baldwin87cf0652010-04-07 17:18:10 +00001594 cpp_pedwarning
1595 (pfile, CPP_W_VARIADIC_MACROS,
1596 "anonymous variadic macros were introduced in C99");
Zack Weinberg711b8822000-07-18 00:59:49 +00001597 }
Richard Hendersone5b79212004-02-19 14:18:50 -08001598 else if (CPP_OPTION (pfile, pedantic)
1599 && CPP_OPTION (pfile, warn_variadic_macros))
Simon Baldwin87cf0652010-04-07 17:18:10 +00001600 cpp_pedwarning (pfile, CPP_W_VARIADIC_MACROS,
1601 "ISO C does not permit named variadic macros");
Zack Weinberg711b8822000-07-18 00:59:49 +00001602
Neil Booth93c803682000-10-28 17:59:06 +00001603 /* We're at the end, and just expect a closing parenthesis. */
Neil Booth345894b2001-09-16 13:44:29 +00001604 token = _cpp_lex_token (pfile);
1605 if (token->type == CPP_CLOSE_PAREN)
Neil Booth23ff0222002-07-17 17:27:14 +00001606 return true;
Neil Booth93c803682000-10-28 17:59:06 +00001607 /* Fall through. */
1608
1609 case CPP_EOF:
John David Anglin0527bc42003-11-01 22:56:54 +00001610 cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
Neil Booth23ff0222002-07-17 17:27:14 +00001611 return false;
Zack Weinberg711b8822000-07-18 00:59:49 +00001612 }
Zack Weinberg711b8822000-07-18 00:59:49 +00001613 }
1614}
1615
Neil Booth14baae02001-09-17 18:26:12 +00001616/* Allocate room for a token from a macro's replacement list. */
Neil Booth93c803682000-10-28 17:59:06 +00001617static cpp_token *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001618alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
Zack Weinberg711b8822000-07-18 00:59:49 +00001619{
Neil Booth8c3b2692001-09-30 10:03:11 +00001620 if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
1621 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
Zack Weinberg711b8822000-07-18 00:59:49 +00001622
Neil Booth8c3b2692001-09-30 10:03:11 +00001623 return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
Neil Booth14baae02001-09-17 18:26:12 +00001624}
1625
Neil Boothd15a58c2002-01-03 18:32:55 +00001626/* Lex a token from the expansion of MACRO, but mark parameters as we
1627 find them and warn of traditional stringification. */
Neil Booth14baae02001-09-17 18:26:12 +00001628static cpp_token *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001629lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
Neil Booth14baae02001-09-17 18:26:12 +00001630{
Tom Tromeyee380362007-01-30 15:46:01 +00001631 cpp_token *token, *saved_cur_token;
Neil Booth14baae02001-09-17 18:26:12 +00001632
Tom Tromeyee380362007-01-30 15:46:01 +00001633 saved_cur_token = pfile->cur_token;
Neil Booth14baae02001-09-17 18:26:12 +00001634 pfile->cur_token = alloc_expansion_token (pfile, macro);
1635 token = _cpp_lex_direct (pfile);
Tom Tromeyee380362007-01-30 15:46:01 +00001636 pfile->cur_token = saved_cur_token;
Neil Booth93c803682000-10-28 17:59:06 +00001637
Neil Boothd15a58c2002-01-03 18:32:55 +00001638 /* Is this a parameter? */
Zack Weinberg4977bab2002-12-16 18:23:00 +00001639 if (token->type == CPP_NAME
Joseph Myers9a0c6182009-05-10 15:27:32 +01001640 && (token->val.node.node->flags & NODE_MACRO_ARG) != 0)
Zack Weinberg711b8822000-07-18 00:59:49 +00001641 {
Neil Booth93c803682000-10-28 17:59:06 +00001642 token->type = CPP_MACRO_ARG;
Joseph Myers9a0c6182009-05-10 15:27:32 +01001643 token->val.macro_arg.arg_no = token->val.node.node->value.arg_index;
Zack Weinberg711b8822000-07-18 00:59:49 +00001644 }
Neil Booth93c803682000-10-28 17:59:06 +00001645 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1646 && (token->type == CPP_STRING || token->type == CPP_CHAR))
1647 check_trad_stringification (pfile, macro, &token->val.str);
Zack Weinberg711b8822000-07-18 00:59:49 +00001648
Neil Booth93c803682000-10-28 17:59:06 +00001649 return token;
Zack Weinberg711b8822000-07-18 00:59:49 +00001650}
1651
Neil Boothcbc69f82002-06-05 20:27:12 +00001652static bool
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001653create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
Zack Weinberg711b8822000-07-18 00:59:49 +00001654{
Neil Boothcbc69f82002-06-05 20:27:12 +00001655 cpp_token *token;
Neil Booth14baae02001-09-17 18:26:12 +00001656 const cpp_token *ctoken;
Simon Martin126e0732007-05-23 20:58:34 +00001657 bool following_paste_op = false;
1658 const char *paste_op_error_msg =
1659 N_("'##' cannot appear at either end of a macro expansion");
Joseph Myersaa508502009-04-19 18:10:56 +01001660 unsigned int num_extra_tokens = 0;
Zack Weinberg711b8822000-07-18 00:59:49 +00001661
Neil Booth93c803682000-10-28 17:59:06 +00001662 /* Get the first token of the expansion (or the '(' of a
1663 function-like macro). */
Neil Booth14baae02001-09-17 18:26:12 +00001664 ctoken = _cpp_lex_token (pfile);
1665
1666 if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
Zack Weinberg711b8822000-07-18 00:59:49 +00001667 {
Neil Boothcbc69f82002-06-05 20:27:12 +00001668 bool ok = parse_params (pfile, macro);
Neil Booth8c3b2692001-09-30 10:03:11 +00001669 macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
1670 if (!ok)
Neil Boothcbc69f82002-06-05 20:27:12 +00001671 return false;
Neil Booth8c3b2692001-09-30 10:03:11 +00001672
Geoffrey Keatingd8044162004-06-09 20:10:13 +00001673 /* Success. Commit or allocate the parameter array. */
1674 if (pfile->hash_table->alloc_subobject)
1675 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00001676 cpp_hashnode **params =
1677 (cpp_hashnode **) pfile->hash_table->alloc_subobject
1678 (sizeof (cpp_hashnode *) * macro->paramc);
Paolo Bonzinibe0f1e52005-02-14 08:52:24 +00001679 memcpy (params, macro->params,
1680 sizeof (cpp_hashnode *) * macro->paramc);
1681 macro->params = params;
Geoffrey Keatingd8044162004-06-09 20:10:13 +00001682 }
1683 else
1684 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
Neil Booth93c803682000-10-28 17:59:06 +00001685 macro->fun_like = 1;
Neil Booth93c803682000-10-28 17:59:06 +00001686 }
Neil Booth14baae02001-09-17 18:26:12 +00001687 else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
Jakub Jelinekcae064e2005-04-05 22:07:06 +02001688 {
1689 /* While ISO C99 requires whitespace before replacement text
1690 in a macro definition, ISO C90 with TC1 allows there characters
1691 from the basic source character set. */
1692 if (CPP_OPTION (pfile, c99))
1693 cpp_error (pfile, CPP_DL_PEDWARN,
1694 "ISO C99 requires whitespace after the macro name");
1695 else
1696 {
1697 int warntype = CPP_DL_WARNING;
1698 switch (ctoken->type)
1699 {
1700 case CPP_ATSIGN:
1701 case CPP_AT_NAME:
1702 case CPP_OBJC_STRING:
1703 /* '@' is not in basic character set. */
1704 warntype = CPP_DL_PEDWARN;
1705 break;
1706 case CPP_OTHER:
1707 /* Basic character set sans letters, digits and _. */
1708 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
1709 ctoken->val.str.text[0]) == NULL)
1710 warntype = CPP_DL_PEDWARN;
1711 break;
1712 default:
1713 /* All other tokens start with a character from basic
1714 character set. */
1715 break;
1716 }
1717 cpp_error (pfile, warntype,
1718 "missing whitespace after the macro name");
1719 }
1720 }
Neil Booth93c803682000-10-28 17:59:06 +00001721
Neil Booth14baae02001-09-17 18:26:12 +00001722 if (macro->fun_like)
1723 token = lex_expansion_token (pfile, macro);
1724 else
1725 {
1726 token = alloc_expansion_token (pfile, macro);
1727 *token = *ctoken;
1728 }
Neil Booth93c803682000-10-28 17:59:06 +00001729
1730 for (;;)
1731 {
1732 /* Check the stringifying # constraint 6.10.3.2.1 of
1733 function-like macros when lexing the subsequent token. */
1734 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
Zack Weinberg711b8822000-07-18 00:59:49 +00001735 {
Neil Booth93c803682000-10-28 17:59:06 +00001736 if (token->type == CPP_MACRO_ARG)
1737 {
Joseph Myersaa508502009-04-19 18:10:56 +01001738 if (token->flags & PREV_WHITE)
1739 token->flags |= SP_PREV_WHITE;
1740 if (token[-1].flags & DIGRAPH)
1741 token->flags |= SP_DIGRAPH;
Neil Booth93c803682000-10-28 17:59:06 +00001742 token->flags &= ~PREV_WHITE;
1743 token->flags |= STRINGIFY_ARG;
1744 token->flags |= token[-1].flags & PREV_WHITE;
1745 token[-1] = token[0];
1746 macro->count--;
1747 }
1748 /* Let assembler get away with murder. */
Neil Boothbdb05a72000-11-26 17:31:13 +00001749 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
Neil Booth93c803682000-10-28 17:59:06 +00001750 {
John David Anglin0527bc42003-11-01 22:56:54 +00001751 cpp_error (pfile, CPP_DL_ERROR,
Neil Boothebef4e82002-04-14 18:42:47 +00001752 "'#' is not followed by a macro parameter");
Neil Boothcbc69f82002-06-05 20:27:12 +00001753 return false;
Neil Booth93c803682000-10-28 17:59:06 +00001754 }
1755 }
1756
1757 if (token->type == CPP_EOF)
Simon Martin126e0732007-05-23 20:58:34 +00001758 {
1759 /* Paste operator constraint 6.10.3.3.1:
1760 Token-paste ##, can appear in both object-like and
1761 function-like macros, but not at the end. */
1762 if (following_paste_op)
1763 {
1764 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
1765 return false;
1766 }
1767 break;
1768 }
Neil Booth93c803682000-10-28 17:59:06 +00001769
1770 /* Paste operator constraint 6.10.3.3.1. */
1771 if (token->type == CPP_PASTE)
1772 {
1773 /* Token-paste ##, can appear in both object-like and
Simon Martin126e0732007-05-23 20:58:34 +00001774 function-like macros, but not at the beginning. */
1775 if (macro->count == 1)
Neil Booth93c803682000-10-28 17:59:06 +00001776 {
Simon Martin126e0732007-05-23 20:58:34 +00001777 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
Neil Boothcbc69f82002-06-05 20:27:12 +00001778 return false;
Neil Booth93c803682000-10-28 17:59:06 +00001779 }
1780
Joseph Myersaa508502009-04-19 18:10:56 +01001781 if (token[-1].flags & PASTE_LEFT)
1782 {
1783 macro->extra_tokens = 1;
1784 num_extra_tokens++;
Joseph Myers9a0c6182009-05-10 15:27:32 +01001785 token->val.token_no = macro->count - 1;
Joseph Myersaa508502009-04-19 18:10:56 +01001786 }
1787 else
1788 {
1789 --macro->count;
1790 token[-1].flags |= PASTE_LEFT;
1791 if (token->flags & DIGRAPH)
1792 token[-1].flags |= SP_DIGRAPH;
1793 if (token->flags & PREV_WHITE)
1794 token[-1].flags |= SP_PREV_WHITE;
1795 }
Neil Booth93c803682000-10-28 17:59:06 +00001796 }
1797
Simon Martin126e0732007-05-23 20:58:34 +00001798 following_paste_op = (token->type == CPP_PASTE);
Neil Booth93c803682000-10-28 17:59:06 +00001799 token = lex_expansion_token (pfile, macro);
1800 }
1801
Neil Booth601328b2002-05-16 05:53:24 +00001802 macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
Geoffrey Keatingd8044162004-06-09 20:10:13 +00001803 macro->traditional = 0;
Neil Booth8c3b2692001-09-30 10:03:11 +00001804
Neil Booth4c2b6472000-11-11 13:19:01 +00001805 /* Don't count the CPP_EOF. */
1806 macro->count--;
Neil Booth93c803682000-10-28 17:59:06 +00001807
Neil Boothd15a58c2002-01-03 18:32:55 +00001808 /* Clear whitespace on first token for warn_of_redefinition(). */
Neil Booth8c3b2692001-09-30 10:03:11 +00001809 if (macro->count)
Neil Booth601328b2002-05-16 05:53:24 +00001810 macro->exp.tokens[0].flags &= ~PREV_WHITE;
Neil Booth8c3b2692001-09-30 10:03:11 +00001811
Geoffrey Keatingd8044162004-06-09 20:10:13 +00001812 /* Commit or allocate the memory. */
1813 if (pfile->hash_table->alloc_subobject)
1814 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00001815 cpp_token *tokns =
1816 (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
1817 * macro->count);
Joseph Myersaa508502009-04-19 18:10:56 +01001818 if (num_extra_tokens)
1819 {
1820 /* Place second and subsequent ## or %:%: tokens in
1821 sequences of consecutive such tokens at the end of the
1822 list to preserve information about where they appear, how
1823 they are spelt and whether they are preceded by
1824 whitespace without otherwise interfering with macro
1825 expansion. */
1826 cpp_token *normal_dest = tokns;
1827 cpp_token *extra_dest = tokns + macro->count - num_extra_tokens;
1828 unsigned int i;
1829 for (i = 0; i < macro->count; i++)
1830 {
1831 if (macro->exp.tokens[i].type == CPP_PASTE)
1832 *extra_dest++ = macro->exp.tokens[i];
1833 else
1834 *normal_dest++ = macro->exp.tokens[i];
1835 }
1836 }
1837 else
1838 memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
Geoffrey Keatingd8044162004-06-09 20:10:13 +00001839 macro->exp.tokens = tokns;
1840 }
1841 else
1842 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
Neil Booth8c3b2692001-09-30 10:03:11 +00001843
Neil Boothcbc69f82002-06-05 20:27:12 +00001844 return true;
1845}
Neil Booth44ed91a2000-10-29 11:37:18 +00001846
Kazu Hiratada7d8302002-09-22 02:03:17 +00001847/* Parse a macro and save its expansion. Returns nonzero on success. */
Neil Boothcbc69f82002-06-05 20:27:12 +00001848bool
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001849_cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
Neil Boothcbc69f82002-06-05 20:27:12 +00001850{
1851 cpp_macro *macro;
1852 unsigned int i;
1853 bool ok;
1854
Geoffrey Keatingd8044162004-06-09 20:10:13 +00001855 if (pfile->hash_table->alloc_subobject)
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00001856 macro = (cpp_macro *) pfile->hash_table->alloc_subobject
1857 (sizeof (cpp_macro));
Geoffrey Keatingd8044162004-06-09 20:10:13 +00001858 else
1859 macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
Neil Boothcbc69f82002-06-05 20:27:12 +00001860 macro->line = pfile->directive_line;
1861 macro->params = 0;
1862 macro->paramc = 0;
1863 macro->variadic = 0;
Neil Booth23345bb2003-03-14 21:47:50 +00001864 macro->used = !CPP_OPTION (pfile, warn_unused_macros);
Neil Boothcbc69f82002-06-05 20:27:12 +00001865 macro->count = 0;
1866 macro->fun_like = 0;
Joseph Myersaa508502009-04-19 18:10:56 +01001867 macro->extra_tokens = 0;
Neil Booth7065e132001-02-14 07:38:20 +00001868 /* To suppress some diagnostics. */
Per Bothner12f9df42004-02-11 07:29:30 -08001869 macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
Neil Booth7065e132001-02-14 07:38:20 +00001870
Neil Boothcbc69f82002-06-05 20:27:12 +00001871 if (CPP_OPTION (pfile, traditional))
1872 ok = _cpp_create_trad_definition (pfile, macro);
1873 else
1874 {
Neil Boothcbc69f82002-06-05 20:27:12 +00001875 ok = create_iso_definition (pfile, macro);
1876
Tom Tromeyee380362007-01-30 15:46:01 +00001877 /* We set the type for SEEN_EOL() in directives.c.
Neil Boothcbc69f82002-06-05 20:27:12 +00001878
1879 Longer term we should lex the whole line before coming here,
1880 and just copy the expansion. */
Neil Boothcbc69f82002-06-05 20:27:12 +00001881
1882 /* Stop the lexer accepting __VA_ARGS__. */
1883 pfile->state.va_args_ok = 0;
1884 }
1885
1886 /* Clear the fast argument lookup indices. */
1887 for (i = macro->paramc; i-- > 0; )
Zack Weinberg4977bab2002-12-16 18:23:00 +00001888 {
1889 struct cpp_hashnode *node = macro->params[i];
1890 node->flags &= ~ NODE_MACRO_ARG;
1891 node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
1892 }
Neil Boothcbc69f82002-06-05 20:27:12 +00001893
1894 if (!ok)
1895 return ok;
1896
Neil Boothc2734e02002-07-26 16:29:31 +00001897 if (node->type == NT_MACRO)
Neil Booth93c803682000-10-28 17:59:06 +00001898 {
Neil Bootha69cbaa2002-07-23 22:57:49 +00001899 if (CPP_OPTION (pfile, warn_unused_macros))
1900 _cpp_warn_if_unused_macro (pfile, node, NULL);
1901
Neil Boothcbc69f82002-06-05 20:27:12 +00001902 if (warn_of_redefinition (pfile, node, macro))
Neil Booth93c803682000-10-28 17:59:06 +00001903 {
Simon Baldwin87cf0652010-04-07 17:18:10 +00001904 const int reason = (node->flags & NODE_BUILTIN)
1905 ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
Joseph Myers148e4212009-03-29 23:56:07 +01001906 bool warned;
Simon Baldwin87cf0652010-04-07 17:18:10 +00001907
1908 warned = cpp_pedwarning_with_line (pfile, reason,
1909 pfile->directive_line, 0,
1910 "\"%s\" redefined",
1911 NODE_NAME (node));
Neil Booth93c803682000-10-28 17:59:06 +00001912
Joseph Myers148e4212009-03-29 23:56:07 +01001913 if (warned && node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
1914 cpp_error_with_line (pfile, CPP_DL_NOTE,
Neil Boothcbc69f82002-06-05 20:27:12 +00001915 node->value.macro->line, 0,
1916 "this is the location of the previous definition");
Zack Weinberg711b8822000-07-18 00:59:49 +00001917 }
Zack Weinberg711b8822000-07-18 00:59:49 +00001918 }
1919
Neil Boothc2734e02002-07-26 16:29:31 +00001920 if (node->type != NT_VOID)
1921 _cpp_free_definition (node);
1922
Zack Weinberg711b8822000-07-18 00:59:49 +00001923 /* Enter definition in hash table. */
Neil Booth93c803682000-10-28 17:59:06 +00001924 node->type = NT_MACRO;
1925 node->value.macro = macro;
Tom Tromey607f74e2007-11-30 18:24:01 +00001926 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
Tom Tromeyec460532008-01-22 21:43:49 +00001927 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
1928 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
1929 in the C standard, as something that one must use in C++.
1930 However DR#593 indicates that these aren't actually mentioned
1931 in the C++ standard. We special-case them anyway. */
1932 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
1933 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
Neil Booth618cdda2001-02-25 09:43:03 +00001934 node->flags |= NODE_WARN;
Zack Weinberg711b8822000-07-18 00:59:49 +00001935
Ben Elliston5950c3c2008-07-14 05:09:48 +00001936 /* If user defines one of the conditional macros, remove the
1937 conditional flag */
1938 node->flags &= ~NODE_CONDITIONAL;
1939
Neil Booth93c803682000-10-28 17:59:06 +00001940 return ok;
Zack Weinberg711b8822000-07-18 00:59:49 +00001941}
1942
Neil Boothd15a58c2002-01-03 18:32:55 +00001943/* Warn if a token in STRING matches one of a function-like MACRO's
1944 parameters. */
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00001945static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +00001946check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
1947 const cpp_string *string)
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00001948{
Neil Booth93c803682000-10-28 17:59:06 +00001949 unsigned int i, len;
Neil Booth6338b352003-04-23 22:44:06 +00001950 const uchar *p, *q, *limit;
Kazu Hiratadf383482002-05-22 22:02:16 +00001951
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00001952 /* Loop over the string. */
Neil Booth6338b352003-04-23 22:44:06 +00001953 limit = string->text + string->len - 1;
1954 for (p = string->text + 1; p < limit; p = q)
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00001955 {
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00001956 /* Find the start of an identifier. */
Greg McGary61c16b12000-09-15 21:25:02 +00001957 while (p < limit && !is_idstart (*p))
1958 p++;
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00001959
1960 /* Find the end of the identifier. */
1961 q = p;
Greg McGary61c16b12000-09-15 21:25:02 +00001962 while (q < limit && is_idchar (*q))
1963 q++;
Neil Booth93c803682000-10-28 17:59:06 +00001964
1965 len = q - p;
1966
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00001967 /* Loop over the function macro arguments to see if the
1968 identifier inside the string matches one of them. */
Neil Booth93c803682000-10-28 17:59:06 +00001969 for (i = 0; i < macro->paramc; i++)
1970 {
1971 const cpp_hashnode *node = macro->params[i];
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00001972
Neil Booth2a967f32001-05-20 06:26:45 +00001973 if (NODE_LEN (node) == len
1974 && !memcmp (p, NODE_NAME (node), len))
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00001975 {
John David Anglin0527bc42003-11-01 22:56:54 +00001976 cpp_error (pfile, CPP_DL_WARNING,
Zack Weinbergf458d1d2002-02-27 18:48:07 +00001977 "macro argument \"%s\" would be stringified in traditional C",
Neil Boothebef4e82002-04-14 18:42:47 +00001978 NODE_NAME (node));
Kaveh R. Ghazie1aa5142000-09-10 03:41:50 +00001979 break;
1980 }
1981 }
1982 }
1983}
Neil Booth93c803682000-10-28 17:59:06 +00001984
Neil Booth70961712001-06-23 11:34:41 +00001985/* Returns the name, arguments and expansion of a macro, in a format
1986 suitable to be read back in again, and therefore also for DWARF 2
1987 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1988 Caller is expected to generate the "#define" bit if needed. The
Neil Booth93c803682000-10-28 17:59:06 +00001989 returned text is temporary, and automatically freed later. */
Neil Booth93c803682000-10-28 17:59:06 +00001990const unsigned char *
Jakub Jelinek8e680db2010-06-11 20:37:34 +02001991cpp_macro_definition (cpp_reader *pfile, cpp_hashnode *node)
Neil Booth93c803682000-10-28 17:59:06 +00001992{
1993 unsigned int i, len;
Jakub Jelinek8e680db2010-06-11 20:37:34 +02001994 const cpp_macro *macro;
Neil Booth93c803682000-10-28 17:59:06 +00001995 unsigned char *buffer;
1996
1997 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1998 {
Jakub Jelinek8e680db2010-06-11 20:37:34 +02001999 if (node->type != NT_MACRO
2000 || !pfile->cb.user_builtin_macro
2001 || !pfile->cb.user_builtin_macro (pfile, node))
2002 {
2003 cpp_error (pfile, CPP_DL_ICE,
2004 "invalid hash type %d in cpp_macro_definition",
2005 node->type);
2006 return 0;
2007 }
Neil Booth93c803682000-10-28 17:59:06 +00002008 }
2009
Jakub Jelinek8e680db2010-06-11 20:37:34 +02002010 macro = node->value.macro;
Neil Booth93c803682000-10-28 17:59:06 +00002011 /* Calculate length. */
Neil Booth8dc901d2002-05-29 19:30:07 +00002012 len = NODE_LEN (node) + 2; /* ' ' and NUL. */
Neil Booth93c803682000-10-28 17:59:06 +00002013 if (macro->fun_like)
2014 {
Jim Blandy64d08262002-04-05 00:12:40 +00002015 len += 4; /* "()" plus possible final ".." of named
2016 varargs (we have + 1 below). */
Neil Booth93c803682000-10-28 17:59:06 +00002017 for (i = 0; i < macro->paramc; i++)
Jim Blandy64d08262002-04-05 00:12:40 +00002018 len += NODE_LEN (macro->params[i]) + 1; /* "," */
Neil Booth93c803682000-10-28 17:59:06 +00002019 }
2020
Eric Christopher6da55c02005-02-15 23:18:04 +00002021 /* This should match below where we fill in the buffer. */
Neil Booth278c4662002-06-19 05:40:08 +00002022 if (CPP_OPTION (pfile, traditional))
2023 len += _cpp_replacement_text_len (macro);
2024 else
Neil Booth93c803682000-10-28 17:59:06 +00002025 {
Joseph Myersaa508502009-04-19 18:10:56 +01002026 unsigned int count = macro_real_token_count (macro);
2027 for (i = 0; i < count; i++)
Neil Booth278c4662002-06-19 05:40:08 +00002028 {
2029 cpp_token *token = &macro->exp.tokens[i];
Neil Booth93c803682000-10-28 17:59:06 +00002030
Neil Booth278c4662002-06-19 05:40:08 +00002031 if (token->type == CPP_MACRO_ARG)
Joseph Myers9a0c6182009-05-10 15:27:32 +01002032 len += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
Neil Booth278c4662002-06-19 05:40:08 +00002033 else
Eric Christopher6da55c02005-02-15 23:18:04 +00002034 len += cpp_token_len (token);
2035
Neil Booth278c4662002-06-19 05:40:08 +00002036 if (token->flags & STRINGIFY_ARG)
2037 len++; /* "#" */
2038 if (token->flags & PASTE_LEFT)
2039 len += 3; /* " ##" */
Eric Christopher6da55c02005-02-15 23:18:04 +00002040 if (token->flags & PREV_WHITE)
2041 len++; /* " " */
Neil Booth278c4662002-06-19 05:40:08 +00002042 }
Neil Booth93c803682000-10-28 17:59:06 +00002043 }
2044
2045 if (len > pfile->macro_buffer_len)
Alexandre Oliva4b49c362001-01-09 09:30:43 +00002046 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +00002047 pfile->macro_buffer = XRESIZEVEC (unsigned char,
2048 pfile->macro_buffer, len);
Alexandre Oliva4b49c362001-01-09 09:30:43 +00002049 pfile->macro_buffer_len = len;
2050 }
Neil Booth70961712001-06-23 11:34:41 +00002051
2052 /* Fill in the buffer. Start with the macro name. */
Neil Booth93c803682000-10-28 17:59:06 +00002053 buffer = pfile->macro_buffer;
Neil Booth70961712001-06-23 11:34:41 +00002054 memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
2055 buffer += NODE_LEN (node);
Neil Booth93c803682000-10-28 17:59:06 +00002056
2057 /* Parameter names. */
2058 if (macro->fun_like)
2059 {
2060 *buffer++ = '(';
2061 for (i = 0; i < macro->paramc; i++)
2062 {
2063 cpp_hashnode *param = macro->params[i];
2064
2065 if (param != pfile->spec_nodes.n__VA_ARGS__)
2066 {
Neil Bootha28c50352001-05-16 22:02:09 +00002067 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
2068 buffer += NODE_LEN (param);
Neil Booth93c803682000-10-28 17:59:06 +00002069 }
2070
2071 if (i + 1 < macro->paramc)
Kazu Hiratadf383482002-05-22 22:02:16 +00002072 /* Don't emit a space after the comma here; we're trying
2073 to emit a Dwarf-friendly definition, and the Dwarf spec
2074 forbids spaces in the argument list. */
Jim Blandy64d08262002-04-05 00:12:40 +00002075 *buffer++ = ',';
Neil Booth28e0f042000-12-09 12:06:37 +00002076 else if (macro->variadic)
Neil Booth93c803682000-10-28 17:59:06 +00002077 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
2078 }
2079 *buffer++ = ')';
2080 }
2081
Jim Blandye37b38d2002-03-19 21:43:39 +00002082 /* The Dwarf spec requires a space after the macro name, even if the
2083 definition is the empty string. */
2084 *buffer++ = ' ';
2085
Neil Booth278c4662002-06-19 05:40:08 +00002086 if (CPP_OPTION (pfile, traditional))
2087 buffer = _cpp_copy_replacement_text (macro, buffer);
2088 else if (macro->count)
Neil Booth93c803682000-10-28 17:59:06 +00002089 /* Expansion tokens. */
Neil Booth93c803682000-10-28 17:59:06 +00002090 {
Joseph Myersaa508502009-04-19 18:10:56 +01002091 unsigned int count = macro_real_token_count (macro);
2092 for (i = 0; i < count; i++)
Neil Booth93c803682000-10-28 17:59:06 +00002093 {
Neil Booth601328b2002-05-16 05:53:24 +00002094 cpp_token *token = &macro->exp.tokens[i];
Neil Booth93c803682000-10-28 17:59:06 +00002095
2096 if (token->flags & PREV_WHITE)
2097 *buffer++ = ' ';
2098 if (token->flags & STRINGIFY_ARG)
2099 *buffer++ = '#';
2100
2101 if (token->type == CPP_MACRO_ARG)
2102 {
Neil Bootha28c50352001-05-16 22:02:09 +00002103 memcpy (buffer,
Joseph Myers9a0c6182009-05-10 15:27:32 +01002104 NODE_NAME (macro->params[token->val.macro_arg.arg_no - 1]),
2105 NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]));
2106 buffer += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
Neil Booth93c803682000-10-28 17:59:06 +00002107 }
2108 else
Geoffrey Keating47e20492005-03-12 10:44:06 +00002109 buffer = cpp_spell_token (pfile, token, buffer, false);
Neil Booth93c803682000-10-28 17:59:06 +00002110
2111 if (token->flags & PASTE_LEFT)
2112 {
2113 *buffer++ = ' ';
2114 *buffer++ = '#';
2115 *buffer++ = '#';
2116 /* Next has PREV_WHITE; see _cpp_create_definition. */
2117 }
2118 }
2119 }
2120
2121 *buffer = '\0';
2122 return pfile->macro_buffer;
2123}