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

Subversion Repositories scarts

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 jlechner
/* CPP Library. (Directive handling.)
2
   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3
   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
4
   Free Software Foundation, Inc.
5
   Contributed by Per Bothner, 1994-95.
6
   Based on CCCP program by Paul Rubin, June 1986
7
   Adapted to ANSI C, Richard Stallman, Jan 1987
8
 
9
This program is free software; you can redistribute it and/or modify it
10
under the terms of the GNU General Public License as published by the
11
Free Software Foundation; either version 2, or (at your option) any
12
later version.
13
 
14
This program is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
GNU General Public License for more details.
18
 
19
You should have received a copy of the GNU General Public License
20
along with this program; if not, write to the Free Software
21
Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
22
 
23
#include "config.h"
24
#include "system.h"
25
#include "cpplib.h"
26
#include "internal.h"
27
#include "mkdeps.h"
28
#include "obstack.h"
29
 
30
/* Stack of conditionals currently in progress
31
   (including both successful and failing conditionals).  */
32
struct if_stack
33
{
34
  struct if_stack *next;
35
  unsigned int line;            /* Line where condition started.  */
36
  const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
37
  bool skip_elses;              /* Can future #else / #elif be skipped?  */
38
  bool was_skipping;            /* If were skipping on entry.  */
39
  int type;                     /* Most recent conditional for diagnostics.  */
40
};
41
 
42
/* Contains a registered pragma or pragma namespace.  */
43
typedef void (*pragma_cb) (cpp_reader *);
44
struct pragma_entry
45
{
46
  struct pragma_entry *next;
47
  const cpp_hashnode *pragma;   /* Name and length.  */
48
  bool is_nspace;
49
  bool allow_expansion;
50
  bool is_internal;
51
  union {
52
    pragma_cb handler;
53
    struct pragma_entry *space;
54
  } u;
55
};
56
 
57
/* Values for the origin field of struct directive.  KANDR directives
58
   come from traditional (K&R) C.  STDC89 directives come from the
59
   1989 C standard.  EXTENSION directives are extensions.  */
60
#define KANDR           0
61
#define STDC89          1
62
#define EXTENSION       2
63
 
64
/* Values for the flags field of struct directive.  COND indicates a
65
   conditional; IF_COND an opening conditional.  INCL means to treat
66
   "..." and <...> as q-char and h-char sequences respectively.  IN_I
67
   means this directive should be handled even if -fpreprocessed is in
68
   effect (these are the directives with callback hooks).
69
 
70
   EXPAND is set on directives that are always macro-expanded.  */
71
#define COND            (1 << 0)
72
#define IF_COND         (1 << 1)
73
#define INCL            (1 << 2)
74
#define IN_I            (1 << 3)
75
#define EXPAND          (1 << 4)
76
 
77
/* Defines one #-directive, including how to handle it.  */
78
typedef void (*directive_handler) (cpp_reader *);
79
typedef struct directive directive;
80
struct directive
81
{
82
  directive_handler handler;    /* Function to handle directive.  */
83
  const uchar *name;            /* Name of directive.  */
84
  unsigned short length;        /* Length of name.  */
85
  unsigned char origin;         /* Origin of directive.  */
86
  unsigned char flags;          /* Flags describing this directive.  */
87
};
88
 
89
/* Forward declarations.  */
90
 
91
static void skip_rest_of_line (cpp_reader *);
92
static void check_eol (cpp_reader *);
93
static void start_directive (cpp_reader *);
94
static void prepare_directive_trad (cpp_reader *);
95
static void end_directive (cpp_reader *, int);
96
static void directive_diagnostics (cpp_reader *, const directive *, int);
97
static void run_directive (cpp_reader *, int, const char *, size_t);
98
static char *glue_header_name (cpp_reader *);
99
static const char *parse_include (cpp_reader *, int *, const cpp_token ***);
100
static void push_conditional (cpp_reader *, int, int, const cpp_hashnode *);
101
static unsigned int read_flag (cpp_reader *, unsigned int);
102
static int strtoul_for_line (const uchar *, unsigned int, unsigned long *);
103
static void do_diagnostic (cpp_reader *, int, int);
104
static cpp_hashnode *lex_macro_node (cpp_reader *);
105
static int undefine_macros (cpp_reader *, cpp_hashnode *, void *);
106
static void do_include_common (cpp_reader *, enum include_type);
107
static struct pragma_entry *lookup_pragma_entry (struct pragma_entry *,
108
                                                 const cpp_hashnode *);
109
static struct pragma_entry *insert_pragma_entry (cpp_reader *,
110
                                                 struct pragma_entry **,
111
                                                 const cpp_hashnode *,
112
                                                 pragma_cb,
113
                                                 bool, bool);
114
static void register_pragma (cpp_reader *, const char *, const char *,
115
                             pragma_cb, bool, bool);
116
static int count_registered_pragmas (struct pragma_entry *);
117
static char ** save_registered_pragmas (struct pragma_entry *, char **);
118
static char ** restore_registered_pragmas (cpp_reader *, struct pragma_entry *,
119
                                           char **);
120
static void do_pragma_once (cpp_reader *);
121
static void do_pragma_poison (cpp_reader *);
122
static void do_pragma_system_header (cpp_reader *);
123
static void do_pragma_dependency (cpp_reader *);
124
static void do_linemarker (cpp_reader *);
125
static const cpp_token *get_token_no_padding (cpp_reader *);
126
static const cpp_token *get__Pragma_string (cpp_reader *);
127
static void destringize_and_run (cpp_reader *, const cpp_string *);
128
static int parse_answer (cpp_reader *, struct answer **, int);
129
static cpp_hashnode *parse_assertion (cpp_reader *, struct answer **, int);
130
static struct answer ** find_answer (cpp_hashnode *, const struct answer *);
131
static void handle_assertion (cpp_reader *, const char *, int);
132
 
133
/* This is the table of directive handlers.  It is ordered by
134
   frequency of occurrence; the numbers at the end are directive
135
   counts from all the source code I have lying around (egcs and libc
136
   CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
137
   pcmcia-cs-3.0.9).  This is no longer important as directive lookup
138
   is now O(1).  All extensions other than #warning and #include_next
139
   are deprecated.  The name is where the extension appears to have
140
   come from.  */
141
 
142
#define DIRECTIVE_TABLE                                                 \
143
D(define,       T_DEFINE = 0,    KANDR,     IN_I)           /* 270554 */ \
144
D(include,      T_INCLUDE,      KANDR,     INCL | EXPAND)  /*  52262 */ \
145
D(endif,        T_ENDIF,        KANDR,     COND)           /*  45855 */ \
146
D(ifdef,        T_IFDEF,        KANDR,     COND | IF_COND) /*  22000 */ \
147
D(if,           T_IF,           KANDR, COND | IF_COND | EXPAND) /*  18162 */ \
148
D(else,         T_ELSE,         KANDR,     COND)           /*   9863 */ \
149
D(ifndef,       T_IFNDEF,       KANDR,     COND | IF_COND) /*   9675 */ \
150
D(undef,        T_UNDEF,        KANDR,     IN_I)           /*   4837 */ \
151
D(line,         T_LINE,         KANDR,     EXPAND)         /*   2465 */ \
152
D(elif,         T_ELIF,         STDC89,    COND | EXPAND)  /*    610 */ \
153
D(error,        T_ERROR,        STDC89,    0)               /*    475 */ \
154
D(pragma,       T_PRAGMA,       STDC89,    IN_I)           /*    195 */ \
155
D(warning,      T_WARNING,      EXTENSION, 0)               /*     22 */ \
156
D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL | EXPAND)  /*     19 */ \
157
D(ident,        T_IDENT,        EXTENSION, IN_I)           /*     11 */ \
158
D(import,       T_IMPORT,       EXTENSION, INCL | EXPAND)  /* 0 ObjC */ \
159
D(assert,       T_ASSERT,       EXTENSION, 0)               /* 0 SVR4 */ \
160
D(unassert,     T_UNASSERT,     EXTENSION, 0)               /* 0 SVR4 */ \
161
D(sccs,         T_SCCS,         EXTENSION, IN_I)           /* 0 SVR4? */
162
 
163
/* #sccs is synonymous with #ident.  */
164
#define do_sccs do_ident
165
 
166
/* Use the table to generate a series of prototypes, an enum for the
167
   directive names, and an array of directive handlers.  */
168
 
169
#define D(name, t, o, f) static void do_##name (cpp_reader *);
170
DIRECTIVE_TABLE
171
#undef D
172
 
173
#define D(n, tag, o, f) tag,
174
enum
175
{
176
  DIRECTIVE_TABLE
177
  N_DIRECTIVES
178
};
179
#undef D
180
 
