OSDN Git Service

65cca9b2bab57d4a8987b107d4dc01e5c5d1b6ef
[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 /* This is called after options have been parsed, and partially
433    processed.  */
434 void
435 cpp_post_options (cpp_reader *pfile)
436 {
437   sanity_checks (pfile);
438
439   post_options (pfile);
440
441   /* Mark named operators before handling command line macros.  */
442   if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
443     mark_named_operators (pfile);
444 }
445
446 /* Setup for processing input from the file named FNAME, or stdin if
447    it is the empty string.  Return the original filename
448    on success (e.g. foo.i->foo.c), or NULL on failure.  */
449 const char *
450 cpp_read_main_file (cpp_reader *pfile, const char *fname)
451 {
452   if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
453     {
454       if (!pfile->deps)
455         pfile->deps = deps_init ();
456
457       /* Set the default target (if there is none already).  */
458       deps_add_default_target (pfile->deps, fname);
459     }
460
461   pfile->main_file
462     = _cpp_find_file (pfile, fname, &pfile->no_search_path, false);
463   if (_cpp_find_failed (pfile->main_file))
464     return NULL;
465
466   _cpp_stack_file (pfile, pfile->main_file, false);
467
468   /* For foo.i, read the original filename foo.c now, for the benefit
469      of the front ends.  */
470   if (CPP_OPTION (pfile, preprocessed))
471     {
472       read_original_filename (pfile);
473       fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
474     }
475   return fname;
476 }
477
478 /* For preprocessed files, if the first tokens are of the form # NUM.
479    handle the directive so we know the original file name.  This will
480    generate file_change callbacks, which the front ends must handle
481    appropriately given their state of initialization.  */
482 static void
483 read_original_filename (cpp_reader *pfile)
484 {
485   const cpp_token *token, *token1;
486
487   /* Lex ahead; if the first tokens are of the form # NUM, then
488      process the directive, otherwise back up.  */
489   token = _cpp_lex_direct (pfile);
490   if (token->type == CPP_HASH)
491     {
492       token1 = _cpp_lex_direct (pfile);
493       _cpp_backup_tokens (pfile, 1);
494
495       /* If it's a #line directive, handle it.  */
496       if (token1->type == CPP_NUMBER)
497         {
498           _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
499           read_original_directory (pfile);
500           return;
501         }
502     }
503
504   /* Backup as if nothing happened.  */
505   _cpp_backup_tokens (pfile, 1);
506 }
507
508 /* For preprocessed files, if the tokens following the first filename
509    line is of the form # <line> "/path/name//", handle the
510    directive so we know the original current directory.  */
511 static void
512 read_original_directory (cpp_reader *pfile)
513 {
514   const cpp_token *hash, *token;
515
516   /* Lex ahead; if the first tokens are of the form # NUM, then
517      process the directive, otherwise back up.  */
518   hash = _cpp_lex_direct (pfile);
519   if (hash->type != CPP_HASH)
520     {
521       _cpp_backup_tokens (pfile, 1);
522       return;
523     }
524
525   token = _cpp_lex_direct (pfile);
526
527   if (token->type != CPP_NUMBER)
528     {
529       _cpp_backup_tokens (pfile, 2);
530       return;
531     }
532
533   token = _cpp_lex_direct (pfile);
534
535   if (token->type != CPP_STRING
536       || ! (token->val.str.len >= 5
537             && token->val.str.text[token->val.str.len-2] == '/'
538             && token->val.str.text[token->val.str.len-3] == '/'))
539     {
540       _cpp_backup_tokens (pfile, 3);
541       return;
542     }
543
544   if (pfile->cb.dir_change)
545     {
546       char *debugdir = alloca (token->val.str.len - 3);
547
548       memcpy (debugdir, (const char *) token->val.str.text + 1,
549               token->val.str.len - 4);
550       debugdir[token->val.str.len - 4] = '\0';
551
552       pfile->cb.dir_change (pfile, debugdir);
553     }      
554 }
555
556 /* This is called at the end of preprocessing.  It pops the last
557    buffer and writes dependency output, and returns the number of
558    errors.
559
560    Maybe it should also reset state, such that you could call
561    cpp_start_read with a new filename to restart processing.  */
562 int
563 cpp_finish (cpp_reader *pfile, FILE *deps_stream)
564 {
565   /* Warn about unused macros before popping the final buffer.  */
566   if (CPP_OPTION (pfile, warn_unused_macros))
567     cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
568
569   /* cpplex.c leaves the final buffer on the stack.  This it so that
570      it returns an unending stream of CPP_EOFs to the client.  If we
571      popped the buffer, we'd dereference a NULL buffer pointer and
572      segfault.  It's nice to allow the client to do worry-free excess
573      cpp_get_token calls.  */
574   while (pfile->buffer)
575     _cpp_pop_buffer (pfile);
576
577   /* Don't write the deps file if there are errors.  */
578   if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
579       && deps_stream && pfile->errors == 0)
580     {
581       deps_write (pfile->deps, deps_stream, 72);
582
583       if (CPP_OPTION (pfile, deps.phony_targets))
584         deps_phony_targets (pfile->deps, deps_stream);
585     }
586
587   /* Report on headers that could use multiple include guards.  */
588   if (CPP_OPTION (pfile, print_include_names))
589     _cpp_report_missing_guards (pfile);
590
591   return pfile->errors;
592 }
593
594 static void
595 post_options (cpp_reader *pfile)
596 {
597   /* -Wtraditional is not useful in C++ mode.  */
598   if (CPP_OPTION (pfile, cplusplus))
599     CPP_OPTION (pfile, warn_traditional) = 0;
600
601   /* Permanently disable macro expansion if we are rescanning
602      preprocessed text.  Read preprocesed source in ISO mode.  */
603   if (CPP_OPTION (pfile, preprocessed))
604     {
605       pfile->state.prevent_expansion = 1;
606       CPP_OPTION (pfile, traditional) = 0;
607     }
608
609   if (CPP_OPTION (pfile, warn_trigraphs) == 2)
610     CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
611
612   if (CPP_OPTION (pfile, traditional))
613     {
614       /* Traditional CPP does not accurately track column information.  */
615       CPP_OPTION (pfile, show_column) = 0;
616       CPP_OPTION (pfile, trigraphs) = 0;
617       CPP_OPTION (pfile, warn_trigraphs) = 0;
618     }
619 }