2005-06-29 Kelley Cook <kcook@gcc.gnu.org>
[official-gcc.git] / libcpp / init.c
blob515e2549adc36e27aaeb44ee2df784303d5e34a6
1 /* CPP Library.
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 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
8 This program is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
11 later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
22 #include "config.h"
23 #include "system.h"
24 #include "cpplib.h"
25 #include "internal.h"
26 #include "mkdeps.h"
27 #include "localedir.h"
29 static void init_library (void);
30 static void mark_named_operators (cpp_reader *);
31 static void read_original_filename (cpp_reader *);
32 static void read_original_directory (cpp_reader *);
33 static void post_options (cpp_reader *);
35 /* If we have designated initializers (GCC >2.7) these tables can be
36 initialized, constant data. Otherwise, they have to be filled in at
37 runtime. */
38 #if HAVE_DESIGNATED_INITIALIZERS
40 #define init_trigraph_map() /* Nothing. */
41 #define TRIGRAPH_MAP \
42 __extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
44 #define END };
45 #define s(p, v) [p] = v,
47 #else
49 #define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
50 static void init_trigraph_map (void) { \
51 unsigned char *x = _cpp_trigraph_map;
53 #define END }
54 #define s(p, v) x[p] = v;
56 #endif
58 TRIGRAPH_MAP
59 s('=', '#') s(')', ']') s('!', '|')
60 s('(', '[') s('\'', '^') s('>', '}')
61 s('/', '\\') s('<', '{') s('-', '~')
62 END
64 #undef s
65 #undef END
66 #undef TRIGRAPH_MAP
68 /* A set of booleans indicating what CPP features each source language
69 requires. */
70 struct lang_flags
72 char c99;
73 char cplusplus;
74 char extended_numbers;
75 char std;
76 char cplusplus_comments;
77 char digraphs;
80 static const struct lang_flags lang_defaults[] =
81 { /* c99 c++ xnum std // digr */
82 /* GNUC89 */ { 0, 0, 1, 0, 1, 1 },
83 /* GNUC99 */ { 1, 0, 1, 0, 1, 1 },
84 /* STDC89 */ { 0, 0, 0, 1, 0, 0 },
85 /* STDC94 */ { 0, 0, 0, 1, 0, 1 },
86 /* STDC99 */ { 1, 0, 1, 1, 1, 1 },
87 /* GNUCXX */ { 0, 1, 1, 0, 1, 1 },
88 /* CXX98 */ { 0, 1, 1, 1, 1, 1 },
89 /* ASM */ { 0, 0, 1, 0, 1, 0 }
92 /* Sets internal flags correctly for a given language. */
93 void
94 cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
96 const struct lang_flags *l = &lang_defaults[(int) lang];
98 CPP_OPTION (pfile, lang) = lang;
100 CPP_OPTION (pfile, c99) = l->c99;
101 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
102 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
103 CPP_OPTION (pfile, std) = l->std;
104 CPP_OPTION (pfile, trigraphs) = l->std;
105 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
106 CPP_OPTION (pfile, digraphs) = l->digraphs;
109 /* Initialize library global state. */
110 static void
111 init_library (void)
113 static int initialized = 0;
115 if (! initialized)
117 initialized = 1;
119 /* Set up the trigraph map. This doesn't need to do anything if
120 we were compiled with a compiler that supports C99 designated
121 initializers. */
122 init_trigraph_map ();
124 #ifdef ENABLE_NLS
125 (void) bindtextdomain (PACKAGE, LOCALEDIR);
126 #endif
130 /* Initialize a cpp_reader structure. */
131 cpp_reader *
132 cpp_create_reader (enum c_lang lang, hash_table *table,
133 struct line_maps *line_table)
135 cpp_reader *pfile;
137 /* Initialize this instance of the library if it hasn't been already. */
138 init_library ();
140 pfile = XCNEW (cpp_reader);
142 cpp_set_lang (pfile, lang);
143 CPP_OPTION (pfile, warn_multichar) = 1;
144 CPP_OPTION (pfile, discard_comments) = 1;
145 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
146 CPP_OPTION (pfile, show_column) = 1;
147 CPP_OPTION (pfile, tabstop) = 8;
148 CPP_OPTION (pfile, operator_names) = 1;
149 CPP_OPTION (pfile, warn_trigraphs) = 2;
150 CPP_OPTION (pfile, warn_endif_labels) = 1;
151 CPP_OPTION (pfile, warn_deprecated) = 1;
152 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
153 CPP_OPTION (pfile, dollars_in_ident) = 1;
154 CPP_OPTION (pfile, warn_dollars) = 1;
155 CPP_OPTION (pfile, warn_variadic_macros) = 1;
156 CPP_OPTION (pfile, warn_normalize) = normalized_C;
158 /* Default CPP arithmetic to something sensible for the host for the
159 benefit of dumb users like fix-header. */
160 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
161 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
162 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
163 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
164 CPP_OPTION (pfile, unsigned_char) = 0;
165 CPP_OPTION (pfile, unsigned_wchar) = 1;
166 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
168 /* Default to no charset conversion. */
169 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
170 CPP_OPTION (pfile, wide_charset) = 0;
172 /* Default the input character set to UTF-8. */
173 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
175 /* A fake empty "directory" used as the starting point for files
176 looked up without a search path. Name cannot be '/' because we
177 don't want to prepend anything at all to filenames using it. All
178 other entries are correct zero-initialized. */
179 pfile->no_search_path.name = (char *) "";
181 /* Initialize the line map. */
182 pfile->line_table = line_table;
184 /* Initialize lexer state. */
185 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
187 /* Set up static tokens. */
188 pfile->avoid_paste.type = CPP_PADDING;
189 pfile->avoid_paste.val.source = NULL;
190 pfile->eof.type = CPP_EOF;
191 pfile->eof.flags = 0;
193 /* Create a token buffer for the lexer. */
194 _cpp_init_tokenrun (&pfile->base_run, 250);
195 pfile->cur_run = &pfile->base_run;
196 pfile->cur_token = pfile->base_run.base;
198 /* Initialize the base context. */
199 pfile->context = &pfile->base_context;
200 pfile->base_context.macro = 0;
201 pfile->base_context.prev = pfile->base_context.next = 0;
203 /* Aligned and unaligned storage. */
204 pfile->a_buff = _cpp_get_buff (pfile, 0);
205 pfile->u_buff = _cpp_get_buff (pfile, 0);
207 /* The expression parser stack. */
208 _cpp_expand_op_stack (pfile);
210 /* Initialize the buffer obstack. */
211 _obstack_begin (&pfile->buffer_ob, 0, 0,
212 (void *(*) (long)) xmalloc,
213 (void (*) (void *)) free);
215 _cpp_init_files (pfile);
217 _cpp_init_hashtable (pfile, table);
219 return pfile;
222 /* Free resources used by PFILE. Accessing PFILE after this function
223 returns leads to undefined behavior. Returns the error count. */
224 void
225 cpp_destroy (cpp_reader *pfile)
227 cpp_context *context, *contextn;
228 tokenrun *run, *runn;
230 free (pfile->op_stack);
232 while (CPP_BUFFER (pfile) != NULL)
233 _cpp_pop_buffer (pfile);
235 if (pfile->out.base)
236 free (pfile->out.base);
238 if (pfile->macro_buffer)
240 free (pfile->macro_buffer);
241 pfile->macro_buffer = NULL;
242 pfile->macro_buffer_len = 0;
245 if (pfile->deps)
246 deps_free (pfile->deps);
247 obstack_free (&pfile->buffer_ob, 0);
249 _cpp_destroy_hashtable (pfile);
250 _cpp_cleanup_files (pfile);
251 _cpp_destroy_iconv (pfile);
253 _cpp_free_buff (pfile->a_buff);
254 _cpp_free_buff (pfile->u_buff);
255 _cpp_free_buff (pfile->free_buffs);
257 for (run = &pfile->base_run; run; run = runn)
259 runn = run->next;
260 free (run->base);
261 if (run != &pfile->base_run)
262 free (run);
265 for (context = pfile->base_context.next; context; context = contextn)
267 contextn = context->next;
268 free (context);
271 free (pfile);
274 /* This structure defines one built-in identifier. A node will be
275 entered in the hash table under the name NAME, with value VALUE.
277 There are two tables of these. builtin_array holds all the
278 "builtin" macros: these are handled by builtin_macro() in
279 macro.c. Builtin is somewhat of a misnomer -- the property of
280 interest is that these macros require special code to compute their
281 expansions. The value is a "builtin_type" enumerator.
283 operator_array holds the C++ named operators. These are keywords
284 which act as aliases for punctuators. In C++, they cannot be
285 altered through #define, and #if recognizes them as operators. In
286 C, these are not entered into the hash table at all (but see
287 <iso646.h>). The value is a token-type enumerator. */
288 struct builtin
290 const uchar *name;
291 unsigned short len;
292 unsigned short value;
295 #define B(n, t) { DSC(n), t }
296 static const struct builtin builtin_array[] =
298 B("__TIME__", BT_TIME),
299 B("__DATE__", BT_DATE),
300 B("__FILE__", BT_FILE),
301 B("__BASE_FILE__", BT_BASE_FILE),
302 B("__LINE__", BT_SPECLINE),
303 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
304 /* Keep builtins not used for -traditional-cpp at the end, and
305 update init_builtins() if any more are added. */
306 B("_Pragma", BT_PRAGMA),
307 B("__STDC__", BT_STDC),
310 static const struct builtin operator_array[] =
312 B("and", CPP_AND_AND),
313 B("and_eq", CPP_AND_EQ),
314 B("bitand", CPP_AND),
315 B("bitor", CPP_OR),
316 B("compl", CPP_COMPL),
317 B("not", CPP_NOT),
318 B("not_eq", CPP_NOT_EQ),
319 B("or", CPP_OR_OR),
320 B("or_eq", CPP_OR_EQ),
321 B("xor", CPP_XOR),
322 B("xor_eq", CPP_XOR_EQ)
324 #undef B
326 /* Mark the C++ named operators in the hash table. */
327 static void
328 mark_named_operators (cpp_reader *pfile)
330 const struct builtin *b;
332 for (b = operator_array;
333 b < (operator_array + ARRAY_SIZE (operator_array));
334 b++)
336 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
337 hp->flags |= NODE_OPERATOR;
338 hp->is_directive = 0;
339 hp->directive_index = b->value;
343 /* Read the builtins table above and enter them, and language-specific
344 macros, into the hash table. HOSTED is true if this is a hosted
345 environment. */
346 void
347 cpp_init_builtins (cpp_reader *pfile, int hosted)
349 const struct builtin *b;
350 size_t n = ARRAY_SIZE (builtin_array);
352 if (CPP_OPTION (pfile, traditional))
353 n -= 2;
355 for(b = builtin_array; b < builtin_array + n; b++)
357 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
358 hp->type = NT_MACRO;
359 hp->flags |= NODE_BUILTIN | NODE_WARN;
360 hp->value.builtin = (enum builtin_type) b->value;
363 if (CPP_OPTION (pfile, cplusplus))
364 _cpp_define_builtin (pfile, "__cplusplus 1");
365 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
366 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
367 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
368 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
369 else if (CPP_OPTION (pfile, c99))
370 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
372 if (hosted)
373 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
374 else
375 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
377 if (CPP_OPTION (pfile, objc))
378 _cpp_define_builtin (pfile, "__OBJC__ 1");
381 /* Sanity-checks are dependent on command-line options, so it is
382 called as a subroutine of cpp_read_main_file (). */
383 #if ENABLE_CHECKING
384 static void sanity_checks (cpp_reader *);
385 static void sanity_checks (cpp_reader *pfile)
387 cppchar_t test = 0;
388 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
390 /* Sanity checks for assumptions about CPP arithmetic and target
391 type precisions made by cpplib. */
392 test--;
393 if (test < 1)
394 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
396 if (CPP_OPTION (pfile, precision) > max_precision)
397 cpp_error (pfile, CPP_DL_ICE,
398 "preprocessor arithmetic has maximum precision of %lu bits;"
399 " target requires %lu bits",
400 (unsigned long) max_precision,
401 (unsigned long) CPP_OPTION (pfile, precision));
403 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
404 cpp_error (pfile, CPP_DL_ICE,
405 "CPP arithmetic must be at least as precise as a target int");
407 if (CPP_OPTION (pfile, char_precision) < 8)
408 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
410 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
411 cpp_error (pfile, CPP_DL_ICE,
412 "target wchar_t is narrower than target char");
414 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
415 cpp_error (pfile, CPP_DL_ICE,
416 "target int is narrower than target char");
418 /* This is assumed in eval_token() and could be fixed if necessary. */
419 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
420 cpp_error (pfile, CPP_DL_ICE,
421 "CPP half-integer narrower than CPP character");
423 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
424 cpp_error (pfile, CPP_DL_ICE,
425 "CPP on this host cannot handle wide character constants over"
426 " %lu bits, but the target requires %lu bits",
427 (unsigned long) BITS_PER_CPPCHAR_T,
428 (unsigned long) CPP_OPTION (pfile, wchar_precision));
430 #else
431 # define sanity_checks(PFILE)
432 #endif
434 /* This is called after options have been parsed, and partially
435 processed. */
436 void
437 cpp_post_options (cpp_reader *pfile)
439 sanity_checks (pfile);
441 post_options (pfile);
443 /* Mark named operators before handling command line macros. */
444 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
445 mark_named_operators (pfile);
448 /* Setup for processing input from the file named FNAME, or stdin if
449 it is the empty string. Return the original filename
450 on success (e.g. foo.i->foo.c), or NULL on failure. */
451 const char *
452 cpp_read_main_file (cpp_reader *pfile, const char *fname)
454 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
456 if (!pfile->deps)
457 pfile->deps = deps_init ();
459 /* Set the default target (if there is none already). */
460 deps_add_default_target (pfile->deps, fname);
463 pfile->main_file
464 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false);
465 if (_cpp_find_failed (pfile->main_file))
466 return NULL;
468 _cpp_stack_file (pfile, pfile->main_file, false);
470 /* For foo.i, read the original filename foo.c now, for the benefit
471 of the front ends. */
472 if (CPP_OPTION (pfile, preprocessed))
474 read_original_filename (pfile);
475 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
477 return fname;
480 /* For preprocessed files, if the first tokens are of the form # NUM.
481 handle the directive so we know the original file name. This will
482 generate file_change callbacks, which the front ends must handle
483 appropriately given their state of initialization. */
484 static void
485 read_original_filename (cpp_reader *pfile)
487 const cpp_token *token, *token1;
489 /* Lex ahead; if the first tokens are of the form # NUM, then
490 process the directive, otherwise back up. */
491 token = _cpp_lex_direct (pfile);
492 if (token->type == CPP_HASH)
494 token1 = _cpp_lex_direct (pfile);
495 _cpp_backup_tokens (pfile, 1);
497 /* If it's a #line directive, handle it. */
498 if (token1->type == CPP_NUMBER)
500 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
501 read_original_directory (pfile);
502 return;
506 /* Backup as if nothing happened. */
507 _cpp_backup_tokens (pfile, 1);
510 /* For preprocessed files, if the tokens following the first filename
511 line is of the form # <line> "/path/name//", handle the
512 directive so we know the original current directory. */
513 static void
514 read_original_directory (cpp_reader *pfile)
516 const cpp_token *hash, *token;
518 /* Lex ahead; if the first tokens are of the form # NUM, then
519 process the directive, otherwise back up. */
520 hash = _cpp_lex_direct (pfile);
521 if (hash->type != CPP_HASH)
523 _cpp_backup_tokens (pfile, 1);
524 return;
527 token = _cpp_lex_direct (pfile);
529 if (token->type != CPP_NUMBER)
531 _cpp_backup_tokens (pfile, 2);
532 return;
535 token = _cpp_lex_direct (pfile);
537 if (token->type != CPP_STRING
538 || ! (token->val.str.len >= 5
539 && token->val.str.text[token->val.str.len-2] == '/'
540 && token->val.str.text[token->val.str.len-3] == '/'))
542 _cpp_backup_tokens (pfile, 3);
543 return;
546 if (pfile->cb.dir_change)
548 char *debugdir = (char *) alloca (token->val.str.len - 3);
550 memcpy (debugdir, (const char *) token->val.str.text + 1,
551 token->val.str.len - 4);
552 debugdir[token->val.str.len - 4] = '\0';
554 pfile->cb.dir_change (pfile, debugdir);
558 /* This is called at the end of preprocessing. It pops the last
559 buffer and writes dependency output, and returns the number of
560 errors.
562 Maybe it should also reset state, such that you could call
563 cpp_start_read with a new filename to restart processing. */
565 cpp_finish (cpp_reader *pfile, FILE *deps_stream)
567 /* Warn about unused macros before popping the final buffer. */
568 if (CPP_OPTION (pfile, warn_unused_macros))
569 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
571 /* lex.c leaves the final buffer on the stack. This it so that
572 it returns an unending stream of CPP_EOFs to the client. If we
573 popped the buffer, we'd dereference a NULL buffer pointer and
574 segfault. It's nice to allow the client to do worry-free excess
575 cpp_get_token calls. */
576 while (pfile->buffer)
577 _cpp_pop_buffer (pfile);
579 /* Don't write the deps file if there are errors. */
580 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
581 && deps_stream && pfile->errors == 0)
583 deps_write (pfile->deps, deps_stream, 72);
585 if (CPP_OPTION (pfile, deps.phony_targets))
586 deps_phony_targets (pfile->deps, deps_stream);
589 /* Report on headers that could use multiple include guards. */
590 if (CPP_OPTION (pfile, print_include_names))
591 _cpp_report_missing_guards (pfile);
593 return pfile->errors;
596 static void
597 post_options (cpp_reader *pfile)
599 /* -Wtraditional is not useful in C++ mode. */
600 if (CPP_OPTION (pfile, cplusplus))
601 CPP_OPTION (pfile, warn_traditional) = 0;
603 /* Permanently disable macro expansion if we are rescanning
604 preprocessed text. Read preprocesed source in ISO mode. */
605 if (CPP_OPTION (pfile, preprocessed))
607 pfile->state.prevent_expansion = 1;
608 CPP_OPTION (pfile, traditional) = 0;
611 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
612 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
614 if (CPP_OPTION (pfile, traditional))
616 CPP_OPTION (pfile, cplusplus_comments) = 0;
618 /* Traditional CPP does not accurately track column information. */
619 CPP_OPTION (pfile, show_column) = 0;
620 CPP_OPTION (pfile, trigraphs) = 0;
621 CPP_OPTION (pfile, warn_trigraphs) = 0;