]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/init.c
files.c (pchf_adder): Remove.
[thirdparty/gcc.git] / libcpp / init.c
CommitLineData
5538ada6 1/* CPP Library.
5e7b4e25 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
d9221e01 3 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5538ada6
ZW
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
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
5538ada6
ZW
22#include "config.h"
23#include "system.h"
6de1e2a9 24#include "cpplib.h"
4f4e53dd 25#include "internal.h"
49e6c08e 26#include "mkdeps.h"
018a4785 27#include "localedir.h"
88ae23e7 28
6cf87ca4
ZW
29static void init_library (void);
30static void mark_named_operators (cpp_reader *);
31static void read_original_filename (cpp_reader *);
b20d9f0c 32static void read_original_directory (cpp_reader *);
6cf87ca4 33static void post_options (cpp_reader *);
6de1e2a9 34
61d0346d
NB
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
12cf91fe 37 runtime. */
61d0346d 38#if HAVE_DESIGNATED_INITIALIZERS
a9ae4483 39
4a58aab6 40#define init_trigraph_map() /* Nothing. */
61d0346d 41#define TRIGRAPH_MAP \
562a5c27 42__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
61d0346d 43
a9ae4483 44#define END };
455d2586 45#define s(p, v) [p] = v,
61d0346d 46
a9ae4483 47#else
61d0346d 48
562a5c27 49#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
6cf87ca4 50 static void init_trigraph_map (void) { \
61d0346d
NB
51 unsigned char *x = _cpp_trigraph_map;
52
ae79697b 53#define END }
455d2586 54#define s(p, v) x[p] = v;
61d0346d 55
a9ae4483 56#endif
6de1e2a9 57
61d0346d
NB
58TRIGRAPH_MAP
59 s('=', '#') s(')', ']') s('!', '|')
60 s('(', '[') s('\'', '^') s('>', '}')
61 s('/', '\\') s('<', '{') s('-', '~')
62END
63
a9ae4483 64#undef s
455d2586 65#undef END
61d0346d 66#undef TRIGRAPH_MAP
6de1e2a9 67
5d8ebbd8
NB
68/* A set of booleans indicating what CPP features each source language
69 requires. */
a01eb545
ZW
70struct lang_flags
71{
72 char c99;
a01eb545
ZW
73 char cplusplus;
74 char extended_numbers;
58551c23 75 char std;
a01eb545
ZW
76 char cplusplus_comments;
77 char digraphs;
78};
79
a01eb545 80static const struct lang_flags lang_defaults[] =
b1822ccc
NB
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 }
a01eb545
ZW
90};
91
5d8ebbd8 92/* Sets internal flags correctly for a given language. */
f749a36b 93void
6cf87ca4 94cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
dd07b884 95{
a01eb545 96 const struct lang_flags *l = &lang_defaults[(int) lang];
df383483 97
bdb05a7b 98 CPP_OPTION (pfile, lang) = lang;
dd07b884 99
a01eb545 100 CPP_OPTION (pfile, c99) = l->c99;
a01eb545
ZW
101 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
102 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
58551c23
NB
103 CPP_OPTION (pfile, std) = l->std;
104 CPP_OPTION (pfile, trigraphs) = l->std;
a01eb545
ZW
105 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
106 CPP_OPTION (pfile, digraphs) = l->digraphs;
dd07b884
NB
107}
108
c1bad961 109/* Initialize library global state. */
cf44ea52 110static void
6cf87ca4 111init_library (void)
cf44ea52 112{
7ca3d2b1
NB
113 static int initialized = 0;
114
115 if (! initialized)
116 {
117 initialized = 1;
118
7ca3d2b1
NB
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 ();
4f4e53dd
PB
123
124#ifdef ENABLE_NLS
85eac2a0 125 (void) bindtextdomain (PACKAGE, LOCALEDIR);
4f4e53dd 126#endif
7ca3d2b1 127 }
cf44ea52
NB
128}
129
ec5c56db 130/* Initialize a cpp_reader structure. */
cf44ea52 131cpp_reader *
50f59cd7
PB
132cpp_create_reader (enum c_lang lang, hash_table *table,
133 struct line_maps *line_table)
6de1e2a9 134{
7ca3d2b1 135 cpp_reader *pfile;
93c80368 136
4912a07c 137 /* Initialize this instance of the library if it hasn't been already. */
674c3b40 138 init_library ();
7ca3d2b1 139
703ad42b 140 pfile = xcalloc (1, sizeof (cpp_reader));
93c80368 141
f749a36b 142 cpp_set_lang (pfile, lang);
a5a49440 143 CPP_OPTION (pfile, warn_multichar) = 1;
ae79697b 144 CPP_OPTION (pfile, discard_comments) = 1;
477cdac7 145 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
ae79697b 146 CPP_OPTION (pfile, show_column) = 1;
6ab3e7dd 147 CPP_OPTION (pfile, tabstop) = 8;
be768055 148 CPP_OPTION (pfile, operator_names) = 1;
a8eb6044 149 CPP_OPTION (pfile, warn_trigraphs) = 2;
909de5da 150 CPP_OPTION (pfile, warn_endif_labels) = 1;
9fbd3e41 151 CPP_OPTION (pfile, warn_deprecated) = 1;
f4ff5a69 152 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
b1822ccc 153 CPP_OPTION (pfile, dollars_in_ident) = 1;
78b8811a 154 CPP_OPTION (pfile, warn_dollars) = 1;
e5b79219 155 CPP_OPTION (pfile, warn_variadic_macros) = 1;
ae79697b 156
2443d4e1
NB
157 /* Default CPP arithmetic to something sensible for the host for the
158 benefit of dumb users like fix-header. */
c9220e3a 159 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
2443d4e1
NB
160 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
161 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
162 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
2a1dc0d8 163 CPP_OPTION (pfile, unsigned_char) = 0;
44a147ad 164 CPP_OPTION (pfile, unsigned_wchar) = 1;
e6cc3a24
ZW
165 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
166
167 /* Default to no charset conversion. */
16dd5cfe 168 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
e6cc3a24 169 CPP_OPTION (pfile, wide_charset) = 0;
4268e8bb 170
16dd5cfe
EC
171 /* Default the input character set to UTF-8. */
172 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
cf551fba 173
8f9b4009
NB
174 /* A fake empty "directory" used as the starting point for files
175 looked up without a search path. Name cannot be '/' because we
176 don't want to prepend anything at all to filenames using it. All
177 other entries are correct zero-initialized. */
178 pfile->no_search_path.name = (char *) "";
179
500bee0a 180 /* Initialize the line map. */
50f59cd7 181 pfile->line_table = line_table;
d82fc108 182
4a58aab6 183 /* Initialize lexer state. */
93c80368
NB
184 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
185
4ed5bcfb 186 /* Set up static tokens. */
4ed5bcfb
NB
187 pfile->avoid_paste.type = CPP_PADDING;
188 pfile->avoid_paste.val.source = NULL;
189 pfile->eof.type = CPP_EOF;
190 pfile->eof.flags = 0;
93c80368 191
5fddcffc
NB
192 /* Create a token buffer for the lexer. */
193 _cpp_init_tokenrun (&pfile->base_run, 250);
194 pfile->cur_run = &pfile->base_run;
195 pfile->cur_token = pfile->base_run.base;
5fddcffc 196
4912a07c 197 /* Initialize the base context. */
93c80368
NB
198 pfile->context = &pfile->base_context;
199 pfile->base_context.macro = 0;
200 pfile->base_context.prev = pfile->base_context.next = 0;
201
8c3b2693
NB
202 /* Aligned and unaligned storage. */
203 pfile->a_buff = _cpp_get_buff (pfile, 0);
ece54d54 204 pfile->u_buff = _cpp_get_buff (pfile, 0);
93c80368 205
87ed109f
NB
206 /* The expression parser stack. */
207 _cpp_expand_op_stack (pfile);
208
4912a07c 209 /* Initialize the buffer obstack. */
43839642
ZW
210 _obstack_begin (&pfile->buffer_ob, 0, 0,
211 (void *(*) (long)) xmalloc,
212 (void (*) (void *)) free);
2a967f3d 213
8f9b4009 214 _cpp_init_files (pfile);
cf44ea52 215
b4e46cea
PB
216 _cpp_init_hashtable (pfile, table);
217
cf44ea52 218 return pfile;
f2d5f0cc
ZW
219}
220
400023a3 221/* Free resources used by PFILE. Accessing PFILE after this function
8d9afc4e 222 returns leads to undefined behavior. Returns the error count. */
76c3e73e 223void
6cf87ca4 224cpp_destroy (cpp_reader *pfile)
6de1e2a9 225{
93c80368 226 cpp_context *context, *contextn;
50410426 227 tokenrun *run, *runn;
709e9e50 228
87ed109f 229 free (pfile->op_stack);
af0d16cd 230
38b24ee2 231 while (CPP_BUFFER (pfile) != NULL)
ef6e958a 232 _cpp_pop_buffer (pfile);
6de1e2a9 233
1a76916c
NB
234 if (pfile->out.base)
235 free (pfile->out.base);
004cb263 236
93c80368 237 if (pfile->macro_buffer)
4b49c365 238 {
fad205ff 239 free (pfile->macro_buffer);
4b49c365
AO
240 pfile->macro_buffer = NULL;
241 pfile->macro_buffer_len = 0;
242 }
93c80368 243
f4ff5a69
NB
244 if (pfile->deps)
245 deps_free (pfile->deps);
2a967f3d 246 obstack_free (&pfile->buffer_ob, 0);
49e6c08e 247
2a967f3d 248 _cpp_destroy_hashtable (pfile);
8f9b4009 249 _cpp_cleanup_files (pfile);
e6cc3a24 250 _cpp_destroy_iconv (pfile);
709e9e50 251
8c3b2693 252 _cpp_free_buff (pfile->a_buff);
ece54d54 253 _cpp_free_buff (pfile->u_buff);
b8af0ca5 254 _cpp_free_buff (pfile->free_buffs);
93c80368 255
50410426
NB
256 for (run = &pfile->base_run; run; run = runn)
257 {
258 runn = run->next;
259 free (run->base);
260 if (run != &pfile->base_run)
261 free (run);
262 }
263
93c80368
NB
264 for (context = pfile->base_context.next; context; context = contextn)
265 {
266 contextn = context->next;
267 free (context);
268 }
400023a3 269
400023a3 270 free (pfile);
6de1e2a9
ZW
271}
272
93c80368 273/* This structure defines one built-in identifier. A node will be
f24a153a
ZW
274 entered in the hash table under the name NAME, with value VALUE.
275
276 There are two tables of these. builtin_array holds all the
277 "builtin" macros: these are handled by builtin_macro() in
a2566ae9 278 macro.c. Builtin is somewhat of a misnomer -- the property of
f24a153a
ZW
279 interest is that these macros require special code to compute their
280 expansions. The value is a "builtin_type" enumerator.
281
282 operator_array holds the C++ named operators. These are keywords
283 which act as aliases for punctuators. In C++, they cannot be
284 altered through #define, and #if recognizes them as operators. In
285 C, these are not entered into the hash table at all (but see
286 <iso646.h>). The value is a token-type enumerator. */
a9ae4483
ZW
287struct builtin
288{
562a5c27 289 const uchar *name;
93c80368 290 unsigned short len;
f24a153a 291 unsigned short value;
a9ae4483 292};
93c80368 293
f24a153a 294#define B(n, t) { DSC(n), t }
a9ae4483 295static const struct builtin builtin_array[] =
6de1e2a9 296{
93c80368
NB
297 B("__TIME__", BT_TIME),
298 B("__DATE__", BT_DATE),
299 B("__FILE__", BT_FILE),
300 B("__BASE_FILE__", BT_BASE_FILE),
301 B("__LINE__", BT_SPECLINE),
302 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
278c4662
NB
303 /* Keep builtins not used for -traditional-cpp at the end, and
304 update init_builtins() if any more are added. */
644eddaa 305 B("_Pragma", BT_PRAGMA),
618cdda7 306 B("__STDC__", BT_STDC),
f24a153a 307};
92936ecf 308
f24a153a
ZW
309static const struct builtin operator_array[] =
310{
311 B("and", CPP_AND_AND),
312 B("and_eq", CPP_AND_EQ),
313 B("bitand", CPP_AND),
314 B("bitor", CPP_OR),
315 B("compl", CPP_COMPL),
316 B("not", CPP_NOT),
317 B("not_eq", CPP_NOT_EQ),
318 B("or", CPP_OR_OR),
319 B("or_eq", CPP_OR_EQ),
320 B("xor", CPP_XOR),
321 B("xor_eq", CPP_XOR_EQ)
a9ae4483 322};
12cf91fe 323#undef B
a9ae4483 324
17645b15
NB
325/* Mark the C++ named operators in the hash table. */
326static void
6cf87ca4 327mark_named_operators (cpp_reader *pfile)
17645b15
NB
328{
329 const struct builtin *b;
330
331 for (b = operator_array;
332 b < (operator_array + ARRAY_SIZE (operator_array));
333 b++)
334 {
335 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
336 hp->flags |= NODE_OPERATOR;
4977bab6
ZW
337 hp->is_directive = 0;
338 hp->directive_index = b->value;
17645b15
NB
339 }
340}
341
c1bad961 342/* Read the builtins table above and enter them, and language-specific
6e270179
NB
343 macros, into the hash table. HOSTED is true if this is a hosted
344 environment. */
c1bad961 345void
6cf87ca4 346cpp_init_builtins (cpp_reader *pfile, int hosted)
a9ae4483 347{
a9ae4483 348 const struct builtin *b;
278c4662 349 size_t n = ARRAY_SIZE (builtin_array);
771c4df3 350
278c4662
NB
351 if (CPP_OPTION (pfile, traditional))
352 n -= 2;
353
354 for(b = builtin_array; b < builtin_array + n; b++)
6de1e2a9 355 {
f24a153a
ZW
356 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
357 hp->type = NT_MACRO;
358 hp->flags |= NODE_BUILTIN | NODE_WARN;
359 hp->value.builtin = b->value;
6de1e2a9 360 }
c740cee2
NB
361
362 if (CPP_OPTION (pfile, cplusplus))
3d90d290 363 _cpp_define_builtin (pfile, "__cplusplus 1");
2a1dc0d8
ZW
364 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
365 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
0f7866e7 366 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
c740cee2
NB
367 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
368 else if (CPP_OPTION (pfile, c99))
369 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
370
6e270179 371 if (hosted)
58b5b894 372 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
6e270179 373 else
58b5b894 374 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
6e270179 375
0f7866e7
ZL
376 if (CPP_OPTION (pfile, objc))
377 _cpp_define_builtin (pfile, "__OBJC__ 1");
4a58aab6
NB
378}
379
2443d4e1
NB
380/* Sanity-checks are dependent on command-line options, so it is
381 called as a subroutine of cpp_read_main_file (). */
382#if ENABLE_CHECKING
6cf87ca4
ZW
383static void sanity_checks (cpp_reader *);
384static void sanity_checks (cpp_reader *pfile)
2443d4e1
NB
385{
386 cppchar_t test = 0;
c9220e3a 387 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
2443d4e1
NB
388
389 /* Sanity checks for assumptions about CPP arithmetic and target
390 type precisions made by cpplib. */
391 test--;
392 if (test < 1)
0527bc4e 393 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
2443d4e1 394
c9220e3a 395 if (CPP_OPTION (pfile, precision) > max_precision)
0527bc4e 396 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
397 "preprocessor arithmetic has maximum precision of %lu bits;"
398 " target requires %lu bits",
c9220e3a
NB
399 (unsigned long) max_precision,
400 (unsigned long) CPP_OPTION (pfile, precision));
2443d4e1
NB
401
402 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
0527bc4e 403 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
404 "CPP arithmetic must be at least as precise as a target int");
405
406 if (CPP_OPTION (pfile, char_precision) < 8)
0527bc4e 407 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
2443d4e1
NB
408
409 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 410 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
411 "target wchar_t is narrower than target char");
412
413 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 414 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
415 "target int is narrower than target char");
416
c9220e3a
NB
417 /* This is assumed in eval_token() and could be fixed if necessary. */
418 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
0527bc4e
JDA
419 cpp_error (pfile, CPP_DL_ICE,
420 "CPP half-integer narrower than CPP character");
c9220e3a 421
2443d4e1 422 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
0527bc4e 423 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
424 "CPP on this host cannot handle wide character constants over"
425 " %lu bits, but the target requires %lu bits",
c9220e3a
NB
426 (unsigned long) BITS_PER_CPPCHAR_T,
427 (unsigned long) CPP_OPTION (pfile, wchar_precision));
2443d4e1
NB
428}
429#else
430# define sanity_checks(PFILE)
431#endif
432
f5e99456 433/* This is called after options have been parsed, and partially
59e4e217 434 processed. */
4169c321
PB
435void
436cpp_post_options (cpp_reader *pfile)
6de1e2a9 437{
2443d4e1
NB
438 sanity_checks (pfile);
439
f4ff5a69
NB
440 post_options (pfile);
441
c19b12cb
NB
442 /* Mark named operators before handling command line macros. */
443 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
444 mark_named_operators (pfile);
4169c321 445}
c19b12cb 446
4dc299fb 447/* Setup for processing input from the file named FNAME, or stdin if
8e9ea4d7
PB
448 it is the empty string. Return the original filename
449 on success (e.g. foo.i->foo.c), or NULL on failure. */
450const char *
451cpp_read_main_file (cpp_reader *pfile, const char *fname)
4169c321 452{
f4ff5a69
NB
453 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
454 {
455 if (!pfile->deps)
456 pfile->deps = deps_init ();
457
458 /* Set the default target (if there is none already). */
459 deps_add_default_target (pfile->deps, fname);
460 }
96302433 461
4dc299fb
PB
462 pfile->main_file
463 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false);
464 if (_cpp_find_failed (pfile->main_file))
3092d0fc 465 return NULL;
f5e99456 466
4dc299fb
PB
467 _cpp_stack_file (pfile, pfile->main_file, false);
468
469 /* For foo.i, read the original filename foo.c now, for the benefit
470 of the front ends. */
471 if (CPP_OPTION (pfile, preprocessed))
8e9ea4d7
PB
472 {
473 read_original_filename (pfile);
12f9df4e 474 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
8e9ea4d7
PB
475 }
476 return fname;
f5e99456
NB
477}
478
479/* For preprocessed files, if the first tokens are of the form # NUM.
480 handle the directive so we know the original file name. This will
481 generate file_change callbacks, which the front ends must handle
482 appropriately given their state of initialization. */
483static void
6cf87ca4 484read_original_filename (cpp_reader *pfile)
f5e99456
NB
485{
486 const cpp_token *token, *token1;
487
488 /* Lex ahead; if the first tokens are of the form # NUM, then
489 process the directive, otherwise back up. */
490 token = _cpp_lex_direct (pfile);
491 if (token->type == CPP_HASH)
492 {
493 token1 = _cpp_lex_direct (pfile);
494 _cpp_backup_tokens (pfile, 1);
495
496 /* If it's a #line directive, handle it. */
497 if (token1->type == CPP_NUMBER)
498 {
499 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
b20d9f0c 500 read_original_directory (pfile);
f5e99456
NB
501 return;
502 }
503 }
504
505 /* Backup as if nothing happened. */
506 _cpp_backup_tokens (pfile, 1);
507}
508
b20d9f0c
AO
509/* For preprocessed files, if the tokens following the first filename
510 line is of the form # <line> "/path/name//", handle the
511 directive so we know the original current directory. */
512static void
513read_original_directory (cpp_reader *pfile)
514{
515 const cpp_token *hash, *token;
516
517 /* Lex ahead; if the first tokens are of the form # NUM, then
518 process the directive, otherwise back up. */
519 hash = _cpp_lex_direct (pfile);
520 if (hash->type != CPP_HASH)
521 {
522 _cpp_backup_tokens (pfile, 1);
523 return;
524 }
525
526 token = _cpp_lex_direct (pfile);
527
528 if (token->type != CPP_NUMBER)
529 {
530 _cpp_backup_tokens (pfile, 2);
531 return;
532 }
533
534 token = _cpp_lex_direct (pfile);
535
536 if (token->type != CPP_STRING
537 || ! (token->val.str.len >= 5
538 && token->val.str.text[token->val.str.len-2] == '/'
539 && token->val.str.text[token->val.str.len-3] == '/'))
540 {
541 _cpp_backup_tokens (pfile, 3);
542 return;
543 }
544
545 if (pfile->cb.dir_change)
546 {
547 char *debugdir = alloca (token->val.str.len - 3);
548
549 memcpy (debugdir, (const char *) token->val.str.text + 1,
550 token->val.str.len - 4);
551 debugdir[token->val.str.len - 4] = '\0';
552
553 pfile->cb.dir_change (pfile, debugdir);
8e9ea4d7 554 }
b20d9f0c
AO
555}
556
76c3e73e
NB
557/* This is called at the end of preprocessing. It pops the last
558 buffer and writes dependency output, and returns the number of
559 errors.
16dd5cfe 560
76c3e73e
NB
561 Maybe it should also reset state, such that you could call
562 cpp_start_read with a new filename to restart processing. */
563int
6cf87ca4 564cpp_finish (cpp_reader *pfile, FILE *deps_stream)
6de1e2a9 565{
a69cbaac
NB
566 /* Warn about unused macros before popping the final buffer. */
567 if (CPP_OPTION (pfile, warn_unused_macros))
568 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
569
a2566ae9 570 /* lex.c leaves the final buffer on the stack. This it so that
7364fdd8 571 it returns an unending stream of CPP_EOFs to the client. If we
a1f300c0 572 popped the buffer, we'd dereference a NULL buffer pointer and
7364fdd8
NB
573 segfault. It's nice to allow the client to do worry-free excess
574 cpp_get_token calls. */
575 while (pfile->buffer)
576 _cpp_pop_buffer (pfile);
c1212d2f 577
76c3e73e 578 /* Don't write the deps file if there are errors. */
f4ff5a69
NB
579 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
580 && deps_stream && pfile->errors == 0)
76c3e73e
NB
581 {
582 deps_write (pfile->deps, deps_stream, 72);
583
f4ff5a69 584 if (CPP_OPTION (pfile, deps.phony_targets))
76c3e73e
NB
585 deps_phony_targets (pfile->deps, deps_stream);
586 }
3caee4a8 587
d4506961
ZW
588 /* Report on headers that could use multiple include guards. */
589 if (CPP_OPTION (pfile, print_include_names))
c71f835b 590 _cpp_report_missing_guards (pfile);
76c3e73e
NB
591
592 return pfile->errors;
6de1e2a9
ZW
593}
594
f4ff5a69 595static void
6cf87ca4 596post_options (cpp_reader *pfile)
96302433
NB
597{
598 /* -Wtraditional is not useful in C++ mode. */
599 if (CPP_OPTION (pfile, cplusplus))
600 CPP_OPTION (pfile, warn_traditional) = 0;
601
6d4587f7 602 /* Permanently disable macro expansion if we are rescanning
43612ffb 603 preprocessed text. Read preprocesed source in ISO mode. */
6d4587f7 604 if (CPP_OPTION (pfile, preprocessed))
43612ffb
NB
605 {
606 pfile->state.prevent_expansion = 1;
607 CPP_OPTION (pfile, traditional) = 0;
608 }
609
a8eb6044
NB
610 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
611 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
612
43612ffb 613 if (CPP_OPTION (pfile, traditional))
26aea073 614 {
a09d4744
NB
615 CPP_OPTION (pfile, cplusplus_comments) = 0;
616
26aea073
NB
617 /* Traditional CPP does not accurately track column information. */
618 CPP_OPTION (pfile, show_column) = 0;
619 CPP_OPTION (pfile, trigraphs) = 0;
620 CPP_OPTION (pfile, warn_trigraphs) = 0;
621 }
7ca3d2b1 622}