blob: 3074f96b5c8b9905db5232c0c9e8a43657e6cfd3 [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 Hirata31c3e632005-02-14 14:43:56 +00003 1999, 2000, 2001, 2002, 2003, 2004, 2005 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 */
83 /* 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 /* ASM */ { 0, 0, 1, 0, 0, 1, 0 }
91 /* xid should be 1 for GNUC99, STDC99, GNUCXX and CXX98 when no
92 longer experimental (when all uses of identifiers in the compiler
93 have been audited for correct handling of extended
94 identifiers). */
Zack Weinberga01eb542001-07-02 18:55:35 +000095};
96
Neil Booth5d8ebbd2002-01-03 21:43:09 +000097/* Sets internal flags correctly for a given language. */
Neil Boothf749a362002-08-10 20:58:45 +000098void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000099cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
Neil Boothdd07b882000-11-20 18:27:32 +0000100{
Zack Weinberga01eb542001-07-02 18:55:35 +0000101 const struct lang_flags *l = &lang_defaults[(int) lang];
Kazu Hiratadf383482002-05-22 22:02:16 +0000102
Neil Boothbdb05a72000-11-26 17:31:13 +0000103 CPP_OPTION (pfile, lang) = lang;
Neil Boothdd07b882000-11-20 18:27:32 +0000104
Joseph Myersaf15a2f2005-09-20 21:31:37 +0100105 CPP_OPTION (pfile, c99) = l->c99;
106 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
107 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
108 CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers;
109 CPP_OPTION (pfile, std) = l->std;
110 CPP_OPTION (pfile, trigraphs) = l->std;
111 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
112 CPP_OPTION (pfile, digraphs) = l->digraphs;
Neil Boothdd07b882000-11-20 18:27:32 +0000113}
114
Neil Boothc1bad962003-03-15 12:18:47 +0000115/* Initialize library global state. */
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000116static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000117init_library (void)
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000118{
119 static int initialized = 0;
120
121 if (! initialized)
122 {
123 initialized = 1;
124
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000125 /* Set up the trigraph map. This doesn't need to do anything if
126 we were compiled with a compiler that supports C99 designated
127 initializers. */
128 init_trigraph_map ();
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +0000129
130#ifdef ENABLE_NLS
Matthias Klose85eac2a2004-07-23 07:00:57 +0000131 (void) bindtextdomain (PACKAGE, LOCALEDIR);
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +0000132#endif
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000133 }
Neil Boothcf44ea52000-11-28 21:13:35 +0000134}
135
Kazu Hirataec5c56d2001-08-01 17:57:27 +0000136/* Initialize a cpp_reader structure. */
Neil Boothcf44ea52000-11-28 21:13:35 +0000137cpp_reader *
Per Bothner50f59cd2004-01-19 21:30:18 -0800138cpp_create_reader (enum c_lang lang, hash_table *table,
139 struct line_maps *line_table)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000140{
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000141 cpp_reader *pfile;
Neil Booth93c803682000-10-28 17:59:06 +0000142
Kazu Hirata4912a072002-09-14 15:51:45 +0000143 /* Initialize this instance of the library if it hasn't been already. */
Neil Booth674c3b42001-01-08 18:52:09 +0000144 init_library ();
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000145
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000146 pfile = XCNEW (cpp_reader);
Neil Booth93c803682000-10-28 17:59:06 +0000147
Neil Boothf749a362002-08-10 20:58:45 +0000148 cpp_set_lang (pfile, lang);
Neil Bootha5a49442002-05-06 22:53:10 +0000149 CPP_OPTION (pfile, warn_multichar) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000150 CPP_OPTION (pfile, discard_comments) = 1;
Jason Thorpe477cdac2002-04-07 03:12:23 +0000151 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000152 CPP_OPTION (pfile, show_column) = 1;
Neil Booth6ab3e7d2000-05-18 11:09:27 +0000153 CPP_OPTION (pfile, tabstop) = 8;
Jakub Jelinekbe768052000-12-15 16:49:28 +0100154 CPP_OPTION (pfile, operator_names) = 1;
Neil Bootha8eb6042003-05-04 20:03:55 +0000155 CPP_OPTION (pfile, warn_trigraphs) = 2;
Phil Edwards909de5d2002-03-22 21:59:04 +0000156 CPP_OPTION (pfile, warn_endif_labels) = 1;
Jason Merrill9fbd3e42003-01-28 14:30:00 -0500157 CPP_OPTION (pfile, warn_deprecated) = 1;
Neil Boothf4ff5a62002-08-12 22:44:30 +0000158 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
Neil Boothb1822cc2003-05-17 20:29:34 +0000159 CPP_OPTION (pfile, dollars_in_ident) = 1;
Hans-Peter Nilsson78b88112003-06-12 06:09:15 +0000160 CPP_OPTION (pfile, warn_dollars) = 1;
Richard Hendersone5b79212004-02-19 14:18:50 -0800161 CPP_OPTION (pfile, warn_variadic_macros) = 1;
Geoffrey Keating50668cf2005-03-15 00:36:33 +0000162 CPP_OPTION (pfile, warn_normalize) = normalized_C;
Zack Weinbergae796972000-03-31 23:16:11 +0000163
Neil Booth2443d4e2002-05-05 17:05:09 +0000164 /* Default CPP arithmetic to something sensible for the host for the
165 benefit of dumb users like fix-header. */
Neil Boothc9220e32002-05-27 05:51:14 +0000166 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
Neil Booth2443d4e2002-05-05 17:05:09 +0000167 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
168 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
169 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000170 CPP_OPTION (pfile, unsigned_char) = 0;
Neil Booth44a147a2002-05-07 21:07:24 +0000171 CPP_OPTION (pfile, unsigned_wchar) = 1;
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000172 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
173
174 /* Default to no charset conversion. */
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000175 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000176 CPP_OPTION (pfile, wide_charset) = 0;
Neil Booth4268e8b2002-05-04 07:30:32 +0000177
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000178 /* Default the input character set to UTF-8. */
179 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
Eric Christophercf551fb2004-01-16 22:37:49 +0000180
Neil Booth8f9b4002003-07-29 22:26:13 +0000181 /* A fake empty "directory" used as the starting point for files
182 looked up without a search path. Name cannot be '/' because we
183 don't want to prepend anything at all to filenames using it. All
184 other entries are correct zero-initialized. */
185 pfile->no_search_path.name = (char *) "";
186
Per Bothner500bee02004-04-22 19:22:27 -0700187 /* Initialize the line map. */
Per Bothner50f59cd2004-01-19 21:30:18 -0800188 pfile->line_table = line_table;
Neil Boothd82fc102001-08-02 23:03:31 +0000189
Neil Booth4a58aab2000-11-18 12:18:09 +0000190 /* Initialize lexer state. */
Neil Booth93c803682000-10-28 17:59:06 +0000191 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
Zack Weinberg3cb553b2000-08-20 21:36:18 +0000192
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000193 /* Set up static tokens. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000194 pfile->avoid_paste.type = CPP_PADDING;
195 pfile->avoid_paste.val.source = NULL;
196 pfile->eof.type = CPP_EOF;
197 pfile->eof.flags = 0;
Neil Booth93c803682000-10-28 17:59:06 +0000198
Neil Booth5fddcff2001-09-11 07:00:12 +0000199 /* Create a token buffer for the lexer. */
200 _cpp_init_tokenrun (&pfile->base_run, 250);
201 pfile->cur_run = &pfile->base_run;
202 pfile->cur_token = pfile->base_run.base;
Neil Booth5fddcff2001-09-11 07:00:12 +0000203
Kazu Hirata4912a072002-09-14 15:51:45 +0000204 /* Initialize the base context. */
Neil Booth93c803682000-10-28 17:59:06 +0000205 pfile->context = &pfile->base_context;
206 pfile->base_context.macro = 0;
207 pfile->base_context.prev = pfile->base_context.next = 0;
208
Neil Booth8c3b2692001-09-30 10:03:11 +0000209 /* Aligned and unaligned storage. */
210 pfile->a_buff = _cpp_get_buff (pfile, 0);
Neil Boothece54d52001-09-28 09:40:22 +0000211 pfile->u_buff = _cpp_get_buff (pfile, 0);
Neil Booth93c803682000-10-28 17:59:06 +0000212
Neil Booth87ed1092002-04-28 19:42:54 +0000213 /* The expression parser stack. */
214 _cpp_expand_op_stack (pfile);
215
Kazu Hirata4912a072002-09-14 15:51:45 +0000216 /* Initialize the buffer obstack. */
Zack Weinberg43839642003-07-13 17:34:18 +0000217 _obstack_begin (&pfile->buffer_ob, 0, 0,
218 (void *(*) (long)) xmalloc,
219 (void (*) (void *)) free);
Neil Booth2a967f32001-05-20 06:26:45 +0000220
Neil Booth8f9b4002003-07-29 22:26:13 +0000221 _cpp_init_files (pfile);
Neil Boothcf44ea52000-11-28 21:13:35 +0000222
Per Bothnerb4e46ce2003-03-20 16:46:18 +0000223 _cpp_init_hashtable (pfile, table);
224
Neil Boothcf44ea52000-11-28 21:13:35 +0000225 return pfile;
Zack Weinbergf2d5f0c2000-04-14 23:29:45 +0000226}
227
Neil Booth400023a2001-01-14 22:00:20 +0000228/* Free resources used by PFILE. Accessing PFILE after this function
Kazu Hirata8d9afc4e2002-09-16 11:42:00 +0000229 returns leads to undefined behavior. Returns the error count. */
Neil Booth76c3e732002-08-11 22:22:28 +0000230void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000231cpp_destroy (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000232{
Neil Booth93c803682000-10-28 17:59:06 +0000233 cpp_context *context, *contextn;
Neil Booth50410422001-09-15 10:18:03 +0000234 tokenrun *run, *runn;
Neil Booth709e9e52000-08-17 18:01:43 +0000235
Neil Booth87ed1092002-04-28 19:42:54 +0000236 free (pfile->op_stack);
Neil Boothaf0d16c2002-04-22 17:48:02 +0000237
Zack Weinberg38b24ee2000-03-08 20:37:23 +0000238 while (CPP_BUFFER (pfile) != NULL)
Neil Boothef6e9582001-08-04 12:01:59 +0000239 _cpp_pop_buffer (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000240
Neil Booth1a769162002-06-11 05:36:17 +0000241 if (pfile->out.base)
242 free (pfile->out.base);
Neil Booth004cb262002-05-17 20:16:48 +0000243
Neil Booth93c803682000-10-28 17:59:06 +0000244 if (pfile->macro_buffer)
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000245 {
Kaveh R. Ghazifad205f2003-06-16 21:41:10 +0000246 free (pfile->macro_buffer);
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000247 pfile->macro_buffer = NULL;
248 pfile->macro_buffer_len = 0;
249 }
Neil Booth93c803682000-10-28 17:59:06 +0000250
Neil Boothf4ff5a62002-08-12 22:44:30 +0000251 if (pfile->deps)
252 deps_free (pfile->deps);
Neil Booth2a967f32001-05-20 06:26:45 +0000253 obstack_free (&pfile->buffer_ob, 0);
Zack Weinberg49e6c082000-03-04 19:42:04 +0000254
Neil Booth2a967f32001-05-20 06:26:45 +0000255 _cpp_destroy_hashtable (pfile);
Neil Booth8f9b4002003-07-29 22:26:13 +0000256 _cpp_cleanup_files (pfile);
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000257 _cpp_destroy_iconv (pfile);
Neil Booth93c803682000-10-28 17:59:06 +0000258
Neil Booth8c3b2692001-09-30 10:03:11 +0000259 _cpp_free_buff (pfile->a_buff);
Neil Boothece54d52001-09-28 09:40:22 +0000260 _cpp_free_buff (pfile->u_buff);
Neil Boothb8af0ca2001-09-26 17:52:50 +0000261 _cpp_free_buff (pfile->free_buffs);
Neil Booth93c803682000-10-28 17:59:06 +0000262
Neil Booth50410422001-09-15 10:18:03 +0000263 for (run = &pfile->base_run; run; run = runn)
264 {
265 runn = run->next;
266 free (run->base);
267 if (run != &pfile->base_run)
268 free (run);
269 }
270
Neil Booth93c803682000-10-28 17:59:06 +0000271 for (context = pfile->base_context.next; context; context = contextn)
272 {
273 contextn = context->next;
274 free (context);
275 }
Neil Booth400023a2001-01-14 22:00:20 +0000276
Neil Booth400023a2001-01-14 22:00:20 +0000277 free (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000278}
279
Neil Booth93c803682000-10-28 17:59:06 +0000280/* This structure defines one built-in identifier. A node will be
Zack Weinbergf24a1532002-05-18 00:43:13 +0000281 entered in the hash table under the name NAME, with value VALUE.
Zack Weinberg92936ec2000-07-19 20:18:08 +0000282
Zack Weinbergf24a1532002-05-18 00:43:13 +0000283 There are two tables of these. builtin_array holds all the
284 "builtin" macros: these are handled by builtin_macro() in
Gabriel Dos Reisa2566ae2005-01-02 01:32:21 +0000285 macro.c. Builtin is somewhat of a misnomer -- the property of
Zack Weinbergf24a1532002-05-18 00:43:13 +0000286 interest is that these macros require special code to compute their
287 expansions. The value is a "builtin_type" enumerator.
288
289 operator_array holds the C++ named operators. These are keywords
290 which act as aliases for punctuators. In C++, they cannot be
291 altered through #define, and #if recognizes them as operators. In
292 C, these are not entered into the hash table at all (but see
293 <iso646.h>). The value is a token-type enumerator. */
Zack Weinberga9ae4481999-10-29 04:31:14 +0000294struct builtin
295{
Neil Booth562a5c22002-04-21 18:46:42 +0000296 const uchar *name;
Neil Booth93c803682000-10-28 17:59:06 +0000297 unsigned short len;
Zack Weinbergf24a1532002-05-18 00:43:13 +0000298 unsigned short value;
Zack Weinberga9ae4481999-10-29 04:31:14 +0000299};
Zack Weinberga9ae4481999-10-29 04:31:14 +0000300
Zack Weinbergf24a1532002-05-18 00:43:13 +0000301#define B(n, t) { DSC(n), t }
Zack Weinberga9ae4481999-10-29 04:31:14 +0000302static const struct builtin builtin_array[] =
303{
Neil Booth93c803682000-10-28 17:59:06 +0000304 B("__TIME__", BT_TIME),
305 B("__DATE__", BT_DATE),
306 B("__FILE__", BT_FILE),
307 B("__BASE_FILE__", BT_BASE_FILE),
308 B("__LINE__", BT_SPECLINE),
309 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
Neil Booth278c4662002-06-19 05:40:08 +0000310 /* Keep builtins not used for -traditional-cpp at the end, and
311 update init_builtins() if any more are added. */
Neil Booth644edda2001-10-02 12:57:24 +0000312 B("_Pragma", BT_PRAGMA),
Neil Booth618cdda2001-02-25 09:43:03 +0000313 B("__STDC__", BT_STDC),
Zack Weinbergf24a1532002-05-18 00:43:13 +0000314};
Zack Weinberg92936ec2000-07-19 20:18:08 +0000315
Zack Weinbergf24a1532002-05-18 00:43:13 +0000316static const struct builtin operator_array[] =
317{
318 B("and", CPP_AND_AND),
319 B("and_eq", CPP_AND_EQ),
320 B("bitand", CPP_AND),
321 B("bitor", CPP_OR),
322 B("compl", CPP_COMPL),
323 B("not", CPP_NOT),
324 B("not_eq", CPP_NOT_EQ),
325 B("or", CPP_OR_OR),
326 B("or_eq", CPP_OR_EQ),
327 B("xor", CPP_XOR),
328 B("xor_eq", CPP_XOR_EQ)
Zack Weinberga9ae4481999-10-29 04:31:14 +0000329};
Zack Weinberg12cf91f2000-05-04 04:38:01 +0000330#undef B
Zack Weinberga9ae4481999-10-29 04:31:14 +0000331
Neil Booth17645b12002-05-23 18:55:27 +0000332/* Mark the C++ named operators in the hash table. */
333static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000334mark_named_operators (cpp_reader *pfile)
Neil Booth17645b12002-05-23 18:55:27 +0000335{
336 const struct builtin *b;
337
338 for (b = operator_array;
339 b < (operator_array + ARRAY_SIZE (operator_array));
340 b++)
341 {
342 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
343 hp->flags |= NODE_OPERATOR;
Zack Weinberg4977bab2002-12-16 18:23:00 +0000344 hp->is_directive = 0;
345 hp->directive_index = b->value;
Neil Booth17645b12002-05-23 18:55:27 +0000346 }
347}
348
Neil Boothc1bad962003-03-15 12:18:47 +0000349/* Read the builtins table above and enter them, and language-specific
Neil Booth6e270172003-05-11 13:43:36 +0000350 macros, into the hash table. HOSTED is true if this is a hosted
351 environment. */
Neil Boothc1bad962003-03-15 12:18:47 +0000352void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000353cpp_init_builtins (cpp_reader *pfile, int hosted)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000354{
Zack Weinberga9ae4481999-10-29 04:31:14 +0000355 const struct builtin *b;
Neil Booth278c4662002-06-19 05:40:08 +0000356 size_t n = ARRAY_SIZE (builtin_array);
Neil Booth771c4df2000-09-07 20:31:06 +0000357
Neil Booth278c4662002-06-19 05:40:08 +0000358 if (CPP_OPTION (pfile, traditional))
359 n -= 2;
360
361 for(b = builtin_array; b < builtin_array + n; b++)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000362 {
Zack Weinbergf24a1532002-05-18 00:43:13 +0000363 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
364 hp->type = NT_MACRO;
365 hp->flags |= NODE_BUILTIN | NODE_WARN;
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000366 hp->value.builtin = (enum builtin_type) b->value;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000367 }
Neil Boothc740cee2001-02-20 22:52:11 +0000368
369 if (CPP_OPTION (pfile, cplusplus))
Neil Booth3d90d292002-05-04 20:15:00 +0000370 _cpp_define_builtin (pfile, "__cplusplus 1");
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000371 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
372 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000373 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
Neil Boothc740cee2001-02-20 22:52:11 +0000374 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
375 else if (CPP_OPTION (pfile, c99))
376 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
377
Neil Booth6e270172003-05-11 13:43:36 +0000378 if (hosted)
Neil Booth58b5b892003-05-11 15:15:35 +0000379 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
Neil Booth6e270172003-05-11 13:43:36 +0000380 else
Neil Booth58b5b892003-05-11 15:15:35 +0000381 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
Neil Booth6e270172003-05-11 13:43:36 +0000382
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000383 if (CPP_OPTION (pfile, objc))
384 _cpp_define_builtin (pfile, "__OBJC__ 1");
Neil Booth4a58aab2000-11-18 12:18:09 +0000385}
386
Neil Booth2443d4e2002-05-05 17:05:09 +0000387/* Sanity-checks are dependent on command-line options, so it is
388 called as a subroutine of cpp_read_main_file (). */
389#if ENABLE_CHECKING
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000390static void sanity_checks (cpp_reader *);
391static void sanity_checks (cpp_reader *pfile)
Neil Booth2443d4e2002-05-05 17:05:09 +0000392{
393 cppchar_t test = 0;
Neil Boothc9220e32002-05-27 05:51:14 +0000394 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
Neil Booth2443d4e2002-05-05 17:05:09 +0000395
396 /* Sanity checks for assumptions about CPP arithmetic and target
397 type precisions made by cpplib. */
398 test--;
399 if (test < 1)
John David Anglin0527bc42003-11-01 22:56:54 +0000400 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
Neil Booth2443d4e2002-05-05 17:05:09 +0000401
Neil Boothc9220e32002-05-27 05:51:14 +0000402 if (CPP_OPTION (pfile, precision) > max_precision)
John David Anglin0527bc42003-11-01 22:56:54 +0000403 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000404 "preprocessor arithmetic has maximum precision of %lu bits;"
405 " target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000406 (unsigned long) max_precision,
407 (unsigned long) CPP_OPTION (pfile, precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000408
409 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000410 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000411 "CPP arithmetic must be at least as precise as a target int");
412
413 if (CPP_OPTION (pfile, char_precision) < 8)
John David Anglin0527bc42003-11-01 22:56:54 +0000414 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
Neil Booth2443d4e2002-05-05 17:05:09 +0000415
416 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000417 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000418 "target wchar_t is narrower than target char");
419
420 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000421 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000422 "target int is narrower than target char");
423
Neil Boothc9220e32002-05-27 05:51:14 +0000424 /* This is assumed in eval_token() and could be fixed if necessary. */
425 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
John David Anglin0527bc42003-11-01 22:56:54 +0000426 cpp_error (pfile, CPP_DL_ICE,
427 "CPP half-integer narrower than CPP character");
Neil Boothc9220e32002-05-27 05:51:14 +0000428
Neil Booth2443d4e2002-05-05 17:05:09 +0000429 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
John David Anglin0527bc42003-11-01 22:56:54 +0000430 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000431 "CPP on this host cannot handle wide character constants over"
432 " %lu bits, but the target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000433 (unsigned long) BITS_PER_CPPCHAR_T,
434 (unsigned long) CPP_OPTION (pfile, wchar_precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000435}
436#else
437# define sanity_checks(PFILE)
438#endif
439
Neil Boothf5e99452001-11-15 10:01:10 +0000440/* This is called after options have been parsed, and partially
Kazu Hirata59e4e212003-08-19 21:04:38 +0000441 processed. */
Per Bothner4169c322003-08-09 22:14:07 +0000442void
443cpp_post_options (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000444{
Neil Booth2443d4e2002-05-05 17:05:09 +0000445 sanity_checks (pfile);
446
Neil Boothf4ff5a62002-08-12 22:44:30 +0000447 post_options (pfile);
448
Neil Boothc19b12c2003-03-12 21:31:51 +0000449 /* Mark named operators before handling command line macros. */
450 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
451 mark_named_operators (pfile);
Per Bothner4169c322003-08-09 22:14:07 +0000452}
Neil Boothc19b12c2003-03-12 21:31:51 +0000453
Per Bothner4dc299f2003-10-02 07:23:27 +0000454/* Setup for processing input from the file named FNAME, or stdin if
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800455 it is the empty string. Return the original filename
456 on success (e.g. foo.i->foo.c), or NULL on failure. */
457const char *
458cpp_read_main_file (cpp_reader *pfile, const char *fname)
Per Bothner4169c322003-08-09 22:14:07 +0000459{
Neil Boothf4ff5a62002-08-12 22:44:30 +0000460 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
461 {
462 if (!pfile->deps)
463 pfile->deps = deps_init ();
464
465 /* Set the default target (if there is none already). */
466 deps_add_default_target (pfile->deps, fname);
467 }
Neil Booth96302432001-01-07 15:17:07 +0000468
Per Bothner4dc299f2003-10-02 07:23:27 +0000469 pfile->main_file
James E Wilson6568f342005-10-21 10:54:20 -0700470 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
Per Bothner4dc299f2003-10-02 07:23:27 +0000471 if (_cpp_find_failed (pfile->main_file))
Per Bothner3092d0f2004-04-22 18:41:04 -0700472 return NULL;
Neil Boothf5e99452001-11-15 10:01:10 +0000473
Per Bothner4dc299f2003-10-02 07:23:27 +0000474 _cpp_stack_file (pfile, pfile->main_file, false);
475
476 /* For foo.i, read the original filename foo.c now, for the benefit
477 of the front ends. */
478 if (CPP_OPTION (pfile, preprocessed))
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800479 {
480 read_original_filename (pfile);
Per Bothner12f9df42004-02-11 07:29:30 -0800481 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800482 }
483 return fname;
Neil Boothf5e99452001-11-15 10:01:10 +0000484}
485
486/* For preprocessed files, if the first tokens are of the form # NUM.
487 handle the directive so we know the original file name. This will
488 generate file_change callbacks, which the front ends must handle
489 appropriately given their state of initialization. */
490static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000491read_original_filename (cpp_reader *pfile)
Neil Boothf5e99452001-11-15 10:01:10 +0000492{
493 const cpp_token *token, *token1;
494
495 /* Lex ahead; if the first tokens are of the form # NUM, then
496 process the directive, otherwise back up. */
497 token = _cpp_lex_direct (pfile);
498 if (token->type == CPP_HASH)
499 {
500 token1 = _cpp_lex_direct (pfile);
501 _cpp_backup_tokens (pfile, 1);
502
503 /* If it's a #line directive, handle it. */
504 if (token1->type == CPP_NUMBER)
505 {
506 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000507 read_original_directory (pfile);
Neil Boothf5e99452001-11-15 10:01:10 +0000508 return;
509 }
510 }
511
512 /* Backup as if nothing happened. */
513 _cpp_backup_tokens (pfile, 1);
514}
515
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000516/* For preprocessed files, if the tokens following the first filename
517 line is of the form # <line> "/path/name//", handle the
518 directive so we know the original current directory. */
519static void
520read_original_directory (cpp_reader *pfile)
521{
522 const cpp_token *hash, *token;
523
524 /* Lex ahead; if the first tokens are of the form # NUM, then
525 process the directive, otherwise back up. */
526 hash = _cpp_lex_direct (pfile);
527 if (hash->type != CPP_HASH)
528 {
529 _cpp_backup_tokens (pfile, 1);
530 return;
531 }
532
533 token = _cpp_lex_direct (pfile);
534
535 if (token->type != CPP_NUMBER)
536 {
537 _cpp_backup_tokens (pfile, 2);
538 return;
539 }
540
541 token = _cpp_lex_direct (pfile);
542
543 if (token->type != CPP_STRING
544 || ! (token->val.str.len >= 5
545 && token->val.str.text[token->val.str.len-2] == '/'
546 && token->val.str.text[token->val.str.len-3] == '/'))
547 {
548 _cpp_backup_tokens (pfile, 3);
549 return;
550 }
551
552 if (pfile->cb.dir_change)
553 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000554 char *debugdir = (char *) alloca (token->val.str.len - 3);
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000555
556 memcpy (debugdir, (const char *) token->val.str.text + 1,
557 token->val.str.len - 4);
558 debugdir[token->val.str.len - 4] = '\0';
559
560 pfile->cb.dir_change (pfile, debugdir);
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800561 }
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000562}
563
Neil Booth76c3e732002-08-11 22:22:28 +0000564/* This is called at the end of preprocessing. It pops the last
565 buffer and writes dependency output, and returns the number of
566 errors.
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000567
Neil Booth76c3e732002-08-11 22:22:28 +0000568 Maybe it should also reset state, such that you could call
569 cpp_start_read with a new filename to restart processing. */
570int
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000571cpp_finish (cpp_reader *pfile, FILE *deps_stream)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000572{
Neil Bootha69cbaa2002-07-23 22:57:49 +0000573 /* Warn about unused macros before popping the final buffer. */
574 if (CPP_OPTION (pfile, warn_unused_macros))
575 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
576
Gabriel Dos Reisa2566ae2005-01-02 01:32:21 +0000577 /* lex.c leaves the final buffer on the stack. This it so that
Neil Booth7364fdd2001-08-07 20:37:26 +0000578 it returns an unending stream of CPP_EOFs to the client. If we
Joseph Myersa1f300c2001-11-23 02:05:19 +0000579 popped the buffer, we'd dereference a NULL buffer pointer and
Neil Booth7364fdd2001-08-07 20:37:26 +0000580 segfault. It's nice to allow the client to do worry-free excess
581 cpp_get_token calls. */
582 while (pfile->buffer)
583 _cpp_pop_buffer (pfile);
Zack Weinbergc1212d22000-02-06 23:46:18 +0000584
Neil Booth76c3e732002-08-11 22:22:28 +0000585 /* Don't write the deps file if there are errors. */
Neil Boothf4ff5a62002-08-12 22:44:30 +0000586 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
587 && deps_stream && pfile->errors == 0)
Neil Booth76c3e732002-08-11 22:22:28 +0000588 {
589 deps_write (pfile->deps, deps_stream, 72);
590
Neil Boothf4ff5a62002-08-12 22:44:30 +0000591 if (CPP_OPTION (pfile, deps.phony_targets))
Neil Booth76c3e732002-08-11 22:22:28 +0000592 deps_phony_targets (pfile->deps, deps_stream);
593 }
Zack Weinberg3caee4a1999-04-26 16:41:02 +0000594
Zack Weinbergd4506962000-06-28 19:03:08 +0000595 /* Report on headers that could use multiple include guards. */
596 if (CPP_OPTION (pfile, print_include_names))
Zack Weinbergc71f8352000-07-05 05:33:57 +0000597 _cpp_report_missing_guards (pfile);
Neil Booth76c3e732002-08-11 22:22:28 +0000598
599 return pfile->errors;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000600}
601
Neil Boothf4ff5a62002-08-12 22:44:30 +0000602static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000603post_options (cpp_reader *pfile)
Neil Booth96302432001-01-07 15:17:07 +0000604{
605 /* -Wtraditional is not useful in C++ mode. */
606 if (CPP_OPTION (pfile, cplusplus))
607 CPP_OPTION (pfile, warn_traditional) = 0;
608
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000609 /* Permanently disable macro expansion if we are rescanning
Neil Booth43612ff2002-05-18 08:23:20 +0000610 preprocessed text. Read preprocesed source in ISO mode. */
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000611 if (CPP_OPTION (pfile, preprocessed))
Neil Booth43612ff2002-05-18 08:23:20 +0000612 {
613 pfile->state.prevent_expansion = 1;
614 CPP_OPTION (pfile, traditional) = 0;
615 }
616
Neil Bootha8eb6042003-05-04 20:03:55 +0000617 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
618 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
619
Neil Booth43612ff2002-05-18 08:23:20 +0000620 if (CPP_OPTION (pfile, traditional))
Neil Booth26aea072003-04-19 00:22:51 +0000621 {
Neil Bootha09d4742004-07-04 12:57:50 +0000622 CPP_OPTION (pfile, cplusplus_comments) = 0;
623
Neil Booth26aea072003-04-19 00:22:51 +0000624 /* Traditional CPP does not accurately track column information. */
625 CPP_OPTION (pfile, show_column) = 0;
626 CPP_OPTION (pfile, trigraphs) = 0;
627 CPP_OPTION (pfile, warn_trigraphs) = 0;
628 }
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000629}