OSDN Git Service

PR preprocessor/15824
[pf3gnuchains/gcc-fork.git] / libcpp / init.c
1 /* CPP Library.
2    Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004 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
7
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.
12
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.
17
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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "cpplib.h"
25 #include "internal.h"
26 #include "mkdeps.h"
27 #include "localedir.h"
28
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 *);
34
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
39
40 #define init_trigraph_map()  /* Nothing.  */
41 #define TRIGRAPH_MAP \
42 __extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
43
44 #define END };
45 #define s(p, v) [p] = v,
46
47 #else
48
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;
52
53 #define END }
54 #define s(p, v) x[p] = v;
55
56 #endif
57
58 TRIGRAPH_MAP
59   s('=', '#')   s(')', ']')     s('!', '|')
60   s('(', '[')   s('\'', '^')    s('>', '}')
61   s('/', '\\')  s('<', '{')     s('-', '~')
62 END
63
64 #undef s
65 #undef END
66 #undef TRIGRAPH_MAP
67
68 /* A set of booleans indicating what CPP features each source language
69    requires.  */
70 struct lang_flags
71 {
72   char c99;
73   char cplusplus;
74   char extended_numbers;
75   char std;
76   char cplusplus_comments;
77   char digraphs;
78 };
79
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     }
90 };
91
92 /* Sets internal flags correctly for a given language.  */
93 void
94 cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
95 {
96   const struct lang_flags *l = &lang_defaults[(int) lang];
97
98   CPP_OPTION (pfile, lang) = lang;
99
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;
107 }
108
109 /* Initialize library global state.  */
110 static void
111 init_library (void)
112 {
113   static int initialized = 0;
114
115   if (! initialized)
116     {
117       initialized = 1;
118
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 ();
123
124 #ifdef ENABLE_NLS
125        (void) bindtextdomain (PACKAGE, LOCALEDIR);
126 #endif
127     }
128 }
129
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)
134 {
135   cpp_reader *pfile;
136
137   /* Initialize this instance of the library if it hasn't been already.  */
138   init_library ();
139
140   pfile = xcalloc (1, sizeof (cpp_reader));
141
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
157   /* Default CPP arithmetic to something sensible for the host for the
158      benefit of dumb users like fix-header.  */
159   CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
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);
163   CPP_OPTION (pfile, unsigned_char) = 0;
164   CPP_OPTION (pfile, unsigned_wchar) = 1;
165   CPP_OPTION (pfile, bytes_big_endian) = 1;  /* does not matter */
166
167   /* Default to no charset conversion.  */
168   CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
169   CPP_OPTION (pfile, wide_charset) = 0;
170
171   /* Default the input character set to UTF-8.  */
172   CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
173
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
180   /* Initialize the line map.  */
181   pfile->line_table = line_table;
182
183   /* Initialize lexer state.  */
184   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
185
186   /* Set up static tokens.  */
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;
191
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;
196
197   /* Initialize the base context.  */
198   pfile->context = &pfile->base_context;
199   pfile->base_context.macro = 0;
200   pfile->base_context.prev = pfile->base_context.next = 0;
201
202   /* Aligned and unaligned storage.  */
203   pfile->a_buff = _cpp_get_buff (pfile, 0);
204   pfile->u_buff = _cpp_get_buff (pfile, 0);
205
206   /* The expression parser stack.  */
207   _cpp_expand_op_stack (pfile);
208
209   /* Initialize the buffer obstack.  */
210   _obstack_begin (&pfile->buffer_ob, 0, 0,
211                   (void *(*) (long)) xmalloc,
212                   (void (*) (void *)) free);
213
214   _cpp_init_files (pfile);
215
216   _cpp_init_hashtable (pfile, table);
217
218   return pfile;
219 }
220
221 /* Free resources used by PFILE.  Accessing PFILE after this function
222    returns leads to undefined behavior.  Returns the error count.  */
223 void
224 cpp_destroy (cpp_reader *pfile)
225 {
226   cpp_context *context, *contextn;
227   tokenrun *run, *runn;
228
229   free (pfile->op_stack);
230
231   while (CPP_BUFFER (pfile) != NULL)
232     _cpp_pop_buffer (pfile);
233
234   if (pfile->out.base)
235     free (pfile->out.base);
236
237   if (pfile->macro_buffer)
238     {
239       free (pfile->macro_buffer);
240       pfile->macro_buffer = NULL;
241       pfile->macro_buffer_len = 0;
242     }
243
244   if (pfile->deps)
245     deps_free (pfile->deps);
246   obstack_free (&pfile->buffer_ob, 0);
247
248   _cpp_destroy_hashtable (pfile);
249   _cpp_cleanup_files (pfile);
250   _cpp_destroy_iconv (pfile);
251
252   _cpp_free_buff (pfile->a_buff);
253   _cpp_free_buff (pfile->u_buff);
254   _cpp_free_buff (pfile->free_buffs);
255
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
264   for (context = pfile->base_context.next; context; context = contextn)
265     {
266       contextn = context->next;
267       free (context);
268     }
269
270   free (pfile);
271 }
272
273 /* This structure defines one built-in identifier.  A node will be
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
278    cppmacro.c.  Builtin is somewhat of a misnomer -- the property of
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.  */
287 struct builtin
288 {
289   const uchar *name;
290   unsigned short len;
291   unsigned short value;
292 };
293
294 #define B(n, t)    { DSC(n), t }
295 static const struct builtin builtin_array[] =
296 {
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),
303   /* Keep builtins not used for -traditional-cpp at the end, and
304      update init_builtins() if any more are added.  */
305   B("_Pragma",           BT_PRAGMA),
306   B("__STDC__",          BT_STDC),
307 };
308
309 static 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)
322 };
323 #undef B
324
325 /* Mark the C++ named operators in the hash table.  */
326 static void
327 mark_named_operators (cpp_reader *pfile)
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;
337       hp->is_directive = 0;
338       hp->directive_index = b->value;
339     }
340 }
341
342 /* Read the builtins table above and enter them, and language-specific
343    macros, into the hash table.  HOSTED is true if this is a hosted
344    environment.  */
345 void
346 cpp_init_builtins (cpp_reader *pfile, int hosted)
347 {
348   const struct builtin *b;
349   size_t n = ARRAY_SIZE (builtin_array);
350
351   if (CPP_OPTION (pfile, traditional))
352     n -= 2;
353
354   for(b = builtin_array; b < builtin_array + n; b++)
355     {
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;
360     }
361
362   if (CPP_OPTION (pfile, cplusplus))
363     _cpp_define_builtin (pfile, "__cplusplus 1");
364   else if (CPP_OPTION (pfile, lang) == CLK_ASM)
365     _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
366   else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
367     _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
368   else if (CPP_OPTION (pfile, c99))
369     _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
370
371   if (hosted)
372     _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
373   else
374     _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
375
376   if (CPP_OPTION (pfile, objc))
377     _cpp_define_builtin (pfile, "__OBJC__ 1");
378 }
379
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
383 static void sanity_checks (cpp_reader *);
384 static void sanity_checks (cpp_reader *pfile)
385 {
386   cppchar_t test = 0;
387   size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
388
389   /* Sanity checks for assumptions about CPP arithmetic and target
390      type precisions made by cpplib.  */
391   test--;
392   if (test < 1)
393     cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
394
395   if (CPP_OPTION (pfile, precision) > max_precision)
396     cpp_error (pfile, CPP_DL_ICE,
397                "preprocessor arithmetic has maximum precision of %lu bits;"
398                " target requires %lu bits",
399                (unsigned long) max_precision,
400                (unsigned long) CPP_OPTION (pfile, precision));
401
402   if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
403     cpp_error (pfile, CPP_DL_ICE,
404                "CPP arithmetic must be at least as precise as a target int");
405
406   if (CPP_OPTION (pfile, char_precision) < 8)
407     cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
408
409   if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
410     cpp_error (pfile, CPP_DL_ICE,
411                "target wchar_t is narrower than target char");
412
413   if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
414     cpp_error (pfile, CPP_DL_ICE,
415                "target int is narrower than target char");
416
417   /* This is assumed in eval_token() and could be fixed if necessary.  */
418   if (sizeof (cppchar_t) > sizeof (cpp_num_part))
419     cpp_error (pfile, CPP_DL_ICE,
420                "CPP half-integer narrower than CPP character");
421
422   if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
423     cpp_error (pfile, CPP_DL_ICE,
424                "CPP on this host cannot handle wide character constants over"
425                " %lu bits, but the target requires %lu bits",
426                (unsigned long) BITS_PER_CPPCHAR_T,
427                (unsigned long) CPP_OPTION (pfile, wchar_precision));
428 }
429 #else
430 # define sanity_checks(PFILE)
431 #endif
432
433 /* This is called after options have been parsed, and partially
434    processed.  */
435 void
436 cpp_post_options (cpp_reader *pfile)
437 {
438   sanity_checks (pfile);
439
440   post_options (pfile);
441
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);
445 }
446
447 /* Setup for processing input from the file named FNAME, or stdin if
448    it is the empty string.  Return the original filename
449    on success (e.g. foo.i->foo.c), or NULL on failure.  */
450 const char *
451 cpp_read_main_file (cpp_reader *pfile, const char *fname)
452 {
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     }
461
462   pfile->main_file
463     = _cpp_find_file (pfile, fname, &pfile->no_search_path, false);
464   if (_cpp_find_failed (pfile->main_file))
465     return NULL;
466
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))
472     {
473       read_original_filename (pfile);
474       fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
475     }
476   return fname;
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.  */
483 static void
484 read_original_filename (cpp_reader *pfile)
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);
500           read_original_directory (pfile);
501           return;
502         }
503     }
504
505   /* Backup as if nothing happened.  */
506   _cpp_backup_tokens (pfile, 1);
507 }
508
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.  */
512 static void
513 read_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);
554     }      
555 }
556
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.
560
561    Maybe it should also reset state, such that you could call
562    cpp_start_read with a new filename to restart processing.  */
563 int
564 cpp_finish (cpp_reader *pfile, FILE *deps_stream)
565 {
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
570   /* cpplex.c leaves the final buffer on the stack.  This it so that
571      it returns an unending stream of CPP_EOFs to the client.  If we
572      popped the buffer, we'd dereference a NULL buffer pointer and
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);
577
578   /* Don't write the deps file if there are errors.  */
579   if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
580       && deps_stream && pfile->errors == 0)
581     {
582       deps_write (pfile->deps, deps_stream, 72);
583
584       if (CPP_OPTION (pfile, deps.phony_targets))
585         deps_phony_targets (pfile->deps, deps_stream);
586     }
587
588   /* Report on headers that could use multiple include guards.  */
589   if (CPP_OPTION (pfile, print_include_names))
590     _cpp_report_missing_guards (pfile);
591
592   return pfile->errors;
593 }
594
595 static void
596 post_options (cpp_reader *pfile)
597 {
598   /* -Wtraditional is not useful in C++ mode.  */
599   if (CPP_OPTION (pfile, cplusplus))
600     CPP_OPTION (pfile, warn_traditional) = 0;
601
602   /* Permanently disable macro expansion if we are rescanning
603      preprocessed text.  Read preprocesed source in ISO mode.  */
604   if (CPP_OPTION (pfile, preprocessed))
605     {
606       pfile->state.prevent_expansion = 1;
607       CPP_OPTION (pfile, traditional) = 0;
608     }
609
610   if (CPP_OPTION (pfile, warn_trigraphs) == 2)
611     CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
612
613   if (CPP_OPTION (pfile, traditional))
614     {
615       CPP_OPTION (pfile, cplusplus_comments) = 0;
616
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     }
622 }