181
#define D(name, t, origin, flags) \
182
{ do_##name, (const uchar *) #name, \
183
  sizeof #name - 1, origin, flags },
184
static const directive dtable[] =
185
{
186
DIRECTIVE_TABLE
187
};
188
#undef D
189
#undef DIRECTIVE_TABLE
190
 
191
/* Wrapper struct directive for linemarkers.
192
   The origin is more or less true - the original K+R cpp
193
   did use this notation in its preprocessed output.  */
194
static const directive linemarker_dir =
195
{
196
  do_linemarker, U"#", 1, KANDR, IN_I
197
};
198
 
199
#define SEEN_EOL() (pfile->cur_token[-1].type == CPP_EOF)
200
 
201
/* Skip any remaining tokens in a directive.  */
202
static void
203
skip_rest_of_line (cpp_reader *pfile)
204
{
205
  /* Discard all stacked contexts.  */
206
  while (pfile->context->prev)
207
    _cpp_pop_context (pfile);
208
 
209
  /* Sweep up all tokens remaining on the line.  */
210
  if (! SEEN_EOL ())
211
    while (_cpp_lex_token (pfile)->type != CPP_EOF)
212
      ;
213
}
214
 
215
/* Ensure there are no stray tokens at the end of a directive.  */
216
static void
217
check_eol (cpp_reader *pfile)
218
{
219
  if (! SEEN_EOL () && _cpp_lex_token (pfile)->type != CPP_EOF)
220
    cpp_error (pfile, CPP_DL_PEDWARN, "extra tokens at end of #%s directive",
221
               pfile->directive->name);
222
}
223
 
224
/* Ensure there are no stray tokens other than comments at the end of
225
   a directive, and gather the comments.  */
226
static const cpp_token **
227
check_eol_return_comments (cpp_reader *pfile)
228
{
229
  size_t c;
230
  size_t capacity = 8;
231
  const cpp_token **buf;
232
 
233
  buf = XNEWVEC (const cpp_token *, capacity);
234
  c = 0;
235
  if (! SEEN_EOL ())
236
    {
237
      while (1)
238
        {
239
          const cpp_token *tok;
240
 
241
          tok = _cpp_lex_token (pfile);
242
          if (tok->type == CPP_EOF)
243
            break;
244
          if (tok->type != CPP_COMMENT)
245
            cpp_error (pfile, CPP_DL_PEDWARN,
246
                       "extra tokens at end of #%s directive",
247
                       pfile->directive->name);
248
          else
249
            {
250
              if (c + 1 >= capacity)
251
                {
252
                  capacity *= 2;
253
                  buf = XRESIZEVEC (const cpp_token *, buf, capacity);
254
                }
255
              buf[c] = tok;
256
              ++c;
257
            }
258
        }
259
    }
260
  buf[c] = NULL;
261
  return buf;
262
}
263
 
264
/* Called when entering a directive, _Pragma or command-line directive.  */
265
static void
266
start_directive (cpp_reader *pfile)
267
{
268
  /* Setup in-directive state.  */
269
  pfile->state.in_directive = 1;
270
  pfile->state.save_comments = 0;
271
  pfile->directive_result.type = CPP_PADDING;
272
 
273
  /* Some handlers need the position of the # for diagnostics.  */
274
  pfile->directive_line = pfile->line_table->highest_line;
275
}
276
 
277
/* Called when leaving a directive, _Pragma or command-line directive.  */
278
static void
279
end_directive (cpp_reader *pfile, int skip_line)
280
{
281
  if (CPP_OPTION (pfile, traditional))
282
    {
283
      /* Revert change of prepare_directive_trad.  */
284
      pfile->state.prevent_expansion--;
285
 
286
      if (pfile->directive != &dtable[T_DEFINE])
287
        _cpp_remove_overlay (pfile);
288
    }
289
  /* We don't skip for an assembler #.  */
290
  else if (skip_line)
291
    {
292
      skip_rest_of_line (pfile);
293
      if (!pfile->keep_tokens)
294
        {
295
          pfile->cur_run = &pfile->base_run;
296
          pfile->cur_token = pfile->base_run.base;
297
        }
298
    }
299
 
300
  /* Restore state.  */
301
  pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
302
  pfile->state.in_directive = 0;
303
  pfile->state.in_expression = 0;
304
  pfile->state.angled_headers = 0;
305
  pfile->directive = 0;
306
}
307
 
308
/* Prepare to handle the directive in pfile->directive.  */
309
static void
310
prepare_directive_trad (cpp_reader *pfile)
311
{
312
  if (pfile->directive != &dtable[T_DEFINE])
313
    {
314
      bool no_expand = (pfile->directive
315
                        && ! (pfile->directive->flags & EXPAND));
316
      bool was_skipping = pfile->state.skipping;
317
 
318
      pfile->state.in_expression = (pfile->directive == &dtable[T_IF]
319
                                    || pfile->directive == &dtable[T_ELIF]);
320
      if (pfile->state.in_expression)
321
        pfile->state.skipping = false;
322
 
323
      if (no_expand)
324
        pfile->state.prevent_expansion++;
325
      _cpp_scan_out_logical_line (pfile, NULL);
326
      if (no_expand)
327
        pfile->state.prevent_expansion--;
328
 
329
      pfile->state.skipping = was_skipping;
330
      _cpp_overlay_buffer (pfile, pfile->out.base,
331
                           pfile->out.cur - pfile->out.base);
332
    }
333
 
334
  /* Stop ISO C from expanding anything.  */
335
  pfile->state.prevent_expansion++;
336
}
337
 
338
/* Output diagnostics for a directive DIR.  INDENTED is nonzero if
339
   the '#' was indented.  */
340
static void
341
directive_diagnostics (cpp_reader *pfile, const directive *dir, int indented)
342
{
343
  /* Issue -pedantic warnings for extensions.  */
344
  if (CPP_PEDANTIC (pfile)
345
      && ! pfile->state.skipping
346
      && dir->origin == EXTENSION)
347
    cpp_error (pfile, CPP_DL_PEDWARN, "#%s is a GCC extension", dir->name);
348
 
349
  /* Traditionally, a directive is ignored unless its # is in
350
     column 1.  Therefore in code intended to work with K+R
351
     compilers, directives added by C89 must have their #
352
     indented, and directives present in traditional C must not.
353
     This is true even of directives in skipped conditional
354
     blocks.  #elif cannot be used at all.  */
355
  if (CPP_WTRADITIONAL (pfile))
356
    {
357
      if (dir == &dtable[T_ELIF])
358
        cpp_error (pfile, CPP_DL_WARNING,
359
                   "suggest not using #elif in traditional C");
360
      else if (indented && dir->origin == KANDR)
361
        cpp_error (pfile, CPP_DL_WARNING,
362
                   "traditional C ignores #%s with the # indented",
363
                   dir->name);
364
      else if (!indented && dir->origin != KANDR)
365
        cpp_error (pfile, CPP_DL_WARNING,
366
                   "suggest hiding #%s from traditional C with an indented #",
367
                   dir->name);
368
    }
369
}
370
 
371
/* Check if we have a known directive.  INDENTED is nonzero if the
372
   '#' of the directive was indented.  This function is in this file
373
   to save unnecessarily exporting dtable etc. to lex.c.  Returns
374
   nonzero if the line of tokens has been handled, zero if we should
375
   continue processing the line.  */
376
int
377
_cpp_handle_directive (cpp_reader *pfile, int indented)
378
{
379
  const directive *dir = 0;
380
  const cpp_token *dname;
381
  bool was_parsing_args = pfile->state.parsing_args;
382
  bool was_discarding_output = pfile->state.discarding_output;
383
  int skip = 1;
384
 
385
  if (was_discarding_output)
386
    pfile->state.prevent_expansion = 0;
387
 
388
  if (was_parsing_args)
389
    {
390
      if (CPP_OPTION (pfile, pedantic))
391
        cpp_error (pfile, CPP_DL_PEDWARN,
392
             "embedding a directive within macro arguments is not portable");
393
      pfile->state.parsing_args = 0;
394
      pfile->state.prevent_expansion = 0;
395
    }
396
  start_directive (pfile);
397
  dname = _cpp_lex_token (pfile);
398
 
399
  if (dname->type == CPP_NAME)
400
    {
401
      if (dname->val.node->is_directive)
402
        dir = &dtable[dname->val.node->directive_index];
403
    }
404
  /* We do not recognize the # followed by a number extension in
405
     assembler code.  */
406
  else if (dname->type == CPP_NUMBER && CPP_OPTION (pfile, lang) != CLK_ASM)
407
    {
408
      dir = &linemarker_dir;
409
      if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed)
410
          && ! pfile->state.skipping)
411
        cpp_error (pfile, CPP_DL_PEDWARN,
412
                   "style of line directive is a GCC extension");
413
    }
414
 
415
  if (dir)
416
    {
417
      /* If we have a directive that is not an opening conditional,
418
         invalidate any control macro.  */
419
      if (! (dir->flags & IF_COND))
420
        pfile->mi_valid = false;
421
 
422
      /* Kluge alert.  In order to be sure that code like this
423
 
424
         #define HASH #
425
         HASH define foo bar
426
 
427
         does not cause '#define foo bar' to get executed when
428
         compiled with -save-temps, we recognize directives in
429
         -fpreprocessed mode only if the # is in column 1.  macro.c
430
         puts a space in front of any '#' at the start of a macro.  */
431
      if (CPP_OPTION (pfile, preprocessed)
432
          && (indented || !(dir->flags & IN_I)))
433
        {
434
          skip = 0;
435
          dir = 0;
436
        }
437
      else
438
        {
439
          /* In failed conditional groups, all non-conditional
440
             directives are ignored.  Before doing that, whether
441
             skipping or not, we should lex angle-bracketed headers
442
             correctly, and maybe output some diagnostics.  */
443
          pfile->state.angled_headers = dir->flags & INCL;
444
          pfile->state.directive_wants_padding = dir->flags & INCL;
445
          if (! CPP_OPTION (pfile, preprocessed))
446
            directive_diagnostics (pfile, dir, indented);
447
          if (pfile->state.skipping && !(dir->flags & COND))
448
            dir = 0;
449
        }
450
    }
451
  else if (dname->type == CPP_EOF)
452
    ;   /* CPP_EOF is the "null directive".  */
453
  else
454
    {
455
      /* An unknown directive.  Don't complain about it in assembly
456
         source: we don't know where the comments are, and # may
457
         introduce assembler pseudo-ops.  Don't complain about invalid
458
         directives in skipped conditional groups (6.10 p4).  */
459
      if (CPP_OPTION (pfile, lang) == CLK_ASM)
460
        skip = 0;
461
      else if (!pfile->state.skipping)
462
        cpp_error (pfile, CPP_DL_ERROR, "invalid preprocessing directive #%s",
463
                   cpp_token_as_text (pfile, dname));
464
    }
465
 
466
  pfile->directive = dir;
467
  if (CPP_OPTION (pfile, traditional))
468
    prepare_directive_trad (pfile);
469
 
470
  if (dir)
471
    pfile->directive->handler (pfile);
472
  else if (skip == 0)
473
    _cpp_backup_tokens (pfile, 1);
474
 
475
  end_directive (pfile, skip);
476
  if (was_parsing_args)
477
    {
478
      /* Restore state when within macro args.  */
479
      pfile->state.parsing_args = 2;
480
      pfile->state.prevent_expansion = 1;
481
    }
482
  if (was_discarding_output)
483
    pfile->state.prevent_expansion = 1;
484
  return skip;
485
}
486
 
487
/* Directive handler wrapper used by the command line option
488
   processor.  BUF is \n terminated.  */
489
static void
490
run_directive (cpp_reader *pfile, int dir_no, const char *buf, size_t count)
491
{
492
  cpp_push_buffer (pfile, (const uchar *) buf, count,
493
                   /* from_stage3 */ true);
494
  /* Disgusting hack.  */
495
  if (dir_no == T_PRAGMA && pfile->buffer->prev)
496
    pfile->buffer->file = pfile->buffer->prev->file;
497
  start_directive (pfile);
498
 
499
  /* This is a short-term fix to prevent a leading '#' being
500
     interpreted as a directive.  */
501
  _cpp_clean_line (pfile);
502
 
503
  pfile->directive = &dtable[dir_no];
504
  if (CPP_OPTION (pfile, traditional))
505
    prepare_directive_trad (pfile);
506
  pfile->directive->handler (pfile);
507
  end_directive (pfile, 1);
508
  if (dir_no == T_PRAGMA)
509
    pfile->buffer->file = NULL;
510
  _cpp_pop_buffer (pfile);
511
}
512
 
