blob: cc7a09ed8c27fbc6db12c0cf9af8f326532374c8 [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,
Tom Tromey5ffeb9132007-09-06 16:24:05 +00003 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Zack Weinberg5538ada1999-02-04 06:36:54 -05004 Contributed by Per Bothner, 1994-95.
5 Based on CCCP program by Paul Rubin, June 1986
6 Adapted to ANSI C, Richard Stallman, Jan 1987
7
8This program is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 2, or (at your option) any
11later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
Kelley Cook200031d2005-06-29 02:34:39 +000020Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
Zack Weinberg5538ada1999-02-04 06:36:54 -050021
Zack Weinberg5538ada1999-02-04 06:36:54 -050022#include "config.h"
23#include "system.h"
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000024#include "cpplib.h"
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +000025#include "internal.h"
Zack Weinberg49e6c082000-03-04 19:42:04 +000026#include "mkdeps.h"
Zack Weinberg018a4782004-09-24 21:39:06 +000027#include "localedir.h"
Zack Weinberg88ae23e2000-03-08 23:35:19 +000028
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000029static void init_library (void);
30static void mark_named_operators (cpp_reader *);
31static void read_original_filename (cpp_reader *);
Alexandre Olivab20d9f02003-08-05 21:15:57 +000032static void read_original_directory (cpp_reader *);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000033static void post_options (cpp_reader *);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000034
Neil Booth61d03462000-08-18 17:35:58 +000035/* If we have designated initializers (GCC >2.7) these tables can be
36 initialized, constant data. Otherwise, they have to be filled in at
Zack Weinberg12cf91f2000-05-04 04:38:01 +000037 runtime. */
Neil Booth61d03462000-08-18 17:35:58 +000038#if HAVE_DESIGNATED_INITIALIZERS
Zack Weinberga9ae4481999-10-29 04:31:14 +000039
Neil Booth4a58aab2000-11-18 12:18:09 +000040#define init_trigraph_map() /* Nothing. */
Neil Booth61d03462000-08-18 17:35:58 +000041#define TRIGRAPH_MAP \
Neil Booth562a5c22002-04-21 18:46:42 +000042__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
Neil Booth61d03462000-08-18 17:35:58 +000043
Zack Weinberga9ae4481999-10-29 04:31:14 +000044#define END };
Zack Weinberg455d2582000-03-04 01:42:56 +000045#define s(p, v) [p] = v,
Neil Booth61d03462000-08-18 17:35:58 +000046
Zack Weinberga9ae4481999-10-29 04:31:14 +000047#else
Neil Booth61d03462000-08-18 17:35:58 +000048
Neil Booth562a5c22002-04-21 18:46:42 +000049#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000050 static void init_trigraph_map (void) { \
Neil Booth61d03462000-08-18 17:35:58 +000051 unsigned char *x = _cpp_trigraph_map;
52
Zack Weinbergae796972000-03-31 23:16:11 +000053#define END }
Zack Weinberg455d2582000-03-04 01:42:56 +000054#define s(p, v) x[p] = v;
Neil Booth61d03462000-08-18 17:35:58 +000055
Zack Weinberga9ae4481999-10-29 04:31:14 +000056#endif
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000057
Neil Booth61d03462000-08-18 17:35:58 +000058TRIGRAPH_MAP
59 s('=', '#') s(')', ']') s('!', '|')
60 s('(', '[') s('\'', '^') s('>', '}')
61 s('/', '\\') s('<', '{') s('-', '~')
62END
63
Zack Weinberga9ae4481999-10-29 04:31:14 +000064#undef s
Zack Weinberg455d2582000-03-04 01:42:56 +000065#undef END
Neil Booth61d03462000-08-18 17:35:58 +000066#undef TRIGRAPH_MAP
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000067
Neil Booth5d8ebbd2002-01-03 21:43:09 +000068/* A set of booleans indicating what CPP features each source language
69 requires. */
Zack Weinberga01eb542001-07-02 18:55:35 +000070struct lang_flags
71{
72 char c99;
Zack Weinberga01eb542001-07-02 18:55:35 +000073 char cplusplus;
74 char extended_numbers;
Joseph Myersaf15a2f2005-09-20 21:31:37 +010075 char extended_identifiers;
Neil Booth58551c22002-08-06 20:35:46 +000076 char std;
Zack Weinberga01eb542001-07-02 18:55:35 +000077 char cplusplus_comments;
78 char digraphs;
Kris Van Heesb6baa672008-04-18 13:58:08 +000079 char uliterals;
Zack Weinberga01eb542001-07-02 18:55:35 +000080};
81
Zack Weinberga01eb542001-07-02 18:55:35 +000082static const struct lang_flags lang_defaults[] =
Kris Van Heesb6baa672008-04-18 13:58:08 +000083{ /* c99 c++ xnum xid std // digr ulit */
84 /* GNUC89 */ { 0, 0, 1, 0, 0, 1, 1, 0 },
85 /* GNUC99 */ { 1, 0, 1, 0, 0, 1, 1, 1 },
86 /* STDC89 */ { 0, 0, 0, 0, 1, 0, 0, 0 },
87 /* STDC94 */ { 0, 0, 0, 0, 1, 0, 1, 0 },
88 /* STDC99 */ { 1, 0, 1, 0, 1, 1, 1, 0 },
89 /* GNUCXX */ { 0, 1, 1, 0, 0, 1, 1, 0 },
90 /* CXX98 */ { 0, 1, 1, 0, 1, 1, 1, 0 },
91 /* GNUCXX0X */ { 1, 1, 1, 0, 0, 1, 1, 1 },
92 /* CXX0X */ { 1, 1, 1, 0, 1, 1, 1, 1 },
93 /* ASM */ { 0, 0, 1, 0, 0, 1, 0, 0 }
Douglas Gregordfafdaa2006-11-01 16:27:23 +000094 /* xid should be 1 for GNUC99, STDC99, GNUCXX, CXX98, GNUCXX0X, and
95 CXX0X when no longer experimental (when all uses of identifiers
96 in the compiler have been audited for correct handling of
97 extended identifiers). */
Zack Weinberga01eb542001-07-02 18:55:35 +000098};
99
Neil Booth5d8ebbd2002-01-03 21:43:09 +0000100/* Sets internal flags correctly for a given language. */
Neil Boothf749a362002-08-10 20:58:45 +0000101void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000102cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
Neil Boothdd07b882000-11-20 18:27:32 +0000103{
Zack Weinberga01eb542001-07-02 18:55:35 +0000104 const struct lang_flags *l = &lang_defaults[(int) lang];
Kazu Hiratadf383482002-05-22 22:02:16 +0000105
Neil Boothbdb05a72000-11-26 17:31:13 +0000106 CPP_OPTION (pfile, lang) = lang;
Neil Boothdd07b882000-11-20 18:27:32 +0000107
Joseph Myersaf15a2f2005-09-20 21:31:37 +0100108 CPP_OPTION (pfile, c99) = l->c99;
109 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
110 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
111 CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers;
112 CPP_OPTION (pfile, std) = l->std;
113 CPP_OPTION (pfile, trigraphs) = l->std;
114 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
115 CPP_OPTION (pfile, digraphs) = l->digraphs;
Kris Van Heesb6baa672008-04-18 13:58:08 +0000116 CPP_OPTION (pfile, uliterals) = l->uliterals;
Neil Boothdd07b882000-11-20 18:27:32 +0000117}
118
Neil Boothc1bad962003-03-15 12:18:47 +0000119/* Initialize library global state. */
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000120static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000121init_library (void)
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000122{
123 static int initialized = 0;
124
125 if (! initialized)
126 {
127 initialized = 1;
128
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000129 /* Set up the trigraph map. This doesn't need to do anything if
130 we were compiled with a compiler that supports C99 designated
131 initializers. */
132 init_trigraph_map ();
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +0000133
134#ifdef ENABLE_NLS
Matthias Klose85eac2a2004-07-23 07:00:57 +0000135 (void) bindtextdomain (PACKAGE, LOCALEDIR);
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +0000136#endif
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000137 }
Neil Boothcf44ea52000-11-28 21:13:35 +0000138}
139
Kazu Hirataec5c56d2001-08-01 17:57:27 +0000140/* Initialize a cpp_reader structure. */
Neil Boothcf44ea52000-11-28 21:13:35 +0000141cpp_reader *
Per Bothner50f59cd2004-01-19 21:30:18 -0800142cpp_create_reader (enum c_lang lang, hash_table *table,
143 struct line_maps *line_table)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000144{
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000145 cpp_reader *pfile;
Neil Booth93c803682000-10-28 17:59:06 +0000146
Kazu Hirata4912a072002-09-14 15:51:45 +0000147 /* Initialize this instance of the library if it hasn't been already. */
Neil Booth674c3b42001-01-08 18:52:09 +0000148 init_library ();
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000149
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000150 pfile = XCNEW (cpp_reader);
Neil Booth93c803682000-10-28 17:59:06 +0000151
Neil Boothf749a362002-08-10 20:58:45 +0000152 cpp_set_lang (pfile, lang);
Neil Bootha5a49442002-05-06 22:53:10 +0000153 CPP_OPTION (pfile, warn_multichar) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000154 CPP_OPTION (pfile, discard_comments) = 1;
Jason Thorpe477cdac2002-04-07 03:12:23 +0000155 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000156 CPP_OPTION (pfile, show_column) = 1;
Neil Booth6ab3e7d2000-05-18 11:09:27 +0000157 CPP_OPTION (pfile, tabstop) = 8;
Jakub Jelinekbe768052000-12-15 16:49:28 +0100158 CPP_OPTION (pfile, operator_names) = 1;
Neil Bootha8eb6042003-05-04 20:03:55 +0000159 CPP_OPTION (pfile, warn_trigraphs) = 2;
Phil Edwards909de5d2002-03-22 21:59:04 +0000160 CPP_OPTION (pfile, warn_endif_labels) = 1;
Jason Merrill9fbd3e42003-01-28 14:30:00 -0500161 CPP_OPTION (pfile, warn_deprecated) = 1;
Neil Boothf4ff5a62002-08-12 22:44:30 +0000162 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
Neil Boothb1822cc2003-05-17 20:29:34 +0000163 CPP_OPTION (pfile, dollars_in_ident) = 1;
Hans-Peter Nilsson78b88112003-06-12 06:09:15 +0000164 CPP_OPTION (pfile, warn_dollars) = 1;
Richard Hendersone5b79212004-02-19 14:18:50 -0800165 CPP_OPTION (pfile, warn_variadic_macros) = 1;
Simon Baldwinc047ce92008-09-18 15:39:08 +0000166 CPP_OPTION (pfile, warn_builtin_macro_redefined) = 1;
Geoffrey Keating50668cf2005-03-15 00:36:33 +0000167 CPP_OPTION (pfile, warn_normalize) = normalized_C;
Zack Weinbergae796972000-03-31 23:16:11 +0000168
Neil Booth2443d4e2002-05-05 17:05:09 +0000169 /* Default CPP arithmetic to something sensible for the host for the
170 benefit of dumb users like fix-header. */
Neil Boothc9220e32002-05-27 05:51:14 +0000171 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
Neil Booth2443d4e2002-05-05 17:05:09 +0000172 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
173 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
174 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000175 CPP_OPTION (pfile, unsigned_char) = 0;
Neil Booth44a147a2002-05-07 21:07:24 +0000176 CPP_OPTION (pfile, unsigned_wchar) = 1;
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000177 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
178
179 /* Default to no charset conversion. */
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000180 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000181 CPP_OPTION (pfile, wide_charset) = 0;
Neil Booth4268e8b2002-05-04 07:30:32 +0000182
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000183 /* Default the input character set to UTF-8. */
184 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
Eric Christophercf551fb2004-01-16 22:37:49 +0000185
Neil Booth8f9b4002003-07-29 22:26:13 +0000186 /* A fake empty "directory" used as the starting point for files
187 looked up without a search path. Name cannot be '/' because we
188 don't want to prepend anything at all to filenames using it. All
189 other entries are correct zero-initialized. */
190 pfile->no_search_path.name = (char *) "";
191
Per Bothner500bee02004-04-22 19:22:27 -0700192 /* Initialize the line map. */
Per Bothner50f59cd2004-01-19 21:30:18 -0800193 pfile->line_table = line_table;
Neil Boothd82fc102001-08-02 23:03:31 +0000194
Neil Booth4a58aab2000-11-18 12:18:09 +0000195 /* Initialize lexer state. */
Neil Booth93c803682000-10-28 17:59:06 +0000196 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
Zack Weinberg3cb553b2000-08-20 21:36:18 +0000197
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000198 /* Set up static tokens. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000199 pfile->avoid_paste.type = CPP_PADDING;
200 pfile->avoid_paste.val.source = NULL;
201 pfile->eof.type = CPP_EOF;
202 pfile->eof.flags = 0;
Neil Booth93c803682000-10-28 17:59:06 +0000203
Neil Booth5fddcff2001-09-11 07:00:12 +0000204 /* Create a token buffer for the lexer. */
205 _cpp_init_tokenrun (&pfile->base_run, 250);
206 pfile->cur_run = &pfile->base_run;
207 pfile->cur_token = pfile->base_run.base;
Neil Booth5fddcff2001-09-11 07:00:12 +0000208
Kazu Hirata4912a072002-09-14 15:51:45 +0000209 /* Initialize the base context. */
Neil Booth93c803682000-10-28 17:59:06 +0000210 pfile->context = &pfile->base_context;
211 pfile->base_context.macro = 0;
212 pfile->base_context.prev = pfile->base_context.next = 0;
213
Neil Booth8c3b2692001-09-30 10:03:11 +0000214 /* Aligned and unaligned storage. */
215 pfile->a_buff = _cpp_get_buff (pfile, 0);
Neil Boothece54d52001-09-28 09:40:22 +0000216 pfile->u_buff = _cpp_get_buff (pfile, 0);
Neil Booth93c803682000-10-28 17:59:06 +0000217
Neil Booth87ed1092002-04-28 19:42:54 +0000218 /* The expression parser stack. */
219 _cpp_expand_op_stack (pfile);
220
Kazu Hirata4912a072002-09-14 15:51:45 +0000221 /* Initialize the buffer obstack. */
Zack Weinberg43839642003-07-13 17:34:18 +0000222 _obstack_begin (&pfile->buffer_ob, 0, 0,
223 (void *(*) (long)) xmalloc,
224 (void (*) (void *)) free);
Neil Booth2a967f32001-05-20 06:26:45 +0000225
Neil Booth8f9b4002003-07-29 22:26:13 +0000226 _cpp_init_files (pfile);
Neil Boothcf44ea52000-11-28 21:13:35 +0000227
Per Bothnerb4e46ce2003-03-20 16:46:18 +0000228 _cpp_init_hashtable (pfile, table);
229
Neil Boothcf44ea52000-11-28 21:13:35 +0000230 return pfile;
Zack Weinbergf2d5f0c2000-04-14 23:29:45 +0000231}
232
Tom Tromey5ffeb9132007-09-06 16:24:05 +0000233/* Set the line_table entry in PFILE. This is called after reading a
234 PCH file, as the old line_table will be incorrect. */
235void
236cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
237{
238 pfile->line_table = line_table;
239}
240
Neil Booth400023a2001-01-14 22:00:20 +0000241/* Free resources used by PFILE. Accessing PFILE after this function
Kazu Hirata8d9afc4e2002-09-16 11:42:00 +0000242 returns leads to undefined behavior. Returns the error count. */
Neil Booth76c3e732002-08-11 22:22:28 +0000243void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000244cpp_destroy (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000245{
Neil Booth93c803682000-10-28 17:59:06 +0000246 cpp_context *context, *contextn;
Neil Booth50410422001-09-15 10:18:03 +0000247 tokenrun *run, *runn;
Matthew Gingell631d0d32008-10-05 12:35:36 +0000248 int i;
Neil Booth709e9e52000-08-17 18:01:43 +0000249
Neil Booth87ed1092002-04-28 19:42:54 +0000250 free (pfile->op_stack);
Neil Boothaf0d16c2002-04-22 17:48:02 +0000251
Zack Weinberg38b24ee2000-03-08 20:37:23 +0000252 while (CPP_BUFFER (pfile) != NULL)
Neil Boothef6e9582001-08-04 12:01:59 +0000253 _cpp_pop_buffer (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000254
Neil Booth1a769162002-06-11 05:36:17 +0000255 if (pfile->out.base)
256 free (pfile->out.base);
Neil Booth004cb262002-05-17 20:16:48 +0000257
Neil Booth93c803682000-10-28 17:59:06 +0000258 if (pfile->macro_buffer)
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000259 {
Kaveh R. Ghazifad205f2003-06-16 21:41:10 +0000260 free (pfile->macro_buffer);
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000261 pfile->macro_buffer = NULL;
262 pfile->macro_buffer_len = 0;
263 }
Neil Booth93c803682000-10-28 17:59:06 +0000264
Neil Boothf4ff5a62002-08-12 22:44:30 +0000265 if (pfile->deps)
266 deps_free (pfile->deps);
Neil Booth2a967f32001-05-20 06:26:45 +0000267 obstack_free (&pfile->buffer_ob, 0);
Zack Weinberg49e6c082000-03-04 19:42:04 +0000268
Neil Booth2a967f32001-05-20 06:26:45 +0000269 _cpp_destroy_hashtable (pfile);
Neil Booth8f9b4002003-07-29 22:26:13 +0000270 _cpp_cleanup_files (pfile);
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000271 _cpp_destroy_iconv (pfile);
Neil Booth93c803682000-10-28 17:59:06 +0000272
Neil Booth8c3b2692001-09-30 10:03:11 +0000273 _cpp_free_buff (pfile->a_buff);
Neil Boothece54d52001-09-28 09:40:22 +0000274 _cpp_free_buff (pfile->u_buff);
Neil Boothb8af0ca2001-09-26 17:52:50 +0000275 _cpp_free_buff (pfile->free_buffs);
Neil Booth93c803682000-10-28 17:59:06 +0000276
Neil Booth50410422001-09-15 10:18:03 +0000277 for (run = &pfile->base_run; run; run = runn)
278 {
279 runn = run->next;
280 free (run->base);
281 if (run != &pfile->base_run)
282 free (run);
283 }
284
Neil Booth93c803682000-10-28 17:59:06 +0000285 for (context = pfile->base_context.next; context; context = contextn)
286 {
287 contextn = context->next;
288 free (context);
289 }
Neil Booth400023a2001-01-14 22:00:20 +0000290
Matthew Gingell631d0d32008-10-05 12:35:36 +0000291 if (pfile->comments.entries)
292 {
293 for (i = 0; i < pfile->comments.count; i++)
294 free (pfile->comments.entries[i].comment);
295
296 free (pfile->comments.entries);
297 }
298
Neil Booth400023a2001-01-14 22:00:20 +0000299 free (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000300}
301
Neil Booth93c803682000-10-28 17:59:06 +0000302/* This structure defines one built-in identifier. A node will be
Zack Weinbergf24a1532002-05-18 00:43:13 +0000303 entered in the hash table under the name NAME, with value VALUE.
Zack Weinberg92936ec2000-07-19 20:18:08 +0000304
Zack Weinbergf24a1532002-05-18 00:43:13 +0000305 There are two tables of these. builtin_array holds all the
306 "builtin" macros: these are handled by builtin_macro() in
Gabriel Dos Reisa2566ae2005-01-02 01:32:21 +0000307 macro.c. Builtin is somewhat of a misnomer -- the property of
Zack Weinbergf24a1532002-05-18 00:43:13 +0000308 interest is that these macros require special code to compute their
309 expansions. The value is a "builtin_type" enumerator.
310
311 operator_array holds the C++ named operators. These are keywords
312 which act as aliases for punctuators. In C++, they cannot be
313 altered through #define, and #if recognizes them as operators. In
314 C, these are not entered into the hash table at all (but see
315 <iso646.h>). The value is a token-type enumerator. */
Simon Baldwinc047ce92008-09-18 15:39:08 +0000316struct builtin_macro
Zack Weinberga9ae4481999-10-29 04:31:14 +0000317{
Simon Baldwinc047ce92008-09-18 15:39:08 +0000318 const uchar *const name;
319 const unsigned short len;
320 const unsigned short value;
321 const bool always_warn_if_redefined;
322};
323
324#define B(n, t, f) { DSC(n), t, f }
325static const struct builtin_macro builtin_array[] =
326{
327 B("__TIMESTAMP__", BT_TIMESTAMP, false),
328 B("__TIME__", BT_TIME, false),
329 B("__DATE__", BT_DATE, false),
330 B("__FILE__", BT_FILE, false),
331 B("__BASE_FILE__", BT_BASE_FILE, false),
332 B("__LINE__", BT_SPECLINE, true),
333 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
334 B("__COUNTER__", BT_COUNTER, true),
335 /* Keep builtins not used for -traditional-cpp at the end, and
336 update init_builtins() if any more are added. */
337 B("_Pragma", BT_PRAGMA, true),
338 B("__STDC__", BT_STDC, true),
339};
340#undef B
341
342struct builtin_operator
343{
344 const uchar *const name;
345 const unsigned short len;
346 const unsigned short value;
Zack Weinberga9ae4481999-10-29 04:31:14 +0000347};
Zack Weinberga9ae4481999-10-29 04:31:14 +0000348
Zack Weinbergf24a1532002-05-18 00:43:13 +0000349#define B(n, t) { DSC(n), t }
Simon Baldwinc047ce92008-09-18 15:39:08 +0000350static const struct builtin_operator operator_array[] =
Zack Weinbergf24a1532002-05-18 00:43:13 +0000351{
352 B("and", CPP_AND_AND),
353 B("and_eq", CPP_AND_EQ),
354 B("bitand", CPP_AND),
355 B("bitor", CPP_OR),
356 B("compl", CPP_COMPL),
357 B("not", CPP_NOT),
358 B("not_eq", CPP_NOT_EQ),
359 B("or", CPP_OR_OR),
360 B("or_eq", CPP_OR_EQ),
361 B("xor", CPP_XOR),
362 B("xor_eq", CPP_XOR_EQ)
Zack Weinberga9ae4481999-10-29 04:31:14 +0000363};
Zack Weinberg12cf91f2000-05-04 04:38:01 +0000364#undef B
Zack Weinberga9ae4481999-10-29 04:31:14 +0000365
Neil Booth17645b12002-05-23 18:55:27 +0000366/* Mark the C++ named operators in the hash table. */
367static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000368mark_named_operators (cpp_reader *pfile)
Neil Booth17645b12002-05-23 18:55:27 +0000369{
Simon Baldwinc047ce92008-09-18 15:39:08 +0000370 const struct builtin_operator *b;
Neil Booth17645b12002-05-23 18:55:27 +0000371
372 for (b = operator_array;
373 b < (operator_array + ARRAY_SIZE (operator_array));
374 b++)
375 {
376 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
377 hp->flags |= NODE_OPERATOR;
Zack Weinberg4977bab2002-12-16 18:23:00 +0000378 hp->is_directive = 0;
379 hp->directive_index = b->value;
Neil Booth17645b12002-05-23 18:55:27 +0000380 }
381}
382
Neil Boothc1bad962003-03-15 12:18:47 +0000383void
Ollie Wildccfc4c92007-07-30 18:29:20 +0000384cpp_init_special_builtins (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000385{
Simon Baldwinc047ce92008-09-18 15:39:08 +0000386 const struct builtin_macro *b;
Neil Booth278c4662002-06-19 05:40:08 +0000387 size_t n = ARRAY_SIZE (builtin_array);
Neil Booth771c4df2000-09-07 20:31:06 +0000388
Neil Booth278c4662002-06-19 05:40:08 +0000389 if (CPP_OPTION (pfile, traditional))
390 n -= 2;
Jakub Jelinek83900992006-01-23 22:50:15 +0100391 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
392 || CPP_OPTION (pfile, std))
Ollie Wildccfc4c92007-07-30 18:29:20 +0000393 n--;
Neil Booth278c4662002-06-19 05:40:08 +0000394
Jakub Jelinek83900992006-01-23 22:50:15 +0100395 for (b = builtin_array; b < builtin_array + n; b++)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000396 {
Zack Weinbergf24a1532002-05-18 00:43:13 +0000397 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
398 hp->type = NT_MACRO;
Simon Baldwinc047ce92008-09-18 15:39:08 +0000399 hp->flags |= NODE_BUILTIN;
400 if (b->always_warn_if_redefined
401 || CPP_OPTION (pfile, warn_builtin_macro_redefined))
402 hp->flags |= NODE_WARN;
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000403 hp->value.builtin = (enum builtin_type) b->value;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000404 }
Ollie Wildccfc4c92007-07-30 18:29:20 +0000405}
406
407/* Read the builtins table above and enter them, and language-specific
408 macros, into the hash table. HOSTED is true if this is a hosted
409 environment. */
410void
411cpp_init_builtins (cpp_reader *pfile, int hosted)
412{
413 cpp_init_special_builtins (pfile);
414
415 if (!CPP_OPTION (pfile, traditional)
416 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
417 || CPP_OPTION (pfile, std)))
418 _cpp_define_builtin (pfile, "__STDC__ 1");
Neil Boothc740cee2001-02-20 22:52:11 +0000419
420 if (CPP_OPTION (pfile, cplusplus))
Neil Booth3d90d292002-05-04 20:15:00 +0000421 _cpp_define_builtin (pfile, "__cplusplus 1");
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000422 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
423 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000424 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
Neil Boothc740cee2001-02-20 22:52:11 +0000425 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
426 else if (CPP_OPTION (pfile, c99))
427 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
428
Neil Booth6e270172003-05-11 13:43:36 +0000429 if (hosted)
Neil Booth58b5b892003-05-11 15:15:35 +0000430 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
Neil Booth6e270172003-05-11 13:43:36 +0000431 else
Neil Booth58b5b892003-05-11 15:15:35 +0000432 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
Neil Booth6e270172003-05-11 13:43:36 +0000433
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000434 if (CPP_OPTION (pfile, objc))
435 _cpp_define_builtin (pfile, "__OBJC__ 1");
Neil Booth4a58aab2000-11-18 12:18:09 +0000436}
437
Neil Booth2443d4e2002-05-05 17:05:09 +0000438/* Sanity-checks are dependent on command-line options, so it is
439 called as a subroutine of cpp_read_main_file (). */
440#if ENABLE_CHECKING
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000441static void sanity_checks (cpp_reader *);
442static void sanity_checks (cpp_reader *pfile)
Neil Booth2443d4e2002-05-05 17:05:09 +0000443{
444 cppchar_t test = 0;
Neil Boothc9220e32002-05-27 05:51:14 +0000445 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
Neil Booth2443d4e2002-05-05 17:05:09 +0000446
447 /* Sanity checks for assumptions about CPP arithmetic and target
448 type precisions made by cpplib. */
449 test--;
450 if (test < 1)
John David Anglin0527bc42003-11-01 22:56:54 +0000451 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
Neil Booth2443d4e2002-05-05 17:05:09 +0000452
Neil Boothc9220e32002-05-27 05:51:14 +0000453 if (CPP_OPTION (pfile, precision) > max_precision)
John David Anglin0527bc42003-11-01 22:56:54 +0000454 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000455 "preprocessor arithmetic has maximum precision of %lu bits;"
456 " target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000457 (unsigned long) max_precision,
458 (unsigned long) CPP_OPTION (pfile, precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000459
460 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000461 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000462 "CPP arithmetic must be at least as precise as a target int");
463
464 if (CPP_OPTION (pfile, char_precision) < 8)
John David Anglin0527bc42003-11-01 22:56:54 +0000465 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
Neil Booth2443d4e2002-05-05 17:05:09 +0000466
467 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000468 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000469 "target wchar_t is narrower than target char");
470
471 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000472 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000473 "target int is narrower than target char");
474
Neil Boothc9220e32002-05-27 05:51:14 +0000475 /* This is assumed in eval_token() and could be fixed if necessary. */
476 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
John David Anglin0527bc42003-11-01 22:56:54 +0000477 cpp_error (pfile, CPP_DL_ICE,
478 "CPP half-integer narrower than CPP character");
Neil Boothc9220e32002-05-27 05:51:14 +0000479
Neil Booth2443d4e2002-05-05 17:05:09 +0000480 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
John David Anglin0527bc42003-11-01 22:56:54 +0000481 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000482 "CPP on this host cannot handle wide character constants over"
483 " %lu bits, but the target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000484 (unsigned long) BITS_PER_CPPCHAR_T,
485 (unsigned long) CPP_OPTION (pfile, wchar_precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000486}
487#else
488# define sanity_checks(PFILE)
489#endif
490
Neil Boothf5e99452001-11-15 10:01:10 +0000491/* This is called after options have been parsed, and partially
Kazu Hirata59e4e212003-08-19 21:04:38 +0000492 processed. */
Per Bothner4169c322003-08-09 22:14:07 +0000493void
494cpp_post_options (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000495{
Neil Booth2443d4e2002-05-05 17:05:09 +0000496 sanity_checks (pfile);
497
Neil Boothf4ff5a62002-08-12 22:44:30 +0000498 post_options (pfile);
499
Neil Boothc19b12c2003-03-12 21:31:51 +0000500 /* Mark named operators before handling command line macros. */
501 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
502 mark_named_operators (pfile);
Per Bothner4169c322003-08-09 22:14:07 +0000503}
Neil Boothc19b12c2003-03-12 21:31:51 +0000504
Per Bothner4dc299f2003-10-02 07:23:27 +0000505/* Setup for processing input from the file named FNAME, or stdin if
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800506 it is the empty string. Return the original filename
507 on success (e.g. foo.i->foo.c), or NULL on failure. */
508const char *
509cpp_read_main_file (cpp_reader *pfile, const char *fname)
Per Bothner4169c322003-08-09 22:14:07 +0000510{
Neil Boothf4ff5a62002-08-12 22:44:30 +0000511 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
512 {
513 if (!pfile->deps)
514 pfile->deps = deps_init ();
515
516 /* Set the default target (if there is none already). */
517 deps_add_default_target (pfile->deps, fname);
518 }
Neil Booth96302432001-01-07 15:17:07 +0000519
Per Bothner4dc299f2003-10-02 07:23:27 +0000520 pfile->main_file
James E Wilson6568f342005-10-21 10:54:20 -0700521 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
Per Bothner4dc299f2003-10-02 07:23:27 +0000522 if (_cpp_find_failed (pfile->main_file))
Per Bothner3092d0f2004-04-22 18:41:04 -0700523 return NULL;
Neil Boothf5e99452001-11-15 10:01:10 +0000524
Per Bothner4dc299f2003-10-02 07:23:27 +0000525 _cpp_stack_file (pfile, pfile->main_file, false);
526
527 /* For foo.i, read the original filename foo.c now, for the benefit
528 of the front ends. */
529 if (CPP_OPTION (pfile, preprocessed))
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800530 {
531 read_original_filename (pfile);
Per Bothner12f9df42004-02-11 07:29:30 -0800532 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800533 }
534 return fname;
Neil Boothf5e99452001-11-15 10:01:10 +0000535}
536
537/* For preprocessed files, if the first tokens are of the form # NUM.
538 handle the directive so we know the original file name. This will
539 generate file_change callbacks, which the front ends must handle
540 appropriately given their state of initialization. */
541static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000542read_original_filename (cpp_reader *pfile)
Neil Boothf5e99452001-11-15 10:01:10 +0000543{
544 const cpp_token *token, *token1;
545
546 /* Lex ahead; if the first tokens are of the form # NUM, then
547 process the directive, otherwise back up. */
548 token = _cpp_lex_direct (pfile);
549 if (token->type == CPP_HASH)
550 {
Uros Bizjak456b8ce2005-11-09 07:30:03 +0100551 pfile->state.in_directive = 1;
Neil Boothf5e99452001-11-15 10:01:10 +0000552 token1 = _cpp_lex_direct (pfile);
553 _cpp_backup_tokens (pfile, 1);
Uros Bizjak456b8ce2005-11-09 07:30:03 +0100554 pfile->state.in_directive = 0;
Neil Boothf5e99452001-11-15 10:01:10 +0000555
556 /* If it's a #line directive, handle it. */
557 if (token1->type == CPP_NUMBER)
558 {
559 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000560 read_original_directory (pfile);
Neil Boothf5e99452001-11-15 10:01:10 +0000561 return;
562 }
563 }
564
565 /* Backup as if nothing happened. */
566 _cpp_backup_tokens (pfile, 1);
567}
568
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000569/* For preprocessed files, if the tokens following the first filename
570 line is of the form # <line> "/path/name//", handle the
571 directive so we know the original current directory. */
572static void
573read_original_directory (cpp_reader *pfile)
574{
575 const cpp_token *hash, *token;
576
577 /* Lex ahead; if the first tokens are of the form # NUM, then
578 process the directive, otherwise back up. */
579 hash = _cpp_lex_direct (pfile);
580 if (hash->type != CPP_HASH)
581 {
582 _cpp_backup_tokens (pfile, 1);
583 return;
584 }
585
586 token = _cpp_lex_direct (pfile);
587
588 if (token->type != CPP_NUMBER)
589 {
590 _cpp_backup_tokens (pfile, 2);
591 return;
592 }
593
594 token = _cpp_lex_direct (pfile);
595
596 if (token->type != CPP_STRING
597 || ! (token->val.str.len >= 5
598 && token->val.str.text[token->val.str.len-2] == '/'
599 && token->val.str.text[token->val.str.len-3] == '/'))
600 {
601 _cpp_backup_tokens (pfile, 3);
602 return;
603 }
604
605 if (pfile->cb.dir_change)
606 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000607 char *debugdir = (char *) alloca (token->val.str.len - 3);
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000608
609 memcpy (debugdir, (const char *) token->val.str.text + 1,
610 token->val.str.len - 4);
611 debugdir[token->val.str.len - 4] = '\0';
612
613 pfile->cb.dir_change (pfile, debugdir);
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800614 }
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000615}
616
Neil Booth76c3e732002-08-11 22:22:28 +0000617/* This is called at the end of preprocessing. It pops the last
618 buffer and writes dependency output, and returns the number of
619 errors.
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. */
623int
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 Booth76c3e732002-08-11 22:22:28 +0000638 /* Don't write the deps file if there are errors. */
Neil Boothf4ff5a62002-08-12 22:44:30 +0000639 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
640 && deps_stream && pfile->errors == 0)
Neil Booth76c3e732002-08-11 22:22:28 +0000641 {
642 deps_write (pfile->deps, deps_stream, 72);
643
Neil Boothf4ff5a62002-08-12 22:44:30 +0000644 if (CPP_OPTION (pfile, deps.phony_targets))
Neil Booth76c3e732002-08-11 22:22:28 +0000645 deps_phony_targets (pfile->deps, deps_stream);
646 }
Zack Weinberg3caee4a1999-04-26 16:41:02 +0000647
Zack Weinbergd4506962000-06-28 19:03:08 +0000648 /* Report on headers that could use multiple include guards. */
649 if (CPP_OPTION (pfile, print_include_names))
Zack Weinbergc71f8352000-07-05 05:33:57 +0000650 _cpp_report_missing_guards (pfile);
Neil Booth76c3e732002-08-11 22:22:28 +0000651
652 return pfile->errors;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000653}
654
Neil Boothf4ff5a62002-08-12 22:44:30 +0000655static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000656post_options (cpp_reader *pfile)
Neil Booth96302432001-01-07 15:17:07 +0000657{
658 /* -Wtraditional is not useful in C++ mode. */
659 if (CPP_OPTION (pfile, cplusplus))
660 CPP_OPTION (pfile, warn_traditional) = 0;
661
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000662 /* Permanently disable macro expansion if we are rescanning
Neil Booth43612ff2002-05-18 08:23:20 +0000663 preprocessed text. Read preprocesed source in ISO mode. */
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000664 if (CPP_OPTION (pfile, preprocessed))
Neil Booth43612ff2002-05-18 08:23:20 +0000665 {
Ollie Wildccfc4c92007-07-30 18:29:20 +0000666 if (!CPP_OPTION (pfile, directives_only))
667 pfile->state.prevent_expansion = 1;
Neil Booth43612ff2002-05-18 08:23:20 +0000668 CPP_OPTION (pfile, traditional) = 0;
669 }
670
Neil Bootha8eb6042003-05-04 20:03:55 +0000671 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
672 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
673
Neil Booth43612ff2002-05-18 08:23:20 +0000674 if (CPP_OPTION (pfile, traditional))
Neil Booth26aea072003-04-19 00:22:51 +0000675 {
Neil Bootha09d4742004-07-04 12:57:50 +0000676 CPP_OPTION (pfile, cplusplus_comments) = 0;
677
Neil Booth26aea072003-04-19 00:22:51 +0000678 /* Traditional CPP does not accurately track column information. */
679 CPP_OPTION (pfile, show_column) = 0;
680 CPP_OPTION (pfile, trigraphs) = 0;
681 CPP_OPTION (pfile, warn_trigraphs) = 0;
682 }
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000683}