blob: d1cc1e65d0fff2c100b57827767f7edaa9dbc0ea [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,
Kazu Hiratad9221e012004-01-21 20:40:04 +00003 1999, 2000, 2001, 2002, 2003, 2004 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"
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +000025#include "internal.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 ();
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +0000122
123#ifdef ENABLE_NLS
124 (void) bindtextdomain ("gcc", LOCALEDIR);
125#endif
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000126 }
Neil Boothcf44ea52000-11-28 21:13:35 +0000127}
128
Kazu Hirataec5c56d2001-08-01 17:57:27 +0000129/* Initialize a cpp_reader structure. */
Neil Boothcf44ea52000-11-28 21:13:35 +0000130cpp_reader *
Per Bothner50f59cd2004-01-19 21:30:18 -0800131cpp_create_reader (enum c_lang lang, hash_table *table,
132 struct line_maps *line_table)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000133{
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000134 cpp_reader *pfile;
Neil Booth93c803682000-10-28 17:59:06 +0000135
Kazu Hirata4912a072002-09-14 15:51:45 +0000136 /* Initialize this instance of the library if it hasn't been already. */
Neil Booth674c3b42001-01-08 18:52:09 +0000137 init_library ();
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000138
Kaveh R. Ghazi703ad42b2003-07-19 14:47:15 +0000139 pfile = xcalloc (1, sizeof (cpp_reader));
Neil Booth93c803682000-10-28 17:59:06 +0000140
Neil Boothf749a362002-08-10 20:58:45 +0000141 cpp_set_lang (pfile, lang);
Neil Bootha5a49442002-05-06 22:53:10 +0000142 CPP_OPTION (pfile, warn_multichar) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000143 CPP_OPTION (pfile, discard_comments) = 1;
Jason Thorpe477cdac2002-04-07 03:12:23 +0000144 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000145 CPP_OPTION (pfile, show_column) = 1;
Neil Booth6ab3e7d2000-05-18 11:09:27 +0000146 CPP_OPTION (pfile, tabstop) = 8;
Jakub Jelinekbe768052000-12-15 16:49:28 +0100147 CPP_OPTION (pfile, operator_names) = 1;
Neil Bootha8eb6042003-05-04 20:03:55 +0000148 CPP_OPTION (pfile, warn_trigraphs) = 2;
Phil Edwards909de5d2002-03-22 21:59:04 +0000149 CPP_OPTION (pfile, warn_endif_labels) = 1;
Jason Merrill9fbd3e42003-01-28 14:30:00 -0500150 CPP_OPTION (pfile, warn_deprecated) = 1;
Neil Boothf4ff5a62002-08-12 22:44:30 +0000151 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
Neil Boothb1822cc2003-05-17 20:29:34 +0000152 CPP_OPTION (pfile, dollars_in_ident) = 1;
Hans-Peter Nilsson78b88112003-06-12 06:09:15 +0000153 CPP_OPTION (pfile, warn_dollars) = 1;
Richard Hendersone5b79212004-02-19 14:18:50 -0800154 CPP_OPTION (pfile, warn_variadic_macros) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000155
Neil Booth2443d4e2002-05-05 17:05:09 +0000156 /* Default CPP arithmetic to something sensible for the host for the
157 benefit of dumb users like fix-header. */
Neil Boothc9220e32002-05-27 05:51:14 +0000158 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
Neil Booth2443d4e2002-05-05 17:05:09 +0000159 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
160 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
161 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000162 CPP_OPTION (pfile, unsigned_char) = 0;
Neil Booth44a147a2002-05-07 21:07:24 +0000163 CPP_OPTION (pfile, unsigned_wchar) = 1;
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000164 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
165
166 /* Default to no charset conversion. */
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000167 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000168 CPP_OPTION (pfile, wide_charset) = 0;
Neil Booth4268e8b2002-05-04 07:30:32 +0000169
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000170 /* Default the input character set to UTF-8. */
171 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
Eric Christophercf551fb2004-01-16 22:37:49 +0000172
Neil Booth8f9b4002003-07-29 22:26:13 +0000173 /* A fake empty "directory" used as the starting point for files
174 looked up without a search path. Name cannot be '/' because we
175 don't want to prepend anything at all to filenames using it. All
176 other entries are correct zero-initialized. */
177 pfile->no_search_path.name = (char *) "";
178
Per Bothner500bee02004-04-22 19:22:27 -0700179 /* Initialize the line map. */
Per Bothner50f59cd2004-01-19 21:30:18 -0800180 pfile->line_table = line_table;
Neil Boothd82fc102001-08-02 23:03:31 +0000181
Neil Booth4a58aab2000-11-18 12:18:09 +0000182 /* Initialize lexer state. */
Neil Booth93c803682000-10-28 17:59:06 +0000183 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
Zack Weinberg3cb553b2000-08-20 21:36:18 +0000184
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000185 /* Set up static tokens. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000186 pfile->avoid_paste.type = CPP_PADDING;
187 pfile->avoid_paste.val.source = NULL;
188 pfile->eof.type = CPP_EOF;
189 pfile->eof.flags = 0;
Neil Booth93c803682000-10-28 17:59:06 +0000190
Neil Booth5fddcff2001-09-11 07:00:12 +0000191 /* Create a token buffer for the lexer. */
192 _cpp_init_tokenrun (&pfile->base_run, 250);
193 pfile->cur_run = &pfile->base_run;
194 pfile->cur_token = pfile->base_run.base;
Neil Booth5fddcff2001-09-11 07:00:12 +0000195
Kazu Hirata4912a072002-09-14 15:51:45 +0000196 /* Initialize the base context. */
Neil Booth93c803682000-10-28 17:59:06 +0000197 pfile->context = &pfile->base_context;
198 pfile->base_context.macro = 0;
199 pfile->base_context.prev = pfile->base_context.next = 0;
200
Neil Booth8c3b2692001-09-30 10:03:11 +0000201 /* Aligned and unaligned storage. */
202 pfile->a_buff = _cpp_get_buff (pfile, 0);
Neil Boothece54d52001-09-28 09:40:22 +0000203 pfile->u_buff = _cpp_get_buff (pfile, 0);
Neil Booth93c803682000-10-28 17:59:06 +0000204
Neil Booth87ed1092002-04-28 19:42:54 +0000205 /* The expression parser stack. */
206 _cpp_expand_op_stack (pfile);
207
Kazu Hirata4912a072002-09-14 15:51:45 +0000208 /* Initialize the buffer obstack. */
Zack Weinberg43839642003-07-13 17:34:18 +0000209 _obstack_begin (&pfile->buffer_ob, 0, 0,
210 (void *(*) (long)) xmalloc,
211 (void (*) (void *)) free);
Neil Booth2a967f32001-05-20 06:26:45 +0000212
Neil Booth8f9b4002003-07-29 22:26:13 +0000213 _cpp_init_files (pfile);
Neil Boothcf44ea52000-11-28 21:13:35 +0000214
Per Bothnerb4e46ce2003-03-20 16:46:18 +0000215 _cpp_init_hashtable (pfile, table);
216
Neil Boothcf44ea52000-11-28 21:13:35 +0000217 return pfile;
Zack Weinbergf2d5f0c2000-04-14 23:29:45 +0000218}
219
Neil Booth400023a2001-01-14 22:00:20 +0000220/* Free resources used by PFILE. Accessing PFILE after this function
Kazu Hirata8d9afc4e2002-09-16 11:42:00 +0000221 returns leads to undefined behavior. Returns the error count. */
Neil Booth76c3e732002-08-11 22:22:28 +0000222void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000223cpp_destroy (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000224{
Neil Booth93c803682000-10-28 17:59:06 +0000225 cpp_context *context, *contextn;
Neil Booth50410422001-09-15 10:18:03 +0000226 tokenrun *run, *runn;
Neil Booth709e9e52000-08-17 18:01:43 +0000227
Neil Booth87ed1092002-04-28 19:42:54 +0000228 free (pfile->op_stack);
Neil Boothaf0d16c2002-04-22 17:48:02 +0000229
Zack Weinberg38b24ee2000-03-08 20:37:23 +0000230 while (CPP_BUFFER (pfile) != NULL)
Neil Boothef6e9582001-08-04 12:01:59 +0000231 _cpp_pop_buffer (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000232
Neil Booth1a769162002-06-11 05:36:17 +0000233 if (pfile->out.base)
234 free (pfile->out.base);
Neil Booth004cb262002-05-17 20:16:48 +0000235
Neil Booth93c803682000-10-28 17:59:06 +0000236 if (pfile->macro_buffer)
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000237 {
Kaveh R. Ghazifad205f2003-06-16 21:41:10 +0000238 free (pfile->macro_buffer);
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000239 pfile->macro_buffer = NULL;
240 pfile->macro_buffer_len = 0;
241 }
Neil Booth93c803682000-10-28 17:59:06 +0000242
Neil Boothf4ff5a62002-08-12 22:44:30 +0000243 if (pfile->deps)
244 deps_free (pfile->deps);
Neil Booth2a967f32001-05-20 06:26:45 +0000245 obstack_free (&pfile->buffer_ob, 0);
Zack Weinberg49e6c082000-03-04 19:42:04 +0000246
Neil Booth2a967f32001-05-20 06:26:45 +0000247 _cpp_destroy_hashtable (pfile);
Neil Booth8f9b4002003-07-29 22:26:13 +0000248 _cpp_cleanup_files (pfile);
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000249 _cpp_destroy_iconv (pfile);
Neil Booth93c803682000-10-28 17:59:06 +0000250
Neil Booth8c3b2692001-09-30 10:03:11 +0000251 _cpp_free_buff (pfile->a_buff);
Neil Boothece54d52001-09-28 09:40:22 +0000252 _cpp_free_buff (pfile->u_buff);
Neil Boothb8af0ca2001-09-26 17:52:50 +0000253 _cpp_free_buff (pfile->free_buffs);
Neil Booth93c803682000-10-28 17:59:06 +0000254
Neil Booth50410422001-09-15 10:18:03 +0000255 for (run = &pfile->base_run; run; run = runn)
256 {
257 runn = run->next;
258 free (run->base);
259 if (run != &pfile->base_run)
260 free (run);
261 }
262
Neil Booth93c803682000-10-28 17:59:06 +0000263 for (context = pfile->base_context.next; context; context = contextn)
264 {
265 contextn = context->next;
266 free (context);
267 }
Neil Booth400023a2001-01-14 22:00:20 +0000268
Neil Booth400023a2001-01-14 22:00:20 +0000269 free (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000270}
271
Neil Booth93c803682000-10-28 17:59:06 +0000272/* This structure defines one built-in identifier. A node will be
Zack Weinbergf24a1532002-05-18 00:43:13 +0000273 entered in the hash table under the name NAME, with value VALUE.
Zack Weinberg92936ec2000-07-19 20:18:08 +0000274
Zack Weinbergf24a1532002-05-18 00:43:13 +0000275 There are two tables of these. builtin_array holds all the
276 "builtin" macros: these are handled by builtin_macro() in
277 cppmacro.c. Builtin is somewhat of a misnomer -- the property of
278 interest is that these macros require special code to compute their
279 expansions. The value is a "builtin_type" enumerator.
280
281 operator_array holds the C++ named operators. These are keywords
282 which act as aliases for punctuators. In C++, they cannot be
283 altered through #define, and #if recognizes them as operators. In
284 C, these are not entered into the hash table at all (but see
285 <iso646.h>). The value is a token-type enumerator. */
Zack Weinberga9ae4481999-10-29 04:31:14 +0000286struct builtin
287{
Neil Booth562a5c22002-04-21 18:46:42 +0000288 const uchar *name;
Neil Booth93c803682000-10-28 17:59:06 +0000289 unsigned short len;
Zack Weinbergf24a1532002-05-18 00:43:13 +0000290 unsigned short value;
Zack Weinberga9ae4481999-10-29 04:31:14 +0000291};
Zack Weinberga9ae4481999-10-29 04:31:14 +0000292
Zack Weinbergf24a1532002-05-18 00:43:13 +0000293#define B(n, t) { DSC(n), t }
Zack Weinberga9ae4481999-10-29 04:31:14 +0000294static const struct builtin builtin_array[] =
295{
Neil Booth93c803682000-10-28 17:59:06 +0000296 B("__TIME__", BT_TIME),
297 B("__DATE__", BT_DATE),
298 B("__FILE__", BT_FILE),
299 B("__BASE_FILE__", BT_BASE_FILE),
300 B("__LINE__", BT_SPECLINE),
301 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
Neil Booth278c4662002-06-19 05:40:08 +0000302 /* Keep builtins not used for -traditional-cpp at the end, and
303 update init_builtins() if any more are added. */
Neil Booth644edda2001-10-02 12:57:24 +0000304 B("_Pragma", BT_PRAGMA),
Neil Booth618cdda2001-02-25 09:43:03 +0000305 B("__STDC__", BT_STDC),
Zack Weinbergf24a1532002-05-18 00:43:13 +0000306};
Zack Weinberg92936ec2000-07-19 20:18:08 +0000307
Zack Weinbergf24a1532002-05-18 00:43:13 +0000308static const struct builtin operator_array[] =
309{
310 B("and", CPP_AND_AND),
311 B("and_eq", CPP_AND_EQ),
312 B("bitand", CPP_AND),
313 B("bitor", CPP_OR),
314 B("compl", CPP_COMPL),
315 B("not", CPP_NOT),
316 B("not_eq", CPP_NOT_EQ),
317 B("or", CPP_OR_OR),
318 B("or_eq", CPP_OR_EQ),
319 B("xor", CPP_XOR),
320 B("xor_eq", CPP_XOR_EQ)
Zack Weinberga9ae4481999-10-29 04:31:14 +0000321};
Zack Weinberg12cf91f2000-05-04 04:38:01 +0000322#undef B
Zack Weinberga9ae4481999-10-29 04:31:14 +0000323
Neil Booth17645b12002-05-23 18:55:27 +0000324/* Mark the C++ named operators in the hash table. */
325static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000326mark_named_operators (cpp_reader *pfile)
Neil Booth17645b12002-05-23 18:55:27 +0000327{
328 const struct builtin *b;
329
330 for (b = operator_array;
331 b < (operator_array + ARRAY_SIZE (operator_array));
332 b++)
333 {
334 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
335 hp->flags |= NODE_OPERATOR;
Zack Weinberg4977bab2002-12-16 18:23:00 +0000336 hp->is_directive = 0;
337 hp->directive_index = b->value;
Neil Booth17645b12002-05-23 18:55:27 +0000338 }
339}
340
Neil Boothc1bad962003-03-15 12:18:47 +0000341/* Read the builtins table above and enter them, and language-specific
Neil Booth6e270172003-05-11 13:43:36 +0000342 macros, into the hash table. HOSTED is true if this is a hosted
343 environment. */
Neil Boothc1bad962003-03-15 12:18:47 +0000344void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000345cpp_init_builtins (cpp_reader *pfile, int hosted)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000346{
Zack Weinberga9ae4481999-10-29 04:31:14 +0000347 const struct builtin *b;
Neil Booth278c4662002-06-19 05:40:08 +0000348 size_t n = ARRAY_SIZE (builtin_array);
Neil Booth771c4df2000-09-07 20:31:06 +0000349
Neil Booth278c4662002-06-19 05:40:08 +0000350 if (CPP_OPTION (pfile, traditional))
351 n -= 2;
352
353 for(b = builtin_array; b < builtin_array + n; b++)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000354 {
Zack Weinbergf24a1532002-05-18 00:43:13 +0000355 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
356 hp->type = NT_MACRO;
357 hp->flags |= NODE_BUILTIN | NODE_WARN;
358 hp->value.builtin = b->value;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000359 }
Neil Boothc740cee2001-02-20 22:52:11 +0000360
361 if (CPP_OPTION (pfile, cplusplus))
Neil Booth3d90d292002-05-04 20:15:00 +0000362 _cpp_define_builtin (pfile, "__cplusplus 1");
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000363 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
364 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000365 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
Neil Boothc740cee2001-02-20 22:52:11 +0000366 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
367 else if (CPP_OPTION (pfile, c99))
368 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
369
Neil Booth6e270172003-05-11 13:43:36 +0000370 if (hosted)
Neil Booth58b5b892003-05-11 15:15:35 +0000371 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
Neil Booth6e270172003-05-11 13:43:36 +0000372 else
Neil Booth58b5b892003-05-11 15:15:35 +0000373 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
Neil Booth6e270172003-05-11 13:43:36 +0000374
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000375 if (CPP_OPTION (pfile, objc))
376 _cpp_define_builtin (pfile, "__OBJC__ 1");
Neil Booth4a58aab2000-11-18 12:18:09 +0000377}
378
Neil Booth2443d4e2002-05-05 17:05:09 +0000379/* Sanity-checks are dependent on command-line options, so it is
380 called as a subroutine of cpp_read_main_file (). */
381#if ENABLE_CHECKING
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000382static void sanity_checks (cpp_reader *);
383static void sanity_checks (cpp_reader *pfile)
Neil Booth2443d4e2002-05-05 17:05:09 +0000384{
385 cppchar_t test = 0;
Neil Boothc9220e32002-05-27 05:51:14 +0000386 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
Neil Booth2443d4e2002-05-05 17:05:09 +0000387
388 /* Sanity checks for assumptions about CPP arithmetic and target
389 type precisions made by cpplib. */
390 test--;
391 if (test < 1)
John David Anglin0527bc42003-11-01 22:56:54 +0000392 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
Neil Booth2443d4e2002-05-05 17:05:09 +0000393
Neil Boothc9220e32002-05-27 05:51:14 +0000394 if (CPP_OPTION (pfile, precision) > max_precision)
John David Anglin0527bc42003-11-01 22:56:54 +0000395 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000396 "preprocessor arithmetic has maximum precision of %lu bits;"
397 " target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000398 (unsigned long) max_precision,
399 (unsigned long) CPP_OPTION (pfile, precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000400
401 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000402 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000403 "CPP arithmetic must be at least as precise as a target int");
404
405 if (CPP_OPTION (pfile, char_precision) < 8)
John David Anglin0527bc42003-11-01 22:56:54 +0000406 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
Neil Booth2443d4e2002-05-05 17:05:09 +0000407
408 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000409 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000410 "target wchar_t is narrower than target char");
411
412 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000413 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000414 "target int is narrower than target char");
415
Neil Boothc9220e32002-05-27 05:51:14 +0000416 /* This is assumed in eval_token() and could be fixed if necessary. */
417 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
John David Anglin0527bc42003-11-01 22:56:54 +0000418 cpp_error (pfile, CPP_DL_ICE,
419 "CPP half-integer narrower than CPP character");
Neil Boothc9220e32002-05-27 05:51:14 +0000420
Neil Booth2443d4e2002-05-05 17:05:09 +0000421 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
John David Anglin0527bc42003-11-01 22:56:54 +0000422 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000423 "CPP on this host cannot handle wide character constants over"
424 " %lu bits, but the target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000425 (unsigned long) BITS_PER_CPPCHAR_T,
426 (unsigned long) CPP_OPTION (pfile, wchar_precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000427}
428#else
429# define sanity_checks(PFILE)
430#endif
431
Neil Boothf5e99452001-11-15 10:01:10 +0000432/* This is called after options have been parsed, and partially
Kazu Hirata59e4e212003-08-19 21:04:38 +0000433 processed. */
Per Bothner4169c322003-08-09 22:14:07 +0000434void
435cpp_post_options (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000436{
Neil Booth2443d4e2002-05-05 17:05:09 +0000437 sanity_checks (pfile);
438
Neil Boothf4ff5a62002-08-12 22:44:30 +0000439 post_options (pfile);
440
Neil Boothc19b12c2003-03-12 21:31:51 +0000441 /* Mark named operators before handling command line macros. */
442 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
443 mark_named_operators (pfile);
Per Bothner4169c322003-08-09 22:14:07 +0000444}
Neil Boothc19b12c2003-03-12 21:31:51 +0000445
Per Bothner4dc299f2003-10-02 07:23:27 +0000446/* Setup for processing input from the file named FNAME, or stdin if
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800447 it is the empty string. Return the original filename
448 on success (e.g. foo.i->foo.c), or NULL on failure. */
449const char *
450cpp_read_main_file (cpp_reader *pfile, const char *fname)
Per Bothner4169c322003-08-09 22:14:07 +0000451{
Neil Boothf4ff5a62002-08-12 22:44:30 +0000452 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
453 {
454 if (!pfile->deps)
455 pfile->deps = deps_init ();
456
457 /* Set the default target (if there is none already). */
458 deps_add_default_target (pfile->deps, fname);
459 }
Neil Booth96302432001-01-07 15:17:07 +0000460
Per Bothner4dc299f2003-10-02 07:23:27 +0000461 pfile->main_file
462 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false);
463 if (_cpp_find_failed (pfile->main_file))
Per Bothner3092d0f2004-04-22 18:41:04 -0700464 return NULL;
Neil Boothf5e99452001-11-15 10:01:10 +0000465
Per Bothner4dc299f2003-10-02 07:23:27 +0000466 _cpp_stack_file (pfile, pfile->main_file, false);
467
468 /* For foo.i, read the original filename foo.c now, for the benefit
469 of the front ends. */
470 if (CPP_OPTION (pfile, preprocessed))
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800471 {
472 read_original_filename (pfile);
Per Bothner12f9df42004-02-11 07:29:30 -0800473 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800474 }
475 return fname;
Neil Boothf5e99452001-11-15 10:01:10 +0000476}
477
478/* For preprocessed files, if the first tokens are of the form # NUM.
479 handle the directive so we know the original file name. This will
480 generate file_change callbacks, which the front ends must handle
481 appropriately given their state of initialization. */
482static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000483read_original_filename (cpp_reader *pfile)
Neil Boothf5e99452001-11-15 10:01:10 +0000484{
485 const cpp_token *token, *token1;
486
487 /* Lex ahead; if the first tokens are of the form # NUM, then
488 process the directive, otherwise back up. */
489 token = _cpp_lex_direct (pfile);
490 if (token->type == CPP_HASH)
491 {
492 token1 = _cpp_lex_direct (pfile);
493 _cpp_backup_tokens (pfile, 1);
494
495 /* If it's a #line directive, handle it. */
496 if (token1->type == CPP_NUMBER)
497 {
498 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000499 read_original_directory (pfile);
Neil Boothf5e99452001-11-15 10:01:10 +0000500 return;
501 }
502 }
503
504 /* Backup as if nothing happened. */
505 _cpp_backup_tokens (pfile, 1);
506}
507
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000508/* For preprocessed files, if the tokens following the first filename
509 line is of the form # <line> "/path/name//", handle the
510 directive so we know the original current directory. */
511static void
512read_original_directory (cpp_reader *pfile)
513{
514 const cpp_token *hash, *token;
515
516 /* Lex ahead; if the first tokens are of the form # NUM, then
517 process the directive, otherwise back up. */
518 hash = _cpp_lex_direct (pfile);
519 if (hash->type != CPP_HASH)
520 {
521 _cpp_backup_tokens (pfile, 1);
522 return;
523 }
524
525 token = _cpp_lex_direct (pfile);
526
527 if (token->type != CPP_NUMBER)
528 {
529 _cpp_backup_tokens (pfile, 2);
530 return;
531 }
532
533 token = _cpp_lex_direct (pfile);
534
535 if (token->type != CPP_STRING
536 || ! (token->val.str.len >= 5
537 && token->val.str.text[token->val.str.len-2] == '/'
538 && token->val.str.text[token->val.str.len-3] == '/'))
539 {
540 _cpp_backup_tokens (pfile, 3);
541 return;
542 }
543
544 if (pfile->cb.dir_change)
545 {
546 char *debugdir = alloca (token->val.str.len - 3);
547
548 memcpy (debugdir, (const char *) token->val.str.text + 1,
549 token->val.str.len - 4);
550 debugdir[token->val.str.len - 4] = '\0';
551
552 pfile->cb.dir_change (pfile, debugdir);
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800553 }
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000554}
555
Neil Booth76c3e732002-08-11 22:22:28 +0000556/* This is called at the end of preprocessing. It pops the last
557 buffer and writes dependency output, and returns the number of
558 errors.
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000559
Neil Booth76c3e732002-08-11 22:22:28 +0000560 Maybe it should also reset state, such that you could call
561 cpp_start_read with a new filename to restart processing. */
562int
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000563cpp_finish (cpp_reader *pfile, FILE *deps_stream)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000564{
Neil Bootha69cbaa2002-07-23 22:57:49 +0000565 /* Warn about unused macros before popping the final buffer. */
566 if (CPP_OPTION (pfile, warn_unused_macros))
567 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
568
Neil Booth7364fdd2001-08-07 20:37:26 +0000569 /* cpplex.c leaves the final buffer on the stack. This it so that
570 it returns an unending stream of CPP_EOFs to the client. If we
Joseph Myersa1f300c2001-11-23 02:05:19 +0000571 popped the buffer, we'd dereference a NULL buffer pointer and
Neil Booth7364fdd2001-08-07 20:37:26 +0000572 segfault. It's nice to allow the client to do worry-free excess
573 cpp_get_token calls. */
574 while (pfile->buffer)
575 _cpp_pop_buffer (pfile);
Zack Weinbergc1212d22000-02-06 23:46:18 +0000576
Neil Booth76c3e732002-08-11 22:22:28 +0000577 /* Don't write the deps file if there are errors. */
Neil Boothf4ff5a62002-08-12 22:44:30 +0000578 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
579 && deps_stream && pfile->errors == 0)
Neil Booth76c3e732002-08-11 22:22:28 +0000580 {
581 deps_write (pfile->deps, deps_stream, 72);
582
Neil Boothf4ff5a62002-08-12 22:44:30 +0000583 if (CPP_OPTION (pfile, deps.phony_targets))
Neil Booth76c3e732002-08-11 22:22:28 +0000584 deps_phony_targets (pfile->deps, deps_stream);
585 }
Zack Weinberg3caee4a1999-04-26 16:41:02 +0000586
Zack Weinbergd4506962000-06-28 19:03:08 +0000587 /* Report on headers that could use multiple include guards. */
588 if (CPP_OPTION (pfile, print_include_names))
Zack Weinbergc71f8352000-07-05 05:33:57 +0000589 _cpp_report_missing_guards (pfile);
Neil Booth76c3e732002-08-11 22:22:28 +0000590
591 return pfile->errors;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000592}
593
Neil Boothf4ff5a62002-08-12 22:44:30 +0000594static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000595post_options (cpp_reader *pfile)
Neil Booth96302432001-01-07 15:17:07 +0000596{
597 /* -Wtraditional is not useful in C++ mode. */
598 if (CPP_OPTION (pfile, cplusplus))
599 CPP_OPTION (pfile, warn_traditional) = 0;
600
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000601 /* Permanently disable macro expansion if we are rescanning
Neil Booth43612ff2002-05-18 08:23:20 +0000602 preprocessed text. Read preprocesed source in ISO mode. */
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000603 if (CPP_OPTION (pfile, preprocessed))
Neil Booth43612ff2002-05-18 08:23:20 +0000604 {
605 pfile->state.prevent_expansion = 1;
606 CPP_OPTION (pfile, traditional) = 0;
607 }
608
Neil Bootha8eb6042003-05-04 20:03:55 +0000609 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
610 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
611
Neil Booth43612ff2002-05-18 08:23:20 +0000612 if (CPP_OPTION (pfile, traditional))
Neil Booth26aea072003-04-19 00:22:51 +0000613 {
Neil Bootha09d4742004-07-04 12:57:50 +0000614 CPP_OPTION (pfile, cplusplus_comments) = 0;
615
Neil Booth26aea072003-04-19 00:22:51 +0000616 /* Traditional CPP does not accurately track column information. */
617 CPP_OPTION (pfile, show_column) = 0;
618 CPP_OPTION (pfile, trigraphs) = 0;
619 CPP_OPTION (pfile, warn_trigraphs) = 0;
620 }
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000621}