513
/* Checks for validity the macro name in #define, #undef, #ifdef and
514
   #ifndef directives.  */
515
static cpp_hashnode *
516
lex_macro_node (cpp_reader *pfile)
517
{
518
  const cpp_token *token = _cpp_lex_token (pfile);
519
 
520
  /* The token immediately after #define must be an identifier.  That
521
     identifier may not be "defined", per C99 6.10.8p4.
522
     In C++, it may not be any of the "named operators" either,
523
     per C++98 [lex.digraph], [lex.key].
524
     Finally, the identifier may not have been poisoned.  (In that case
525
     the lexer has issued the error message for us.)  */
526
 
527
  if (token->type == CPP_NAME)
528
    {
529
      cpp_hashnode *node = token->val.node;
530
 
531
      if (node == pfile->spec_nodes.n_defined)
532
        cpp_error (pfile, CPP_DL_ERROR,
533
                   "\"defined\" cannot be used as a macro name");
534
      else if (! (node->flags & NODE_POISONED))
535
        return node;
536
    }
537
  else if (token->flags & NAMED_OP)
538
    cpp_error (pfile, CPP_DL_ERROR,
539
       "\"%s\" cannot be used as a macro name as it is an operator in C++",
540
               NODE_NAME (token->val.node));
541
  else if (token->type == CPP_EOF)
542
    cpp_error (pfile, CPP_DL_ERROR, "no macro name given in #%s directive",
543
               pfile->directive->name);
544
  else
545
    cpp_error (pfile, CPP_DL_ERROR, "macro names must be identifiers");
546
 
547
  return NULL;
548
}
549
 
550
/* Process a #define directive.  Most work is done in macro.c.  */
551
static void
552
do_define (cpp_reader *pfile)
553
{
554
  cpp_hashnode *node = lex_macro_node (pfile);
555
 
556
  if (node)
557
    {
558
      /* If we have been requested to expand comments into macros,
559
         then re-enable saving of comments.  */
560
      pfile->state.save_comments =
561
        ! CPP_OPTION (pfile, discard_comments_in_macro_exp);
562
 
563
      if (_cpp_create_definition (pfile, node))
564
        if (pfile->cb.define)
565
          pfile->cb.define (pfile, pfile->directive_line, node);
566
    }
567
}
568
 
569
/* Handle #undef.  Mark the identifier NT_VOID in the hash table.  */
570
static void
571
do_undef (cpp_reader *pfile)
572
{
573
  cpp_hashnode *node = lex_macro_node (pfile);
574
 
575
  if (node)
576
    {
577
      if (pfile->cb.undef)
578
        pfile->cb.undef (pfile, pfile->directive_line, node);
579
 
580
      /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified
581
         identifier is not currently defined as a macro name.  */
582
      if (node->type == NT_MACRO)
583
        {
584
          if (node->flags & NODE_WARN)
585
            cpp_error (pfile, CPP_DL_WARNING,
586
                       "undefining \"%s\"", NODE_NAME (node));
587
 
588
          if (CPP_OPTION (pfile, warn_unused_macros))
589
            _cpp_warn_if_unused_macro (pfile, node, NULL);
590
 
591
          _cpp_free_definition (node);
592
        }
593
    }
594
 
595
  check_eol (pfile);
596
}
597
 
598
/* Undefine a single macro/assertion/whatever.  */
599
 
600
static int
601
undefine_macros (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *h,
602
                 void *data_p ATTRIBUTE_UNUSED)
603
{
604
  /* Body of _cpp_free_definition inlined here for speed.
605
     Macros and assertions no longer have anything to free.  */
606
  h->type = NT_VOID;
607
  h->flags &= ~(NODE_POISONED|NODE_BUILTIN|NODE_DISABLED);
608
  return 1;
609
}
610
 
611
/* Undefine all macros and assertions.  */
612
 
613
void
614
cpp_undef_all (cpp_reader *pfile)
615
{
616
  cpp_forall_identifiers (pfile, undefine_macros, NULL);
617
}
618
 
619
 
620
/* Helper routine used by parse_include.  Reinterpret the current line
621
   as an h-char-sequence (< ... >); we are looking at the first token
622
   after the <.  Returns a malloced filename.  */
623
static char *
624
glue_header_name (cpp_reader *pfile)
625
{
626
  const cpp_token *token;
627
  char *buffer;
628
  size_t len, total_len = 0, capacity = 1024;
629
 
630
  /* To avoid lexed tokens overwriting our glued name, we can only
631
     allocate from the string pool once we've lexed everything.  */
632
  buffer = XNEWVEC (char, capacity);
633
  for (;;)
634
    {
635
      token = get_token_no_padding (pfile);
636
 
637
      if (token->type == CPP_GREATER)
638
        break;
639
      if (token->type == CPP_EOF)
640
        {
641
          cpp_error (pfile, CPP_DL_ERROR, "missing terminating > character");
642
          break;
643
        }
644
 
645
      len = cpp_token_len (token) + 2; /* Leading space, terminating \0.  */
646
      if (total_len + len > capacity)
647
        {
648
          capacity = (capacity + len) * 2;
649
          buffer = XRESIZEVEC (char, buffer, capacity);
650
        }
651
 
652
      if (token->flags & PREV_WHITE)
653
        buffer[total_len++] = ' ';
654
 
655
      total_len = (cpp_spell_token (pfile, token, (uchar *) &buffer[total_len],
656
                                    true)
657
                   - (uchar *) buffer);
658
    }
659
 
660
  buffer[total_len] = '\0';
661
  return buffer;
662
}
663
 
664
/* Returns the file name of #include, #include_next, #import and
665
   #pragma dependency.  The string is malloced and the caller should
666
   free it.  Returns NULL on error.  */
667
static const char *
668
parse_include (cpp_reader *pfile, int *pangle_brackets,
669
               const cpp_token ***buf)
670
{
671
  char *fname;
672
  const cpp_token *header;
673
 
674
  /* Allow macro expansion.  */
675
  header = get_token_no_padding (pfile);
676
  if (header->type == CPP_STRING || header->type == CPP_HEADER_NAME)
677
    {
678
      fname = XNEWVEC (char, header->val.str.len - 1);
679
      memcpy (fname, header->val.str.text + 1, header->val.str.len - 2);
680
      fname[header->val.str.len - 2] = '\0';
681
      *pangle_brackets = header->type == CPP_HEADER_NAME;
682
    }
683
  else if (header->type == CPP_LESS)
684
    {
685
      fname = glue_header_name (pfile);
686
      *pangle_brackets = 1;
687
    }
688
  else
689
    {
690
      const unsigned char *dir;
691
 
692
      if (pfile->directive == &dtable[T_PRAGMA])
693
        dir = U"pragma dependency";
694
      else
695
        dir = pfile->directive->name;
696
      cpp_error (pfile, CPP_DL_ERROR, "#%s expects \"FILENAME\" or <FILENAME>",
697
                 dir);
698
 
699
      return NULL;
700
    }
701
 
702
  if (buf == NULL || CPP_OPTION (pfile, discard_comments))
703
    check_eol (pfile);
704
  else
705
    {
706
      /* If we are not discarding comments, then gather them while
707
         doing the eol check.  */
708
      *buf = check_eol_return_comments (pfile);
709
    }
710
 
711
  return fname;
712
}
713
 
714
/* Handle #include, #include_next and #import.  */
715
static void
716
do_include_common (cpp_reader *pfile, enum include_type type)
717
{
718
  const char *fname;
719
  int angle_brackets;
720
  const cpp_token **buf = NULL;
721
 
722
  /* Re-enable saving of comments if requested, so that the include
723
     callback can dump comments which follow #include.  */
724
  pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
725
 
726
  fname = parse_include (pfile, &angle_brackets, &buf);
727
  if (!fname)
728
    {
729
      if (buf)
730
        XDELETEVEC (buf);
731
      return;
732
    }
733
 
734
  if (!*fname)
735
  {
736
    cpp_error (pfile, CPP_DL_ERROR, "empty filename in #%s",
737
               pfile->directive->name);
738
    XDELETEVEC (fname);
739
    if (buf)
740
      XDELETEVEC (buf);
741
    return;
742
  }
743
 
744
  /* Prevent #include recursion.  */
745
  if (pfile->line_table->depth >= CPP_STACK_MAX)
746
    cpp_error (pfile, CPP_DL_ERROR, "#include nested too deeply");
747
  else
748
    {
749
      /* Get out of macro context, if we are.  */
750
      skip_rest_of_line (pfile);
751
 
752
      if (pfile->cb.include)
753
        pfile->cb.include (pfile, pfile->directive_line,
754
                           pfile->directive->name, fname, angle_brackets,
755
                           buf);
756
 
757
      _cpp_stack_include (pfile, fname, angle_brackets, type);
758
    }
759
 
760
  XDELETEVEC (fname);
761
  if (buf)
762
    XDELETEVEC (buf);
763
}
764
 
765
static void
766
do_include (cpp_reader *pfile)
767
{
768
  do_include_common (pfile, IT_INCLUDE);
769
}
770
 
771
static void
772
do_import (cpp_reader *pfile)
773
{
774
  do_include_common (pfile, IT_IMPORT);
775
}
776
 
777
static void
778
do_include_next (cpp_reader *pfile)
779
{
780
  enum include_type type = IT_INCLUDE_NEXT;
781
 
782
  /* If this is the primary source file, warn and use the normal
783
     search logic.  */
784
  if (! pfile->buffer->prev)
785
    {
786
      cpp_error (pfile, CPP_DL_WARNING,
787
                 "#include_next in primary source file");
788
      type = IT_INCLUDE;
789
    }
790
  do_include_common (pfile, type);
791
}
792
 
793
/* Subroutine of do_linemarker.  Read possible flags after file name.
794
   LAST is the last flag seen; 0 if this is the first flag. Return the
795
   flag if it is valid, 0 at the end of the directive. Otherwise
796
   complain.  */
797
static unsigned int
798
read_flag (cpp_reader *pfile, unsigned int last)
799
{
800
  const cpp_token *token = _cpp_lex_token (pfile);
801
 
802
  if (token->type == CPP_NUMBER && token->val.str.len == 1)
803
    {
804
      unsigned int flag = token->val.str.text[0] - '0';
805
 
806
      if (flag > last && flag <= 4
807
          && (flag != 4 || last == 3)
808
          && (flag != 2 || last == 0))
809
        return flag;
810
    }
811
 
812
  if (token->type != CPP_EOF)
813
    cpp_error (pfile, CPP_DL_ERROR, "invalid flag \"%s\" in line directive",
814
               cpp_token_as_text (pfile, token));
815
  return 0;
816
}
817
 
