OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [libcpp/] [init.c] - Blame information for rev 19

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 jlechner
/* 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 extended_identifiers;
76
  char std;
77
  char cplusplus_comments;
78
  char digraphs;
79
};
80
 
81
static const struct lang_flags lang_defaults[] =
82
{ /*              c99 c++ xnum xid std  //   digr  */
83
  /* GNUC89 */  { 0,  0,  1,   0,  0,   1,   1     },
84
  /* GNUC99 */  { 1,  0,  1,   0,  0,   1,   1     },
85
  /* STDC89 */  { 0,  0,  0,   0,  1,   0,   0     },
86
  /* STDC94 */  { 0,  0,  0,   0,  1,   0,   1     },
87
  /* STDC99 */  { 1,  0,  1,   0,  1,   1,   1     },
88
  /* GNUCXX */  { 0,  1,  1,   0,  0,   1,   1     },
89
  /* CXX98  */  { 0,  1,  1,   0,  1,   1,   1     },
90
  /* ASM    */  { 0,  0,  1,   0,  0,   1,   0     }
91
  /* xid should be 1 for GNUC99, STDC99, GNUCXX and CXX98 when no
92
     longer experimental (when all uses of identifiers in the compiler
93
     have been audited for correct handling of extended
94
     identifiers).  */
95
};
96
 
97
/* Sets internal flags correctly for a given language.  */
98
void
99
cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
100
{
101
  const struct lang_flags *l = &lang_defaults[(int) lang];
102
 
103
  CPP_OPTION (pfile, lang) = lang;
104
 
105
  CPP_OPTION (pfile, c99)                        = l->c99;
106
  CPP_OPTION (pfile, cplusplus)                  = l->cplusplus;
107
  CPP_OPTION (pfile, extended_numbers)           = l->extended_numbers;
108
  CPP_OPTION (pfile, extended_identifiers)       = l->extended_identifiers;
109
  CPP_OPTION (pfile, std)                        = l->std;
110
  CPP_OPTION (pfile, trigraphs)                  = l->std;
111
  CPP_OPTION (pfile, cplusplus_comments)         = l->cplusplus_comments;
112
  CPP_OPTION (pfile, digraphs)                   = l->digraphs;
113
}
114
 
115
/* Initialize library global state.  */
116
static void
117
init_library (void)
118
{
119
  static int initialized = 0;
120
 
121
  if (! initialized)
122
    {
123
      initialized = 1;
124
 
125
      /* Set up the trigraph map.  This doesn't need to do anything if
126
         we were compiled with a compiler that supports C99 designated
127
         initializers.  */
128
      init_trigraph_map ();
129
 
130
#ifdef ENABLE_NLS
131
       (void) bindtextdomain (PACKAGE, LOCALEDIR);
132
#endif
133
    }
134
}
135
 
136
/* Initialize a cpp_reader structure.  */
137
cpp_reader *
138
cpp_create_reader (enum c_lang lang, hash_table *table,
139
                   struct line_maps *line_table)
