OSDN Git Service

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