818
/* Subroutine of do_line and do_linemarker.  Convert a number in STR,
819
   of length LEN, to binary; store it in NUMP, and return 0 if the
820
   number was well-formed, 1 if not.  Temporary, hopefully.  */
821
static int
822
strtoul_for_line (const uchar *str, unsigned int len, long unsigned int *nump)
823
{
824
  unsigned long reg = 0;
825
  uchar c;
826
  while (len--)
827
    {
828
      c = *str++;
829
      if (!ISDIGIT (c))
830
        return 1;
831
      reg *= 10;
832
      reg += c - '0';
833
    }
834
  *nump = reg;
835
  return 0;
836
}
837
 
838
/* Interpret #line command.
839
   Note that the filename string (if any) is a true string constant
840
   (escapes are interpreted), unlike in #line.  */
841
static void
842
do_line (cpp_reader *pfile)
843
{
844
  const struct line_maps *line_table = pfile->line_table;
845
  const struct line_map *map = &line_table->maps[line_table->used - 1];
846
 
847
  /* skip_rest_of_line() may cause line table to be realloc()ed so note down
848
     sysp right now.  */
849
 
850
  unsigned char map_sysp = map->sysp;
851
  const cpp_token *token;
852
  const char *new_file = map->to_file;
853
  unsigned long new_lineno;
854
 
855
  /* C99 raised the minimum limit on #line numbers.  */
856
  unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
857
 
858
  /* #line commands expand macros.  */
859
  token = cpp_get_token (pfile);
860
  if (token->type != CPP_NUMBER
861
      || strtoul_for_line (token->val.str.text, token->val.str.len,
862
                           &new_lineno))
863
    {
864
      cpp_error (pfile, CPP_DL_ERROR,
865
                 "\"%s\" after #line is not a positive integer",
866
                 cpp_token_as_text (pfile, token));
867
      return;
868
    }
869
 
870
  if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
871
    cpp_error (pfile, CPP_DL_PEDWARN, "line number out of range");
872
 
873
  token = cpp_get_token (pfile);
874
  if (token->type == CPP_STRING)
875
    {
876
      cpp_string s = { 0, 0 };
877
      if (cpp_interpret_string_notranslate (pfile, &token->val.str, 1,
878
                                            &s, false))
879
        new_file = (const char *)s.text;
880
      check_eol (pfile);
881
    }
882
  else if (token->type != CPP_EOF)
883
    {
884
      cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
885
                 cpp_token_as_text (pfile, token));
886
      return;
887
    }
888
 
889
  skip_rest_of_line (pfile);
890
  _cpp_do_file_change (pfile, LC_RENAME, new_file, new_lineno,
891
                       map_sysp);
892
}
893
 
894
/* Interpret the # 44 "file" [flags] notation, which has slightly
895
   different syntax and semantics from #line:  Flags are allowed,
896
   and we never complain about the line number being too big.  */
897
static void
898
do_linemarker (cpp_reader *pfile)
899
{
900
  const struct line_maps *line_table = pfile->line_table;
901
  const struct line_map *map = &line_table->maps[line_table->used - 1];
902
  const cpp_token *token;
903
  const char *new_file = map->to_file;
904
  unsigned long new_lineno;
905
  unsigned int new_sysp = map->sysp;
906
  enum lc_reason reason = LC_RENAME;
907
  int flag;
908
 
909
  /* Back up so we can get the number again.  Putting this in
910
     _cpp_handle_directive risks two calls to _cpp_backup_tokens in
911
     some circumstances, which can segfault.  */
912
  _cpp_backup_tokens (pfile, 1);
913
 
914
  /* #line commands expand macros.  */
915
  token = cpp_get_token (pfile);
916
  if (token->type != CPP_NUMBER
917
      || strtoul_for_line (token->val.str.text, token->val.str.len,
918
                           &new_lineno))
919
    {
920
      cpp_error (pfile, CPP_DL_ERROR,
921
                 "\"%s\" after # is not a positive integer",
922
                 cpp_token_as_text (pfile, token));
923
      return;
924
    }
925
 
926
  token = cpp_get_token (pfile);
927
  if (token->type == CPP_STRING)
928
    {
929
      cpp_string s = { 0, 0 };
930
      if (cpp_interpret_string_notranslate (pfile, &token->val.str,
931
                                            1, &s, false))
932
        new_file = (const char *)s.text;
933
 
934
      new_sysp = 0;
935
      flag = read_flag (pfile, 0);
936
      if (flag == 1)
937
        {
938
          reason = LC_ENTER;
939
          /* Fake an include for cpp_included ().  */
940
          _cpp_fake_include (pfile, new_file);
941
          flag = read_flag (pfile, flag);
942
        }
943
      else if (flag == 2)
944
        {
945
          reason = LC_LEAVE;
946
          flag = read_flag (pfile, flag);
947
        }
948
      if (flag == 3)
949
        {
950
          new_sysp = 1;
951
          flag = read_flag (pfile, flag);
952
          if (flag == 4)
953
            new_sysp = 2;
954
          pfile->buffer->sysp = new_sysp;
955
        }
956
 
957
      check_eol (pfile);
958
    }
959
  else if (token->type != CPP_EOF)
960
    {
961
      cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
962
                 cpp_token_as_text (pfile, token));
963
      return;
964
    }
965
 
966
  skip_rest_of_line (pfile);
967
  _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp);
968
}
969
 
970
/* Arrange the file_change callback.  pfile->line has changed to
971
   FILE_LINE of TO_FILE, for reason REASON.  SYSP is 1 for a system
972
   header, 2 for a system header that needs to be extern "C" protected,
973
   and zero otherwise.  */
974
void
975
_cpp_do_file_change (cpp_reader *pfile, enum lc_reason reason,
976
                     const char *to_file, unsigned int file_line,
977
                     unsigned int sysp)
978
{
979
  const struct line_map *map = linemap_add (pfile->line_table, reason, sysp,
980
                                            to_file, file_line);
981
  if (map != NULL)
982
    linemap_line_start (pfile->line_table, map->to_line, 127);
983
 
984
  if (pfile->cb.file_change)
985
    pfile->cb.file_change (pfile, map);
986
}
987
 
988
/* Report a warning or error detected by the program we are
989
   processing.  Use the directive's tokens in the error message.  */
990
static void
991
do_diagnostic (cpp_reader *pfile, int code, int print_dir)
992
{
993
  if (_cpp_begin_message (pfile, code, pfile->cur_token[-1].src_loc, 0))
994
    {
995
      if (print_dir)
996
        fprintf (stderr, "#%s ", pfile->directive->name);
997
      pfile->state.prevent_expansion++;
998
      cpp_output_line (pfile, stderr);
999
      pfile->state.prevent_expansion--;
1000
    }
1001
}
1002
 
1003
static void
1004
do_error (cpp_reader *pfile)
1005
{
1006
  do_diagnostic (pfile, CPP_DL_ERROR, 1);
1007
}
1008
 
1009
static void
1010
do_warning (cpp_reader *pfile)
1011
{
1012
  /* We want #warning diagnostics to be emitted in system headers too.  */
1013
  do_diagnostic (pfile, CPP_DL_WARNING_SYSHDR, 1);
1014
}
1015
 
1016
/* Report program identification.  */
1017
static void
1018
do_ident (cpp_reader *pfile)
1019
{
1020
  const cpp_token *str = cpp_get_token (pfile);
1021
 
1022
  if (str->type != CPP_STRING)
1023
    cpp_error (pfile, CPP_DL_ERROR, "invalid #%s directive",
1024
               pfile->directive->name);
1025
  else if (pfile->cb.ident)
1026
    pfile->cb.ident (pfile, pfile->directive_line, &str->val.str);
1027
 
1028
  check_eol (pfile);
1029
}
1030
 
1031
/* Lookup a PRAGMA name in a singly-linked CHAIN.  Returns the
1032
   matching entry, or NULL if none is found.  The returned entry could
1033
   be the start of a namespace chain, or a pragma.  */
1034
static struct pragma_entry *
1035
lookup_pragma_entry (struct pragma_entry *chain, const cpp_hashnode *pragma)
1036
{
1037
  while (chain && chain->pragma != pragma)
1038
    chain = chain->next;
1039
 
1040
  return chain;
1041
}
1042
 
1043
/* Create and insert a pragma entry for NAME at the beginning of a
1044
   singly-linked CHAIN.  If handler is NULL, it is a namespace,
1045
   otherwise it is a pragma and its handler.  If INTERNAL is true
1046
   this pragma is being inserted by libcpp itself. */
1047
static struct pragma_entry *
1048
insert_pragma_entry (cpp_reader *pfile, struct pragma_entry **chain,
1049
                     const cpp_hashnode *pragma, pragma_cb handler,
1050
                     bool allow_expansion, bool internal)
1051
{
1052
  struct pragma_entry *new_entry;
1053
 
1054
  new_entry = (struct pragma_entry *)
1055
    _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry));
1056
  new_entry->pragma = pragma;
1057
  if (handler)
1058
    {
1059
      new_entry->is_nspace = 0;
1060
      new_entry->u.handler = handler;
1061
    }
1062
  else
1063
    {
1064
      new_entry->is_nspace = 1;
1065
      new_entry->u.space = NULL;
1066
    }
1067
 
1068
  new_entry->allow_expansion = allow_expansion;
1069
  new_entry->is_internal = internal;
1070
  new_entry->next = *chain;
1071
  *chain = new_entry;
1072
  return new_entry;
1073
}
1074
 
1075
/* Register a pragma NAME in namespace SPACE.  If SPACE is null, it
1076
   goes in the global namespace.  HANDLER is the handler it will call,
1077
   which must be non-NULL.  If ALLOW_EXPANSION is set, allow macro
1078
   expansion while parsing pragma NAME.  INTERNAL is true if this is a
1079
   pragma registered by cpplib itself, false if it is registered via
1080
   cpp_register_pragma */
1081
static void
1082
register_pragma (cpp_reader *pfile, const char *space, const char *name,
1083
                 pragma_cb handler, bool allow_expansion, bool internal)
