blob: ffba852032e38d47fac292880398e2ccecfe96d8 [file] [log] [blame]
Zack Weinberg5538ada1999-02-04 06:36:54 -05001/* CPP Library.
Jeff Law5e7b4e22000-02-25 22:59:31 -07002 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
Joseph Myers148e4212009-03-29 23:56:07 +01003 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
4 2009 Free Software Foundation, Inc.
Zack Weinberg5538ada1999-02-04 06:36:54 -05005 Contributed by Per Bothner, 1994-95.
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
11Free Software Foundation; either version 2, or (at your option) any
12later 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
20along with this program; if not, write to the Free Software
Kelley Cook200031d2005-06-29 02:34:39 +000021Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
Zack Weinberg5538ada1999-02-04 06:36:54 -050022
Zack Weinberg5538ada1999-02-04 06:36:54 -050023#include "config.h"
24#include "system.h"
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000025#include "cpplib.h"
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +000026#include "internal.h"
Zack Weinberg49e6c082000-03-04 19:42:04 +000027#include "mkdeps.h"
Zack Weinberg018a4782004-09-24 21:39:06 +000028#include "localedir.h"
Zack Weinberg88ae23e2000-03-08 23:35:19 +000029
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000030static void init_library (void);
31static void mark_named_operators (cpp_reader *);
32static void read_original_filename (cpp_reader *);
Alexandre Olivab20d9f02003-08-05 21:15:57 +000033static void read_original_directory (cpp_reader *);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000034static void post_options (cpp_reader *);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000035
Neil Booth61d03462000-08-18 17:35:58 +000036/* If we have designated initializers (GCC >2.7) these tables can be
37 initialized, constant data. Otherwise, they have to be filled in at
Zack Weinberg12cf91f2000-05-04 04:38:01 +000038 runtime. */
Neil Booth61d03462000-08-18 17:35:58 +000039#if HAVE_DESIGNATED_INITIALIZERS
Zack Weinberga9ae4481999-10-29 04:31:14 +000040
Neil Booth4a58aab2000-11-18 12:18:09 +000041#define init_trigraph_map() /* Nothing. */
Neil Booth61d03462000-08-18 17:35:58 +000042#define TRIGRAPH_MAP \
Neil Booth562a5c22002-04-21 18:46:42 +000043__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
Neil Booth61d03462000-08-18 17:35:58 +000044
Zack Weinberga9ae4481999-10-29 04:31:14 +000045#define END };
Zack Weinberg455d2582000-03-04 01:42:56 +000046#define s(p, v) [p] = v,
Neil Booth61d03462000-08-18 17:35:58 +000047
Zack Weinberga9ae4481999-10-29 04:31:14 +000048#else
Neil Booth61d03462000-08-18 17:35:58 +000049
Neil Booth562a5c22002-04-21 18:46:42 +000050#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000051 static void init_trigraph_map (void) { \
Neil Booth61d03462000-08-18 17:35:58 +000052 unsigned char *x = _cpp_trigraph_map;
53
Zack Weinbergae796972000-03-31 23:16:11 +000054#define END }
Zack Weinberg455d2582000-03-04 01:42:56 +000055#define s(p, v) x[p] = v;
Neil Booth61d03462000-08-18 17:35:58 +000056
Zack Weinberga9ae4481999-10-29 04:31:14 +000057#endif
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000058
Neil Booth61d03462000-08-18 17:35:58 +000059TRIGRAPH_MAP
60 s('=', '#') s(')', ']') s('!', '|')
61 s('(', '[') s('\'', '^') s('>', '}')
62 s('/', '\\') s('<', '{') s('-', '~')
63END
64
Zack Weinberga9ae4481999-10-29 04:31:14 +000065#undef s
Zack Weinberg455d2582000-03-04 01:42:56 +000066#undef END
Neil Booth61d03462000-08-18 17:35:58 +000067#undef TRIGRAPH_MAP
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000068
Neil Booth5d8ebbd2002-01-03 21:43:09 +000069/* A set of booleans indicating what CPP features each source language
70 requires. */
Zack Weinberga01eb542001-07-02 18:55:35 +000071struct lang_flags
72{
73 char c99;
Zack Weinberga01eb542001-07-02 18:55:35 +000074 char cplusplus;
75 char extended_numbers;
Joseph Myersaf15a2f2005-09-20 21:31:37 +010076 char extended_identifiers;
Neil Booth58551c22002-08-06 20:35:46 +000077 char std;
Zack Weinberga01eb542001-07-02 18:55:35 +000078 char cplusplus_comments;
79 char digraphs;
Kris Van Heesb6baa672008-04-18 13:58:08 +000080 char uliterals;
Zack Weinberga01eb542001-07-02 18:55:35 +000081};
82
Zack Weinberga01eb542001-07-02 18:55:35 +000083static const struct lang_flags lang_defaults[] =
Kris Van Heesb6baa672008-04-18 13:58:08 +000084{ /* c99 c++ xnum xid std // digr ulit */
85 /* GNUC89 */ { 0, 0, 1, 0, 0, 1, 1, 0 },
86 /* GNUC99 */ { 1, 0, 1, 0, 0, 1, 1, 1 },
87 /* STDC89 */ { 0, 0, 0, 0, 1, 0, 0, 0 },
88 /* STDC94 */ { 0, 0, 0, 0, 1, 0, 1, 0 },
89 /* STDC99 */ { 1, 0, 1, 0, 1, 1, 1, 0 },
90 /* GNUCXX */ { 0, 1, 1, 0, 0, 1, 1, 0 },
91 /* CXX98 */ { 0, 1, 1, 0, 1, 1, 1, 0 },
92 /* GNUCXX0X */ { 1, 1, 1, 0, 0, 1, 1, 1 },
93 /* CXX0X */ { 1, 1, 1, 0, 1, 1, 1, 1 },
94 /* ASM */ { 0, 0, 1, 0, 0, 1, 0, 0 }
Douglas Gregordfafdaa2006-11-01 16:27:23 +000095 /* xid should be 1 for GNUC99, STDC99, GNUCXX, CXX98, GNUCXX0X, and
96 CXX0X when no longer experimental (when all uses of identifiers
97 in the compiler have been audited for correct handling of
98 extended identifiers). */
Zack Weinberga01eb542001-07-02 18:55:35 +000099};
100
Neil Booth5d8ebbd2002-01-03 21:43:09 +0000101/* Sets internal flags correctly for a given language. */
Neil Boothf749a362002-08-10 20:58:45 +0000102void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000103cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
Neil Boothdd07b882000-11-20 18:27:32 +0000104{
Zack Weinberga01eb542001-07-02 18:55:35 +0000105 const struct lang_flags *l = &lang_defaults[(int) lang];
Kazu Hiratadf383482002-05-22 22:02:16 +0000106
Neil Boothbdb05a72000-11-26 17:31:13 +0000107 CPP_OPTION (pfile, lang) = lang;
Neil Boothdd07b882000-11-20 18:27:32 +0000108
Joseph Myersaf15a2f2005-09-20 21:31:37 +0100109 CPP_OPTION (pfile, c99) = l->c99;
110 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
111 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
112 CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers;
113 CPP_OPTION (pfile, std) = l->std;
114 CPP_OPTION (pfile, trigraphs) = l->std;
115 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
116 CPP_OPTION (pfile, digraphs) = l->digraphs;
Kris Van Heesb6baa672008-04-18 13:58:08 +0000117 CPP_OPTION (pfile, uliterals) = l->uliterals;
Neil Boothdd07b882000-11-20 18:27:32 +0000118}
119
Neil Boothc1bad962003-03-15 12:18:47 +0000120/* Initialize library global state. */
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000121static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000122init_library (void)
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000123{
124 static int initialized = 0;
125
126 if (! initialized)
127 {
128 initialized = 1;
129
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000130 /* Set up the trigraph map. This doesn't need to do anything if
131 we were compiled with a compiler that supports C99 designated
132 initializers. */
133 init_trigraph_map ();
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +0000134
135#ifdef ENABLE_NLS
Matthias Klose85eac2a2004-07-23 07:00:57 +0000136 (void) bindtextdomain (PACKAGE, LOCALEDIR);
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +0000137#endif
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000138 }
Neil Boothcf44ea52000-11-28 21:13:35 +0000139}
140
Kazu Hirataec5c56d2001-08-01 17:57:27 +0000141/* Initialize a cpp_reader structure. */
Neil Boothcf44ea52000-11-28 21:13:35 +0000142cpp_reader *
Per Bothner50f59cd2004-01-19 21:30:18 -0800143cpp_create_reader (enum c_lang lang, hash_table *table,
144 struct line_maps *line_table)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000145{
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000146 cpp_reader *pfile;
Neil Booth93c803682000-10-28 17:59:06 +0000147
Kazu Hirata4912a072002-09-14 15:51:45 +0000148 /* Initialize this instance of the library if it hasn't been already. */
Neil Booth674c3b42001-01-08 18:52:09 +0000149 init_library ();
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000150
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000151 pfile = XCNEW (cpp_reader);
Neil Booth93c803682000-10-28 17:59:06 +0000152
Neil Boothf749a362002-08-10 20:58:45 +0000153 cpp_set_lang (pfile, lang);
Neil Bootha5a49442002-05-06 22:53:10 +0000154 CPP_OPTION (pfile, warn_multichar) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000155 CPP_OPTION (pfile, discard_comments) = 1;
Jason Thorpe477cdac2002-04-07 03:12:23 +0000156 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000157 CPP_OPTION (pfile, show_column) = 1;
Neil Booth6ab3e7d2000-05-18 11:09:27 +0000158 CPP_OPTION (pfile, tabstop) = 8;
Jakub Jelinekbe768052000-12-15 16:49:28 +0100159 CPP_OPTION (pfile, operator_names) = 1;
Neil Bootha8eb6042003-05-04 20:03:55 +0000160 CPP_OPTION (pfile, warn_trigraphs) = 2;
Phil Edwards909de5d2002-03-22 21:59:04 +0000161 CPP_OPTION (pfile, warn_endif_labels) = 1;
Jason Merrill9fbd3e42003-01-28 14:30:00 -0500162 CPP_OPTION (pfile, warn_deprecated) = 1;
Neil Boothf4ff5a62002-08-12 22:44:30 +0000163 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
Neil Boothb1822cc2003-05-17 20:29:34 +0000164 CPP_OPTION (pfile, dollars_in_ident) = 1;
Hans-Peter Nilsson78b88112003-06-12 06:09:15 +0000165 CPP_OPTION (pfile, warn_dollars) = 1;
Richard Hendersone5b79212004-02-19 14:18:50 -0800166 CPP_OPTION (pfile, warn_variadic_macros) = 1;
Simon Baldwinc047ce92008-09-18 15:39:08 +0000167 CPP_OPTION (pfile, warn_builtin_macro_redefined) = 1;
Geoffrey Keating50668cf2005-03-15 00:36:33 +0000168 CPP_OPTION (pfile, warn_normalize) = normalized_C;
Zack Weinbergae796972000-03-31 23:16:11 +0000169
Neil Booth2443d4e2002-05-05 17:05:09 +0000170 /* Default CPP arithmetic to something sensible for the host for the
171 benefit of dumb users like fix-header. */
Neil Boothc9220e32002-05-27 05:51:14 +0000172 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
Neil Booth2443d4e2002-05-05 17:05:09 +0000173 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
174 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
175 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000176 CPP_OPTION (pfile, unsigned_char) = 0;
Neil Booth44a147a2002-05-07 21:07:24 +0000177 CPP_OPTION (pfile, unsigned_wchar) = 1;
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000178 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
179
180 /* Default to no charset conversion. */
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000181 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000182 CPP_OPTION (pfile, wide_charset) = 0;
Neil Booth4268e8b2002-05-04 07:30:32 +0000183
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000184 /* Default the input character set to UTF-8. */
185 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
Eric Christophercf551fb2004-01-16 22:37:49 +0000186
Neil Booth8f9b4002003-07-29 22:26:13 +0000187 /* A fake empty "directory" used as the starting point for files
188 looked up without a search path. Name cannot be '/' because we
189 don't want to prepend anything at all to filenames using it. All
190 other entries are correct zero-initialized. */
191 pfile->no_search_path.name = (char *) "";
192
Per Bothner500bee02004-04-22 19:22:27 -0700193 /* Initialize the line map. */
Per Bothner50f59cd2004-01-19 21:30:18 -0800194 pfile->line_table = line_table;
Neil Boothd82fc102001-08-02 23:03:31 +0000195
Neil Booth4a58aab2000-11-18 12:18:09 +0000196 /* Initialize lexer state. */
Neil Booth93c803682000-10-28 17:59:06 +0000197 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
Zack Weinberg3cb553b2000-08-20 21:36:18 +0000198
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000199 /* Set up static tokens. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000200 pfile->avoid_paste.type = CPP_PADDING;
201 pfile->avoid_paste.val.source = NULL;
202 pfile->eof.type = CPP_EOF;
203 pfile->eof.flags = 0;
Neil Booth93c803682000-10-28 17:59:06 +0000204
Neil Booth5fddcff2001-09-11 07:00:12 +0000205 /* Create a token buffer for the lexer. */
206 _cpp_init_tokenrun (&pfile->base_run, 250);
207 pfile->cur_run = &pfile->base_run;
208 pfile->cur_token = pfile->base_run.base;
Neil Booth5fddcff2001-09-11 07:00:12 +0000209
Kazu Hirata4912a072002-09-14 15:51:45 +0000210 /* Initialize the base context. */
Neil Booth93c803682000-10-28 17:59:06 +0000211 pfile->context = &pfile->base_context;
212 pfile->base_context.macro = 0;
213 pfile->base_context.prev = pfile->base_context.next = 0;
214
Neil Booth8c3b2692001-09-30 10:03:11 +0000215 /* Aligned and unaligned storage. */
216 pfile->a_buff = _cpp_get_buff (pfile, 0);
Neil Boothece54d52001-09-28 09:40:22 +0000217 pfile->u_buff = _cpp_get_buff (pfile, 0);
Neil Booth93c803682000-10-28 17:59:06 +0000218
Neil Booth87ed1092002-04-28 19:42:54 +0000219 /* The expression parser stack. */
220 _cpp_expand_op_stack (pfile);
221
Kazu Hirata4912a072002-09-14 15:51:45 +0000222 /* Initialize the buffer obstack. */
Zack Weinberg43839642003-07-13 17:34:18 +0000223 _obstack_begin (&pfile->buffer_ob, 0, 0,
224 (void *(*) (long)) xmalloc,
225 (void (*) (void *)) free);
Neil Booth2a967f32001-05-20 06:26:45 +0000226
Neil Booth8f9b4002003-07-29 22:26:13 +0000227 _cpp_init_files (pfile);
Neil Boothcf44ea52000-11-28 21:13:35 +0000228
Per Bothnerb4e46ce2003-03-20 16:46:18 +0000229 _cpp_init_hashtable (pfile, table);
230
Neil Boothcf44ea52000-11-28 21:13:35 +0000231 return pfile;
Zack Weinbergf2d5f0c2000-04-14 23:29:45 +0000232}
233
Tom Tromey5ffeb9132007-09-06 16:24:05 +0000234/* Set the line_table entry in PFILE. This is called after reading a
235 PCH file, as the old line_table will be incorrect. */
236void
237cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
238{
239 pfile->line_table = line_table;
240}
241
Neil Booth400023a2001-01-14 22:00:20 +0000242/* Free resources used by PFILE. Accessing PFILE after this function
Kazu Hirata8d9afc4e2002-09-16 11:42:00 +0000243 returns leads to undefined behavior. Returns the error count. */
Neil Booth76c3e732002-08-11 22:22:28 +0000244void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000245cpp_destroy (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000246{
Neil Booth93c803682000-10-28 17:59:06 +0000247 cpp_context *context, *contextn;
Neil Booth50410422001-09-15 10:18:03 +0000248 tokenrun *run, *runn;
Matthew Gingell631d0d32008-10-05 12:35:36 +0000249 int i;
Neil Booth709e9e52000-08-17 18:01:43 +0000250
Neil Booth87ed1092002-04-28 19:42:54 +0000251 free (pfile->op_stack);
Neil Boothaf0d16c2002-04-22 17:48:02 +0000252
Zack Weinberg38b24ee2000-03-08 20:37:23 +0000253 while (CPP_BUFFER (pfile) != NULL)
Neil Boothef6e9582001-08-04 12:01:59 +0000254 _cpp_pop_buffer (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000255
Neil Booth1a769162002-06-11 05:36:17 +0000256 if (pfile->out.base)
257 free (pfile->out.base);
Neil Booth004cb262002-05-17 20:16:48 +0000258
Neil Booth93c803682000-10-28 17:59:06 +0000259 if (pfile->macro_buffer)
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000260 {
Kaveh R. Ghazifad205f2003-06-16 21:41:10 +0000261 free (pfile->macro_buffer);
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000262 pfile->macro_buffer = NULL;
263 pfile->macro_buffer_len = 0;
264 }
Neil Booth93c803682000-10-28 17:59:06 +0000265
Neil Boothf4ff5a62002-08-12 22:44:30 +0000266 if (pfile->deps)
267 deps_free (pfile->deps);
Neil Booth2a967f32001-05-20 06:26:45 +0000268 obstack_free (&pfile->buffer_ob, 0);
Zack Weinberg49e6c082000-03-04 19:42:04 +0000269
Neil Booth2a967f32001-05-20 06:26:45 +0000270 _cpp_destroy_hashtable (pfile);
Neil Booth8f9b4002003-07-29 22:26:13 +0000271 _cpp_cleanup_files (pfile);
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000272 _cpp_destroy_iconv (pfile);
Neil Booth93c803682000-10-28 17:59:06 +0000273
Neil Booth8c3b2692001-09-30 10:03:11 +0000274 _cpp_free_buff (pfile->a_buff);
Neil Boothece54d52001-09-28 09:40:22 +0000275 _cpp_free_buff (pfile->u_buff);
Neil Boothb8af0ca2001-09-26 17:52:50 +0000276 _cpp_free_buff (pfile->free_buffs);
Neil Booth93c803682000-10-28 17:59:06 +0000277
Neil Booth50410422001-09-15 10:18:03 +0000278 for (run = &pfile->base_run; run; run = runn)
279 {
280 runn = run->next;
281 free (run->base);
282 if (run != &pfile->base_run)
283 free (run);
284 }
285
Neil Booth93c803682000-10-28 17:59:06 +0000286 for (context = pfile->base_context.next; context; context = contextn)
287 {
288 contextn = context->next;
289 free (context);
290 }
Neil Booth400023a2001-01-14 22:00:20 +0000291
Matthew Gingell631d0d32008-10-05 12:35:36 +0000292 if (pfile->comments.entries)
293 {
294 for (i = 0; i < pfile->comments.count; i++)
295 free (pfile->comments.entries[i].comment);
296
297 free (pfile->comments.entries);
298 }
299
Neil Booth400023a2001-01-14 22:00:20 +0000300 free (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000301}
302
Neil Booth93c803682000-10-28 17:59:06 +0000303/* This structure defines one built-in identifier. A node will be
Zack Weinbergf24a1532002-05-18 00:43:13 +0000304 entered in the hash table under the name NAME, with value VALUE.
Zack Weinberg92936ec2000-07-19 20:18:08 +0000305
Zack Weinbergf24a1532002-05-18 00:43:13 +0000306 There are two tables of these. builtin_array holds all the
307 "builtin" macros: these are handled by builtin_macro() in
Gabriel Dos Reisa2566ae2005-01-02 01:32:21 +0000308 macro.c. Builtin is somewhat of a misnomer -- the property of
Zack Weinbergf24a1532002-05-18 00:43:13 +0000309 interest is that these macros require special code to compute their
310 expansions. The value is a "builtin_type" enumerator.
311
312 operator_array holds the C++ named operators. These are keywords
313 which act as aliases for punctuators. In C++, they cannot be
314 altered through #define, and #if recognizes them as operators. In
315 C, these are not entered into the hash table at all (but see
316 <iso646.h>). The value is a token-type enumerator. */
Simon Baldwinc047ce92008-09-18 15:39:08 +0000317struct builtin_macro
Zack Weinberga9ae4481999-10-29 04:31:14 +0000318{
Simon Baldwinc047ce92008-09-18 15:39:08 +0000319 const uchar *const name;
320 const unsigned short len;
321 const unsigned short value;
322 const bool always_warn_if_redefined;
323};
324
325#define B(n, t, f) { DSC(n), t, f }
326static const struct builtin_macro builtin_array[] =
327{
328 B("__TIMESTAMP__", BT_TIMESTAMP, false),
329 B("__TIME__", BT_TIME, false),
330 B("__DATE__", BT_DATE, false),
331 B("__FILE__", BT_FILE, false),
332 B("__BASE_FILE__", BT_BASE_FILE, false),
333 B("__LINE__", BT_SPECLINE, true),
334 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
335 B("__COUNTER__", BT_COUNTER, true),
336 /* Keep builtins not used for -traditional-cpp at the end, and
337 update init_builtins() if any more are added. */
338 B("_Pragma", BT_PRAGMA, true),
339 B("__STDC__", BT_STDC, true),
340};
341#undef B
342
343struct builtin_operator
344{
345 const uchar *const name;
346 const unsigned short len;
347 const unsigned short value;
Zack Weinberga9ae4481999-10-29 04:31:14 +0000348};
Zack Weinberga9ae4481999-10-29 04:31:14 +0000349
Zack Weinbergf24a1532002-05-18 00:43:13 +0000350#define B(n, t) { DSC(n), t }
Simon Baldwinc047ce92008-09-18 15:39:08 +0000351static const struct builtin_operator operator_array[] =
Zack Weinbergf24a1532002-05-18 00:43:13 +0000352{
353 B("and", CPP_AND_AND),
354 B("and_eq", CPP_AND_EQ),
355 B("bitand", CPP_AND),
356 B("bitor", CPP_OR),
357 B("compl", CPP_COMPL),
358 B("not", CPP_NOT),
359 B("not_eq", CPP_NOT_EQ),
360 B("or", CPP_OR_OR),
361 B("or_eq", CPP_OR_EQ),
362 B("xor", CPP_XOR),
363 B("xor_eq", CPP_XOR_EQ)
Zack Weinberga9ae4481999-10-29 04:31:14 +0000364};
Zack Weinberg12cf91f2000-05-04 04:38:01 +0000365#undef B
Zack Weinberga9ae4481999-10-29 04:31:14 +0000366
Neil Booth17645b12002-05-23 18:55:27 +0000367/* Mark the C++ named operators in the hash table. */
368static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000369mark_named_operators (cpp_reader *pfile)
Neil Booth17645b12002-05-23 18:55:27 +0000370{
Simon Baldwinc047ce92008-09-18 15:39:08 +0000371 const struct builtin_operator *b;
Neil Booth17645b12002-05-23 18:55:27 +0000372
373 for (b = operator_array;
374 b < (operator_array + ARRAY_SIZE (operator_array));
375 b++)
376 {
377 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
378 hp->flags |= NODE_OPERATOR;
Zack Weinberg4977bab2002-12-16 18:23:00 +0000379 hp->is_directive = 0;
380 hp->directive_index = b->value;
Neil Booth17645b12002-05-23 18:55:27 +0000381 }
382}
383
Neil Boothc1bad962003-03-15 12:18:47 +0000384void
Ollie Wildccfc4c92007-07-30 18:29:20 +0000385cpp_init_special_builtins (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000386{
Simon Baldwinc047ce92008-09-18 15:39:08 +0000387 const struct builtin_macro *b;
Neil Booth278c4662002-06-19 05:40:08 +0000388 size_t n = ARRAY_SIZE (builtin_array);
Neil Booth771c4df2000-09-07 20:31:06 +0000389
Neil Booth278c4662002-06-19 05:40:08 +0000390 if (CPP_OPTION (pfile, traditional))
391 n -= 2;
Jakub Jelinek83900992006-01-23 22:50:15 +0100392 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
393 || CPP_OPTION (pfile, std))
Ollie Wildccfc4c92007-07-30 18:29:20 +0000394 n--;
Neil Booth278c4662002-06-19 05:40:08 +0000395
Jakub Jelinek83900992006-01-23 22:50:15 +0100396 for (b = builtin_array; b < builtin_array + n; b++)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000397 {
Zack Weinbergf24a1532002-05-18 00:43:13 +0000398 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
399 hp->type = NT_MACRO;
Simon Baldwinc047ce92008-09-18 15:39:08 +0000400 hp->flags |= NODE_BUILTIN;
401 if (b->always_warn_if_redefined
402 || CPP_OPTION (pfile, warn_builtin_macro_redefined))
403 hp->flags |= NODE_WARN;
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000404 hp->value.builtin = (enum builtin_type) b->value;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000405 }
Ollie Wildccfc4c92007-07-30 18:29:20 +0000406}
407
408/* Read the builtins table above and enter them, and language-specific
409 macros, into the hash table. HOSTED is true if this is a hosted
410 environment. */
411void
412cpp_init_builtins (cpp_reader *pfile, int hosted)
413{
414 cpp_init_special_builtins (pfile);
415
416 if (!CPP_OPTION (pfile, traditional)
417 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
418 || CPP_OPTION (pfile, std)))
419 _cpp_define_builtin (pfile, "__STDC__ 1");
Neil Boothc740cee2001-02-20 22:52:11 +0000420
421 if (CPP_OPTION (pfile, cplusplus))
Neil Booth3d90d292002-05-04 20:15:00 +0000422 _cpp_define_builtin (pfile, "__cplusplus 1");
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000423 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
424 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000425 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
Neil Boothc740cee2001-02-20 22:52:11 +0000426 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
427 else if (CPP_OPTION (pfile, c99))
428 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
429
Neil Booth6e270172003-05-11 13:43:36 +0000430 if (hosted)
Neil Booth58b5b892003-05-11 15:15:35 +0000431 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
Neil Booth6e270172003-05-11 13:43:36 +0000432 else
Neil Booth58b5b892003-05-11 15:15:35 +0000433 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
Neil Booth6e270172003-05-11 13:43:36 +0000434
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000435 if (CPP_OPTION (pfile, objc))
436 _cpp_define_builtin (pfile, "__OBJC__ 1");
Neil Booth4a58aab2000-11-18 12:18:09 +0000437}
438
Neil Booth2443d4e2002-05-05 17:05:09 +0000439/* Sanity-checks are dependent on command-line options, so it is
440 called as a subroutine of cpp_read_main_file (). */
441#if ENABLE_CHECKING
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000442static void sanity_checks (cpp_reader *);
443static void sanity_checks (cpp_reader *pfile)
Neil Booth2443d4e2002-05-05 17:05:09 +0000444{
445 cppchar_t test = 0;
Neil Boothc9220e32002-05-27 05:51:14 +0000446 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
Neil Booth2443d4e2002-05-05 17:05:09 +0000447
448 /* Sanity checks for assumptions about CPP arithmetic and target
449 type precisions made by cpplib. */
450 test--;
451 if (test < 1)
John David Anglin0527bc42003-11-01 22:56:54 +0000452 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
Neil Booth2443d4e2002-05-05 17:05:09 +0000453
Neil Boothc9220e32002-05-27 05:51:14 +0000454 if (CPP_OPTION (pfile, precision) > max_precision)
John David Anglin0527bc42003-11-01 22:56:54 +0000455 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000456 "preprocessor arithmetic has maximum precision of %lu bits;"
457 " target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000458 (unsigned long) max_precision,
459 (unsigned long) CPP_OPTION (pfile, precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000460
461 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000462 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000463 "CPP arithmetic must be at least as precise as a target int");
464
465 if (CPP_OPTION (pfile, char_precision) < 8)
John David Anglin0527bc42003-11-01 22:56:54 +0000466 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
Neil Booth2443d4e2002-05-05 17:05:09 +0000467
468 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000469 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000470 "target wchar_t is narrower than target char");
471
472 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000473 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000474 "target int is narrower than target char");
475
Neil Boothc9220e32002-05-27 05:51:14 +0000476 /* This is assumed in eval_token() and could be fixed if necessary. */
477 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
John David Anglin0527bc42003-11-01 22:56:54 +0000478 cpp_error (pfile, CPP_DL_ICE,
479 "CPP half-integer narrower than CPP character");
Neil Boothc9220e32002-05-27 05:51:14 +0000480
Neil Booth2443d4e2002-05-05 17:05:09 +0000481 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
John David Anglin0527bc42003-11-01 22:56:54 +0000482 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000483 "CPP on this host cannot handle wide character constants over"
484 " %lu bits, but the target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000485 (unsigned long) BITS_PER_CPPCHAR_T,
486 (unsigned long) CPP_OPTION (pfile, wchar_precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000487}
488#else
489# define sanity_checks(PFILE)
490#endif
491
Neil Boothf5e99452001-11-15 10:01:10 +0000492/* This is called after options have been parsed, and partially
Kazu Hirata59e4e212003-08-19 21:04:38 +0000493 processed. */
Per Bothner4169c322003-08-09 22:14:07 +0000494void
495cpp_post_options (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000496{
Neil Booth2443d4e2002-05-05 17:05:09 +0000497 sanity_checks (pfile);
498
Neil Boothf4ff5a62002-08-12 22:44:30 +0000499 post_options (pfile);
500
Neil Boothc19b12c2003-03-12 21:31:51 +0000501 /* Mark named operators before handling command line macros. */
502 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
503 mark_named_operators (pfile);
Per Bothner4169c322003-08-09 22:14:07 +0000504}
Neil Boothc19b12c2003-03-12 21:31:51 +0000505
Per Bothner4dc299f2003-10-02 07:23:27 +0000506/* Setup for processing input from the file named FNAME, or stdin if
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800507 it is the empty string. Return the original filename
508 on success (e.g. foo.i->foo.c), or NULL on failure. */
509const char *
510cpp_read_main_file (cpp_reader *pfile, const char *fname)
Per Bothner4169c322003-08-09 22:14:07 +0000511{
Neil Boothf4ff5a62002-08-12 22:44:30 +0000512 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
513 {
514 if (!pfile->deps)
515 pfile->deps = deps_init ();
516
517 /* Set the default target (if there is none already). */
518 deps_add_default_target (pfile->deps, fname);
519 }
Neil Booth96302432001-01-07 15:17:07 +0000520
Per Bothner4dc299f2003-10-02 07:23:27 +0000521 pfile->main_file
James E Wilson6568f342005-10-21 10:54:20 -0700522 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
Per Bothner4dc299f2003-10-02 07:23:27 +0000523 if (_cpp_find_failed (pfile->main_file))
Per Bothner3092d0f2004-04-22 18:41:04 -0700524 return NULL;
Neil Boothf5e99452001-11-15 10:01:10 +0000525
Per Bothner4dc299f2003-10-02 07:23:27 +0000526 _cpp_stack_file (pfile, pfile->main_file, false);
527
528 /* For foo.i, read the original filename foo.c now, for the benefit
529 of the front ends. */
530 if (CPP_OPTION (pfile, preprocessed))
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800531 {
532 read_original_filename (pfile);
Per Bothner12f9df42004-02-11 07:29:30 -0800533 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800534 }
535 return fname;
Neil Boothf5e99452001-11-15 10:01:10 +0000536}
537
538/* For preprocessed files, if the first tokens are of the form # NUM.
539 handle the directive so we know the original file name. This will
540 generate file_change callbacks, which the front ends must handle
541 appropriately given their state of initialization. */
542static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000543read_original_filename (cpp_reader *pfile)
Neil Boothf5e99452001-11-15 10:01:10 +0000544{
545 const cpp_token *token, *token1;
546
547 /* Lex ahead; if the first tokens are of the form # NUM, then
548 process the directive, otherwise back up. */
549 token = _cpp_lex_direct (pfile);
550 if (token->type == CPP_HASH)
551 {
Uros Bizjak456b8ce2005-11-09 07:30:03 +0100552 pfile->state.in_directive = 1;
Neil Boothf5e99452001-11-15 10:01:10 +0000553 token1 = _cpp_lex_direct (pfile);
554 _cpp_backup_tokens (pfile, 1);
Uros Bizjak456b8ce2005-11-09 07:30:03 +0100555 pfile->state.in_directive = 0;
Neil Boothf5e99452001-11-15 10:01:10 +0000556
557 /* If it's a #line directive, handle it. */
558 if (token1->type == CPP_NUMBER)
559 {
560 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000561 read_original_directory (pfile);
Neil Boothf5e99452001-11-15 10:01:10 +0000562 return;
563 }
564 }
565
566 /* Backup as if nothing happened. */
567 _cpp_backup_tokens (pfile, 1);
568}
569
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000570/* For preprocessed files, if the tokens following the first filename
571 line is of the form # <line> "/path/name//", handle the
572 directive so we know the original current directory. */
573static void
574read_original_directory (cpp_reader *pfile)
575{
576 const cpp_token *hash, *token;
577
578 /* Lex ahead; if the first tokens are of the form # NUM, then
579 process the directive, otherwise back up. */
580 hash = _cpp_lex_direct (pfile);
581 if (hash->type != CPP_HASH)
582 {
583 _cpp_backup_tokens (pfile, 1);
584 return;
585 }
586
587 token = _cpp_lex_direct (pfile);
588
589 if (token->type != CPP_NUMBER)
590 {
591 _cpp_backup_tokens (pfile, 2);
592 return;
593 }
594
595 token = _cpp_lex_direct (pfile);
596
597 if (token->type != CPP_STRING
598 || ! (token->val.str.len >= 5
599 && token->val.str.text[token->val.str.len-2] == '/'
600 && token->val.str.text[token->val.str.len-3] == '/'))
601 {
602 _cpp_backup_tokens (pfile, 3);
603 return;
604 }
605
606 if (pfile->cb.dir_change)
607 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000608 char *debugdir = (char *) alloca (token->val.str.len - 3);
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000609
610 memcpy (debugdir, (const char *) token->val.str.text + 1,
611 token->val.str.len - 4);
612 debugdir[token->val.str.len - 4] = '\0';
613
614 pfile->cb.dir_change (pfile, debugdir);
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800615 }
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000616}
617
Neil Booth76c3e732002-08-11 22:22:28 +0000618/* This is called at the end of preprocessing. It pops the last
Joseph Myers148e4212009-03-29 23:56:07 +0100619 buffer and writes dependency output.
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000620
Neil Booth76c3e732002-08-11 22:22:28 +0000621 Maybe it should also reset state, such that you could call
622 cpp_start_read with a new filename to restart processing. */
Joseph Myers148e4212009-03-29 23:56:07 +0100623void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000624cpp_finish (cpp_reader *pfile, FILE *deps_stream)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000625{
Neil Bootha69cbaa2002-07-23 22:57:49 +0000626 /* Warn about unused macros before popping the final buffer. */
627 if (CPP_OPTION (pfile, warn_unused_macros))
628 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
629
Gabriel Dos Reisa2566ae2005-01-02 01:32:21 +0000630 /* lex.c leaves the final buffer on the stack. This it so that
Neil Booth7364fdd2001-08-07 20:37:26 +0000631 it returns an unending stream of CPP_EOFs to the client. If we
Joseph Myersa1f300c2001-11-23 02:05:19 +0000632 popped the buffer, we'd dereference a NULL buffer pointer and
Neil Booth7364fdd2001-08-07 20:37:26 +0000633 segfault. It's nice to allow the client to do worry-free excess
634 cpp_get_token calls. */
635 while (pfile->buffer)
636 _cpp_pop_buffer (pfile);
Zack Weinbergc1212d22000-02-06 23:46:18 +0000637
Neil Boothf4ff5a62002-08-12 22:44:30 +0000638 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
Joseph Myers148e4212009-03-29 23:56:07 +0100639 && deps_stream)
Neil Booth76c3e732002-08-11 22:22:28 +0000640 {
641 deps_write (pfile->deps, deps_stream, 72);
642
Neil Boothf4ff5a62002-08-12 22:44:30 +0000643 if (CPP_OPTION (pfile, deps.phony_targets))
Neil Booth76c3e732002-08-11 22:22:28 +0000644 deps_phony_targets (pfile->deps, deps_stream);
645 }
Zack Weinberg3caee4a1999-04-26 16:41:02 +0000646
Zack Weinbergd4506962000-06-28 19:03:08 +0000647 /* Report on headers that could use multiple include guards. */
648 if (CPP_OPTION (pfile, print_include_names))
Zack Weinbergc71f8352000-07-05 05:33:57 +0000649 _cpp_report_missing_guards (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000650}
651
Neil Boothf4ff5a62002-08-12 22:44:30 +0000652static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000653post_options (cpp_reader *pfile)
Neil Booth96302432001-01-07 15:17:07 +0000654{
655 /* -Wtraditional is not useful in C++ mode. */
656 if (CPP_OPTION (pfile, cplusplus))
657 CPP_OPTION (pfile, warn_traditional) = 0;
658
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000659 /* Permanently disable macro expansion if we are rescanning
Neil Booth43612ff2002-05-18 08:23:20 +0000660 preprocessed text. Read preprocesed source in ISO mode. */
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000661 if (CPP_OPTION (pfile, preprocessed))
Neil Booth43612ff2002-05-18 08:23:20 +0000662 {
Ollie Wildccfc4c92007-07-30 18:29:20 +0000663 if (!CPP_OPTION (pfile, directives_only))
664 pfile->state.prevent_expansion = 1;
Neil Booth43612ff2002-05-18 08:23:20 +0000665 CPP_OPTION (pfile, traditional) = 0;
666 }
667
Neil Bootha8eb6042003-05-04 20:03:55 +0000668 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
669 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
670
Neil Booth43612ff2002-05-18 08:23:20 +0000671 if (CPP_OPTION (pfile, traditional))
Neil Booth26aea072003-04-19 00:22:51 +0000672 {
Neil Bootha09d4742004-07-04 12:57:50 +0000673 CPP_OPTION (pfile, cplusplus_comments) = 0;
674
Neil Booth26aea072003-04-19 00:22:51 +0000675 /* Traditional CPP does not accurately track column information. */
676 CPP_OPTION (pfile, show_column) = 0;
677 CPP_OPTION (pfile, trigraphs) = 0;
678 CPP_OPTION (pfile, warn_trigraphs) = 0;
679 }
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000680}