blob: 4ef7e24998cd308e68a1cde1e6f1fc0bf07e5924 [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,
Neil Booth5793b272003-03-01 14:31:21 +00003 1999, 2000, 2001, 2002, 2003 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
20Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21
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"
25#include "cpphash.h"
Zack Weinberg49e6c082000-03-04 19:42:04 +000026#include "mkdeps.h"
Zack Weinberg88ae23e2000-03-08 23:35:19 +000027
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000028static void init_library (void);
29static void mark_named_operators (cpp_reader *);
30static void read_original_filename (cpp_reader *);
Alexandre Olivab20d9f02003-08-05 21:15:57 +000031static void read_original_directory (cpp_reader *);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000032static void post_options (cpp_reader *);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000033
Neil Booth61d03462000-08-18 17:35:58 +000034/* If we have designated initializers (GCC >2.7) these tables can be
35 initialized, constant data. Otherwise, they have to be filled in at
Zack Weinberg12cf91f2000-05-04 04:38:01 +000036 runtime. */
Neil Booth61d03462000-08-18 17:35:58 +000037#if HAVE_DESIGNATED_INITIALIZERS
Zack Weinberga9ae4481999-10-29 04:31:14 +000038
Neil Booth4a58aab2000-11-18 12:18:09 +000039#define init_trigraph_map() /* Nothing. */
Neil Booth61d03462000-08-18 17:35:58 +000040#define TRIGRAPH_MAP \
Neil Booth562a5c22002-04-21 18:46:42 +000041__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
Neil Booth61d03462000-08-18 17:35:58 +000042
Zack Weinberga9ae4481999-10-29 04:31:14 +000043#define END };
Zack Weinberg455d2582000-03-04 01:42:56 +000044#define s(p, v) [p] = v,
Neil Booth61d03462000-08-18 17:35:58 +000045
Zack Weinberga9ae4481999-10-29 04:31:14 +000046#else
Neil Booth61d03462000-08-18 17:35:58 +000047
Neil Booth562a5c22002-04-21 18:46:42 +000048#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000049 static void init_trigraph_map (void) { \
Neil Booth61d03462000-08-18 17:35:58 +000050 unsigned char *x = _cpp_trigraph_map;
51
Zack Weinbergae796972000-03-31 23:16:11 +000052#define END }
Zack Weinberg455d2582000-03-04 01:42:56 +000053#define s(p, v) x[p] = v;
Neil Booth61d03462000-08-18 17:35:58 +000054
Zack Weinberga9ae4481999-10-29 04:31:14 +000055#endif
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000056
Neil Booth61d03462000-08-18 17:35:58 +000057TRIGRAPH_MAP
58 s('=', '#') s(')', ']') s('!', '|')
59 s('(', '[') s('\'', '^') s('>', '}')
60 s('/', '\\') s('<', '{') s('-', '~')
61END
62
Zack Weinberga9ae4481999-10-29 04:31:14 +000063#undef s
Zack Weinberg455d2582000-03-04 01:42:56 +000064#undef END
Neil Booth61d03462000-08-18 17:35:58 +000065#undef TRIGRAPH_MAP
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000066
Neil Booth5d8ebbd2002-01-03 21:43:09 +000067/* A set of booleans indicating what CPP features each source language
68 requires. */
Zack Weinberga01eb542001-07-02 18:55:35 +000069struct lang_flags
70{
71 char c99;
Zack Weinberga01eb542001-07-02 18:55:35 +000072 char cplusplus;
73 char extended_numbers;
Neil Booth58551c22002-08-06 20:35:46 +000074 char std;
Zack Weinberga01eb542001-07-02 18:55:35 +000075 char cplusplus_comments;
76 char digraphs;
77};
78
Zack Weinberga01eb542001-07-02 18:55:35 +000079static const struct lang_flags lang_defaults[] =
Neil Boothb1822cc2003-05-17 20:29:34 +000080{ /* c99 c++ xnum std // digr */
81 /* GNUC89 */ { 0, 0, 1, 0, 1, 1 },
82 /* GNUC99 */ { 1, 0, 1, 0, 1, 1 },
83 /* STDC89 */ { 0, 0, 0, 1, 0, 0 },
84 /* STDC94 */ { 0, 0, 0, 1, 0, 1 },
85 /* STDC99 */ { 1, 0, 1, 1, 1, 1 },
86 /* GNUCXX */ { 0, 1, 1, 0, 1, 1 },
87 /* CXX98 */ { 0, 1, 1, 1, 1, 1 },
88 /* ASM */ { 0, 0, 1, 0, 1, 0 }
Zack Weinberga01eb542001-07-02 18:55:35 +000089};
90
Neil Booth5d8ebbd2002-01-03 21:43:09 +000091/* Sets internal flags correctly for a given language. */
Neil Boothf749a362002-08-10 20:58:45 +000092void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000093cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
Neil Boothdd07b882000-11-20 18:27:32 +000094{
Zack Weinberga01eb542001-07-02 18:55:35 +000095 const struct lang_flags *l = &lang_defaults[(int) lang];
Kazu Hiratadf383482002-05-22 22:02:16 +000096
Neil Boothbdb05a72000-11-26 17:31:13 +000097 CPP_OPTION (pfile, lang) = lang;
Neil Boothdd07b882000-11-20 18:27:32 +000098
Zack Weinberga01eb542001-07-02 18:55:35 +000099 CPP_OPTION (pfile, c99) = l->c99;
Zack Weinberga01eb542001-07-02 18:55:35 +0000100 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
101 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
Neil Booth58551c22002-08-06 20:35:46 +0000102 CPP_OPTION (pfile, std) = l->std;
103 CPP_OPTION (pfile, trigraphs) = l->std;
Zack Weinberga01eb542001-07-02 18:55:35 +0000104 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
105 CPP_OPTION (pfile, digraphs) = l->digraphs;
Neil Boothdd07b882000-11-20 18:27:32 +0000106}
107
Neil Boothc1bad962003-03-15 12:18:47 +0000108/* Initialize library global state. */
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000109static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000110init_library (void)
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000111{
112 static int initialized = 0;
113
114 if (! initialized)
115 {
116 initialized = 1;
117
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000118 /* Set up the trigraph map. This doesn't need to do anything if
119 we were compiled with a compiler that supports C99 designated
120 initializers. */
121 init_trigraph_map ();
122 }
Neil Boothcf44ea52000-11-28 21:13:35 +0000123}
124
Kazu Hirataec5c56d2001-08-01 17:57:27 +0000125/* Initialize a cpp_reader structure. */
Neil Boothcf44ea52000-11-28 21:13:35 +0000126cpp_reader *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000127cpp_create_reader (enum c_lang lang, hash_table *table)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000128{
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000129 cpp_reader *pfile;
Neil Booth93c803682000-10-28 17:59:06 +0000130
Kazu Hirata4912a072002-09-14 15:51:45 +0000131 /* Initialize this instance of the library if it hasn't been already. */
Neil Booth674c3b42001-01-08 18:52:09 +0000132 init_library ();
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000133
Kaveh R. Ghazi703ad42b2003-07-19 14:47:15 +0000134 pfile = xcalloc (1, sizeof (cpp_reader));
Neil Booth93c803682000-10-28 17:59:06 +0000135
Neil Boothf749a362002-08-10 20:58:45 +0000136 cpp_set_lang (pfile, lang);
Neil Bootha5a49442002-05-06 22:53:10 +0000137 CPP_OPTION (pfile, warn_multichar) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000138 CPP_OPTION (pfile, discard_comments) = 1;
Jason Thorpe477cdac2002-04-07 03:12:23 +0000139 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000140 CPP_OPTION (pfile, show_column) = 1;
Neil Booth6ab3e7d2000-05-18 11:09:27 +0000141 CPP_OPTION (pfile, tabstop) = 8;
Jakub Jelinekbe768052000-12-15 16:49:28 +0100142 CPP_OPTION (pfile, operator_names) = 1;
Neil Bootha8eb6042003-05-04 20:03:55 +0000143 CPP_OPTION (pfile, warn_trigraphs) = 2;
Phil Edwards909de5d2002-03-22 21:59:04 +0000144 CPP_OPTION (pfile, warn_endif_labels) = 1;
Jason Merrill9fbd3e42003-01-28 14:30:00 -0500145 CPP_OPTION (pfile, warn_deprecated) = 1;
Neil Boothf4ff5a62002-08-12 22:44:30 +0000146 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
Neil Boothb1822cc2003-05-17 20:29:34 +0000147 CPP_OPTION (pfile, dollars_in_ident) = 1;
Hans-Peter Nilsson78b88112003-06-12 06:09:15 +0000148 CPP_OPTION (pfile, warn_dollars) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000149
Neil Booth2443d4e2002-05-05 17:05:09 +0000150 /* Default CPP arithmetic to something sensible for the host for the
151 benefit of dumb users like fix-header. */
Neil Boothc9220e32002-05-27 05:51:14 +0000152 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
Neil Booth2443d4e2002-05-05 17:05:09 +0000153 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
154 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
155 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000156 CPP_OPTION (pfile, unsigned_char) = 0;
Neil Booth44a147a2002-05-07 21:07:24 +0000157 CPP_OPTION (pfile, unsigned_wchar) = 1;
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000158 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
159
160 /* Default to no charset conversion. */
161 CPP_OPTION (pfile, narrow_charset) = 0;
162 CPP_OPTION (pfile, wide_charset) = 0;
Neil Booth4268e8b2002-05-04 07:30:32 +0000163
Neil Booth8f9b4002003-07-29 22:26:13 +0000164 /* A fake empty "directory" used as the starting point for files
165 looked up without a search path. Name cannot be '/' because we
166 don't want to prepend anything at all to filenames using it. All
167 other entries are correct zero-initialized. */
168 pfile->no_search_path.name = (char *) "";
169
Kazu Hirata4912a072002-09-14 15:51:45 +0000170 /* Initialize the line map. Start at logical line 1, so we can use
Neil Booth50410422001-09-15 10:18:03 +0000171 a line number of zero for special states. */
Zack Weinberga2f7be92003-07-22 16:24:53 +0000172 linemap_init (&pfile->line_maps);
Neil Boothd82fc102001-08-02 23:03:31 +0000173
Neil Booth4a58aab2000-11-18 12:18:09 +0000174 /* Initialize lexer state. */
Neil Booth93c803682000-10-28 17:59:06 +0000175 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
Zack Weinberg3cb553b2000-08-20 21:36:18 +0000176
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000177 /* Set up static tokens. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000178 pfile->avoid_paste.type = CPP_PADDING;
179 pfile->avoid_paste.val.source = NULL;
180 pfile->eof.type = CPP_EOF;
181 pfile->eof.flags = 0;
Neil Booth93c803682000-10-28 17:59:06 +0000182
Neil Booth5fddcff2001-09-11 07:00:12 +0000183 /* Create a token buffer for the lexer. */
184 _cpp_init_tokenrun (&pfile->base_run, 250);
185 pfile->cur_run = &pfile->base_run;
186 pfile->cur_token = pfile->base_run.base;
Neil Booth5fddcff2001-09-11 07:00:12 +0000187
Kazu Hirata4912a072002-09-14 15:51:45 +0000188 /* Initialize the base context. */
Neil Booth93c803682000-10-28 17:59:06 +0000189 pfile->context = &pfile->base_context;
190 pfile->base_context.macro = 0;
191 pfile->base_context.prev = pfile->base_context.next = 0;
192
Neil Booth8c3b2692001-09-30 10:03:11 +0000193 /* Aligned and unaligned storage. */
194 pfile->a_buff = _cpp_get_buff (pfile, 0);
Neil Boothece54d52001-09-28 09:40:22 +0000195 pfile->u_buff = _cpp_get_buff (pfile, 0);
Neil Booth93c803682000-10-28 17:59:06 +0000196
Neil Booth87ed1092002-04-28 19:42:54 +0000197 /* The expression parser stack. */
198 _cpp_expand_op_stack (pfile);
199
Kazu Hirata4912a072002-09-14 15:51:45 +0000200 /* Initialize the buffer obstack. */
Zack Weinberg43839642003-07-13 17:34:18 +0000201 _obstack_begin (&pfile->buffer_ob, 0, 0,
202 (void *(*) (long)) xmalloc,
203 (void (*) (void *)) free);
Neil Booth2a967f32001-05-20 06:26:45 +0000204
Neil Booth8f9b4002003-07-29 22:26:13 +0000205 _cpp_init_files (pfile);
Neil Boothcf44ea52000-11-28 21:13:35 +0000206
Per Bothnerb4e46ce2003-03-20 16:46:18 +0000207 _cpp_init_hashtable (pfile, table);
208
Neil Boothcf44ea52000-11-28 21:13:35 +0000209 return pfile;
Zack Weinbergf2d5f0c2000-04-14 23:29:45 +0000210}
211
Neil Booth400023a2001-01-14 22:00:20 +0000212/* Free resources used by PFILE. Accessing PFILE after this function
Kazu Hirata8d9afc4e2002-09-16 11:42:00 +0000213 returns leads to undefined behavior. Returns the error count. */
Neil Booth76c3e732002-08-11 22:22:28 +0000214void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000215cpp_destroy (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000216{
Neil Booth93c803682000-10-28 17:59:06 +0000217 cpp_context *context, *contextn;
Neil Booth50410422001-09-15 10:18:03 +0000218 tokenrun *run, *runn;
Neil Booth709e9e52000-08-17 18:01:43 +0000219
Neil Booth87ed1092002-04-28 19:42:54 +0000220 free (pfile->op_stack);
Neil Boothaf0d16c2002-04-22 17:48:02 +0000221
Zack Weinberg38b24ee2000-03-08 20:37:23 +0000222 while (CPP_BUFFER (pfile) != NULL)
Neil Boothef6e9582001-08-04 12:01:59 +0000223 _cpp_pop_buffer (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000224
Neil Booth1a769162002-06-11 05:36:17 +0000225 if (pfile->out.base)
226 free (pfile->out.base);
Neil Booth004cb262002-05-17 20:16:48 +0000227
Neil Booth93c803682000-10-28 17:59:06 +0000228 if (pfile->macro_buffer)
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000229 {
Kaveh R. Ghazifad205f2003-06-16 21:41:10 +0000230 free (pfile->macro_buffer);
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000231 pfile->macro_buffer = NULL;
232 pfile->macro_buffer_len = 0;
233 }
Neil Booth93c803682000-10-28 17:59:06 +0000234
Neil Boothf4ff5a62002-08-12 22:44:30 +0000235 if (pfile->deps)
236 deps_free (pfile->deps);
Neil Booth2a967f32001-05-20 06:26:45 +0000237 obstack_free (&pfile->buffer_ob, 0);
Zack Weinberg49e6c082000-03-04 19:42:04 +0000238
Neil Booth2a967f32001-05-20 06:26:45 +0000239 _cpp_destroy_hashtable (pfile);
Neil Booth8f9b4002003-07-29 22:26:13 +0000240 _cpp_cleanup_files (pfile);
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000241 _cpp_destroy_iconv (pfile);
Neil Booth93c803682000-10-28 17:59:06 +0000242
Neil Booth8c3b2692001-09-30 10:03:11 +0000243 _cpp_free_buff (pfile->a_buff);
Neil Boothece54d52001-09-28 09:40:22 +0000244 _cpp_free_buff (pfile->u_buff);
Neil Boothb8af0ca2001-09-26 17:52:50 +0000245 _cpp_free_buff (pfile->free_buffs);
Neil Booth93c803682000-10-28 17:59:06 +0000246
Neil Booth50410422001-09-15 10:18:03 +0000247 for (run = &pfile->base_run; run; run = runn)
248 {
249 runn = run->next;
250 free (run->base);
251 if (run != &pfile->base_run)
252 free (run);
253 }
254
Neil Booth93c803682000-10-28 17:59:06 +0000255 for (context = pfile->base_context.next; context; context = contextn)
256 {
257 contextn = context->next;
258 free (context);
259 }
Neil Booth400023a2001-01-14 22:00:20 +0000260
Zack Weinberga2f7be92003-07-22 16:24:53 +0000261 linemap_free (&pfile->line_maps);
Neil Booth400023a2001-01-14 22:00:20 +0000262 free (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000263}
264
Neil Booth93c803682000-10-28 17:59:06 +0000265/* This structure defines one built-in identifier. A node will be
Zack Weinbergf24a1532002-05-18 00:43:13 +0000266 entered in the hash table under the name NAME, with value VALUE.
Zack Weinberg92936ec2000-07-19 20:18:08 +0000267
Zack Weinbergf24a1532002-05-18 00:43:13 +0000268 There are two tables of these. builtin_array holds all the
269 "builtin" macros: these are handled by builtin_macro() in
270 cppmacro.c. Builtin is somewhat of a misnomer -- the property of
271 interest is that these macros require special code to compute their
272 expansions. The value is a "builtin_type" enumerator.
273
274 operator_array holds the C++ named operators. These are keywords
275 which act as aliases for punctuators. In C++, they cannot be
276 altered through #define, and #if recognizes them as operators. In
277 C, these are not entered into the hash table at all (but see
278 <iso646.h>). The value is a token-type enumerator. */
Zack Weinberga9ae4481999-10-29 04:31:14 +0000279struct builtin
280{
Neil Booth562a5c22002-04-21 18:46:42 +0000281 const uchar *name;
Neil Booth93c803682000-10-28 17:59:06 +0000282 unsigned short len;
Zack Weinbergf24a1532002-05-18 00:43:13 +0000283 unsigned short value;
Zack Weinberga9ae4481999-10-29 04:31:14 +0000284};
Zack Weinberga9ae4481999-10-29 04:31:14 +0000285
Zack Weinbergf24a1532002-05-18 00:43:13 +0000286#define B(n, t) { DSC(n), t }
Zack Weinberga9ae4481999-10-29 04:31:14 +0000287static const struct builtin builtin_array[] =
288{
Neil Booth93c803682000-10-28 17:59:06 +0000289 B("__TIME__", BT_TIME),
290 B("__DATE__", BT_DATE),
291 B("__FILE__", BT_FILE),
292 B("__BASE_FILE__", BT_BASE_FILE),
293 B("__LINE__", BT_SPECLINE),
294 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
Neil Booth278c4662002-06-19 05:40:08 +0000295 /* Keep builtins not used for -traditional-cpp at the end, and
296 update init_builtins() if any more are added. */
Neil Booth644edda2001-10-02 12:57:24 +0000297 B("_Pragma", BT_PRAGMA),
Neil Booth618cdda2001-02-25 09:43:03 +0000298 B("__STDC__", BT_STDC),
Zack Weinbergf24a1532002-05-18 00:43:13 +0000299};
Zack Weinberg92936ec2000-07-19 20:18:08 +0000300
Zack Weinbergf24a1532002-05-18 00:43:13 +0000301static const struct builtin operator_array[] =
302{
303 B("and", CPP_AND_AND),
304 B("and_eq", CPP_AND_EQ),
305 B("bitand", CPP_AND),
306 B("bitor", CPP_OR),
307 B("compl", CPP_COMPL),
308 B("not", CPP_NOT),
309 B("not_eq", CPP_NOT_EQ),
310 B("or", CPP_OR_OR),
311 B("or_eq", CPP_OR_EQ),
312 B("xor", CPP_XOR),
313 B("xor_eq", CPP_XOR_EQ)
Zack Weinberga9ae4481999-10-29 04:31:14 +0000314};
Zack Weinberg12cf91f2000-05-04 04:38:01 +0000315#undef B
Zack Weinberga9ae4481999-10-29 04:31:14 +0000316
Neil Booth17645b12002-05-23 18:55:27 +0000317/* Mark the C++ named operators in the hash table. */
318static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000319mark_named_operators (cpp_reader *pfile)
Neil Booth17645b12002-05-23 18:55:27 +0000320{
321 const struct builtin *b;
322
323 for (b = operator_array;
324 b < (operator_array + ARRAY_SIZE (operator_array));
325 b++)
326 {
327 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
328 hp->flags |= NODE_OPERATOR;
Zack Weinberg4977bab2002-12-16 18:23:00 +0000329 hp->is_directive = 0;
330 hp->directive_index = b->value;
Neil Booth17645b12002-05-23 18:55:27 +0000331 }
332}
333
Neil Boothc1bad962003-03-15 12:18:47 +0000334/* Read the builtins table above and enter them, and language-specific
Neil Booth6e270172003-05-11 13:43:36 +0000335 macros, into the hash table. HOSTED is true if this is a hosted
336 environment. */
Neil Boothc1bad962003-03-15 12:18:47 +0000337void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000338cpp_init_builtins (cpp_reader *pfile, int hosted)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000339{
Zack Weinberga9ae4481999-10-29 04:31:14 +0000340 const struct builtin *b;
Neil Booth278c4662002-06-19 05:40:08 +0000341 size_t n = ARRAY_SIZE (builtin_array);
Neil Booth771c4df2000-09-07 20:31:06 +0000342
Neil Booth278c4662002-06-19 05:40:08 +0000343 if (CPP_OPTION (pfile, traditional))
344 n -= 2;
345
346 for(b = builtin_array; b < builtin_array + n; b++)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000347 {
Zack Weinbergf24a1532002-05-18 00:43:13 +0000348 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
349 hp->type = NT_MACRO;
350 hp->flags |= NODE_BUILTIN | NODE_WARN;
351 hp->value.builtin = b->value;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000352 }
Neil Boothc740cee2001-02-20 22:52:11 +0000353
354 if (CPP_OPTION (pfile, cplusplus))
Neil Booth3d90d292002-05-04 20:15:00 +0000355 _cpp_define_builtin (pfile, "__cplusplus 1");
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000356 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
357 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000358 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
Neil Boothc740cee2001-02-20 22:52:11 +0000359 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
360 else if (CPP_OPTION (pfile, c99))
361 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
362
Neil Booth6e270172003-05-11 13:43:36 +0000363 if (hosted)
Neil Booth58b5b892003-05-11 15:15:35 +0000364 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
Neil Booth6e270172003-05-11 13:43:36 +0000365 else
Neil Booth58b5b892003-05-11 15:15:35 +0000366 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
Neil Booth6e270172003-05-11 13:43:36 +0000367
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000368 if (CPP_OPTION (pfile, objc))
369 _cpp_define_builtin (pfile, "__OBJC__ 1");
Neil Booth4a58aab2000-11-18 12:18:09 +0000370}
371
Neil Booth2443d4e2002-05-05 17:05:09 +0000372/* Sanity-checks are dependent on command-line options, so it is
373 called as a subroutine of cpp_read_main_file (). */
374#if ENABLE_CHECKING
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000375static void sanity_checks (cpp_reader *);
376static void sanity_checks (cpp_reader *pfile)
Neil Booth2443d4e2002-05-05 17:05:09 +0000377{
378 cppchar_t test = 0;
Neil Boothc9220e32002-05-27 05:51:14 +0000379 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
Neil Booth2443d4e2002-05-05 17:05:09 +0000380
381 /* Sanity checks for assumptions about CPP arithmetic and target
382 type precisions made by cpplib. */
383 test--;
384 if (test < 1)
Neil Boothbdee42b2002-05-23 06:07:45 +0000385 cpp_error (pfile, DL_ICE, "cppchar_t must be an unsigned type");
Neil Booth2443d4e2002-05-05 17:05:09 +0000386
Neil Boothc9220e32002-05-27 05:51:14 +0000387 if (CPP_OPTION (pfile, precision) > max_precision)
Neil Boothbdee42b2002-05-23 06:07:45 +0000388 cpp_error (pfile, DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000389 "preprocessor arithmetic has maximum precision of %lu bits;"
390 " target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000391 (unsigned long) max_precision,
392 (unsigned long) CPP_OPTION (pfile, precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000393
394 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
Neil Boothbdee42b2002-05-23 06:07:45 +0000395 cpp_error (pfile, DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000396 "CPP arithmetic must be at least as precise as a target int");
397
398 if (CPP_OPTION (pfile, char_precision) < 8)
Neil Boothbdee42b2002-05-23 06:07:45 +0000399 cpp_error (pfile, DL_ICE, "target char is less than 8 bits wide");
Neil Booth2443d4e2002-05-05 17:05:09 +0000400
401 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
Neil Boothbdee42b2002-05-23 06:07:45 +0000402 cpp_error (pfile, DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000403 "target wchar_t is narrower than target char");
404
405 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
Neil Boothbdee42b2002-05-23 06:07:45 +0000406 cpp_error (pfile, DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000407 "target int is narrower than target char");
408
Neil Boothc9220e32002-05-27 05:51:14 +0000409 /* This is assumed in eval_token() and could be fixed if necessary. */
410 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
411 cpp_error (pfile, DL_ICE, "CPP half-integer narrower than CPP character");
412
Neil Booth2443d4e2002-05-05 17:05:09 +0000413 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
Neil Boothbdee42b2002-05-23 06:07:45 +0000414 cpp_error (pfile, DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000415 "CPP on this host cannot handle wide character constants over"
416 " %lu bits, but the target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000417 (unsigned long) BITS_PER_CPPCHAR_T,
418 (unsigned long) CPP_OPTION (pfile, wchar_precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000419}
420#else
421# define sanity_checks(PFILE)
422#endif
423
Neil Booth76c3e732002-08-11 22:22:28 +0000424/* Add a dependency target. Can be called any number of times before
425 cpp_read_main_file(). If no targets have been added before
426 cpp_read_main_file(), then the default target is used. */
427void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000428cpp_add_dependency_target (cpp_reader *pfile, const char *target, int quote)
Neil Booth76c3e732002-08-11 22:22:28 +0000429{
430 if (!pfile->deps)
431 pfile->deps = deps_init ();
432
433 deps_add_target (pfile->deps, target, quote);
434}
435
Neil Boothf5e99452001-11-15 10:01:10 +0000436/* This is called after options have been parsed, and partially
437 processed. Setup for processing input from the file named FNAME,
438 or stdin if it is the empty string. Return the original filename
439 on success (e.g. foo.i->foo.c), or NULL on failure. */
440const char *
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000441cpp_read_main_file (cpp_reader *pfile, const char *fname)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000442{
Neil Booth2443d4e2002-05-05 17:05:09 +0000443 sanity_checks (pfile);
444
Neil Boothf4ff5a62002-08-12 22:44:30 +0000445 post_options (pfile);
446
Neil Boothc19b12c2003-03-12 21:31:51 +0000447 /* Mark named operators before handling command line macros. */
448 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
449 mark_named_operators (pfile);
450
Neil Boothf4ff5a62002-08-12 22:44:30 +0000451 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
452 {
453 if (!pfile->deps)
454 pfile->deps = deps_init ();
455
456 /* Set the default target (if there is none already). */
457 deps_add_default_target (pfile->deps, fname);
458 }
Neil Booth96302432001-01-07 15:17:07 +0000459
Neil Booth26aea072003-04-19 00:22:51 +0000460 pfile->line = 1;
Neil Booth8f9b4002003-07-29 22:26:13 +0000461 if (!cpp_stack_file (pfile, fname))
Neil Boothf5e99452001-11-15 10:01:10 +0000462 return NULL;
Zack Weinbergc45da1c2000-03-02 20:14:32 +0000463
Neil Boothf4ff5a62002-08-12 22:44:30 +0000464 /* Set this here so the client can change the option if it wishes,
465 and after stacking the main file so we don't trace the main
466 file. */
Neil Booth59930192001-08-21 21:17:48 +0000467 pfile->line_maps.trace_includes = CPP_OPTION (pfile, print_include_names);
468
Neil Boothf5e99452001-11-15 10:01:10 +0000469 /* For foo.i, read the original filename foo.c now, for the benefit
470 of the front ends. */
471 if (CPP_OPTION (pfile, preprocessed))
472 read_original_filename (pfile);
473
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000474 if (CPP_OPTION (pfile, working_directory))
475 {
476 const char *name = pfile->map->to_file;
477 const char *dir = getpwd ();
478 char *dir_with_slashes = alloca (strlen (dir) + 3);
479
480 memcpy (dir_with_slashes, dir, strlen (dir));
481 memcpy (dir_with_slashes + strlen (dir), "//", 3);
482
483 if (pfile->cb.dir_change)
484 pfile->cb.dir_change (pfile, dir);
485 /* Emit file renames that will be recognized by
486 read_directory_filename, since dir_change doesn't output
487 anything. */
488 _cpp_do_file_change (pfile, LC_RENAME, dir_with_slashes, 1, 0);
489 _cpp_do_file_change (pfile, LC_RENAME, name, 1, 0);
490 }
491
Neil Boothf5e99452001-11-15 10:01:10 +0000492 return pfile->map->to_file;
493}
494
495/* For preprocessed files, if the first tokens are of the form # NUM.
496 handle the directive so we know the original file name. This will
497 generate file_change callbacks, which the front ends must handle
498 appropriately given their state of initialization. */
499static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000500read_original_filename (cpp_reader *pfile)
Neil Boothf5e99452001-11-15 10:01:10 +0000501{
502 const cpp_token *token, *token1;
503
504 /* Lex ahead; if the first tokens are of the form # NUM, then
505 process the directive, otherwise back up. */
506 token = _cpp_lex_direct (pfile);
507 if (token->type == CPP_HASH)
508 {
509 token1 = _cpp_lex_direct (pfile);
510 _cpp_backup_tokens (pfile, 1);
511
512 /* If it's a #line directive, handle it. */
513 if (token1->type == CPP_NUMBER)
514 {
515 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000516 read_original_directory (pfile);
Neil Boothf5e99452001-11-15 10:01:10 +0000517 return;
518 }
519 }
520
521 /* Backup as if nothing happened. */
522 _cpp_backup_tokens (pfile, 1);
523}
524
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000525/* For preprocessed files, if the tokens following the first filename
526 line is of the form # <line> "/path/name//", handle the
527 directive so we know the original current directory. */
528static void
529read_original_directory (cpp_reader *pfile)
530{
531 const cpp_token *hash, *token;
532
533 /* Lex ahead; if the first tokens are of the form # NUM, then
534 process the directive, otherwise back up. */
535 hash = _cpp_lex_direct (pfile);
536 if (hash->type != CPP_HASH)
537 {
538 _cpp_backup_tokens (pfile, 1);
539 return;
540 }
541
542 token = _cpp_lex_direct (pfile);
543
544 if (token->type != CPP_NUMBER)
545 {
546 _cpp_backup_tokens (pfile, 2);
547 return;
548 }
549
550 token = _cpp_lex_direct (pfile);
551
552 if (token->type != CPP_STRING
553 || ! (token->val.str.len >= 5
554 && token->val.str.text[token->val.str.len-2] == '/'
555 && token->val.str.text[token->val.str.len-3] == '/'))
556 {
557 _cpp_backup_tokens (pfile, 3);
558 return;
559 }
560
561 if (pfile->cb.dir_change)
562 {
563 char *debugdir = alloca (token->val.str.len - 3);
564
565 memcpy (debugdir, (const char *) token->val.str.text + 1,
566 token->val.str.len - 4);
567 debugdir[token->val.str.len - 4] = '\0';
568
569 pfile->cb.dir_change (pfile, debugdir);
570 }
571
572 /* We want to process the fake line changes as regular changes, to
573 get them output. */
574 _cpp_backup_tokens (pfile, 3);
575
576 CPP_OPTION (pfile, working_directory) = false;
577}
578
Neil Booth76c3e732002-08-11 22:22:28 +0000579/* This is called at the end of preprocessing. It pops the last
580 buffer and writes dependency output, and returns the number of
581 errors.
582
583 Maybe it should also reset state, such that you could call
584 cpp_start_read with a new filename to restart processing. */
585int
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000586cpp_finish (cpp_reader *pfile, FILE *deps_stream)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000587{
Neil Bootha69cbaa2002-07-23 22:57:49 +0000588 /* Warn about unused macros before popping the final buffer. */
589 if (CPP_OPTION (pfile, warn_unused_macros))
590 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
591
Neil Booth7364fdd2001-08-07 20:37:26 +0000592 /* cpplex.c leaves the final buffer on the stack. This it so that
593 it returns an unending stream of CPP_EOFs to the client. If we
Joseph Myersa1f300c2001-11-23 02:05:19 +0000594 popped the buffer, we'd dereference a NULL buffer pointer and
Neil Booth7364fdd2001-08-07 20:37:26 +0000595 segfault. It's nice to allow the client to do worry-free excess
596 cpp_get_token calls. */
597 while (pfile->buffer)
598 _cpp_pop_buffer (pfile);
Zack Weinbergc1212d22000-02-06 23:46:18 +0000599
Neil Booth76c3e732002-08-11 22:22:28 +0000600 /* Don't write the deps file if there are errors. */
Neil Boothf4ff5a62002-08-12 22:44:30 +0000601 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
602 && deps_stream && pfile->errors == 0)
Neil Booth76c3e732002-08-11 22:22:28 +0000603 {
604 deps_write (pfile->deps, deps_stream, 72);
605
Neil Boothf4ff5a62002-08-12 22:44:30 +0000606 if (CPP_OPTION (pfile, deps.phony_targets))
Neil Booth76c3e732002-08-11 22:22:28 +0000607 deps_phony_targets (pfile->deps, deps_stream);
608 }
Zack Weinberg3caee4a1999-04-26 16:41:02 +0000609
Zack Weinbergd4506962000-06-28 19:03:08 +0000610 /* Report on headers that could use multiple include guards. */
611 if (CPP_OPTION (pfile, print_include_names))
Zack Weinbergc71f8352000-07-05 05:33:57 +0000612 _cpp_report_missing_guards (pfile);
Neil Booth76c3e732002-08-11 22:22:28 +0000613
614 return pfile->errors;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000615}
616
Neil Boothf4ff5a62002-08-12 22:44:30 +0000617static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000618post_options (cpp_reader *pfile)
Neil Booth96302432001-01-07 15:17:07 +0000619{
620 /* -Wtraditional is not useful in C++ mode. */
621 if (CPP_OPTION (pfile, cplusplus))
622 CPP_OPTION (pfile, warn_traditional) = 0;
623
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000624 /* Permanently disable macro expansion if we are rescanning
Neil Booth43612ff2002-05-18 08:23:20 +0000625 preprocessed text. Read preprocesed source in ISO mode. */
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000626 if (CPP_OPTION (pfile, preprocessed))
Neil Booth43612ff2002-05-18 08:23:20 +0000627 {
628 pfile->state.prevent_expansion = 1;
629 CPP_OPTION (pfile, traditional) = 0;
630 }
631
Neil Bootha8eb6042003-05-04 20:03:55 +0000632 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
633 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
634
Neil Booth43612ff2002-05-18 08:23:20 +0000635 if (CPP_OPTION (pfile, traditional))
Neil Booth26aea072003-04-19 00:22:51 +0000636 {
637 /* Traditional CPP does not accurately track column information. */
638 CPP_OPTION (pfile, show_column) = 0;
639 CPP_OPTION (pfile, trigraphs) = 0;
640 CPP_OPTION (pfile, warn_trigraphs) = 0;
641 }
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000642}