140
{
141
  cpp_reader *pfile;
142
 
143
  /* Initialize this instance of the library if it hasn't been already.  */
144
  init_library ();
145
 
146
  pfile = XCNEW (cpp_reader);
147
 
148
  cpp_set_lang (pfile, lang);
149
  CPP_OPTION (pfile, warn_multichar) = 1;
150
  CPP_OPTION (pfile, discard_comments) = 1;
151
  CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
152
  CPP_OPTION (pfile, show_column) = 1;
153
  CPP_OPTION (pfile, tabstop) = 8;
154
  CPP_OPTION (pfile, operator_names) = 1;
155
  CPP_OPTION (pfile, warn_trigraphs) = 2;
156
  CPP_OPTION (pfile, warn_endif_labels) = 1;
157
  CPP_OPTION (pfile, warn_deprecated) = 1;
158
  CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
159
  CPP_OPTION (pfile, dollars_in_ident) = 1;
160
  CPP_OPTION (pfile, warn_dollars) = 1;
161
  CPP_OPTION (pfile, warn_variadic_macros) = 1;
162
  CPP_OPTION (pfile, warn_normalize) = normalized_C;
163
 
164
  /* Default CPP arithmetic to something sensible for the host for the
165
     benefit of dumb users like fix-header.  */
166
  CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
167
  CPP_OPTION (pfile, char_precision) = CHAR_BIT;
168
  CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
169
  CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
170
  CPP_OPTION (pfile, unsigned_char) = 0;
171
  CPP_OPTION (pfile, unsigned_wchar) = 1;
172
  CPP_OPTION (pfile, bytes_big_endian) = 1;  /* does not matter */
173
 
174
  /* Default to no charset conversion.  */
175
  CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
176
  CPP_OPTION (pfile, wide_charset) = 0;
177
 
178
  /* Default the input character set to UTF-8.  */
179
  CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
180
 
181
  /* A fake empty "directory" used as the starting point for files
182
     looked up without a search path.  Name cannot be '/' because we
183
     don't want to prepend anything at all to filenames using it.  All
184
     other entries are correct zero-initialized.  */
185
  pfile->no_search_path.name = (char *) "";
186
 
187
  /* Initialize the line map.  */
188
  pfile->line_table = line_table;
189
 
190
  /* Initialize lexer state.  */
191
  pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
192
 
193
  /* Set up static tokens.  */
194
  pfile->avoid_paste.type = CPP_PADDING;
195
  pfile->avoid_paste.val.source = NULL;
196
  pfile->eof.type = CPP_EOF;
197
  pfile->eof.flags = 0;
198
 
199
  /* Create a token buffer for the lexer.  */
200
  _cpp_init_tokenrun (&pfile->base_run, 250);
201
  pfile->cur_run = &pfile->base_run;
202
  pfile->cur_token = pfile->base_run.base;
203
 
204
  /* Initialize the base context.  */
205
  pfile->context = &pfile->base_context;
206
  pfile->base_context.macro = 0;
207
  pfile->base_context.prev = pfile->base_context.next = 0;
208
 
209
  /* Aligned and unaligned storage.  */
210
  pfile->a_buff = _cpp_get_buff (pfile, 0);
211
  pfile->u_buff = _cpp_get_buff (pfile, 0);
212
 
213
  /* The expression parser stack.  */
214
  _cpp_expand_op_stack (pfile);
215
 
216
  /* Initialize the buffer obstack.  */
217
  _obstack_begin (&pfile->buffer_ob, 0, 0,
218
                  (void *(*) (long)) xmalloc,
219
                  (void (*) (void *)) free);
220
 
221
  _cpp_init_files (pfile);
222
 
223
  _cpp_init_hashtable (pfile, table);
224
 
225
  return pfile;
226
}
227
 
228
/* Free resources used by PFILE.  Accessing PFILE after this function
229
   returns leads to undefined behavior.  Returns the error count.  */
230
void
231
cpp_destroy (cpp_reader *pfile)
232
{
233
  cpp_context *context, *contextn;
234
  tokenrun *run, *runn;
235
 
236
  free (pfile->op_stack);
237
 
238
  while (CPP_BUFFER (pfile) != NULL)
239
    _cpp_pop_buffer (pfile);
240
 
241
  if (pfile->out.base)
242
    free (pfile->out.base);
243
 
244
  if (pfile->macro_buffer)
245
    {
246
      free (pfile->macro_buffer);
247
      pfile->macro_buffer = NULL;
248
      pfile->macro_buffer_len = 0;
249
    }
250
 
251
  if (pfile->deps)
252
    deps_free (pfile->deps);
253
  obstack_free (&pfile->buffer_ob, 0);
254
 
255
  _cpp_destroy_hashtable (pfile);
256
  _cpp_cleanup_files (pfile);
257
  _cpp_destroy_iconv (pfile);
258
 
259
  _cpp_free_buff (pfile->a_buff);
260
  _cpp_free_buff (pfile->u_buff);
261
  _cpp_free_buff (pfile->free_buffs);
262
 
263
  for (run = &pfile->base_run; run; run = runn)
264
    {
265
      runn = run->next;
266
      free (run->base);
267
      if (run != &pfile->base_run)
268
        free (run);
269
    }
270
 
271
  for (context = pfile->base_context.next; context; context = contextn)
272
    {
273
      contextn = context->next;
274
      free (context);
275
    }
276
 
277
  free (pfile);
278
}
279
 
