]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/init.c
Fix bug with -MM -MG.
[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,
31c3e631 3 1999, 2000, 2001, 2002, 2003, 2004, 2005 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
200031d1 20Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
5538ada6 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;
af15a2fe 75 char extended_identifiers;
58551c23 76 char std;
a01eb545
ZW
77 char cplusplus_comments;
78 char digraphs;
79};
80
a01eb545 81static const struct lang_flags lang_defaults[] =
af15a2fe
JM
82{ /* 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). */
a01eb545
ZW
95};
96
5d8ebbd8 97/* Sets internal flags correctly for a given language. */
f749a36b 98void
6cf87ca4 99cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
dd07b884 100{
a01eb545 101 const struct lang_flags *l = &lang_defaults[(int) lang];
df383483 102
bdb05a7b 103 CPP_OPTION (pfile, lang) = lang;
dd07b884 104
af15a2fe
JM
105 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;
dd07b884
NB
113}
114
c1bad961 115/* Initialize library global state. */
cf44ea52 116static void
6cf87ca4 117init_library (void)
cf44ea52 118{
7ca3d2b1
NB
119 static int initialized = 0;
120
121 if (! initialized)
122 {
123 initialized = 1;
124
7ca3d2b1
NB
125 /* 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 ();
4f4e53dd
PB
129
130#ifdef ENABLE_NLS
85eac2a0 131 (void) bindtextdomain (PACKAGE, LOCALEDIR);
4f4e53dd 132#endif
7ca3d2b1 133 }
cf44ea52
NB
134}
135
ec5c56db 136/* Initialize a cpp_reader structure. */
cf44ea52 137cpp_reader *
50f59cd7
PB
138cpp_create_reader (enum c_lang lang, hash_table *table,
139 struct line_maps *line_table)
6de1e2a9 140{
7ca3d2b1 141 cpp_reader *pfile;
93c80368 142
4912a07c 143 /* Initialize this instance of the library if it hasn't been already. */
674c3b40 144 init_library ();
7ca3d2b1 145
c3f829c1 146 pfile = XCNEW (cpp_reader);
93c80368 147
f749a36b 148 cpp_set_lang (pfile, lang);
a5a49440 149 CPP_OPTION (pfile, warn_multichar) = 1;
ae79697b 150 CPP_OPTION (pfile, discard_comments) = 1;
477cdac7 151 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
ae79697b 152 CPP_OPTION (pfile, show_column) = 1;
6ab3e7dd 153 CPP_OPTION (pfile, tabstop) = 8;
be768055 154 CPP_OPTION (pfile, operator_names) = 1;
a8eb6044 155 CPP_OPTION (pfile, warn_trigraphs) = 2;
909de5da 156 CPP_OPTION (pfile, warn_endif_labels) = 1;
9fbd3e41 157 CPP_OPTION (pfile, warn_deprecated) = 1;
f4ff5a69 158 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
b1822ccc 159 CPP_OPTION (pfile, dollars_in_ident) = 1;
78b8811a 160 CPP_OPTION (pfile, warn_dollars) = 1;
e5b79219 161 CPP_OPTION (pfile, warn_variadic_macros) = 1;
50668cf6 162 CPP_OPTION (pfile, warn_normalize) = normalized_C;
ae79697b 163
2443d4e1
NB
164 /* Default CPP arithmetic to something sensible for the host for the
165 benefit of dumb users like fix-header. */
c9220e3a 166 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
2443d4e1
NB
167 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);
2a1dc0d8 170 CPP_OPTION (pfile, unsigned_char) = 0;
44a147ad 171 CPP_OPTION (pfile, unsigned_wchar) = 1;
e6cc3a24
ZW
172 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
173
174 /* Default to no charset conversion. */
16dd5cfe 175 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
e6cc3a24 176 CPP_OPTION (pfile, wide_charset) = 0;
4268e8bb 177
16dd5cfe
EC
178 /* Default the input character set to UTF-8. */
179 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
cf551fba 180
8f9b4009
NB
181 /* 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
500bee0a 187 /* Initialize the line map. */
50f59cd7 188 pfile->line_table = line_table;
d82fc108 189
4a58aab6 190 /* Initialize lexer state. */
93c80368
NB
191 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
192
4ed5bcfb 193 /* Set up static tokens. */
4ed5bcfb
NB
194 pfile->avoid_paste.type = CPP_PADDING;
195 pfile->avoid_paste.val.source = NULL;
196 pfile->eof.type = CPP_EOF;
197 pfile->eof.flags = 0;
93c80368 198
5fddcffc
NB
199 /* 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;
5fddcffc 203
4912a07c 204 /* Initialize the base context. */
93c80368
NB
205 pfile->context = &pfile->base_context;
206 pfile->base_context.macro = 0;
207 pfile->base_context.prev = pfile->base_context.next = 0;
208
8c3b2693
NB
209 /* Aligned and unaligned storage. */
210 pfile->a_buff = _cpp_get_buff (pfile, 0);
ece54d54 211 pfile->u_buff = _cpp_get_buff (pfile, 0);
93c80368 212
87ed109f
NB
213 /* The expression parser stack. */
214 _cpp_expand_op_stack (pfile);
215
4912a07c 216 /* Initialize the buffer obstack. */
43839642
ZW
217 _obstack_begin (&pfile->buffer_ob, 0, 0,
218 (void *(*) (long)) xmalloc,
219 (void (*) (void *)) free);
2a967f3d 220
8f9b4009 221 _cpp_init_files (pfile);
cf44ea52 222
b4e46cea
PB
223 _cpp_init_hashtable (pfile, table);
224
cf44ea52 225 return pfile;
f2d5f0cc
ZW
226}
227
400023a3 228/* Free resources used by PFILE. Accessing PFILE after this function
8d9afc4e 229 returns leads to undefined behavior. Returns the error count. */
76c3e73e 230void
6cf87ca4 231cpp_destroy (cpp_reader *pfile)
6de1e2a9 232{
93c80368 233 cpp_context *context, *contextn;
50410426 234 tokenrun *run, *runn;
709e9e50 235
87ed109f 236 free (pfile->op_stack);
af0d16cd 237
38b24ee2 238 while (CPP_BUFFER (pfile) != NULL)
ef6e958a 239 _cpp_pop_buffer (pfile);
6de1e2a9 240
1a76916c
NB
241 if (pfile->out.base)
242 free (pfile->out.base);
004cb263 243
93c80368 244 if (pfile->macro_buffer)
4b49c365 245 {
fad205ff 246 free (pfile->macro_buffer);
4b49c365
AO
247 pfile->macro_buffer = NULL;
248 pfile->macro_buffer_len = 0;
249 }
93c80368 250
f4ff5a69
NB
251 if (pfile->deps)
252 deps_free (pfile->deps);
2a967f3d 253 obstack_free (&pfile->buffer_ob, 0);
49e6c08e 254
2a967f3d 255 _cpp_destroy_hashtable (pfile);
8f9b4009 256 _cpp_cleanup_files (pfile);
e6cc3a24 257 _cpp_destroy_iconv (pfile);
709e9e50 258
8c3b2693 259 _cpp_free_buff (pfile->a_buff);
ece54d54 260 _cpp_free_buff (pfile->u_buff);
b8af0ca5 261 _cpp_free_buff (pfile->free_buffs);
93c80368 262
50410426
NB
263 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
93c80368
NB
271 for (context = pfile->base_context.next; context; context = contextn)
272 {
273 contextn = context->next;
274 free (context);
275 }
400023a3 276
400023a3 277 free (pfile);
6de1e2a9
ZW
278}
279
93c80368 280/* This structure defines one built-in identifier. A node will be
f24a153a
ZW
281 entered in the hash table under the name NAME, with value VALUE.
282
283 There are two tables of these. builtin_array holds all the
284 "builtin" macros: these are handled by builtin_macro() in
a2566ae9 285 macro.c. Builtin is somewhat of a misnomer -- the property of
f24a153a
ZW
286 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. */
a9ae4483
ZW
294struct builtin
295{
562a5c27 296 const uchar *name;
93c80368 297 unsigned short len;
f24a153a 298 unsigned short value;
a9ae4483 299};
93c80368 300
f24a153a 301#define B(n, t) { DSC(n), t }
a9ae4483 302static const struct builtin builtin_array[] =
6de1e2a9 303{
93c80368
NB
304 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),
278c4662
NB
310 /* Keep builtins not used for -traditional-cpp at the end, and
311 update init_builtins() if any more are added. */
644eddaa 312 B("_Pragma", BT_PRAGMA),
618cdda7 313 B("__STDC__", BT_STDC),
f24a153a 314};
92936ecf 315
f24a153a
ZW
316static 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)
a9ae4483 329};
12cf91fe 330#undef B
a9ae4483 331
17645b15
NB
332/* Mark the C++ named operators in the hash table. */
333static void
6cf87ca4 334mark_named_operators (cpp_reader *pfile)
17645b15
NB
335{
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;
4977bab6
ZW
344 hp->is_directive = 0;
345 hp->directive_index = b->value;
17645b15
NB
346 }
347}
348
c1bad961 349/* Read the builtins table above and enter them, and language-specific
6e270179
NB
350 macros, into the hash table. HOSTED is true if this is a hosted
351 environment. */
c1bad961 352void
6cf87ca4 353cpp_init_builtins (cpp_reader *pfile, int hosted)
a9ae4483 354{
a9ae4483 355 const struct builtin *b;
278c4662 356 size_t n = ARRAY_SIZE (builtin_array);
771c4df3 357
278c4662
NB
358 if (CPP_OPTION (pfile, traditional))
359 n -= 2;
360
361 for(b = builtin_array; b < builtin_array + n; b++)
6de1e2a9 362 {
f24a153a
ZW
363 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
364 hp->type = NT_MACRO;
365 hp->flags |= NODE_BUILTIN | NODE_WARN;
c3f829c1 366 hp->value.builtin = (enum builtin_type) b->value;
6de1e2a9 367 }
c740cee2
NB
368
369 if (CPP_OPTION (pfile, cplusplus))
3d90d290 370 _cpp_define_builtin (pfile, "__cplusplus 1");
2a1dc0d8
ZW
371 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
372 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
0f7866e7 373 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
c740cee2
NB
374 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
375 else if (CPP_OPTION (pfile, c99))
376 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
377
6e270179 378 if (hosted)
58b5b894 379 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
6e270179 380 else
58b5b894 381 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
6e270179 382
0f7866e7
ZL
383 if (CPP_OPTION (pfile, objc))
384 _cpp_define_builtin (pfile, "__OBJC__ 1");
4a58aab6
NB
385}
386
2443d4e1
NB
387/* 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
6cf87ca4
ZW
390static void sanity_checks (cpp_reader *);
391static void sanity_checks (cpp_reader *pfile)
2443d4e1
NB
392{
393 cppchar_t test = 0;
c9220e3a 394 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
2443d4e1
NB
395
396 /* Sanity checks for assumptions about CPP arithmetic and target
397 type precisions made by cpplib. */
398 test--;
399 if (test < 1)
0527bc4e 400 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
2443d4e1 401
c9220e3a 402 if (CPP_OPTION (pfile, precision) > max_precision)
0527bc4e 403 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
404 "preprocessor arithmetic has maximum precision of %lu bits;"
405 " target requires %lu bits",
c9220e3a
NB
406 (unsigned long) max_precision,
407 (unsigned long) CPP_OPTION (pfile, precision));
2443d4e1
NB
408
409 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
0527bc4e 410 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
411 "CPP arithmetic must be at least as precise as a target int");
412
413 if (CPP_OPTION (pfile, char_precision) < 8)
0527bc4e 414 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
2443d4e1
NB
415
416 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 417 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
418 "target wchar_t is narrower than target char");
419
420 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 421 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
422 "target int is narrower than target char");
423
c9220e3a
NB
424 /* This is assumed in eval_token() and could be fixed if necessary. */
425 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
0527bc4e
JDA
426 cpp_error (pfile, CPP_DL_ICE,
427 "CPP half-integer narrower than CPP character");
c9220e3a 428
2443d4e1 429 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
0527bc4e 430 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
431 "CPP on this host cannot handle wide character constants over"
432 " %lu bits, but the target requires %lu bits",
c9220e3a
NB
433 (unsigned long) BITS_PER_CPPCHAR_T,
434 (unsigned long) CPP_OPTION (pfile, wchar_precision));
2443d4e1
NB
435}
436#else
437# define sanity_checks(PFILE)
438#endif
439
f5e99456 440/* This is called after options have been parsed, and partially
59e4e217 441 processed. */
4169c321
PB
442void
443cpp_post_options (cpp_reader *pfile)
6de1e2a9 444{
2443d4e1
NB
445 sanity_checks (pfile);
446
f4ff5a69
NB
447 post_options (pfile);
448
c19b12cb
NB
449 /* Mark named operators before handling command line macros. */
450 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
451 mark_named_operators (pfile);
4169c321 452}
c19b12cb 453
4dc299fb 454/* Setup for processing input from the file named FNAME, or stdin if
8e9ea4d7
PB
455 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)
4169c321 459{
f4ff5a69
NB
460 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 }
96302433 468
4dc299fb 469 pfile->main_file
6568f34b 470 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
4dc299fb 471 if (_cpp_find_failed (pfile->main_file))
3092d0fc 472 return NULL;
f5e99456 473
4dc299fb
PB
474 _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))
8e9ea4d7
PB
479 {
480 read_original_filename (pfile);
12f9df4e 481 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
8e9ea4d7
PB
482 }
483 return fname;
f5e99456
NB
484}
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
6cf87ca4 491read_original_filename (cpp_reader *pfile)
f5e99456
NB
492{
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);
b20d9f0c 507 read_original_directory (pfile);
f5e99456
NB
508 return;
509 }
510 }
511
512 /* Backup as if nothing happened. */
513 _cpp_backup_tokens (pfile, 1);
514}
515
b20d9f0c
AO
516/* 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 {
c3f829c1 554 char *debugdir = (char *) alloca (token->val.str.len - 3);
b20d9f0c
AO
555
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);
8e9ea4d7 561 }
b20d9f0c
AO
562}
563
76c3e73e
NB
564/* 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.
16dd5cfe 567
76c3e73e
NB
568 Maybe it should also reset state, such that you could call
569 cpp_start_read with a new filename to restart processing. */
570int
6cf87ca4 571cpp_finish (cpp_reader *pfile, FILE *deps_stream)
6de1e2a9 572{
a69cbaac
NB
573 /* 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
a2566ae9 577 /* lex.c leaves the final buffer on the stack. This it so that
7364fdd8 578 it returns an unending stream of CPP_EOFs to the client. If we
a1f300c0 579 popped the buffer, we'd dereference a NULL buffer pointer and
7364fdd8
NB
580 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);
c1212d2f 584
76c3e73e 585 /* Don't write the deps file if there are errors. */
f4ff5a69
NB
586 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
587 && deps_stream && pfile->errors == 0)
76c3e73e
NB
588 {
589 deps_write (pfile->deps, deps_stream, 72);
590
f4ff5a69 591 if (CPP_OPTION (pfile, deps.phony_targets))
76c3e73e
NB
592 deps_phony_targets (pfile->deps, deps_stream);
593 }
3caee4a8 594
d4506961
ZW
595 /* Report on headers that could use multiple include guards. */
596 if (CPP_OPTION (pfile, print_include_names))
c71f835b 597 _cpp_report_missing_guards (pfile);
76c3e73e
NB
598
599 return pfile->errors;
6de1e2a9
ZW
600}
601
f4ff5a69 602static void
6cf87ca4 603post_options (cpp_reader *pfile)
96302433
NB
604{
605 /* -Wtraditional is not useful in C++ mode. */
606 if (CPP_OPTION (pfile, cplusplus))
607 CPP_OPTION (pfile, warn_traditional) = 0;
608
6d4587f7 609 /* Permanently disable macro expansion if we are rescanning
43612ffb 610 preprocessed text. Read preprocesed source in ISO mode. */
6d4587f7 611 if (CPP_OPTION (pfile, preprocessed))
43612ffb
NB
612 {
613 pfile->state.prevent_expansion = 1;
614 CPP_OPTION (pfile, traditional) = 0;
615 }
616
a8eb6044
NB
617 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
618 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
619
43612ffb 620 if (CPP_OPTION (pfile, traditional))
26aea073 621 {
a09d4744
NB
622 CPP_OPTION (pfile, cplusplus_comments) = 0;
623
26aea073
NB
624 /* 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 }
7ca3d2b1 629}