1084
{
1085
  struct pragma_entry **chain = &pfile->pragmas;
1086
  struct pragma_entry *entry;
1087
  const cpp_hashnode *node;
1088
 
1089
  if (!handler)
1090
    abort ();
1091
 
1092
  if (space)
1093
    {
1094
      node = cpp_lookup (pfile, U space, strlen (space));
1095
      entry = lookup_pragma_entry (*chain, node);
1096
      if (!entry)
1097
        entry = insert_pragma_entry (pfile, chain, node, NULL,
1098
                                     allow_expansion, internal);
1099
      else if (!entry->is_nspace)
1100
        goto clash;
1101
      chain = &entry->u.space;
1102
    }
1103
 
1104
  /* Check for duplicates.  */
1105
  node = cpp_lookup (pfile, U name, strlen (name));
1106
  entry = lookup_pragma_entry (*chain, node);
1107
  if (entry)
1108
    {
1109
      if (entry->is_nspace)
1110
        clash:
1111
        cpp_error (pfile, CPP_DL_ICE,
1112
                 "registering \"%s\" as both a pragma and a pragma namespace",
1113
                 NODE_NAME (node));
1114
      else if (space)
1115
        cpp_error (pfile, CPP_DL_ICE, "#pragma %s %s is already registered",
1116
                   space, name);
1117
      else
1118
        cpp_error (pfile, CPP_DL_ICE, "#pragma %s is already registered", name);
1119
    }
1120
  else
1121
    insert_pragma_entry (pfile, chain, node, handler, allow_expansion,
1122
                         internal);
1123
}
1124
 
1125
/* Register a pragma NAME in namespace SPACE.  If SPACE is null, it
1126
   goes in the global namespace.  HANDLER is the handler it will call,
1127
   which must be non-NULL.  If ALLOW_EXPANSION is set, allow macro
1128
   expansion while parsing pragma NAME.  This function is exported
1129
   from libcpp. */
1130
void
1131
cpp_register_pragma (cpp_reader *pfile, const char *space, const char *name,
1132
                     pragma_cb handler, bool allow_expansion)
1133
{
1134
  register_pragma (pfile, space, name, handler, allow_expansion, false);
1135
}
1136
 
1137
/* Register the pragmas the preprocessor itself handles.  */
1138
void
1139
_cpp_init_internal_pragmas (cpp_reader *pfile)
1140
{
1141
  /* Pragmas in the global namespace.  */
1142
  register_pragma (pfile, 0, "once", do_pragma_once, false, true);
1143
 
1144
  /* New GCC-specific pragmas should be put in the GCC namespace.  */
1145
  register_pragma (pfile, "GCC", "poison", do_pragma_poison, false, true);
1146
  register_pragma (pfile, "GCC", "system_header", do_pragma_system_header,
1147
                   false, true);
1148
  register_pragma (pfile, "GCC", "dependency", do_pragma_dependency,
1149
                   false, true);
1150
}
1151
 
1152
/* Return the number of registered pragmas in PE.  */
1153
 
1154
static int
1155
count_registered_pragmas (struct pragma_entry *pe)
1156
{
1157
  int ct = 0;
1158
  for (; pe != NULL; pe = pe->next)
1159
    {
1160
      if (pe->is_nspace)
1161
        ct += count_registered_pragmas (pe->u.space);
1162
      ct++;
1163
    }
1164
  return ct;
1165
}
1166
 
1167
/* Save into SD the names of the registered pragmas referenced by PE,
1168
   and return a pointer to the next free space in SD.  */
1169
 
1170
static char **
1171
save_registered_pragmas (struct pragma_entry *pe, char **sd)
1172
{
1173
  for (; pe != NULL; pe = pe->next)
1174
    {
1175
      if (pe->is_nspace)
1176
        sd = save_registered_pragmas (pe->u.space, sd);
1177
      *sd++ = (char *) xmemdup (HT_STR (&pe->pragma->ident),
1178
                                HT_LEN (&pe->pragma->ident),
1179
                                HT_LEN (&pe->pragma->ident) + 1);
1180
    }
1181
  return sd;
1182
}
1183
 
1184
/* Return a newly-allocated array which saves the names of the
1185
   registered pragmas.  */
1186
 
1187
char **
1188
_cpp_save_pragma_names (cpp_reader *pfile)
1189
{
1190
  int ct = count_registered_pragmas (pfile->pragmas);
1191
  char **result = XNEWVEC (char *, ct);
1192
  (void) save_registered_pragmas (pfile->pragmas, result);
1193
  return result;
1194
}
1195
 
1196
/* Restore from SD the names of the registered pragmas referenced by PE,
1197
   and return a pointer to the next unused name in SD.  */
1198
 
1199
static char **
1200
restore_registered_pragmas (cpp_reader *pfile, struct pragma_entry *pe,
1201
                            char **sd)
1202
{
1203
  for (; pe != NULL; pe = pe->next)
1204
    {
1205
      if (pe->is_nspace)
1206
        sd = restore_registered_pragmas (pfile, pe->u.space, sd);
1207
      pe->pragma = cpp_lookup (pfile, U *sd, strlen (*sd));
1208
      free (*sd);
1209
      sd++;
1210
    }
1211
  return sd;
1212
}
1213
 
1214
/* Restore the names of the registered pragmas from SAVED.  */
1215
 
1216
void
1217
_cpp_restore_pragma_names (cpp_reader *pfile, char **saved)
1218
{
1219
  (void) restore_registered_pragmas (pfile, pfile->pragmas, saved);
1220
  free (saved);
1221
}
1222
 
1223
/* Pragmata handling.  We handle some, and pass the rest on to the
1224
   front end.  C99 defines three pragmas and says that no macro
1225
   expansion is to be performed on them; whether or not macro
1226
   expansion happens for other pragmas is implementation defined.
1227
   This implementation never macro-expands the text after #pragma.
1228
 
1229
   The library user has the option of deferring execution of
1230
   #pragmas not handled by cpplib, in which case they are converted
1231
   to CPP_PRAGMA tokens and inserted into the output stream.  */
1232
static void
1233
do_pragma (cpp_reader *pfile)
1234
{
1235
  const struct pragma_entry *p = NULL;
1236
  const cpp_token *token, *pragma_token = pfile->cur_token;
1237
  unsigned int count = 1;
1238
 
1239
  /* Save the current position so that defer_pragmas mode can
1240
     copy the entire current line to a string.  It will not work
1241
     to use _cpp_backup_tokens as that does not reverse buffer->cur.  */
1242
  const uchar *line_start = CPP_BUFFER (pfile)->cur;
1243
 
1244
  pfile->state.prevent_expansion++;
1245
 
1246
  token = cpp_get_token (pfile);
1247
  if (token->type == CPP_NAME)
1248
    {
1249
      p = lookup_pragma_entry (pfile->pragmas, token->val.node);
1250
      if (p && p->is_nspace)
1251
        {
1252
          count = 2;
1253
          token = cpp_get_token (pfile);
1254
          if (token->type == CPP_NAME)
1255
            p = lookup_pragma_entry (p->u.space, token->val.node);
1256
          else
1257
            p = NULL;
1258
        }
1259
    }
1260
 
1261
  if (p)
1262
    {
1263
      if (p->is_internal || !CPP_OPTION (pfile, defer_pragmas))
1264
        {
1265
          /* Since the handler below doesn't get the line number, that it
1266
             might need for diagnostics, make sure it has the right
1267
             numbers in place.  */
1268
          if (pfile->cb.line_change)
1269
            (*pfile->cb.line_change) (pfile, pragma_token, false);
1270
          /* Never expand macros if handling a deferred pragma, since
1271
             the macro definitions now applicable may be different
1272
             from those at the point the pragma appeared.  */
1273
          if (p->allow_expansion && !pfile->state.in_deferred_pragma)
1274
            pfile->state.prevent_expansion--;
1275
          (*p->u.handler) (pfile);
1276
          if (p->allow_expansion && !pfile->state.in_deferred_pragma)
1277
            pfile->state.prevent_expansion++;
1278
        }
1279
      else
1280
        {
1281
          /* Squirrel away the pragma text.  Pragmas are
1282
             newline-terminated. */
1283
          const uchar *line_end;
1284
          uchar *s, c, cc;
1285
          cpp_string body;
1286
          cpp_token *ptok;
1287
 
1288
          for (line_end = line_start; (c = *line_end) != '\n'; line_end++)
1289
            if (c == '"' || c == '\'')
1290
              {
1291
                /* Skip over string literal.  */
1292
                do
1293
                  {
1294
                    cc = *++line_end;
1295
                    if (cc == '\\' && line_end[1] != '\n')
1296
                      line_end++;
1297
                    else if (cc == '\n')
1298
                      {
1299
                        line_end--;
1300
                        break;
1301
                      }
1302
                  }
1303
                while (cc != c);
1304
              }
1305
            else if (c == '/')
1306
              {
1307
                if (line_end[1] == '*')
1308
                  {
1309
                    /* Skip over C block comment, unless it is multi-line.
1310
                       When encountering multi-line block comment, terminate
1311
                       the pragma token right before that block comment.  */
1312
                    const uchar *le = line_end + 2;
1313
                    while (*le != '\n')
1314
                      if (*le++ == '*' && *le == '/')
1315
                        {
1316
                          line_end = le;
1317
                          break;
1318
                        }
1319
                    if (line_end < le)
1320
                      break;
1321
                  }
1322
                else if (line_end[1] == '/'
1323
                         && (CPP_OPTION (pfile, cplusplus_comments)
1324
                             || cpp_in_system_header (pfile)))
1325
                  {
1326
                    line_end += 2;
1327
                    while (*line_end != '\n')
1328
                      line_end++;
1329
                    break;
1330
                  }
1331
              }
1332
 
1333
          body.len = (line_end - line_start) + 1;
1334
          s = _cpp_unaligned_alloc (pfile, body.len + 1);
1335
          memcpy (s, line_start, body.len - 1);
1336
          s[body.len - 1] = '\n';
1337
          s[body.len] = '\0';
1338
          body.text = s;
1339
 
1340
          /* Create a CPP_PRAGMA token.  */
1341
          ptok = &pfile->directive_result;
1342
          ptok->src_loc = pragma_token->src_loc;
1343
          ptok->type = CPP_PRAGMA;
1344
          ptok->flags = pragma_token->flags | NO_EXPAND;
1345
          ptok->val.str = body;
1346
        }
1347
    }
1348
  else if (pfile->cb.def_pragma)
1349
    {
1350
      _cpp_backup_tokens (pfile, count);
1351
      pfile->cb.def_pragma (pfile, pfile->directive_line);
1352
    }
1353
 
1354
  pfile->state.prevent_expansion--;
1355
}
1356
 