280
/* This structure defines one built-in identifier.  A node will be
281
   entered in the hash table under the name NAME, with value VALUE.
282
 
283
   There are two tables of these.  builtin_array holds all the
284
   "builtin" macros: these are handled by builtin_macro() in
285
   macro.c.  Builtin is somewhat of a misnomer -- the property of
286
   interest is that these macros require special code to compute their
287
   expansions.  The value is a "builtin_type" enumerator.
288
 
289
   operator_array holds the C++ named operators.  These are keywords
290
   which act as aliases for punctuators.  In C++, they cannot be
291
   altered through #define, and #if recognizes them as operators.  In
292
   C, these are not entered into the hash table at all (but see
293
   <iso646.h>).  The value is a token-type enumerator.  */
294
struct builtin
295
{
296
  const uchar *name;
297
  unsigned short len;
298
  unsigned short value;
299
};
300
 
301
#define B(n, t)    { DSC(n), t }
302
static const struct builtin builtin_array[] =
303
{
304
  B("__TIME__",          BT_TIME),
305
  B("__DATE__",          BT_DATE),
306
  B("__FILE__",          BT_FILE),
307
  B("__BASE_FILE__",     BT_BASE_FILE),
308
  B("__LINE__",          BT_SPECLINE),
309
  B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
310
  /* Keep builtins not used for -traditional-cpp at the end, and
311
     update init_builtins() if any more are added.  */
312
  B("_Pragma",           BT_PRAGMA),
313
  B("__STDC__",          BT_STDC),
314
};
315
 
316
static const struct builtin operator_array[] =
317
{
318
  B("and",      CPP_AND_AND),
319
  B("and_eq",   CPP_AND_EQ),
320
  B("bitand",   CPP_AND),
321
  B("bitor",    CPP_OR),
322
  B("compl",    CPP_COMPL),
323
  B("not",      CPP_NOT),
324
  B("not_eq",   CPP_NOT_EQ),
325
  B("or",       CPP_OR_OR),
326
  B("or_eq",    CPP_OR_EQ),
327
  B("xor",      CPP_XOR),
328
  B("xor_eq",   CPP_XOR_EQ)
329
};
330
#undef B
331
 
332
/* Mark the C++ named operators in the hash table.  */
333
static void
334
mark_named_operators (cpp_reader *pfile)
335
{
336
  const struct builtin *b;
337
 
338
  for (b = operator_array;
339
       b < (operator_array + ARRAY_SIZE (operator_array));
340
       b++)
341
    {
342
      cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
343
      hp->flags |= NODE_OPERATOR;
344
      hp->is_directive = 0;
345
      hp->directive_index = b->value;
346
    }
347
}
348
 
349
/* Read the builtins table above and enter them, and language-specific
350
   macros, into the hash table.  HOSTED is true if this is a hosted
351
   environment.  */
352
void
353
cpp_init_builtins (cpp_reader *pfile, int hosted)
354
{
355
  const struct builtin *b;
356
  size_t n = ARRAY_SIZE (builtin_array);
357
 
358
  if (CPP_OPTION (pfile, traditional))
359
    n -= 2;
360
  else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
361
           || CPP_OPTION (pfile, std))
362
    {
363
      n--;
364
      _cpp_define_builtin (pfile, "__STDC__ 1");
365
    }
366
 
367
  for (b = builtin_array; b < builtin_array + n; b++)
368
    {
369
      cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
370
      hp->type = NT_MACRO;
371
      hp->flags |= NODE_BUILTIN | NODE_WARN;
372
      hp->value.builtin = (enum builtin_type) b->value;
373
    }
374
 
375
  if (CPP_OPTION (pfile, cplusplus))
