blob: aa0c0b10e3d871f612e9ad3e6a3ac4a48ab5cdb2 [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;
79};
80
Zack Weinberga01eb542001-07-02 18:55:35 +000081static const struct lang_flags lang_defaults[] =
Joseph Myersaf15a2f2005-09-20 21:31:37 +010082{ /* c99 c++ xnum xid std // digr */
Douglas Gregordfafdaa2006-11-01 16:27:23 +000083 /* GNUC89 */ { 0, 0, 1, 0, 0, 1, 1 },
84 /* GNUC99 */ { 1, 0, 1, 0, 0, 1, 1 },
85 /* STDC89 */ { 0, 0, 0, 0, 1, 0, 0 },
86 /* STDC94 */ { 0, 0, 0, 0, 1, 0, 1 },
87 /* STDC99 */ { 1, 0, 1, 0, 1, 1, 1 },
88 /* GNUCXX */ { 0, 1, 1, 0, 0, 1, 1 },
89 /* CXX98 */ { 0, 1, 1, 0, 1, 1, 1 },
90 /* GNUCXX0X */ { 1, 1, 1, 0, 0, 1, 1 },
91 /* CXX0X */ { 1, 1, 1, 0, 1, 1, 1 },
92 /* ASM */ { 0, 0, 1, 0, 0, 1, 0 }
93 /* xid should be 1 for GNUC99, STDC99, GNUCXX, CXX98, GNUCXX0X, and
94 CXX0X when no longer experimental (when all uses of identifiers
95 in the compiler have been audited for correct handling of
96 extended identifiers). */
Zack Weinberga01eb542001-07-02 18:55:35 +000097};
98
Neil Booth5d8ebbd2002-01-03 21:43:09 +000099/* Sets internal flags correctly for a given language. */
Neil Boothf749a362002-08-10 20:58:45 +0000100void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000101cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
Neil Boothdd07b882000-11-20 18:27:32 +0000102{
Zack Weinberga01eb542001-07-02 18:55:35 +0000103 const struct lang_flags *l = &lang_defaults[(int) lang];
Kazu Hiratadf383482002-05-22 22:02:16 +0000104
Neil Boothbdb05a72000-11-26 17:31:13 +0000105 CPP_OPTION (pfile, lang) = lang;
Neil Boothdd07b882000-11-20 18:27:32 +0000106
Joseph Myersaf15a2f2005-09-20 21:31:37 +0100107 CPP_OPTION (pfile, c99) = l->c99;
108 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
109 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
110 CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers;
111 CPP_OPTION (pfile, std) = l->std;
112 CPP_OPTION (pfile, trigraphs) = l->std;
113 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
114 CPP_OPTION (pfile, digraphs) = l->digraphs;
Neil Boothdd07b882000-11-20 18:27:32 +0000115}
116
Neil Boothc1bad962003-03-15 12:18:47 +0000117/* Initialize library global state. */
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000118static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000119init_library (void)
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000120{
121 static int initialized = 0;
122
123 if (! initialized)
124 {
125 initialized = 1;
126
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000127 /* Set up the trigraph map. This doesn't need to do anything if
128 we were compiled with a compiler that supports C99 designated
129 initializers. */
130 init_trigraph_map ();
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +0000131
132#ifdef ENABLE_NLS
Matthias Klose85eac2a2004-07-23 07:00:57 +0000133 (void) bindtextdomain (PACKAGE, LOCALEDIR);
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +0000134#endif
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000135 }
Neil Boothcf44ea52000-11-28 21:13:35 +0000136}
137
Kazu Hirataec5c56d2001-08-01 17:57:27 +0000138/* Initialize a cpp_reader structure. */
Neil Boothcf44ea52000-11-28 21:13:35 +0000139cpp_reader *
Per Bothner50f59cd2004-01-19 21:30:18 -0800140cpp_create_reader (enum c_lang lang, hash_table *table,
141 struct line_maps *line_table)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000142{
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000143 cpp_reader *pfile;
Neil Booth93c803682000-10-28 17:59:06 +0000144
Kazu Hirata4912a072002-09-14 15:51:45 +0000145 /* Initialize this instance of the library if it hasn't been already. */
Neil Booth674c3b42001-01-08 18:52:09 +0000146 init_library ();
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000147
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000148 pfile = XCNEW (cpp_reader);
Neil Booth93c803682000-10-28 17:59:06 +0000149
Neil Boothf749a362002-08-10 20:58:45 +0000150 cpp_set_lang (pfile, lang);
Neil Bootha5a49442002-05-06 22:53:10 +0000151 CPP_OPTION (pfile, warn_multichar) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000152 CPP_OPTION (pfile, discard_comments) = 1;
Jason Thorpe477cdac2002-04-07 03:12:23 +0000153 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000154 CPP_OPTION (pfile, show_column) = 1;
Neil Booth6ab3e7d2000-05-18 11:09:27 +0000155 CPP_OPTION (pfile, tabstop) = 8;
Jakub Jelinekbe768052000-12-15 16:49:28 +0100156 CPP_OPTION (pfile, operator_names) = 1;
Neil Bootha8eb6042003-05-04 20:03:55 +0000157 CPP_OPTION (pfile, warn_trigraphs) = 2;
Phil Edwards909de5d2002-03-22 21:59:04 +0000158 CPP_OPTION (pfile, warn_endif_labels) = 1;
Jason Merrill9fbd3e42003-01-28 14:30:00 -0500159 CPP_OPTION (pfile, warn_deprecated) = 1;
Neil Boothf4ff5a62002-08-12 22:44:30 +0000160 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
Neil Boothb1822cc2003-05-17 20:29:34 +0000161 CPP_OPTION (pfile, dollars_in_ident) = 1;
Hans-Peter Nilsson78b88112003-06-12 06:09:15 +0000162 CPP_OPTION (pfile, warn_dollars) = 1;
Richard Hendersone5b79212004-02-19 14:18:50 -0800163 CPP_OPTION (pfile, warn_variadic_macros) = 1;
Geoffrey Keating50668cf2005-03-15 00:36:33 +0000164 CPP_OPTION (pfile, warn_normalize) = normalized_C;
Zack Weinbergae796972000-03-31 23:16:11 +0000165
Neil Booth2443d4e2002-05-05 17:05:09 +0000166 /* Default CPP arithmetic to something sensible for the host for the
167 benefit of dumb users like fix-header. */
Neil Boothc9220e32002-05-27 05:51:14 +0000168 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
Neil Booth2443d4e2002-05-05 17:05:09 +0000169 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
170 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
171 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000172 CPP_OPTION (pfile, unsigned_char) = 0;
Neil Booth44a147a2002-05-07 21:07:24 +0000173 CPP_OPTION (pfile, unsigned_wchar) = 1;
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000174 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
175
176 /* Default to no charset conversion. */
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000177 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000178 CPP_OPTION (pfile, wide_charset) = 0;
Neil Booth4268e8b2002-05-04 07:30:32 +0000179
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000180 /* Default the input character set to UTF-8. */
181 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
Eric Christophercf551fb2004-01-16 22:37:49 +0000182
Neil Booth8f9b4002003-07-29 22:26:13 +0000183 /* A fake empty "directory" used as the starting point for files
184 looked up without a search path. Name cannot be '/' because we
185 don't want to prepend anything at all to filenames using it. All
186 other entries are correct zero-initialized. */
187 pfile->no_search_path.name = (char *) "";
188
Per Bothner500bee02004-04-22 19:22:27 -0700189 /* Initialize the line map. */
Per Bothner50f59cd2004-01-19 21:30:18 -0800190 pfile->line_table = line_table;
Neil Boothd82fc102001-08-02 23:03:31 +0000191
Neil Booth4a58aab2000-11-18 12:18:09 +0000192 /* Initialize lexer state. */
Neil Booth93c803682000-10-28 17:59:06 +0000193 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
Zack Weinberg3cb553b2000-08-20 21:36:18 +0000194
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000195 /* Set up static tokens. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000196 pfile->avoid_paste.type = CPP_PADDING;
197 pfile->avoid_paste.val.source = NULL;
198 pfile->eof.type = CPP_EOF;
199 pfile->eof.flags = 0;
Neil Booth93c803682000-10-28 17:59:06 +0000200
Neil Booth5fddcff2001-09-11 07:00:12 +0000201 /* Create a token buffer for the lexer. */
202 _cpp_init_tokenrun (&pfile->base_run, 250);
203 pfile->cur_run = &pfile->base_run;
204 pfile->cur_token = pfile->base_run.base;
Neil Booth5fddcff2001-09-11 07:00:12 +0000205
Kazu Hirata4912a072002-09-14 15:51:45 +0000206 /* Initialize the base context. */
Neil Booth93c803682000-10-28 17:59:06 +0000207 pfile->context = &pfile->base_context;
208 pfile->base_context.macro = 0;
209 pfile->base_context.prev = pfile->base_context.next = 0;
210
Neil Booth8c3b2692001-09-30 10:03:11 +0000211 /* Aligned and unaligned storage. */
212 pfile->a_buff = _cpp_get_buff (pfile, 0);
Neil Boothece54d52001-09-28 09:40:22 +0000213 pfile->u_buff = _cpp_get_buff (pfile, 0);
Neil Booth93c803682000-10-28 17:59:06 +0000214
Neil Booth87ed1092002-04-28 19:42:54 +0000215 /* The expression parser stack. */
216 _cpp_expand_op_stack (pfile);
217
Kazu Hirata4912a072002-09-14 15:51:45 +0000218 /* Initialize the buffer obstack. */
Zack Weinberg43839642003-07-13 17:34:18 +0000219 _obstack_begin (&pfile->buffer_ob, 0, 0,
220 (void *(*) (long)) xmalloc,
221 (void (*) (void *)) free);
Neil Booth2a967f32001-05-20 06:26:45 +0000222
Neil Booth8f9b4002003-07-29 22:26:13 +0000223 _cpp_init_files (pfile);
Neil Boothcf44ea52000-11-28 21:13:35 +0000224
Per Bothnerb4e46ce2003-03-20 16:46:18 +0000225 _cpp_init_hashtable (pfile, table);
226
Neil Boothcf44ea52000-11-28 21:13:35 +0000227 return pfile;
Zack Weinbergf2d5f0c2000-04-14 23:29:45 +0000228}
229
Tom Tromey5ffeb9132007-09-06 16:24:05 +0000230/* Set the line_table entry in PFILE. This is called after reading a
231 PCH file, as the old line_table will be incorrect. */
232void
233cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
234{
235 pfile->line_table = line_table;
236}
237
Neil Booth400023a2001-01-14 22:00:20 +0000238/* Free resources used by PFILE. Accessing PFILE after this function
Kazu Hirata8d9afc4e2002-09-16 11:42:00 +0000239 returns leads to undefined behavior. Returns the error count. */
Neil Booth76c3e732002-08-11 22:22:28 +0000240void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000241cpp_destroy (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000242{
Neil Booth93c803682000-10-28 17:59:06 +0000243 cpp_context *context, *contextn;
Neil Booth50410422001-09-15 10:18:03 +0000244 tokenrun *run, *runn;
Neil Booth709e9e52000-08-17 18:01:43 +0000245
Neil Booth87ed1092002-04-28 19:42:54 +0000246 free (pfile->op_stack);
Neil Boothaf0d16c2002-04-22 17:48:02 +0000247
Zack Weinberg38b24ee2000-03-08 20:37:23 +0000248 while (CPP_BUFFER (pfile) != NULL)
Neil Boothef6e9582001-08-04 12:01:59 +0000249 _cpp_pop_buffer (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000250
Neil Booth1a769162002-06-11 05:36:17 +0000251 if (pfile->out.base)
252 free (pfile->out.base);
Neil Booth004cb262002-05-17 20:16:48 +0000253
Neil Booth93c803682000-10-28 17:59:06 +0000254 if (pfile->macro_buffer)
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000255 {
Kaveh R. Ghazifad205f2003-06-16 21:41:10 +0000256 free (pfile->macro_buffer);
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000257 pfile->macro_buffer = NULL;
258 pfile->macro_buffer_len = 0;
259 }
Neil Booth93c803682000-10-28 17:59:06 +0000260
Neil Boothf4ff5a62002-08-12 22:44:30 +0000261 if (pfile->deps)
262 deps_free (pfile->deps);
Neil Booth2a967f32001-05-20 06:26:45 +0000263 obstack_free (&pfile->buffer_ob, 0);
Zack Weinberg49e6c082000-03-04 19:42:04 +0000264
Neil Booth2a967f32001-05-20 06:26:45 +0000265 _cpp_destroy_hashtable (pfile);
Neil Booth8f9b4002003-07-29 22:26:13 +0000266 _cpp_cleanup_files (pfile);
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000267 _cpp_destroy_iconv (pfile);
Neil Booth93c803682000-10-28 17:59:06 +0000268
Neil Booth8c3b2692001-09-30 10:03:11 +0000269 _cpp_free_buff (pfile->a_buff);
Neil Boothece54d52001-09-28 09:40:22 +0000270 _cpp_free_buff (pfile->u_buff);
Neil Boothb8af0ca2001-09-26 17:52:50 +0000271 _cpp_free_buff (pfile->free_buffs);
Neil Booth93c803682000-10-28 17:59:06 +0000272
Neil Booth50410422001-09-15 10:18:03 +0000273 for (run = &pfile->base_run; run; run = runn)
274 {
275 runn = run->next;
276 free (run->base);
277 if (run != &pfile->base_run)
278 free (run);
279 }
280
Neil Booth93c803682000-10-28 17:59:06 +0000281 for (context = pfile->base_context.next; context; context = contextn)
282 {
283 contextn = context->next;
284 free (context);
285 }
Neil Booth400023a2001-01-14 22:00:20 +0000286
Neil Booth400023a2001-01-14 22:00:20 +0000287 free (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000288}
289
Neil Booth93c803682000-10-28 17:59:06 +0000290/* This structure defines one built-in identifier. A node will be
Zack Weinbergf24a1532002-05-18 00:43:13 +0000291 entered in the hash table under the name NAME, with value VALUE.
Zack Weinberg92936ec2000-07-19 20:18:08 +0000292
Zack Weinbergf24a1532002-05-18 00:43:13 +0000293 There are two tables of these. builtin_array holds all the
294 "builtin" macros: these are handled by builtin_macro() in
Gabriel Dos Reisa2566ae2005-01-02 01:32:21 +0000295 macro.c. Builtin is somewhat of a misnomer -- the property of
Zack Weinbergf24a1532002-05-18 00:43:13 +0000296 interest is that these macros require special code to compute their
297 expansions. The value is a "builtin_type" enumerator.
298
299 operator_array holds the C++ named operators. These are keywords
300 which act as aliases for punctuators. In C++, they cannot be
301 altered through #define, and #if recognizes them as operators. In
302 C, these are not entered into the hash table at all (but see
303 <iso646.h>). The value is a token-type enumerator. */
Zack Weinberga9ae4481999-10-29 04:31:14 +0000304struct builtin
305{
Neil Booth562a5c22002-04-21 18:46:42 +0000306 const uchar *name;
Neil Booth93c803682000-10-28 17:59:06 +0000307 unsigned short len;
Zack Weinbergf24a1532002-05-18 00:43:13 +0000308 unsigned short value;
Zack Weinberga9ae4481999-10-29 04:31:14 +0000309};
Zack Weinberga9ae4481999-10-29 04:31:14 +0000310
Zack Weinbergf24a1532002-05-18 00:43:13 +0000311#define B(n, t) { DSC(n), t }
Zack Weinberga9ae4481999-10-29 04:31:14 +0000312static const struct builtin builtin_array[] =
313{
Grigory Zagorodnevbe8ac3e2006-02-18 09:25:31 +0000314 B("__TIMESTAMP__", BT_TIMESTAMP),
Neil Booth93c803682000-10-28 17:59:06 +0000315 B("__TIME__", BT_TIME),
316 B("__DATE__", BT_DATE),
317 B("__FILE__", BT_FILE),
318 B("__BASE_FILE__", BT_BASE_FILE),
319 B("__LINE__", BT_SPECLINE),
320 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
Ollie Wilda7020452007-05-24 20:55:36 +0000321 B("__COUNTER__", BT_COUNTER),
Neil Booth278c4662002-06-19 05:40:08 +0000322 /* Keep builtins not used for -traditional-cpp at the end, and
323 update init_builtins() if any more are added. */
Neil Booth644edda2001-10-02 12:57:24 +0000324 B("_Pragma", BT_PRAGMA),
Neil Booth618cdda2001-02-25 09:43:03 +0000325 B("__STDC__", BT_STDC),
Zack Weinbergf24a1532002-05-18 00:43:13 +0000326};
Zack Weinberg92936ec2000-07-19 20:18:08 +0000327
Zack Weinbergf24a1532002-05-18 00:43:13 +0000328static const struct builtin operator_array[] =
329{
330 B("and", CPP_AND_AND),
331 B("and_eq", CPP_AND_EQ),
332 B("bitand", CPP_AND),
333 B("bitor", CPP_OR),
334 B("compl", CPP_COMPL),
335 B("not", CPP_NOT),
336 B("not_eq", CPP_NOT_EQ),
337 B("or", CPP_OR_OR),
338 B("or_eq", CPP_OR_EQ),
339 B("xor", CPP_XOR),
340 B("xor_eq", CPP_XOR_EQ)
Zack Weinberga9ae4481999-10-29 04:31:14 +0000341};
Zack Weinberg12cf91f2000-05-04 04:38:01 +0000342#undef B
Zack Weinberga9ae4481999-10-29 04:31:14 +0000343
Neil Booth17645b12002-05-23 18:55:27 +0000344/* Mark the C++ named operators in the hash table. */
345static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000346mark_named_operators (cpp_reader *pfile)
Neil Booth17645b12002-05-23 18:55:27 +0000347{
348 const struct builtin *b;
349
350 for (b = operator_array;
351 b < (operator_array + ARRAY_SIZE (operator_array));
352 b++)
353 {
354 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
355 hp->flags |= NODE_OPERATOR;
Zack Weinberg4977bab2002-12-16 18:23:00 +0000356 hp->is_directive = 0;
357 hp->directive_index = b->value;
Neil Booth17645b12002-05-23 18:55:27 +0000358 }
359}
360
Neil Boothc1bad962003-03-15 12:18:47 +0000361void
Ollie Wildccfc4c92007-07-30 18:29:20 +0000362cpp_init_special_builtins (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000363{
Zack Weinberga9ae4481999-10-29 04:31:14 +0000364 const struct builtin *b;
Neil Booth278c4662002-06-19 05:40:08 +0000365 size_t n = ARRAY_SIZE (builtin_array);
Neil Booth771c4df2000-09-07 20:31:06 +0000366
Neil Booth278c4662002-06-19 05:40:08 +0000367 if (CPP_OPTION (pfile, traditional))
368 n -= 2;
Jakub Jelinek83900992006-01-23 22:50:15 +0100369 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
370 || CPP_OPTION (pfile, std))
Ollie Wildccfc4c92007-07-30 18:29:20 +0000371 n--;
Neil Booth278c4662002-06-19 05:40:08 +0000372
Jakub Jelinek83900992006-01-23 22:50:15 +0100373 for (b = builtin_array; b < builtin_array + n; b++)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000374 {
Zack Weinbergf24a1532002-05-18 00:43:13 +0000375 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
376 hp->type = NT_MACRO;
377 hp->flags |= NODE_BUILTIN | NODE_WARN;
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000378 hp->value.builtin = (enum builtin_type) b->value;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000379 }
Ollie Wildccfc4c92007-07-30 18:29:20 +0000380}
381
382/* Read the builtins table above and enter them, and language-specific
383 macros, into the hash table. HOSTED is true if this is a hosted
384 environment. */
385void
386cpp_init_builtins (cpp_reader *pfile, int hosted)
387{
388 cpp_init_special_builtins (pfile);
389
390 if (!CPP_OPTION (pfile, traditional)
391 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
392 || CPP_OPTION (pfile, std)))
393 _cpp_define_builtin (pfile, "__STDC__ 1");
Neil Boothc740cee2001-02-20 22:52:11 +0000394
395 if (CPP_OPTION (pfile, cplusplus))
Neil Booth3d90d292002-05-04 20:15:00 +0000396 _cpp_define_builtin (pfile, "__cplusplus 1");
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000397 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
398 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000399 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
Neil Boothc740cee2001-02-20 22:52:11 +0000400 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
401 else if (CPP_OPTION (pfile, c99))
402 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
403
Neil Booth6e270172003-05-11 13:43:36 +0000404 if (hosted)
Neil Booth58b5b892003-05-11 15:15:35 +0000405 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
Neil Booth6e270172003-05-11 13:43:36 +0000406 else
Neil Booth58b5b892003-05-11 15:15:35 +0000407 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
Neil Booth6e270172003-05-11 13:43:36 +0000408
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000409 if (CPP_OPTION (pfile, objc))
410 _cpp_define_builtin (pfile, "__OBJC__ 1");
Neil Booth4a58aab2000-11-18 12:18:09 +0000411}
412
Neil Booth2443d4e2002-05-05 17:05:09 +0000413/* Sanity-checks are dependent on command-line options, so it is
414 called as a subroutine of cpp_read_main_file (). */
415#if ENABLE_CHECKING
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000416static void sanity_checks (cpp_reader *);
417static void sanity_checks (cpp_reader *pfile)
Neil Booth2443d4e2002-05-05 17:05:09 +0000418{
419 cppchar_t test = 0;
Neil Boothc9220e32002-05-27 05:51:14 +0000420 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
Neil Booth2443d4e2002-05-05 17:05:09 +0000421
422 /* Sanity checks for assumptions about CPP arithmetic and target
423 type precisions made by cpplib. */
424 test--;
425 if (test < 1)
John David Anglin0527bc42003-11-01 22:56:54 +0000426 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
Neil Booth2443d4e2002-05-05 17:05:09 +0000427
Neil Boothc9220e32002-05-27 05:51:14 +0000428 if (CPP_OPTION (pfile, precision) > max_precision)
John David Anglin0527bc42003-11-01 22:56:54 +0000429 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000430 "preprocessor arithmetic has maximum precision of %lu bits;"
431 " target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000432 (unsigned long) max_precision,
433 (unsigned long) CPP_OPTION (pfile, precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000434
435 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000436 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000437 "CPP arithmetic must be at least as precise as a target int");
438
439 if (CPP_OPTION (pfile, char_precision) < 8)
John David Anglin0527bc42003-11-01 22:56:54 +0000440 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
Neil Booth2443d4e2002-05-05 17:05:09 +0000441
442 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000443 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000444 "target wchar_t is narrower than target char");
445
446 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000447 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000448 "target int is narrower than target char");
449
Neil Boothc9220e32002-05-27 05:51:14 +0000450 /* This is assumed in eval_token() and could be fixed if necessary. */
451 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
John David Anglin0527bc42003-11-01 22:56:54 +0000452 cpp_error (pfile, CPP_DL_ICE,
453 "CPP half-integer narrower than CPP character");
Neil Boothc9220e32002-05-27 05:51:14 +0000454
Neil Booth2443d4e2002-05-05 17:05:09 +0000455 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
John David Anglin0527bc42003-11-01 22:56:54 +0000456 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000457 "CPP on this host cannot handle wide character constants over"
458 " %lu bits, but the target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000459 (unsigned long) BITS_PER_CPPCHAR_T,
460 (unsigned long) CPP_OPTION (pfile, wchar_precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000461}
462#else
463# define sanity_checks(PFILE)
464#endif
465
Neil Boothf5e99452001-11-15 10:01:10 +0000466/* This is called after options have been parsed, and partially
Kazu Hirata59e4e212003-08-19 21:04:38 +0000467 processed. */
Per Bothner4169c322003-08-09 22:14:07 +0000468void
469cpp_post_options (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000470{
Neil Booth2443d4e2002-05-05 17:05:09 +0000471 sanity_checks (pfile);
472
Neil Boothf4ff5a62002-08-12 22:44:30 +0000473 post_options (pfile);
474
Neil Boothc19b12c2003-03-12 21:31:51 +0000475 /* Mark named operators before handling command line macros. */
476 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
477 mark_named_operators (pfile);
Per Bothner4169c322003-08-09 22:14:07 +0000478}
Neil Boothc19b12c2003-03-12 21:31:51 +0000479
Per Bothner4dc299f2003-10-02 07:23:27 +0000480/* Setup for processing input from the file named FNAME, or stdin if
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800481 it is the empty string. Return the original filename
482 on success (e.g. foo.i->foo.c), or NULL on failure. */
483const char *
484cpp_read_main_file (cpp_reader *pfile, const char *fname)
Per Bothner4169c322003-08-09 22:14:07 +0000485{
Neil Boothf4ff5a62002-08-12 22:44:30 +0000486 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
487 {
488 if (!pfile->deps)
489 pfile->deps = deps_init ();
490
491 /* Set the default target (if there is none already). */
492 deps_add_default_target (pfile->deps, fname);
493 }
Neil Booth96302432001-01-07 15:17:07 +0000494
Per Bothner4dc299f2003-10-02 07:23:27 +0000495 pfile->main_file
James E Wilson6568f342005-10-21 10:54:20 -0700496 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
Per Bothner4dc299f2003-10-02 07:23:27 +0000497 if (_cpp_find_failed (pfile->main_file))
Per Bothner3092d0f2004-04-22 18:41:04 -0700498 return NULL;
Neil Boothf5e99452001-11-15 10:01:10 +0000499
Per Bothner4dc299f2003-10-02 07:23:27 +0000500 _cpp_stack_file (pfile, pfile->main_file, false);
501
502 /* For foo.i, read the original filename foo.c now, for the benefit
503 of the front ends. */
504 if (CPP_OPTION (pfile, preprocessed))
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800505 {
506 read_original_filename (pfile);
Per Bothner12f9df42004-02-11 07:29:30 -0800507 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800508 }
509 return fname;
Neil Boothf5e99452001-11-15 10:01:10 +0000510}
511
512/* For preprocessed files, if the first tokens are of the form # NUM.
513 handle the directive so we know the original file name. This will
514 generate file_change callbacks, which the front ends must handle
515 appropriately given their state of initialization. */
516static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000517read_original_filename (cpp_reader *pfile)
Neil Boothf5e99452001-11-15 10:01:10 +0000518{
519 const cpp_token *token, *token1;
520
521 /* Lex ahead; if the first tokens are of the form # NUM, then
522 process the directive, otherwise back up. */
523 token = _cpp_lex_direct (pfile);
524 if (token->type == CPP_HASH)
525 {
Uros Bizjak456b8ce2005-11-09 07:30:03 +0100526 pfile->state.in_directive = 1;
Neil Boothf5e99452001-11-15 10:01:10 +0000527 token1 = _cpp_lex_direct (pfile);
528 _cpp_backup_tokens (pfile, 1);
Uros Bizjak456b8ce2005-11-09 07:30:03 +0100529 pfile->state.in_directive = 0;
Neil Boothf5e99452001-11-15 10:01:10 +0000530
531 /* If it's a #line directive, handle it. */
532 if (token1->type == CPP_NUMBER)
533 {
534 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000535 read_original_directory (pfile);
Neil Boothf5e99452001-11-15 10:01:10 +0000536 return;
537 }
538 }
539
540 /* Backup as if nothing happened. */
541 _cpp_backup_tokens (pfile, 1);
542}
543
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000544/* For preprocessed files, if the tokens following the first filename
545 line is of the form # <line> "/path/name//", handle the
546 directive so we know the original current directory. */
547static void
548read_original_directory (cpp_reader *pfile)
549{
550 const cpp_token *hash, *token;
551
552 /* Lex ahead; if the first tokens are of the form # NUM, then
553 process the directive, otherwise back up. */
554 hash = _cpp_lex_direct (pfile);
555 if (hash->type != CPP_HASH)
556 {
557 _cpp_backup_tokens (pfile, 1);
558 return;
559 }
560
561 token = _cpp_lex_direct (pfile);
562
563 if (token->type != CPP_NUMBER)
564 {
565 _cpp_backup_tokens (pfile, 2);
566 return;
567 }
568
569 token = _cpp_lex_direct (pfile);
570
571 if (token->type != CPP_STRING
572 || ! (token->val.str.len >= 5
573 && token->val.str.text[token->val.str.len-2] == '/'
574 && token->val.str.text[token->val.str.len-3] == '/'))
575 {
576 _cpp_backup_tokens (pfile, 3);
577 return;
578 }
579
580 if (pfile->cb.dir_change)
581 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000582 char *debugdir = (char *) alloca (token->val.str.len - 3);
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000583
584 memcpy (debugdir, (const char *) token->val.str.text + 1,
585 token->val.str.len - 4);
586 debugdir[token->val.str.len - 4] = '\0';
587
588 pfile->cb.dir_change (pfile, debugdir);
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800589 }
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000590}
591
Neil Booth76c3e732002-08-11 22:22:28 +0000592/* This is called at the end of preprocessing. It pops the last
593 buffer and writes dependency output, and returns the number of
594 errors.
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000595
Neil Booth76c3e732002-08-11 22:22:28 +0000596 Maybe it should also reset state, such that you could call
597 cpp_start_read with a new filename to restart processing. */
598int
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000599cpp_finish (cpp_reader *pfile, FILE *deps_stream)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000600{
Neil Bootha69cbaa2002-07-23 22:57:49 +0000601 /* Warn about unused macros before popping the final buffer. */
602 if (CPP_OPTION (pfile, warn_unused_macros))
603 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
604
Gabriel Dos Reisa2566ae2005-01-02 01:32:21 +0000605 /* lex.c leaves the final buffer on the stack. This it so that
Neil Booth7364fdd2001-08-07 20:37:26 +0000606 it returns an unending stream of CPP_EOFs to the client. If we
Joseph Myersa1f300c2001-11-23 02:05:19 +0000607 popped the buffer, we'd dereference a NULL buffer pointer and
Neil Booth7364fdd2001-08-07 20:37:26 +0000608 segfault. It's nice to allow the client to do worry-free excess
609 cpp_get_token calls. */
610 while (pfile->buffer)
611 _cpp_pop_buffer (pfile);
Zack Weinbergc1212d22000-02-06 23:46:18 +0000612
Neil Booth76c3e732002-08-11 22:22:28 +0000613 /* Don't write the deps file if there are errors. */
Neil Boothf4ff5a62002-08-12 22:44:30 +0000614 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
615 && deps_stream && pfile->errors == 0)
Neil Booth76c3e732002-08-11 22:22:28 +0000616 {
617 deps_write (pfile->deps, deps_stream, 72);
618
Neil Boothf4ff5a62002-08-12 22:44:30 +0000619 if (CPP_OPTION (pfile, deps.phony_targets))
Neil Booth76c3e732002-08-11 22:22:28 +0000620 deps_phony_targets (pfile->deps, deps_stream);
621 }
Zack Weinberg3caee4a1999-04-26 16:41:02 +0000622
Zack Weinbergd4506962000-06-28 19:03:08 +0000623 /* Report on headers that could use multiple include guards. */
624 if (CPP_OPTION (pfile, print_include_names))
Zack Weinbergc71f8352000-07-05 05:33:57 +0000625 _cpp_report_missing_guards (pfile);
Neil Booth76c3e732002-08-11 22:22:28 +0000626
627 return pfile->errors;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000628}
629
Neil Boothf4ff5a62002-08-12 22:44:30 +0000630static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000631post_options (cpp_reader *pfile)
Neil Booth96302432001-01-07 15:17:07 +0000632{
633 /* -Wtraditional is not useful in C++ mode. */
634 if (CPP_OPTION (pfile, cplusplus))
635 CPP_OPTION (pfile, warn_traditional) = 0;
636
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000637 /* Permanently disable macro expansion if we are rescanning
Neil Booth43612ff2002-05-18 08:23:20 +0000638 preprocessed text. Read preprocesed source in ISO mode. */
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000639 if (CPP_OPTION (pfile, preprocessed))
Neil Booth43612ff2002-05-18 08:23:20 +0000640 {
Ollie Wildccfc4c92007-07-30 18:29:20 +0000641 if (!CPP_OPTION (pfile, directives_only))
642 pfile->state.prevent_expansion = 1;
Neil Booth43612ff2002-05-18 08:23:20 +0000643 CPP_OPTION (pfile, traditional) = 0;
644 }
645
Neil Bootha8eb6042003-05-04 20:03:55 +0000646 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
647 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
648
Neil Booth43612ff2002-05-18 08:23:20 +0000649 if (CPP_OPTION (pfile, traditional))
Neil Booth26aea072003-04-19 00:22:51 +0000650 {
Neil Bootha09d4742004-07-04 12:57:50 +0000651 CPP_OPTION (pfile, cplusplus_comments) = 0;
652
Neil Booth26aea072003-04-19 00:22:51 +0000653 /* Traditional CPP does not accurately track column information. */
654 CPP_OPTION (pfile, show_column) = 0;
655 CPP_OPTION (pfile, trigraphs) = 0;
656 CPP_OPTION (pfile, warn_trigraphs) = 0;
657 }
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000658}