1357
/* Handle #pragma once.  */
1358
static void
1359
do_pragma_once (cpp_reader *pfile)
1360
{
1361
  if (pfile->buffer->prev == NULL)
1362
    cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file");
1363
 
1364
  check_eol (pfile);
1365
  _cpp_mark_file_once_only (pfile, pfile->buffer->file);
1366
}
1367
 
1368
/* Handle #pragma GCC poison, to poison one or more identifiers so
1369
   that the lexer produces a hard error for each subsequent usage.  */
1370
static void
1371
do_pragma_poison (cpp_reader *pfile)
1372
{
1373
  const cpp_token *tok;
1374
  cpp_hashnode *hp;
1375
 
1376
  pfile->state.poisoned_ok = 1;
1377
  for (;;)
1378
    {
1379
      tok = _cpp_lex_token (pfile);
1380
      if (tok->type == CPP_EOF)
1381
        break;
1382
      if (tok->type != CPP_NAME)
1383
        {
1384
          cpp_error (pfile, CPP_DL_ERROR,
1385
                     "invalid #pragma GCC poison directive");
1386
          break;
1387
        }
1388
 
1389
      hp = tok->val.node;
1390
      if (hp->flags & NODE_POISONED)
1391
        continue;
1392
 
1393
      if (hp->type == NT_MACRO)
1394
        cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro \"%s\"",
1395
                   NODE_NAME (hp));
1396
      _cpp_free_definition (hp);
1397
      hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
1398
    }
1399
  pfile->state.poisoned_ok = 0;
1400
}
1401
 
1402
/* Mark the current header as a system header.  This will suppress
1403
   some categories of warnings (notably those from -pedantic).  It is
1404
   intended for use in system libraries that cannot be implemented in
1405
   conforming C, but cannot be certain that their headers appear in a
1406
   system include directory.  To prevent abuse, it is rejected in the
1407
   primary source file.  */
1408
static void
1409
do_pragma_system_header (cpp_reader *pfile)
1410
{
1411
  cpp_buffer *buffer = pfile->buffer;
1412
 
1413
  if (buffer->prev == 0)
1414
    cpp_error (pfile, CPP_DL_WARNING,
1415
               "#pragma system_header ignored outside include file");
1416
  else
1417
    {
1418
      check_eol (pfile);
1419
      skip_rest_of_line (pfile);
1420
      cpp_make_system_header (pfile, 1, 0);
1421
    }
1422
}
1423
 
1424
/* Check the modified date of the current include file against a specified
1425
   file. Issue a diagnostic, if the specified file is newer. We use this to
1426
   determine if a fixed header should be refixed.  */
1427
static void
1428
do_pragma_dependency (cpp_reader *pfile)
1429
{
1430
  const char *fname;
1431
  int angle_brackets, ordering;
1432
 
1433
  fname = parse_include (pfile, &angle_brackets, NULL);
1434
  if (!fname)
1435
    return;
1436
 
1437
  ordering = _cpp_compare_file_date (pfile, fname, angle_brackets);
1438
  if (ordering < 0)
1439
    cpp_error (pfile, CPP_DL_WARNING, "cannot find source file %s", fname);
1440
  else if (ordering > 0)
1441
    {
1442
      cpp_error (pfile, CPP_DL_WARNING,
1443
                 "current file is older than %s", fname);
1444
      if (cpp_get_token (pfile)->type != CPP_EOF)
1445
        {
1446
          _cpp_backup_tokens (pfile, 1);
1447
          do_diagnostic (pfile, CPP_DL_WARNING, 0);
1448
        }
1449
    }
1450
 
1451
  free ((void *) fname);
1452
}
1453
 
1454
/* Get a token but skip padding.  */
1455
static const cpp_token *
1456
get_token_no_padding (cpp_reader *pfile)
1457
{
1458
  for (;;)
1459
    {
1460
      const cpp_token *result = cpp_get_token (pfile);
1461
      if (result->type != CPP_PADDING)
1462
        return result;
1463
    }
1464
}
1465
 
1466
/* Check syntax is "(string-literal)".  Returns the string on success,
1467
   or NULL on failure.  */
1468
static const cpp_token *
1469
get__Pragma_string (cpp_reader *pfile)
1470
{
1471
  const cpp_token *string;
1472
 
1473
  if (get_token_no_padding (pfile)->type != CPP_OPEN_PAREN)
1474
    return NULL;
1475
 
1476
  string = get_token_no_padding (pfile);
1477
  if (string->type != CPP_STRING && string->type != CPP_WSTRING)
1478
    return NULL;
1479
 
1480
  if (get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
1481
    return NULL;
1482
 
1483
  return string;
1484
}
1485
 
1486
/* Destringize IN into a temporary buffer, by removing the first \ of
1487
   \" and \\ sequences, and process the result as a #pragma directive.  */
1488
static void
1489
destringize_and_run (cpp_reader *pfile, const cpp_string *in)
1490
{
1491
  const unsigned char *src, *limit;
1492
  char *dest, *result;
1493
 
1494
  dest = result = (char *) alloca (in->len - 1);
1495
  src = in->text + 1 + (in->text[0] == 'L');
1496
  limit = in->text + in->len - 1;
1497
  while (src < limit)
1498
    {
1499
      /* We know there is a character following the backslash.  */
1500
      if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1501
        src++;
1502
      *dest++ = *src++;
1503
    }
1504
  *dest = '\n';
1505
 
1506
  /* Ugh; an awful kludge.  We are really not set up to be lexing
1507
     tokens when in the middle of a macro expansion.  Use a new
1508
     context to force cpp_get_token to lex, and so skip_rest_of_line
1509
     doesn't go beyond the end of the text.  Also, remember the
1510
     current lexing position so we can return to it later.
1511
 
1512
     Something like line-at-a-time lexing should remove the need for
1513
     this.  */
1514
  {
1515
    cpp_context *saved_context = pfile->context;
1516
    cpp_token *saved_cur_token = pfile->cur_token;
1517
    tokenrun *saved_cur_run = pfile->cur_run;
1518
 
1519
    pfile->context = XNEW (cpp_context);
1520
    pfile->context->macro = 0;
1521
    pfile->context->prev = 0;
1522
    run_directive (pfile, T_PRAGMA, result, dest - result);
1523
    XDELETE (pfile->context);
1524
    pfile->context = saved_context;
1525
    pfile->cur_token = saved_cur_token;
1526
    pfile->cur_run = saved_cur_run;
1527
  }
1528
 
1529
  /* See above comment.  For the moment, we'd like
1530
 
1531
     token1 _Pragma ("foo") token2
1532
 
1533
     to be output as
1534
 
1535
                token1
1536
                # 7 "file.c"
1537
                #pragma foo
1538
                # 7 "file.c"
1539
                               token2
1540
 
1541
      Getting the line markers is a little tricky.  */
1542
  if (pfile->cb.line_change)
1543
    pfile->cb.line_change (pfile, pfile->cur_token, false);
1544
}
1545
 
1546
/* Handle the _Pragma operator.  */
1547
void
1548
_cpp_do__Pragma (cpp_reader *pfile)
1549
{
1550
  const cpp_token *string = get__Pragma_string (pfile);
1551
  pfile->directive_result.type = CPP_PADDING;
1552
 
1553
  if (string)
1554
    destringize_and_run (pfile, &string->val.str);
1555
  else
1556
    cpp_error (pfile, CPP_DL_ERROR,
1557
               "_Pragma takes a parenthesized string literal");
1558
}
1559
 
1560
/* Handle a pragma that the front end deferred until now. */
1561
void
1562
cpp_handle_deferred_pragma (cpp_reader *pfile, const cpp_string *s)
1563
{
1564
  cpp_context *saved_context = pfile->context;
1565
  cpp_token *saved_cur_token = pfile->cur_token;
1566
  tokenrun *saved_cur_run = pfile->cur_run;
1567
  bool saved_defer_pragmas = CPP_OPTION (pfile, defer_pragmas);
1568
  void (*saved_line_change) (cpp_reader *, const cpp_token *, int)
1569
    = pfile->cb.line_change;
1570
 
1571
  pfile->context = XNEW (cpp_context);
1572
  pfile->context->macro = 0;
1573
  pfile->context->prev = 0;
1574
  pfile->cb.line_change = NULL;
1575
  pfile->state.in_deferred_pragma = true;
1576
  CPP_OPTION (pfile, defer_pragmas) = false;
1577
 
1578
  run_directive (pfile, T_PRAGMA, (const char *)s->text, s->len);
1579
 
1580
  XDELETE (pfile->context);
1581
  pfile->context = saved_context;
1582
  pfile->cur_token = saved_cur_token;
1583
  pfile->cur_run = saved_cur_run;
1584
  pfile->cb.line_change = saved_line_change;
1585
  pfile->state.in_deferred_pragma = false;
1586
  CPP_OPTION (pfile, defer_pragmas) = saved_defer_pragmas;
1587
}
1588
 
1589
/* Handle #ifdef.  */
1590
static void
1591
do_ifdef (cpp_reader *pfile)
1592
{
1593
  int skip = 1;
1594
 
1595
  if (! pfile->state.skipping)
1596
    {
1597
      const cpp_hashnode *node = lex_macro_node (pfile);
1598
 
1599
      if (node)
1600
        {
1601
          skip = node->type != NT_MACRO;
1602
          _cpp_mark_macro_used (node);
1603
          check_eol (pfile);
1604
        }
1605
    }
1606
 
1607
  push_conditional (pfile, skip, T_IFDEF, 0);
1608
}
1609
 
1610
/* Handle #ifndef.  */
1611
static void
1612
do_ifndef (cpp_reader *pfile)
1613
{
1614
  int skip = 1;
1615
  const cpp_hashnode *node = 0;
1616
 
1617
  if (! pfile->state.skipping)
1618
    {
1619
      node = lex_macro_node (pfile);
1620
 
1621
      if (node)
1622
        {
1623
          skip = node->type == NT_MACRO;
1624
          _cpp_mark_macro_used (node);
1625
          check_eol (pfile);
1626
        }
1627
    }
1628
 
1629
  push_conditional (pfile, skip, T_IFNDEF, node);
1630
}
1631
 
1632
/* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in
1633
   pfile->mi_ind_cmacro so we can handle multiple-include
1634
   optimizations.  If macro expansion occurs in the expression, we
1635
   cannot treat it as a controlling conditional, since the expansion
1636
   could change in the future.  That is handled by cpp_get_token.  */
1637
static void
1638
do_if (cpp_reader *pfile)
1639
{
1640
  int skip = 1;
1641
 
1642
  if (! pfile->state.skipping)
1643
    skip = _cpp_parse_expr (pfile) == false;
1644
 
1645
  push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro);
1646
}
1647
 
