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