* support/cpp2/config.in, support/cpp2/configure.in,
[fw/sdcc] / support / cpp2 / cppinit.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 "cpphash.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 }
124
125 /* Initialize a cpp_reader structure.  */
126 cpp_reader *
127 cpp_create_reader (enum c_lang lang, hash_table *table)
128 {
129   cpp_reader *pfile;
130
131   /* Initialize this instance of the library if it hasn't been already.  */
132   init_library ();
133
134   pfile = xcalloc (1, sizeof (cpp_reader));
135
136   cpp_set_lang (pfile, lang);
137   CPP_OPTION (pfile, warn_multichar) = 1;
138   CPP_OPTION (pfile, discard_comments) = 1;
139   CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
140   CPP_OPTION (pfile, show_column) = 1;
141   CPP_OPTION (pfile, tabstop) = 8;
142   CPP_OPTION (pfile, operator_names) = 1;
143   CPP_OPTION (pfile, warn_trigraphs) = 2;
144   CPP_OPTION (pfile, warn_endif_labels) = 1;
145   CPP_OPTION (pfile, warn_deprecated) = 1;
146   CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
147   CPP_OPTION (pfile, dollars_in_ident) = 1;
148   CPP_OPTION (pfile, warn_dollars) = 1;
149
150   /* Default CPP arithmetic to something sensible for the host for the
151      benefit of dumb users like fix-header.  */
152   CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
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);
156   CPP_OPTION (pfile, unsigned_char) = 0;
157   CPP_OPTION (pfile, unsigned_wchar) = 1;
158   CPP_OPTION (pfile, bytes_big_endian) = 1;  /* does not matter */
159
160   /* Default to locale/UTF-8.  */
161   CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
162   CPP_OPTION (pfile, wide_charset) = 0;
163   CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
164
165   /* SDCC specific */
166   CPP_OPTION (pfile, preproc_asm) = 1;
167   CPP_OPTION (pfile, pedantic_parse_number) = 0;
168   CPP_OPTION (pfile, obj_ext) = NULL;
169
170   /* A fake empty "directory" used as the starting point for files
171      looked up without a search path.  Name cannot be '/' because we
172      don't want to prepend anything at all to filenames using it.  All
173      other entries are correct zero-initialized.  */
174   pfile->no_search_path.name = (char *) "";
175
176   /* Initialize the line map.  Start at logical line 1, so we can use
177      a line number of zero for special states.  */
178   linemap_init (&pfile->line_maps);
179   pfile->line = 1;
180
181   /* Initialize lexer state.  */
182   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
183
184   /* Set up static tokens.  */
185   pfile->avoid_paste.type = CPP_PADDING;
186   pfile->avoid_paste.val.source = NULL;
187   pfile->eof.type = CPP_EOF;
188   pfile->eof.flags = 0;
189
190   /* Create a token buffer for the lexer.  */
191   _cpp_init_tokenrun (&pfile->base_run, 250);
192   pfile->cur_run = &pfile->base_run;
193   pfile->cur_token = pfile->base_run.base;
194
195   /* Initialize the base context.  */
196   pfile->context = &pfile->base_context;
197   pfile->base_context.macro = 0;
198   pfile->base_context.prev = pfile->base_context.next = 0;
199
200   /* Aligned and unaligned storage.  */
201   pfile->a_buff = _cpp_get_buff (pfile, 0);
202   pfile->u_buff = _cpp_get_buff (pfile, 0);
203
204   /* The expression parser stack.  */
205   _cpp_expand_op_stack (pfile);
206
207   /* Initialize the buffer obstack.  */
208   _obstack_begin (&pfile->buffer_ob, 0, 0,
209                   (void *(*) (long)) xmalloc,
210                   (void (*) (void *)) free);
211
212   _cpp_init_files (pfile);
213
214   _cpp_init_hashtable (pfile, table);
215
216   return pfile;
217 }
218
219 /* Free resources used by PFILE.  Accessing PFILE after this function
220    returns leads to undefined behavior.  Returns the error count.  */
221 void
222 cpp_destroy (cpp_reader *pfile)
223 {
224   cpp_context *context, *contextn;
225   tokenrun *run, *runn;
226
227   free (pfile->op_stack);
228
229   while (CPP_BUFFER (pfile) != NULL)
230     _cpp_pop_buffer (pfile);
231
232   if (pfile->out.base)
233     free (pfile->out.base);
234
235   if (pfile->macro_buffer)
236     {
237       free (pfile->macro_buffer);
238       pfile->macro_buffer = NULL;
239       pfile->macro_buffer_len = 0;
240     }
241
242   if (pfile->deps)
243     deps_free (pfile->deps);
244   obstack_free (&pfile->buffer_ob, 0);
245
246   _cpp_destroy_hashtable (pfile);
247   _cpp_cleanup_files (pfile);
248   _cpp_destroy_iconv (pfile);
249
250   _cpp_free_buff (pfile->a_buff);
251   _cpp_free_buff (pfile->u_buff);
252   _cpp_free_buff (pfile->free_buffs);
253
254   for (run = &pfile->base_run; run; run = runn)
255     {
256       runn = run->next;
257       free (run->base);
258       if (run != &pfile->base_run)
259         free (run);
260     }
261
262   for (context = pfile->base_context.next; context; context = contextn)
263     {
264       contextn = context->next;
265       free (context);
266     }
267
268   linemap_free (&pfile->line_maps);
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, fname);
471     }
472
473   pfile->main_file
474     = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
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       if (!pfile->map)
486         return NULL;
487       fname = pfile->map->to_file;
488     }
489   return fname;
490 }
491
492 /* For preprocessed files, if the first tokens are of the form # NUM.
493    handle the directive so we know the original file name.  This will
494    generate file_change callbacks, which the front ends must handle
495    appropriately given their state of initialization.  */
496 static void
497 read_original_filename (cpp_reader *pfile)
498 {
499   const cpp_token *token, *token1;
500
501   /* Lex ahead; if the first tokens are of the form # NUM, then
502      process the directive, otherwise back up.  */
503   token = _cpp_lex_direct (pfile);
504   if (token->type == CPP_HASH)
505     {
506       pfile->state.in_directive = 1;
507       token1 = _cpp_lex_direct (pfile);
508       _cpp_backup_tokens (pfile, 1);
509       pfile->state.in_directive = 0;
510
511       /* If it's a #line directive, handle it.  */
512       if (token1->type == CPP_NUMBER)
513         {
514           _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
515           read_original_directory (pfile);
516           return;
517         }
518     }
519
520   /* Backup as if nothing happened.  */
521   _cpp_backup_tokens (pfile, 1);
522 }
523
524 /* For preprocessed files, if the tokens following the first filename
525    line is of the form # <line> "/path/name//", handle the
526    directive so we know the original current directory.  */
527 static void
528 read_original_directory (cpp_reader *pfile)
529 {
530   const cpp_token *hash, *token;
531
532   /* Lex ahead; if the first tokens are of the form # NUM, then
533      process the directive, otherwise back up.  */
534   hash = _cpp_lex_direct (pfile);
535   if (hash->type != CPP_HASH)
536     {
537       _cpp_backup_tokens (pfile, 1);
538       return;
539     }
540
541   token = _cpp_lex_direct (pfile);
542
543   if (token->type != CPP_NUMBER)
544     {
545       _cpp_backup_tokens (pfile, 2);
546       return;
547     }
548
549   token = _cpp_lex_direct (pfile);
550
551   if (token->type != CPP_STRING
552       || ! (token->val.str.len >= 5
553             && token->val.str.text[token->val.str.len-2] == '/'
554             && token->val.str.text[token->val.str.len-3] == '/'))
555     {
556       _cpp_backup_tokens (pfile, 3);
557       return;
558     }
559
560   if (pfile->cb.dir_change)
561     {
562       char *debugdir = alloca (token->val.str.len - 3);
563
564       memcpy (debugdir, (const char *) token->val.str.text + 1,
565               token->val.str.len - 4);
566       debugdir[token->val.str.len - 4] = '\0';
567
568       pfile->cb.dir_change (pfile, debugdir);
569     }
570 }
571
572 /* This is called at the end of preprocessing.  It pops the last
573    buffer and writes dependency output, and returns the number of
574    errors.
575
576    Maybe it should also reset state, such that you could call
577    cpp_start_read with a new filename to restart processing.  */
578 int
579 cpp_finish (cpp_reader *pfile, FILE *deps_stream)
580 {
581   /* Warn about unused macros before popping the final buffer.  */
582   if (CPP_OPTION (pfile, warn_unused_macros))
583     cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
584
585   /* cpplex.c leaves the final buffer on the stack.  This it so that
586      it returns an unending stream of CPP_EOFs to the client.  If we
587      popped the buffer, we'd dereference a NULL buffer pointer and
588      segfault.  It's nice to allow the client to do worry-free excess
589      cpp_get_token calls.  */
590   while (pfile->buffer)
591     _cpp_pop_buffer (pfile);
592
593   /* Don't write the deps file if there are errors.  */
594   if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
595       && deps_stream && pfile->errors == 0)
596     {
597       deps_write (pfile->deps, deps_stream, 72);
598
599       if (CPP_OPTION (pfile, deps.phony_targets))
600         deps_phony_targets (pfile->deps, deps_stream);
601     }
602
603   /* Report on headers that could use multiple include guards.  */
604   if (CPP_OPTION (pfile, print_include_names))
605     _cpp_report_missing_guards (pfile);
606
607   return pfile->errors;
608 }
609
610 static void
611 post_options (cpp_reader *pfile)
612 {
613   /* -Wtraditional is not useful in C++ mode.  */
614   if (CPP_OPTION (pfile, cplusplus))
615     CPP_OPTION (pfile, warn_traditional) = 0;
616
617   /* Permanently disable macro expansion if we are rescanning
618      preprocessed text.  Read preprocesed source in ISO mode.  */
619   if (CPP_OPTION (pfile, preprocessed))
620     {
621       pfile->state.prevent_expansion = 1;
622       CPP_OPTION (pfile, traditional) = 0;
623     }
624
625   if (CPP_OPTION (pfile, warn_trigraphs) == 2)
626     CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
627
628   if (CPP_OPTION (pfile, traditional))
629     {
630       CPP_OPTION (pfile, cplusplus_comments) = 0;
631
632       /* Traditional CPP does not accurately track column information.  */
633       CPP_OPTION (pfile, show_column) = 0;
634       CPP_OPTION (pfile, trigraphs) = 0;
635       CPP_OPTION (pfile, warn_trigraphs) = 0;
636     }
637 }