1648
/* Flip skipping state if appropriate and continue without changing
1649
   if_stack; this is so that the error message for missing #endif's
1650
   etc. will point to the original #if.  */
1651
static void
1652
do_else (cpp_reader *pfile)
1653
{
1654
  cpp_buffer *buffer = pfile->buffer;
1655
  struct if_stack *ifs = buffer->if_stack;
1656
 
1657
  if (ifs == NULL)
1658
    cpp_error (pfile, CPP_DL_ERROR, "#else without #if");
1659
  else
1660
    {
1661
      if (ifs->type == T_ELSE)
1662
        {
1663
          cpp_error (pfile, CPP_DL_ERROR, "#else after #else");
1664
          cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
1665
                               "the conditional began here");
1666
        }
1667
      ifs->type = T_ELSE;
1668
 
1669
      /* Skip any future (erroneous) #elses or #elifs.  */
1670
      pfile->state.skipping = ifs->skip_elses;
1671
      ifs->skip_elses = true;
1672
 
1673
      /* Invalidate any controlling macro.  */
1674
      ifs->mi_cmacro = 0;
1675
 
1676
      /* Only check EOL if was not originally skipping.  */
1677
      if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
1678
        check_eol (pfile);
1679
    }
1680
}
1681
 
1682
/* Handle a #elif directive by not changing if_stack either.  See the
1683
   comment above do_else.  */
1684
static void
1685
do_elif (cpp_reader *pfile)
1686
{
1687
  cpp_buffer *buffer = pfile->buffer;
1688
  struct if_stack *ifs = buffer->if_stack;
1689
 
1690
  if (ifs == NULL)
1691
    cpp_error (pfile, CPP_DL_ERROR, "#elif without #if");
1692
  else
1693
    {
1694
      if (ifs->type == T_ELSE)
1695
        {
1696
          cpp_error (pfile, CPP_DL_ERROR, "#elif after #else");
1697
          cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
1698
                               "the conditional began here");
1699
        }
1700
      ifs->type = T_ELIF;
1701
 
1702
      /* Only evaluate this if we aren't skipping elses.  During
1703
         evaluation, set skipping to false to get lexer warnings.  */
1704
      if (ifs->skip_elses)
1705
        pfile->state.skipping = 1;
1706
      else
1707
        {
1708
          pfile->state.skipping = 0;
1709
          pfile->state.skipping = ! _cpp_parse_expr (pfile);
1710
          ifs->skip_elses = ! pfile->state.skipping;
1711
        }
1712
 
1713
      /* Invalidate any controlling macro.  */
1714
      ifs->mi_cmacro = 0;
1715
    }
1716
}
1717
 
1718
/* #endif pops the if stack and resets pfile->state.skipping.  */
1719
static void
1720
do_endif (cpp_reader *pfile)
1721
{
1722
  cpp_buffer *buffer = pfile->buffer;
1723
  struct if_stack *ifs = buffer->if_stack;
1724
 
1725
  if (ifs == NULL)
1726
    cpp_error (pfile, CPP_DL_ERROR, "#endif without #if");
1727
  else
1728
    {
1729
      /* Only check EOL if was not originally skipping.  */
1730
      if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
1731
        check_eol (pfile);
1732
 
1733
      /* If potential control macro, we go back outside again.  */
1734
      if (ifs->next == 0 && ifs->mi_cmacro)
1735
        {
1736
          pfile->mi_valid = true;
1737
          pfile->mi_cmacro = ifs->mi_cmacro;
1738
        }
1739
 
1740
      buffer->if_stack = ifs->next;
1741
      pfile->state.skipping = ifs->was_skipping;
1742
      obstack_free (&pfile->buffer_ob, ifs);
1743
    }
1744
}
1745
 
1746
/* Push an if_stack entry for a preprocessor conditional, and set
1747
   pfile->state.skipping to SKIP.  If TYPE indicates the conditional
1748
   is #if or #ifndef, CMACRO is a potentially controlling macro, and
1749
   we need to check here that we are at the top of the file.  */
1750
static void
1751
push_conditional (cpp_reader *pfile, int skip, int type,
1752
                  const cpp_hashnode *cmacro)
1753
{
1754
  struct if_stack *ifs;
1755
  cpp_buffer *buffer = pfile->buffer;
1756
 
1757
  ifs = XOBNEW (&pfile->buffer_ob, struct if_stack);
1758
  ifs->line = pfile->directive_line;
1759
  ifs->next = buffer->if_stack;
1760
  ifs->skip_elses = pfile->state.skipping || !skip;
1761
  ifs->was_skipping = pfile->state.skipping;
1762
  ifs->type = type;
1763
  /* This condition is effectively a test for top-of-file.  */
1764
  if (pfile->mi_valid && pfile->mi_cmacro == 0)
1765
    ifs->mi_cmacro = cmacro;
1766
  else
1767
    ifs->mi_cmacro = 0;
1768
 
1769
  pfile->state.skipping = skip;
1770
  buffer->if_stack = ifs;
1771
}
1772
 
1773
/* Read the tokens of the answer into the macro pool, in a directive
1774
   of type TYPE.  Only commit the memory if we intend it as permanent
1775
   storage, i.e. the #assert case.  Returns 0 on success, and sets
1776
   ANSWERP to point to the answer.  */
1777
static int
1778
parse_answer (cpp_reader *pfile, struct answer **answerp, int type)
1779
{
1780
  const cpp_token *paren;
1781
  struct answer *answer;
1782
  unsigned int acount;
1783
 
1784
  /* In a conditional, it is legal to not have an open paren.  We
1785
     should save the following token in this case.  */
1786
  paren = cpp_get_token (pfile);
1787
 
1788
  /* If not a paren, see if we're OK.  */
1789
  if (paren->type != CPP_OPEN_PAREN)
1790
    {
1791
      /* In a conditional no answer is a test for any answer.  It
1792
         could be followed by any token.  */
1793
      if (type == T_IF)
1794
        {
1795
          _cpp_backup_tokens (pfile, 1);
1796
          return 0;
1797
        }
1798
 
1799
      /* #unassert with no answer is valid - it removes all answers.  */
1800
      if (type == T_UNASSERT && paren->type == CPP_EOF)
1801
        return 0;
1802
 
1803
      cpp_error (pfile, CPP_DL_ERROR, "missing '(' after predicate");
1804
      return 1;
1805
    }
1806
 
1807
  for (acount = 0;; acount++)
1808
    {
1809
      size_t room_needed;
1810
      const cpp_token *token = cpp_get_token (pfile);
1811
      cpp_token *dest;
1812
 
1813
      if (token->type == CPP_CLOSE_PAREN)
1814
        break;
1815
 
1816
      if (token->type == CPP_EOF)
1817
        {
1818
          cpp_error (pfile, CPP_DL_ERROR, "missing ')' to complete answer");
1819
          return 1;
1820
        }
1821
 
1822
      /* struct answer includes the space for one token.  */
1823
      room_needed = (sizeof (struct answer) + acount * sizeof (cpp_token));
1824
 
1825
      if (BUFF_ROOM (pfile->a_buff) < room_needed)
1826
        _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (struct answer));
1827
 
1828
      dest = &((struct answer *) BUFF_FRONT (pfile->a_buff))->first[acount];
1829
      *dest = *token;
1830
 
1831
      /* Drop whitespace at start, for answer equivalence purposes.  */
1832
      if (acount == 0)
1833
        dest->flags &= ~PREV_WHITE;
1834
    }
1835
 
1836
  if (acount == 0)
1837
    {
1838
      cpp_error (pfile, CPP_DL_ERROR, "predicate's answer is empty");
1839
      return 1;
1840
    }
1841
 
1842
  answer = (struct answer *) BUFF_FRONT (pfile->a_buff);
1843
  answer->count = acount;
1844
  answer->next = NULL;
1845
  *answerp = answer;
1846
 
1847
  return 0;
1848
}
1849
 
1850
/* Parses an assertion directive of type TYPE, returning a pointer to
1851
   the hash node of the predicate, or 0 on error.  If an answer was
1852
   supplied, it is placed in ANSWERP, otherwise it is set to 0.  */
1853
static cpp_hashnode *
1854
parse_assertion (cpp_reader *pfile, struct answer **answerp, int type)
1855
{
1856
  cpp_hashnode *result = 0;
1857
  const cpp_token *predicate;
1858
 
1859
  /* We don't expand predicates or answers.  */
1860
  pfile->state.prevent_expansion++;
1861
 
1862
  *answerp = 0;
1863
  predicate = cpp_get_token (pfile);
1864
  if (predicate->type == CPP_EOF)
1865
    cpp_error (pfile, CPP_DL_ERROR, "assertion without predicate");
1866
  else if (predicate->type != CPP_NAME)
1867
    cpp_error (pfile, CPP_DL_ERROR, "predicate must be an identifier");
1868
  else if (parse_answer (pfile, answerp, type) == 0)
1869
    {
1870
      unsigned int len = NODE_LEN (predicate->val.node);
1871
      unsigned char *sym = (unsigned char *) alloca (len + 1);
1872
 
1873
      /* Prefix '#' to get it out of macro namespace.  */
1874
      sym[0] = '#';
1875
      memcpy (sym + 1, NODE_NAME (predicate->val.node), len);
1876
      result = cpp_lookup (pfile, sym, len + 1);
1877
    }
1878
 
1879
  pfile->state.prevent_expansion--;
1880
  return result;
1881
}
1882
 
1883
/* Returns a pointer to the pointer to CANDIDATE in the answer chain,
1884
   or a pointer to NULL if the answer is not in the chain.  */
1885
static struct answer **
1886
find_answer (cpp_hashnode *node, const struct answer *candidate)
1887
{
1888
  unsigned int i;
1889
  struct answer **result;
1890
 
1891
  for (result = &node->value.answers; *result; result = &(*result)->next)
1892
    {
1893
      struct answer *answer = *result;
1894
 
1895
      if (answer->count == candidate->count)
1896
        {
1897
          for (i = 0; i < answer->count; i++)
1898
            if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
1899
              break;
1900
 
1901
          if (i == answer->count)
1902
            break;
1903
        }
1904
    }
1905
 
1906
  return result;
1907
}
1908
 
1909
/* Test an assertion within a preprocessor conditional.  Returns
1910
   nonzero on failure, zero on success.  On success, the result of
1911
   the test is written into VALUE, otherwise the value 0.  */