376
    _cpp_define_builtin (pfile, "__cplusplus 1");
377
  else if (CPP_OPTION (pfile, lang) == CLK_ASM)
378
    _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
379
  else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
380
    _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
381
  else if (CPP_OPTION (pfile, c99))
382
    _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
383
 
384
  if (hosted)
385
    _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
386
  else
387
    _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
388
 
389
  if (CPP_OPTION (pfile, objc))
390
    _cpp_define_builtin (pfile, "__OBJC__ 1");
391
}
392
 
393
/* Sanity-checks are dependent on command-line options, so it is
394
   called as a subroutine of cpp_read_main_file ().  */
395
#if ENABLE_CHECKING
396
static void sanity_checks (cpp_reader *);
397
static void sanity_checks (cpp_reader *pfile)
398
{
399
  cppchar_t test = 0;
400
  size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
401
 
402
  /* Sanity checks for assumptions about CPP arithmetic and target
403
     type precisions made by cpplib.  */
404
  test--;
405
  if (test < 1)
406
    cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
407
 
408
  if (CPP_OPTION (pfile, precision) > max_precision)
409
    cpp_error (pfile, CPP_DL_ICE,
410
               "preprocessor arithmetic has maximum precision of %lu bits;"
411
               " target requires %lu bits",
412
               (unsigned long) max_precision,
413
               (unsigned long) CPP_OPTION (pfile, precision));
414
 
415
  if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
416
    cpp_error (pfile, CPP_DL_ICE,
417
               "CPP arithmetic must be at least as precise as a target int");
418
 
419
  if (CPP_OPTION (pfile, char_precision) < 8)
420
    cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
421
 
422
  if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
423
    cpp_error (pfile, CPP_DL_ICE,
424
               "target wchar_t is narrower than target char");
425
 
426
  if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
427
    cpp_error (pfile, CPP_DL_ICE,
428
               "target int is narrower than target char");
429
 
430
  /* This is assumed in eval_token() and could be fixed if necessary.  */
431
  if (sizeof (cppchar_t) > sizeof (cpp_num_part))
432
    cpp_error (pfile, CPP_DL_ICE,
433
               "CPP half-integer narrower than CPP character");
434
 
435
  if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
436
    cpp_error (pfile, CPP_DL_ICE,
437
               "CPP on this host cannot handle wide character constants over"
438
               " %lu bits, but the target requires %lu bits",
439
               (unsigned long) BITS_PER_CPPCHAR_T,
440
               (unsigned long) CPP_OPTION (pfile, wchar_precision));
441
}
442
#else
443
# define sanity_checks(PFILE)
444
#endif
445
 
446
/* This is called after options have been parsed, and partially
447
   processed.  */
448
void
449
cpp_post_options (cpp_reader *pfile)
450
{
451
  sanity_checks (pfile);
452
 
453
  post_options (pfile);
454
 
455
  /* Mark named operators before handling command line macros.  */
456
  if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
457
    mark_named_operators (pfile);
458
}
459
 
460
/* Setup for processing input from the file named FNAME, or stdin if
461
   it is the empty string.  Return the original filename
462
   on success (e.g. foo.i->foo.c), or NULL on failure.  */
463
const char *
464
cpp_read_main_file (cpp_reader *pfile, const char *fname)
465
{
466
  if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
467
    {
468
      if (!pfile->deps)
469
        pfile->deps = deps_init ();
470
 
471
      /* Set the default target (if there is none already).  */
472
      deps_add_default_target (pfile->deps, fname);
473
    }
474
 
475
  pfile->main_file
476
    = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
477
  if (_cpp_find_failed (pfile->main_file))
478
    return NULL;
479
 
480
  _cpp_stack_file (pfile, pfile->main_file, false);
481
 
482
  /* For foo.i, read the original filename foo.c now, for the benefit
483
     of the front ends.  */
484
  if (CPP_OPTION (pfile, preprocessed))
485
    {
486
      read_original_filename (pfile);
487
      fname = pfile->line_table->maps[pfile->line_table->used-1].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 = (char *) 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
  /* lex.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
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.