OSDN Git Service

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