1912
int
1913
_cpp_test_assertion (cpp_reader *pfile, unsigned int *value)
1914
{
1915
  struct answer *answer;
1916
  cpp_hashnode *node;
1917
 
1918
  node = parse_assertion (pfile, &answer, T_IF);
1919
 
1920
  /* For recovery, an erroneous assertion expression is handled as a
1921
     failing assertion.  */
1922
  *value = 0;
1923
 
1924
  if (node)
1925
    *value = (node->type == NT_ASSERTION &&
1926
              (answer == 0 || *find_answer (node, answer) != 0));
1927
  else if (pfile->cur_token[-1].type == CPP_EOF)
1928
    _cpp_backup_tokens (pfile, 1);
1929
 
1930
  /* We don't commit the memory for the answer - it's temporary only.  */
1931
  return node == 0;
1932
}
1933
 
1934
/* Handle #assert.  */
1935
static void
1936
do_assert (cpp_reader *pfile)
1937
{
1938
  struct answer *new_answer;
1939
  cpp_hashnode *node;
1940
 
1941
  node = parse_assertion (pfile, &new_answer, T_ASSERT);
1942
  if (node)
1943
    {
1944
      size_t answer_size;
1945
 
1946
      /* Place the new answer in the answer list.  First check there
1947
         is not a duplicate.  */
1948
      new_answer->next = 0;
1949
      if (node->type == NT_ASSERTION)
1950
        {
1951
          if (*find_answer (node, new_answer))
1952
            {
1953
              cpp_error (pfile, CPP_DL_WARNING, "\"%s\" re-asserted",
1954
                         NODE_NAME (node) + 1);
1955
              return;
1956
            }
1957
          new_answer->next = node->value.answers;
1958
        }
1959
 
1960
      answer_size = sizeof (struct answer) + ((new_answer->count - 1)
1961
                                              * sizeof (cpp_token));
1962
      /* Commit or allocate storage for the object.  */
1963
      if (pfile->hash_table->alloc_subobject)
1964
        {
1965
          struct answer *temp_answer = new_answer;
1966
          new_answer = (struct answer *) pfile->hash_table->alloc_subobject
1967
            (answer_size);
1968
          memcpy (new_answer, temp_answer, answer_size);
1969
        }
1970
      else
1971
        BUFF_FRONT (pfile->a_buff) += answer_size;
1972
 
1973
      node->type = NT_ASSERTION;
1974
      node->value.answers = new_answer;
1975
      check_eol (pfile);
1976
    }
1977
}
1978
 
1979
/* Handle #unassert.  */
1980
static void
1981
do_unassert (cpp_reader *pfile)
1982
{
1983
  cpp_hashnode *node;
1984
  struct answer *answer;
1985
 
1986
  node = parse_assertion (pfile, &answer, T_UNASSERT);
1987
  /* It isn't an error to #unassert something that isn't asserted.  */
1988
  if (node && node->type == NT_ASSERTION)
1989
    {
1990
      if (answer)
1991
        {
1992
          struct answer **p = find_answer (node, answer), *temp;
1993
 
1994
          /* Remove the answer from the list.  */
1995
          temp = *p;
1996
          if (temp)
1997
            *p = temp->next;
1998
 
1999
          /* Did we free the last answer?  */
2000
          if (node->value.answers == 0)
2001
            node->type = NT_VOID;
2002
 
2003
          check_eol (pfile);
2004
        }
2005
      else
2006
        _cpp_free_definition (node);
2007
    }
2008
 
2009
  /* We don't commit the memory for the answer - it's temporary only.  */
2010
}
2011
 
2012
/* These are for -D, -U, -A.  */
2013
 
2014
/* Process the string STR as if it appeared as the body of a #define.
2015
   If STR is just an identifier, define it with value 1.
2016
   If STR has anything after the identifier, then it should
2017
   be identifier=definition.  */
2018
void
2019
cpp_define (cpp_reader *pfile, const char *str)
2020
{
2021
  char *buf, *p;
2022
  size_t count;
2023
 
2024
  /* Copy the entire option so we can modify it.
2025
     Change the first "=" in the string to a space.  If there is none,
2026
     tack " 1" on the end.  */
2027
 
2028
  count = strlen (str);
2029
  buf = (char *) alloca (count + 3);
2030
  memcpy (buf, str, count);
2031
 
2032
  p = strchr (str, '=');
2033
  if (p)
2034
    buf[p - str] = ' ';
2035
  else
2036
    {
2037
      buf[count++] = ' ';
2038
      buf[count++] = '1';
2039
    }
2040
  buf[count] = '\n';
2041
 
2042
  run_directive (pfile, T_DEFINE, buf, count);
2043
}
2044
 
2045
/* Slight variant of the above for use by initialize_builtins.  */
2046
void
2047
_cpp_define_builtin (cpp_reader *pfile, const char *str)
2048
{
2049
  size_t len = strlen (str);
2050
  char *buf = (char *) alloca (len + 1);
2051
  memcpy (buf, str, len);
2052
  buf[len] = '\n';
2053
  run_directive (pfile, T_DEFINE, buf, len);
2054
}
2055
 
2056
/* Process MACRO as if it appeared as the body of an #undef.  */
2057
void
2058
cpp_undef (cpp_reader *pfile, const char *macro)
2059
{
2060
  size_t len = strlen (macro);
2061
  char *buf = (char *) alloca (len + 1);
2062
  memcpy (buf, macro, len);
2063
  buf[len] = '\n';
2064
  run_directive (pfile, T_UNDEF, buf, len);
2065
}
2066
 
2067
/* Process the string STR as if it appeared as the body of a #assert.  */
2068
void
2069
cpp_assert (cpp_reader *pfile, const char *str)
2070
{
2071
  handle_assertion (pfile, str, T_ASSERT);
2072
}
2073
 
2074
/* Process STR as if it appeared as the body of an #unassert.  */
2075
void
2076
cpp_unassert (cpp_reader *pfile, const char *str)
2077
{
2078
  handle_assertion (pfile, str, T_UNASSERT);
2079
}
2080
 
2081
/* Common code for cpp_assert (-A) and cpp_unassert (-A-).  */
2082
static void
2083
handle_assertion (cpp_reader *pfile, const char *str, int type)
2084
{
2085
  size_t count = strlen (str);
2086
  const char *p = strchr (str, '=');
2087
 
2088
  /* Copy the entire option so we can modify it.  Change the first
2089
     "=" in the string to a '(', and tack a ')' on the end.  */
2090
  char *buf = (char *) alloca (count + 2);
2091
 
2092
  memcpy (buf, str, count);
2093
  if (p)
2094
    {
2095
      buf[p - str] = '(';
2096
      buf[count++] = ')';
2097
    }
2098
  buf[count] = '\n';
2099
  str = buf;
2100
 
2101
  run_directive (pfile, type, str, count);
2102
}
2103
 
2104
/* The number of errors for a given reader.  */
2105
unsigned int
2106
cpp_errors (cpp_reader *pfile)
2107
{
2108
  return pfile->errors;
2109
}
2110
 
2111
/* The options structure.  */
2112
cpp_options *
2113
cpp_get_options (cpp_reader *pfile)
2114
{
2115
  return &pfile->opts;
2116
}
2117
 
2118
/* The callbacks structure.  */
2119
cpp_callbacks *
2120
cpp_get_callbacks (cpp_reader *pfile)
2121
{
2122
  return &pfile->cb;
2123
}
2124
 
2125
/* Copy the given callbacks structure to our own.  */
2126
void
2127
cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
2128
{
2129
  pfile->cb = *cb;
2130
}
2131
 
2132
/* The dependencies structure.  (Creates one if it hasn't already been.)  */
2133
struct deps *
2134
cpp_get_deps (cpp_reader *pfile)
2135
{
2136
  if (!pfile->deps)
2137
    pfile->deps = deps_init ();
2138
  return pfile->deps;
2139
}
2140
 
2141
/* Push a new buffer on the buffer stack.  Returns the new buffer; it
2142
   doesn't fail.  It does not generate a file change call back; that
2143
   is the responsibility of the caller.  */
2144
cpp_buffer *
2145
cpp_push_buffer (cpp_reader *pfile, const uchar *buffer, size_t len,
2146
                 int from_stage3)
2147
{
2148
  cpp_buffer *new_buffer = XOBNEW (&pfile->buffer_ob, cpp_buffer);
2149
 
2150
  /* Clears, amongst other things, if_stack and mi_cmacro.  */
2151
  memset (new_buffer, 0, sizeof (cpp_buffer));
2152
 
2153
  new_buffer->next_line = new_buffer->buf = buffer;
2154
  new_buffer->rlimit = buffer + len;
2155
  new_buffer->from_stage3 = from_stage3;
2156
  new_buffer->prev = pfile->buffer;
2157
  new_buffer->need_line = true;
2158
 
2159
  pfile->buffer = new_buffer;
2160
 
2161
  return new_buffer;
2162
}
2163
 
2164
/* Pops a single buffer, with a file change call-back if appropriate.
2165
   Then pushes the next -include file, if any remain.  */
2166
void
2167
_cpp_pop_buffer (cpp_reader *pfile)
2168
{
2169
  cpp_buffer *buffer = pfile->buffer;
2170
  struct _cpp_file *inc = buffer->file;
2171
  struct if_stack *ifs;
2172
 
2173
  /* Walk back up the conditional stack till we reach its level at
2174
     entry to this file, issuing error messages.  */
2175
  for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
2176
    cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
2177
                         "unterminated #%s", dtable[ifs->type].name);
2178
 
2179
  /* In case of a missing #endif.  */
2180
  pfile->state.skipping = 0;
2181
 
2182
  /* _cpp_do_file_change expects pfile->buffer to be the new one.  */
2183
  pfile->buffer = buffer->prev;
2184
 
2185
  free (buffer->notes);
2186
 
2187
  /* Free the buffer object now; we may want to push a new buffer
2188
     in _cpp_push_next_include_file.  */
2189
  obstack_free (&pfile->buffer_ob, buffer);
2190
 
2191
  if (inc)
2192
    {
2193
      _cpp_pop_file_buffer (pfile, inc);
2194
 
2195
      _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
2196
    }
2197
}
2198
 
2199
/* Enter all recognized directives in the hash table.  */
2200
void
2201
_cpp_init_directives (cpp_reader *pfile)
2202
{
2203
  unsigned int i;
2204
  cpp_hashnode *node;
2205
 
2206
  for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
2207
    {
2208
      node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
2209
      node->is_directive = 1;
2210
      node->directive_index = i;
2211
    }
2212
}

powered by: WebSVN 2.1.0

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