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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [libcpp/] [include/] [cpplib.h] - Blame information for rev 847

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

Line No. Rev Author Line
1 270 jeremybenn
/* Definitions for CPP library.
2
   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3
   2004, 2005, 2007, 2008, 2009
4
   Free Software Foundation, Inc.
5
   Written by Per Bothner, 1994-95.
6
 
7
This program is free software; you can redistribute it and/or modify it
8
under the terms of the GNU General Public License as published by the
9
Free Software Foundation; either version 3, or (at your option) any
10
later version.
11
 
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
GNU General Public License for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with this program; see the file COPYING3.  If not see
19
<http://www.gnu.org/licenses/>.
20
 
21
 In other words, you are welcome to use, share and improve this program.
22
 You are forbidden to forbid anyone else to use, share and improve
23
 what you give them.   Help stamp out software-hoarding!  */
24
#ifndef LIBCPP_CPPLIB_H
25
#define LIBCPP_CPPLIB_H
26
 
27
#include <sys/types.h>
28
#include "symtab.h"
29
#include "line-map.h"
30
 
31
typedef struct cpp_reader cpp_reader;
32
typedef struct cpp_buffer cpp_buffer;
33
typedef struct cpp_options cpp_options;
34
typedef struct cpp_token cpp_token;
35
typedef struct cpp_string cpp_string;
36
typedef struct cpp_hashnode cpp_hashnode;
37
typedef struct cpp_macro cpp_macro;
38
typedef struct cpp_callbacks cpp_callbacks;
39
typedef struct cpp_dir cpp_dir;
40
 
41
struct answer;
42
struct _cpp_file;
43
 
44
/* The first three groups, apart from '=', can appear in preprocessor
45
   expressions (+= and -= are used to indicate unary + and - resp.).
46
   This allows a lookup table to be implemented in _cpp_parse_expr.
47
 
48
   The first group, to CPP_LAST_EQ, can be immediately followed by an
49
   '='.  The lexer needs operators ending in '=', like ">>=", to be in
50
   the same order as their counterparts without the '=', like ">>".
51
 
52
   See the cpp_operator table optab in expr.c if you change the order or
53
   add or remove anything in the first group.  */
54
 
55
#define TTYPE_TABLE                                                     \
56
  OP(EQ,                "=")                                            \
57
  OP(NOT,               "!")                                            \
58
  OP(GREATER,           ">")    /* compare */                           \
59
  OP(LESS,              "<")                                            \
60
  OP(PLUS,              "+")    /* math */                              \
61
  OP(MINUS,             "-")                                            \
62
  OP(MULT,              "*")                                            \
63
  OP(DIV,               "/")                                            \
64
  OP(MOD,               "%")                                            \
65
  OP(AND,               "&")    /* bit ops */                           \
66
  OP(OR,                "|")                                            \
67
  OP(XOR,               "^")                                            \
68
  OP(RSHIFT,            ">>")                                           \
69
  OP(LSHIFT,            "<<")                                           \
70
                                                                        \
71
  OP(COMPL,             "~")                                            \
72
  OP(AND_AND,           "&&")   /* logical */                           \
73
  OP(OR_OR,             "||")                                           \
74
  OP(QUERY,             "?")                                            \
75
  OP(COLON,             ":")                                            \
76
  OP(COMMA,             ",")    /* grouping */                          \
77
  OP(OPEN_PAREN,        "(")                                            \
78
  OP(CLOSE_PAREN,       ")")                                            \
79
  TK(EOF,               NONE)                                           \
80
  OP(EQ_EQ,             "==")   /* compare */                           \
81
  OP(NOT_EQ,            "!=")                                           \
82
  OP(GREATER_EQ,        ">=")                                           \
83
  OP(LESS_EQ,           "<=")                                           \
84
                                                                        \
85
  /* These two are unary + / - in preprocessor expressions.  */         \
86
  OP(PLUS_EQ,           "+=")   /* math */                              \
87
  OP(MINUS_EQ,          "-=")                                           \
88
                                                                        \
89
  OP(MULT_EQ,           "*=")                                           \
90
  OP(DIV_EQ,            "/=")                                           \
91
  OP(MOD_EQ,            "%=")                                           \
92
  OP(AND_EQ,            "&=")   /* bit ops */                           \
93
  OP(OR_EQ,             "|=")                                           \
94
  OP(XOR_EQ,            "^=")                                           \
95
  OP(RSHIFT_EQ,         ">>=")                                          \
96
  OP(LSHIFT_EQ,         "<<=")                                          \
97
  /* Digraphs together, beginning with CPP_FIRST_DIGRAPH.  */           \
98
  OP(HASH,              "#")    /* digraphs */                          \
99
  OP(PASTE,             "##")                                           \
100
  OP(OPEN_SQUARE,       "[")                                            \
101
  OP(CLOSE_SQUARE,      "]")                                            \
102
  OP(OPEN_BRACE,        "{")                                            \
103
  OP(CLOSE_BRACE,       "}")                                            \
104
  /* The remainder of the punctuation.  Order is not significant.  */   \
105
  OP(SEMICOLON,         ";")    /* structure */                         \
106
  OP(ELLIPSIS,          "...")                                          \
107
  OP(PLUS_PLUS,         "++")   /* increment */                         \
108
  OP(MINUS_MINUS,       "--")                                           \
109
  OP(DEREF,             "->")   /* accessors */                         \
110
  OP(DOT,               ".")                                            \
111
  OP(SCOPE,             "::")                                           \
112
  OP(DEREF_STAR,        "->*")                                          \
113
  OP(DOT_STAR,          ".*")                                           \
114
  OP(ATSIGN,            "@")  /* used in Objective-C */                 \
115
                                                                        \
116
  TK(NAME,              IDENT)   /* word */                             \
117
  TK(AT_NAME,           IDENT)   /* @word - Objective-C */              \
118
  TK(NUMBER,            LITERAL) /* 34_be+ta  */                        \
119
                                                                        \
120
  TK(CHAR,              LITERAL) /* 'char' */                           \
121
  TK(WCHAR,             LITERAL) /* L'char' */                          \
122
  TK(CHAR16,            LITERAL) /* u'char' */                          \
123
  TK(CHAR32,            LITERAL) /* U'char' */                          \
124
  TK(OTHER,             LITERAL) /* stray punctuation */                \
125
                                                                        \
126
  TK(STRING,            LITERAL) /* "string" */                         \
127
  TK(WSTRING,           LITERAL) /* L"string" */                        \
128
  TK(STRING16,          LITERAL) /* u"string" */                        \
129
  TK(STRING32,          LITERAL) /* U"string" */                        \
130
  TK(UTF8STRING,        LITERAL) /* u8"string" */                       \
131
  TK(OBJC_STRING,       LITERAL) /* @"string" - Objective-C */          \
132
  TK(HEADER_NAME,       LITERAL) /* <stdio.h> in #include */            \
133
                                                                        \
134
  TK(COMMENT,           LITERAL) /* Only if output comments.  */        \
135
                                 /* SPELL_LITERAL happens to DTRT.  */  \
136
  TK(MACRO_ARG,         NONE)    /* Macro argument.  */                 \
137
  TK(PRAGMA,            NONE)    /* Only for deferred pragmas.  */      \
138
  TK(PRAGMA_EOL,        NONE)    /* End-of-line for deferred pragmas.  */ \
139
  TK(PADDING,           NONE)    /* Whitespace for -E.  */
140
 
141
#define OP(e, s) CPP_ ## e,
142
#define TK(e, s) CPP_ ## e,
143
enum cpp_ttype
144
{
145
  TTYPE_TABLE
146
  N_TTYPES,
147
 
148
  /* Positions in the table.  */
149
  CPP_LAST_EQ        = CPP_LSHIFT,
150
  CPP_FIRST_DIGRAPH  = CPP_HASH,
151
  CPP_LAST_PUNCTUATOR= CPP_ATSIGN,
152
  CPP_LAST_CPP_OP    = CPP_LESS_EQ
153
};
154
#undef OP
155
#undef TK
156
 
157
/* C language kind, used when calling cpp_create_reader.  */
158
enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99,
159
             CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX0X, CLK_CXX0X, CLK_ASM};
160
 
161
/* Payload of a NUMBER, STRING, CHAR or COMMENT token.  */
162
struct GTY(()) cpp_string {
163
  unsigned int len;
164
  const unsigned char *text;
165
};
166
 
167
/* Flags for the cpp_token structure.  */
168
#define PREV_WHITE      (1 << 0) /* If whitespace before this token.  */
169
#define DIGRAPH         (1 << 1) /* If it was a digraph.  */
170
#define STRINGIFY_ARG   (1 << 2) /* If macro argument to be stringified.  */
171
#define PASTE_LEFT      (1 << 3) /* If on LHS of a ## operator.  */
172
#define NAMED_OP        (1 << 4) /* C++ named operators.  */
173
#define NO_EXPAND       (1 << 5) /* Do not macro-expand this token.  */
174
#define BOL             (1 << 6) /* Token at beginning of line.  */
175
#define PURE_ZERO       (1 << 7) /* Single 0 digit, used by the C++ frontend,
176
                                    set in c-lex.c.  */
177
#define SP_DIGRAPH      (1 << 8) /* # or ## token was a digraph.  */
178
#define SP_PREV_WHITE   (1 << 9) /* If whitespace before a ##
179
                                    operator, or before this token
180
                                    after a # operator.  */
181
 
182
/* Specify which field, if any, of the cpp_token union is used.  */
183
 
184
enum cpp_token_fld_kind {
185
  CPP_TOKEN_FLD_NODE,
186
  CPP_TOKEN_FLD_SOURCE,
187
  CPP_TOKEN_FLD_STR,
188
  CPP_TOKEN_FLD_ARG_NO,
189
  CPP_TOKEN_FLD_TOKEN_NO,
190
  CPP_TOKEN_FLD_PRAGMA,
191
  CPP_TOKEN_FLD_NONE
192
};
193
 
194
/* A macro argument in the cpp_token union.  */
195
struct GTY(()) cpp_macro_arg {
196
  /* Argument number.  */
197
  unsigned int arg_no;
198
};
199
 
200
/* An identifier in the cpp_token union.  */
201
struct GTY(()) cpp_identifier {
202
  /* The canonical (UTF-8) spelling of the identifier.  */
203
  cpp_hashnode *
204
    GTY ((nested_ptr (union tree_node,
205
                "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
206
                        "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
207
       node;
208
};
209
 
210
/* A preprocessing token.  This has been carefully packed and should
211
   occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts.  */
212
struct GTY(()) cpp_token {
213
  source_location src_loc;      /* Location of first char of token.  */
214
  ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT;  /* token type */
215
  unsigned short flags;         /* flags - see above */
216
 
217
  union cpp_token_u
218
  {
219
    /* An identifier.  */
220
    struct cpp_identifier GTY ((tag ("CPP_TOKEN_FLD_NODE"))) node;
221
 
222
    /* Inherit padding from this token.  */
223
    cpp_token * GTY ((tag ("CPP_TOKEN_FLD_SOURCE"))) source;
224
 
225
    /* A string, or number.  */
226
    struct cpp_string GTY ((tag ("CPP_TOKEN_FLD_STR"))) str;
227
 
228
    /* Argument no. for a CPP_MACRO_ARG.  */
229
    struct cpp_macro_arg GTY ((tag ("CPP_TOKEN_FLD_ARG_NO"))) macro_arg;
230
 
231
    /* Original token no. for a CPP_PASTE (from a sequence of
232
       consecutive paste tokens in a macro expansion).  */
233
    unsigned int GTY ((tag ("CPP_TOKEN_FLD_TOKEN_NO"))) token_no;
234
 
235
    /* Caller-supplied identifier for a CPP_PRAGMA.  */
236
    unsigned int GTY ((tag ("CPP_TOKEN_FLD_PRAGMA"))) pragma;
237
  } GTY ((desc ("cpp_token_val_index (&%1)"))) val;
238
};
239
 
240
/* Say which field is in use.  */
241
extern enum cpp_token_fld_kind cpp_token_val_index (cpp_token *tok);
242
 
243
/* A type wide enough to hold any multibyte source character.
244
   cpplib's character constant interpreter requires an unsigned type.
245
   Also, a typedef for the signed equivalent.
246
   The width of this type is capped at 32 bits; there do exist targets
247
   where wchar_t is 64 bits, but only in a non-default mode, and there
248
   would be no meaningful interpretation for a wchar_t value greater
249
   than 2^32 anyway -- the widest wide-character encoding around is
250
   ISO 10646, which stops at 2^31.  */
251
#if CHAR_BIT * SIZEOF_INT >= 32
252
# define CPPCHAR_SIGNED_T int
253
#elif CHAR_BIT * SIZEOF_LONG >= 32
254
# define CPPCHAR_SIGNED_T long
255
#else
256
# error "Cannot find a least-32-bit signed integer type"
257
#endif
258
typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
259
typedef CPPCHAR_SIGNED_T cppchar_signed_t;
260
 
261
/* Style of header dependencies to generate.  */
262
enum cpp_deps_style { DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM };
263
 
264
/* The possible normalization levels, from most restrictive to least.  */
265
enum cpp_normalize_level {
266
  /* In NFKC.  */
267
  normalized_KC = 0,
268
  /* In NFC.  */
269
  normalized_C,
270
  /* In NFC, except for subsequences where being in NFC would make
271
     the identifier invalid.  */
272
  normalized_identifier_C,
273
  /* Not normalized at all.  */
274
  normalized_none
275
};
276
 
277
/* This structure is nested inside struct cpp_reader, and
278
   carries all the options visible to the command line.  */
279
struct cpp_options
280
{
281
  /* Characters between tab stops.  */
282
  unsigned int tabstop;
283
 
284
  /* The language we're preprocessing.  */
285
  enum c_lang lang;
286
 
287
  /* Nonzero means use extra default include directories for C++.  */
288
  unsigned char cplusplus;
289
 
290
  /* Nonzero means handle cplusplus style comments.  */
291
  unsigned char cplusplus_comments;
292
 
293
  /* Nonzero means define __OBJC__, treat @ as a special token, use
294
     the OBJC[PLUS]_INCLUDE_PATH environment variable, and allow
295
     "#import".  */
296
  unsigned char objc;
297
 
298
  /* Nonzero means don't copy comments into the output file.  */
299
  unsigned char discard_comments;
300
 
301
  /* Nonzero means don't copy comments into the output file during
302
     macro expansion.  */
303
  unsigned char discard_comments_in_macro_exp;
304
 
305
  /* Nonzero means process the ISO trigraph sequences.  */
306
  unsigned char trigraphs;
307
 
308
  /* Nonzero means process the ISO digraph sequences.  */
309
  unsigned char digraphs;
310
 
311
  /* Nonzero means to allow hexadecimal floats and LL suffixes.  */
312
  unsigned char extended_numbers;
313
 
314
  /* Nonzero means process u/U prefix literals (UTF-16/32).  */
315
  unsigned char uliterals;
316
 
317
  /* Nonzero means print names of header files (-H).  */
318
  unsigned char print_include_names;
319
 
320
  /* Nonzero means complain about deprecated features.  */
321
  unsigned char warn_deprecated;
322
 
323
  /* Nonzero means warn if slash-star appears in a comment.  */
324
  unsigned char warn_comments;
325
 
326
  /* Nonzero means warn if a user-supplied include directory does not
327
     exist.  */
328
  unsigned char warn_missing_include_dirs;
329
 
330
  /* Nonzero means warn if there are any trigraphs.  */
331
  unsigned char warn_trigraphs;
332
 
333
  /* Nonzero means warn about multicharacter charconsts.  */
334
  unsigned char warn_multichar;
335
 
336
  /* Nonzero means warn about various incompatibilities with
337
     traditional C.  */
338
  unsigned char warn_traditional;
339
 
340
  /* Nonzero means warn about long long numeric constants.  */
341
  unsigned char warn_long_long;
342
 
343
  /* Nonzero means warn about text after an #endif (or #else).  */
344
  unsigned char warn_endif_labels;
345
 
346
  /* Nonzero means warn about implicit sign changes owing to integer
347
     promotions.  */
348
  unsigned char warn_num_sign_change;
349
 
350
  /* Zero means don't warn about __VA_ARGS__ usage in c89 pedantic mode.
351
     Presumably the usage is protected by the appropriate #ifdef.  */
352
  unsigned char warn_variadic_macros;
353
 
354
  /* Nonzero means warn about builtin macros that are redefined or
355
     explicitly undefined.  */
356
  unsigned char warn_builtin_macro_redefined;
357
 
358
  /* Nonzero means we should look for header.gcc files that remap file
359
     names.  */
360
  unsigned char remap;
361
 
362
  /* Zero means dollar signs are punctuation.  */
363
  unsigned char dollars_in_ident;
364
 
365
  /* Nonzero means UCNs are accepted in identifiers.  */
366
  unsigned char extended_identifiers;
367
 
368
  /* True if we should warn about dollars in identifiers or numbers
369
     for this translation unit.  */
370
  unsigned char warn_dollars;
371
 
372
  /* Nonzero means warn if undefined identifiers are evaluated in an #if.  */
373
  unsigned char warn_undef;
374
 
375
  /* Nonzero means warn of unused macros from the main file.  */
376
  unsigned char warn_unused_macros;
377
 
378
  /* Nonzero for the 1999 C Standard, including corrigenda and amendments.  */
379
  unsigned char c99;
380
 
381
  /* Nonzero if we are conforming to a specific C or C++ standard.  */
382
  unsigned char std;
383
 
384
  /* Nonzero means give all the error messages the ANSI standard requires.  */
385
  unsigned char pedantic;
386
 
387
  /* Nonzero means we're looking at already preprocessed code, so don't
388
     bother trying to do macro expansion and whatnot.  */
389
  unsigned char preprocessed;
390
 
391
  /* Print column number in error messages.  */
392
  unsigned char show_column;
393
 
394
  /* Nonzero means handle C++ alternate operator names.  */
395
  unsigned char operator_names;
396
 
397
  /* Nonzero means warn about use of C++ alternate operator names.  */
398
  unsigned char warn_cxx_operator_names;
399
 
400
  /* True for traditional preprocessing.  */
401
  unsigned char traditional;
402
 
403
  /* Holds the name of the target (execution) character set.  */
404
  const char *narrow_charset;
405
 
406
  /* Holds the name of the target wide character set.  */
407
  const char *wide_charset;
408
 
409
  /* Holds the name of the input character set.  */
410
  const char *input_charset;
411
 
412
  /* The minimum permitted level of normalization before a warning
413
     is generated.  */
414
  enum cpp_normalize_level warn_normalize;
415
 
416
  /* True to warn about precompiled header files we couldn't use.  */
417
  bool warn_invalid_pch;
418
 
419
  /* True if dependencies should be restored from a precompiled header.  */
420
  bool restore_pch_deps;
421
 
422
  /* Dependency generation.  */
423
  struct
424
  {
425
    /* Style of header dependencies to generate.  */
426
    enum cpp_deps_style style;
427
 
428
    /* Assume missing files are generated files.  */
429
    bool missing_files;
430
 
431
    /* Generate phony targets for each dependency apart from the first
432
       one.  */
433
    bool phony_targets;
434
 
435
    /* If true, no dependency is generated on the main file.  */
436
    bool ignore_main_file;
437
 
438
    /* If true, intend to use the preprocessor output (e.g., for compilation)
439
       in addition to the dependency info.  */
440
    bool need_preprocessor_output;
441
  } deps;
442
 
443
  /* Target-specific features set by the front end or client.  */
444
 
445
  /* Precision for target CPP arithmetic, target characters, target
446
     ints and target wide characters, respectively.  */
447
  size_t precision, char_precision, int_precision, wchar_precision;
448
 
449
  /* True means chars (wide chars) are unsigned.  */
450
  bool unsigned_char, unsigned_wchar;
451
 
452
  /* True if the most significant byte in a word has the lowest
453
     address in memory.  */
454
  bool bytes_big_endian;
455
 
456
  /* Nonzero means __STDC__ should have the value 0 in system headers.  */
457
  unsigned char stdc_0_in_system_headers;
458
 
459
  /* True disables tokenization outside of preprocessing directives. */
460
  bool directives_only;
461
};
462
 
463
/* Callback for header lookup for HEADER, which is the name of a
464
   source file.  It is used as a method of last resort to find headers
465
   that are not otherwise found during the normal include processing.
466
   The return value is the malloced name of a header to try and open,
467
   if any, or NULL otherwise.  This callback is called only if the
468
   header is otherwise unfound.  */
469
typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **);
470
 
471
/* Call backs to cpplib client.  */
472
struct cpp_callbacks
473
{
474
  /* Called when a new line of preprocessed output is started.  */
475
  void (*line_change) (cpp_reader *, const cpp_token *, int);
476
 
477
  /* Called when switching to/from a new file.
478
     The line_map is for the new file.  It is NULL if there is no new file.
479
     (In C this happens when done with <built-in>+<command line> and also
480
     when done with a main file.)  This can be used for resource cleanup.  */
481
  void (*file_change) (cpp_reader *, const struct line_map *);
482
 
483
  void (*dir_change) (cpp_reader *, const char *);
484
  void (*include) (cpp_reader *, unsigned int, const unsigned char *,
485
                   const char *, int, const cpp_token **);
486
  void (*define) (cpp_reader *, unsigned int, cpp_hashnode *);
487
  void (*undef) (cpp_reader *, unsigned int, cpp_hashnode *);
488
  void (*ident) (cpp_reader *, unsigned int, const cpp_string *);
489
  void (*def_pragma) (cpp_reader *, unsigned int);
490
  int (*valid_pch) (cpp_reader *, const char *, int);
491
  void (*read_pch) (cpp_reader *, const char *, int, const char *);
492
  missing_header_cb missing_header;
493
 
494
  /* Context-sensitive macro support.  Returns macro (if any) that should
495
     be expanded.  */
496
  cpp_hashnode * (*macro_to_expand) (cpp_reader *, const cpp_token *);
497
 
498
  /* Called to emit a diagnostic.  This callback receives the
499
     translated message.  */
500
  bool (*error) (cpp_reader *, int, source_location, unsigned int,
501
                 const char *, va_list *)
502
       ATTRIBUTE_FPTR_PRINTF(5,0);
503
 
504
  /* Callbacks for when a macro is expanded, or tested (whether
505
     defined or not at the time) in #ifdef, #ifndef or "defined".  */
506
  void (*used_define) (cpp_reader *, unsigned int, cpp_hashnode *);
507
  void (*used_undef) (cpp_reader *, unsigned int, cpp_hashnode *);
508
  /* Called before #define and #undef or other macro definition
509
     changes are processed.  */
510
  void (*before_define) (cpp_reader *);
511
  /* Called whenever a macro is expanded or tested.
512
     Second argument is the location of the start of the current expansion.  */
513
  void (*used) (cpp_reader *, source_location, cpp_hashnode *);
514
};
515
 
516
#ifdef VMS
517
#define INO_T_CPP ino_t ino[3]
518
#else
519
#define INO_T_CPP ino_t ino
520
#endif
521
 
522
/* Chain of directories to look for include files in.  */
523
struct cpp_dir
524
{
525
  /* NULL-terminated singly-linked list.  */
526
  struct cpp_dir *next;
527
 
528
  /* NAME of the directory, NUL-terminated.  */
529
  char *name;
530
  unsigned int len;
531
 
532
  /* One if a system header, two if a system header that has extern
533
     "C" guards for C++.  */
534
  unsigned char sysp;
535
 
536
  /* Is this a user-supplied directory? */
537
  bool user_supplied_p;
538
 
539
  /* The canonicalized NAME as determined by lrealpath.  This field
540
     is only used by hosts that lack reliable inode numbers.  */
541
  char *canonical_name;
542
 
543
  /* Mapping of file names for this directory for MS-DOS and related
544
     platforms.  A NULL-terminated array of (from, to) pairs.  */
545
  const char **name_map;
546
 
547
  /* Routine to construct pathname, given the search path name and the
548
     HEADER we are trying to find, return a constructed pathname to
549
     try and open.  If this is NULL, the constructed pathname is as
550
     constructed by append_file_to_dir.  */
551
  char *(*construct) (const char *header, cpp_dir *dir);
552
 
553
  /* The C front end uses these to recognize duplicated
554
     directories in the search path.  */
555
  INO_T_CPP;
556
  dev_t dev;
557
};
558
 
559
/* The structure of a node in the hash table.  The hash table has
560
   entries for all identifiers: either macros defined by #define
561
   commands (type NT_MACRO), assertions created with #assert
562
   (NT_ASSERTION), or neither of the above (NT_VOID).  Builtin macros
563
   like __LINE__ are flagged NODE_BUILTIN.  Poisoned identifiers are
564
   flagged NODE_POISONED.  NODE_OPERATOR (C++ only) indicates an
565
   identifier that behaves like an operator such as "xor".
566
   NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
567
   diagnostic may be required for this node.  Currently this only
568
   applies to __VA_ARGS__, poisoned identifiers, and -Wc++-compat
569
   warnings about NODE_OPERATOR.  */
570
 
571
/* Hash node flags.  */
572
#define NODE_OPERATOR   (1 << 0)        /* C++ named operator.  */
573
#define NODE_POISONED   (1 << 1)        /* Poisoned identifier.  */
574
#define NODE_BUILTIN    (1 << 2)        /* Builtin macro.  */
575
#define NODE_DIAGNOSTIC (1 << 3)        /* Possible diagnostic when lexed.  */
576
#define NODE_WARN       (1 << 4)        /* Warn if redefined or undefined.  */
577
#define NODE_DISABLED   (1 << 5)        /* A disabled macro.  */
578
#define NODE_MACRO_ARG  (1 << 6)        /* Used during #define processing.  */
579
#define NODE_USED       (1 << 7)        /* Dumped with -dU.  */
580
#define NODE_CONDITIONAL (1 << 8)       /* Conditional macro */
581
#define NODE_WARN_OPERATOR (1 << 9)     /* Warn about C++ named operator.  */
582
 
583
/* Different flavors of hash node.  */
584
enum node_type
585
{
586
  NT_VOID = 0,      /* No definition yet.  */
587
  NT_MACRO,        /* A macro of some form.  */
588
  NT_ASSERTION     /* Predicate for #assert.  */
589
};
590
 
591
/* Different flavors of builtin macro.  _Pragma is an operator, but we
592
   handle it with the builtin code for efficiency reasons.  */
593
enum cpp_builtin_type
594
{
595
  BT_SPECLINE = 0,               /* `__LINE__' */
596
  BT_DATE,                      /* `__DATE__' */
597
  BT_FILE,                      /* `__FILE__' */
598
  BT_BASE_FILE,                 /* `__BASE_FILE__' */
599
  BT_INCLUDE_LEVEL,             /* `__INCLUDE_LEVEL__' */
600
  BT_TIME,                      /* `__TIME__' */
601
  BT_STDC,                      /* `__STDC__' */
602
  BT_PRAGMA,                    /* `_Pragma' operator */
603
  BT_TIMESTAMP,                 /* `__TIMESTAMP__' */
604
  BT_COUNTER                    /* `__COUNTER__' */
605
};
606
 
607
#define CPP_HASHNODE(HNODE)     ((cpp_hashnode *) (HNODE))
608
#define HT_NODE(NODE)           ((ht_identifier *) (NODE))
609
#define NODE_LEN(NODE)          HT_LEN (&(NODE)->ident)
610
#define NODE_NAME(NODE)         HT_STR (&(NODE)->ident)
611
 
612
/* Specify which field, if any, of the union is used.  */
613
 
614
enum {
615
  NTV_MACRO,
616
  NTV_ANSWER,
617
  NTV_BUILTIN,
618
  NTV_ARGUMENT,
619
  NTV_NONE
620
};
621
 
622
#define CPP_HASHNODE_VALUE_IDX(HNODE)                           \
623
  ((HNODE.flags & NODE_MACRO_ARG) ? NTV_ARGUMENT                \
624
   : HNODE.type == NT_MACRO ? ((HNODE.flags & NODE_BUILTIN)     \
625
                               ? NTV_BUILTIN : NTV_MACRO)       \
626
   : HNODE.type == NT_ASSERTION ? NTV_ANSWER                    \
627
   : NTV_NONE)
628
 
629
/* The common part of an identifier node shared amongst all 3 C front
630
   ends.  Also used to store CPP identifiers, which are a superset of
631
   identifiers in the grammatical sense.  */
632
 
633
union GTY(()) _cpp_hashnode_value {
634
  /* If a macro.  */
635
  cpp_macro * GTY((tag ("NTV_MACRO"))) macro;
636
  /* Answers to an assertion.  */
637
  struct answer * GTY ((tag ("NTV_ANSWER"))) answers;
638
  /* Code for a builtin macro.  */
639
  enum cpp_builtin_type GTY ((tag ("NTV_BUILTIN"))) builtin;
640
  /* Macro argument index.  */
641
  unsigned short GTY ((tag ("NTV_ARGUMENT"))) arg_index;
642
};
643
 
644
struct GTY(()) cpp_hashnode {
645
  struct ht_identifier ident;
646
  unsigned int is_directive : 1;
647
  unsigned int directive_index : 7;     /* If is_directive,
648
                                           then index into directive table.
649
                                           Otherwise, a NODE_OPERATOR.  */
650
  unsigned char rid_code;               /* Rid code - for front ends.  */
651
  ENUM_BITFIELD(node_type) type : 6;    /* CPP node type.  */
652
  unsigned int flags : 10;              /* CPP flags.  */
653
 
654
  union _cpp_hashnode_value GTY ((desc ("CPP_HASHNODE_VALUE_IDX (%1)"))) value;
655
};
656
 
657
/* Call this first to get a handle to pass to other functions.
658
 
659
   If you want cpplib to manage its own hashtable, pass in a NULL
660
   pointer.  Otherwise you should pass in an initialized hash table
661
   that cpplib will share; this technique is used by the C front
662
   ends.  */
663
extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
664
                                      struct line_maps *);
665
 
666
/* Reset the cpp_reader's line_map.  This is only used after reading a
667
   PCH file.  */
668
extern void cpp_set_line_map (cpp_reader *, struct line_maps *);
669
 
670
/* Call this to change the selected language standard (e.g. because of
671
   command line options).  */
672
extern void cpp_set_lang (cpp_reader *, enum c_lang);
673
 
674
/* Set the include paths.  */
675
extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
676
 
677
/* Call these to get pointers to the options, callback, and deps
678
   structures for a given reader.  These pointers are good until you
679
   call cpp_finish on that reader.  You can either edit the callbacks
680
   through the pointer returned from cpp_get_callbacks, or set them
681
   with cpp_set_callbacks.  */
682
extern cpp_options *cpp_get_options (cpp_reader *);
683
extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
684
extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
685
extern struct deps *cpp_get_deps (cpp_reader *);
686
 
687
/* This function reads the file, but does not start preprocessing.  It
688
   returns the name of the original file; this is the same as the
689
   input file, except for preprocessed input.  This will generate at
690
   least one file change callback, and possibly a line change callback
691
   too.  If there was an error opening the file, it returns NULL.  */
692
extern const char *cpp_read_main_file (cpp_reader *, const char *);
693
 
694
/* Set up built-ins with special behavior.  Use cpp_init_builtins()
695
   instead unless your know what you are doing.  */
696
extern void cpp_init_special_builtins (cpp_reader *);
697
 
698
/* Set up built-ins like __FILE__.  */
699
extern void cpp_init_builtins (cpp_reader *, int);
700
 
701
/* This is called after options have been parsed, and partially
702
   processed.  */
703
extern void cpp_post_options (cpp_reader *);
704
 
705
/* Set up translation to the target character set.  */
706
extern void cpp_init_iconv (cpp_reader *);
707
 
708
/* Call this to finish preprocessing.  If you requested dependency
709
   generation, pass an open stream to write the information to,
710
   otherwise NULL.  It is your responsibility to close the stream.  */
711
extern void cpp_finish (cpp_reader *, FILE *deps_stream);
712
 
713
/* Call this to release the handle at the end of preprocessing.  Any
714
   use of the handle after this function returns is invalid.  */
715
extern void cpp_destroy (cpp_reader *);
716
 
717
extern unsigned int cpp_token_len (const cpp_token *);
718
extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
719
extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
720
                                       unsigned char *, bool);
721
extern void cpp_register_pragma (cpp_reader *, const char *, const char *,
722
                                 void (*) (cpp_reader *), bool);
723
extern void cpp_register_deferred_pragma (cpp_reader *, const char *,
724
                                          const char *, unsigned, bool, bool);
725
extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
726
                            const cpp_token *);
727
extern const cpp_token *cpp_get_token (cpp_reader *);
728
extern const cpp_token *cpp_get_token_with_location (cpp_reader *,
729
                                                     source_location *);
730
extern const unsigned char *cpp_macro_definition (cpp_reader *,
731
                                                  const cpp_hashnode *);
732
extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
733
extern const cpp_token *cpp_peek_token (cpp_reader *, int);
734
 
735
/* Evaluate a CPP_*CHAR* token.  */
736
extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *,
737
                                          unsigned int *, int *);
738
/* Evaluate a vector of CPP_*STRING* tokens.  */
739
extern bool cpp_interpret_string (cpp_reader *,
740
                                  const cpp_string *, size_t,
741
                                  cpp_string *, enum cpp_ttype);
742
extern bool cpp_interpret_string_notranslate (cpp_reader *,
743
                                              const cpp_string *, size_t,
744
                                              cpp_string *, enum cpp_ttype);
745
 
746
/* Convert a host character constant to the execution character set.  */
747
extern cppchar_t cpp_host_to_exec_charset (cpp_reader *, cppchar_t);
748
 
749
/* Used to register macros and assertions, perhaps from the command line.
750
   The text is the same as the command line argument.  */
751
extern void cpp_define (cpp_reader *, const char *);
752
extern void cpp_define_formatted (cpp_reader *pfile,
753
                                  const char *fmt, ...) ATTRIBUTE_PRINTF_2;
754
extern void cpp_assert (cpp_reader *, const char *);
755
extern void cpp_undef (cpp_reader *, const char *);
756
extern void cpp_unassert (cpp_reader *, const char *);
757
 
758
extern cpp_macro *cpp_push_definition (cpp_reader *, const char *);
759
extern void cpp_pop_definition (cpp_reader *, const char *, cpp_macro *);
760
 
761
/* Undefine all macros and assertions.  */
762
extern void cpp_undef_all (cpp_reader *);
763
 
764
extern cpp_buffer *cpp_push_buffer (cpp_reader *, const unsigned char *,
765
                                    size_t, int);
766
extern int cpp_defined (cpp_reader *, const unsigned char *, int);
767
 
768
/* A preprocessing number.  Code assumes that any unused high bits of
769
   the double integer are set to zero.  */
770
typedef unsigned HOST_WIDE_INT cpp_num_part;
771
typedef struct cpp_num cpp_num;
772
struct cpp_num
773
{
774
  cpp_num_part high;
775
  cpp_num_part low;
776
  bool unsignedp;  /* True if value should be treated as unsigned.  */
777
  bool overflow;   /* True if the most recent calculation overflowed.  */
778
};
779
 
780
/* cpplib provides two interfaces for interpretation of preprocessing
781
   numbers.
782
 
783
   cpp_classify_number categorizes numeric constants according to
784
   their field (integer, floating point, or invalid), radix (decimal,
785
   octal, hexadecimal), and type suffixes.  */
786
 
787
#define CPP_N_CATEGORY  0x000F
788
#define CPP_N_INVALID   0x0000
789
#define CPP_N_INTEGER   0x0001
790
#define CPP_N_FLOATING  0x0002
791
 
792
#define CPP_N_WIDTH     0x00F0
793
#define CPP_N_SMALL     0x0010  /* int, float, shrot _Fract/Accum  */
794
#define CPP_N_MEDIUM    0x0020  /* long, double, long _Fract/_Accum.  */
795
#define CPP_N_LARGE     0x0040  /* long long, long double,
796
                                   long long _Fract/Accum.  */
797
 
798
#define CPP_N_WIDTH_MD  0xF0000 /* machine defined.  */
799
#define CPP_N_MD_W      0x10000
800
#define CPP_N_MD_Q      0x20000
801
 
802
#define CPP_N_RADIX     0x0F00
803
#define CPP_N_DECIMAL   0x0100
804
#define CPP_N_HEX       0x0200
805
#define CPP_N_OCTAL     0x0400
806
#define CPP_N_BINARY    0x0800
807
 
808
#define CPP_N_UNSIGNED  0x1000  /* Properties.  */
809
#define CPP_N_IMAGINARY 0x2000
810
#define CPP_N_DFLOAT    0x4000
811
#define CPP_N_DEFAULT   0x8000
812
 
813
#define CPP_N_FRACT     0x100000 /* Fract types.  */
814
#define CPP_N_ACCUM     0x200000 /* Accum types.  */
815
 
816
/* Classify a CPP_NUMBER token.  The return value is a combination of
817
   the flags from the above sets.  */
818
extern unsigned cpp_classify_number (cpp_reader *, const cpp_token *);
819
 
820
/* Evaluate a token classified as category CPP_N_INTEGER.  */
821
extern cpp_num cpp_interpret_integer (cpp_reader *, const cpp_token *,
822
                                      unsigned int type);
823
 
824
/* Sign extend a number, with PRECISION significant bits and all
825
   others assumed clear, to fill out a cpp_num structure.  */
826
cpp_num cpp_num_sign_extend (cpp_num, size_t);
827
 
828
/* Diagnostic levels.  To get a diagnostic without associating a
829
   position in the translation unit with it, use cpp_error_with_line
830
   with a line number of zero.  */
831
 
832
/* Warning, an error with -Werror.  */
833
#define CPP_DL_WARNING          0x00
834
/* Same as CPP_DL_WARNING, except it is not suppressed in system headers.  */
835
#define CPP_DL_WARNING_SYSHDR   0x01
836
/* Warning, an error with -pedantic-errors or -Werror.  */
837
#define CPP_DL_PEDWARN          0x02
838
/* An error.  */
839
#define CPP_DL_ERROR            0x03
840
/* An internal consistency check failed.  Prints "internal error: ",
841
   otherwise the same as CPP_DL_ERROR.  */
842
#define CPP_DL_ICE              0x04
843
/* An informative note following a warning.  */
844
#define CPP_DL_NOTE             0x05
845
/* A fatal error.  */
846
#define CPP_DL_FATAL            0x06
847
 
848
/* Output a diagnostic of some kind.  */
849
extern bool cpp_error (cpp_reader *, int, const char *msgid, ...)
850
  ATTRIBUTE_PRINTF_3;
851
 
852
/* Output a diagnostic with "MSGID: " preceding the
853
   error string of errno.  No location is printed.  */
854
extern bool cpp_errno (cpp_reader *, int, const char *msgid);
855
 
856
/* Same as cpp_error, except additionally specifies a position as a
857
   (translation unit) physical line and physical column.  If the line is
858
   zero, then no location is printed.  */
859
extern bool cpp_error_with_line (cpp_reader *, int, source_location, unsigned,
860
                                 const char *msgid, ...) ATTRIBUTE_PRINTF_5;
861
 
862
/* In lex.c */
863
extern int cpp_ideq (const cpp_token *, const char *);
864
extern void cpp_output_line (cpp_reader *, FILE *);
865
extern unsigned char *cpp_output_line_to_string (cpp_reader *,
866
                                                 const unsigned char *);
867
extern void cpp_output_token (const cpp_token *, FILE *);
868
extern const char *cpp_type2name (enum cpp_ttype, unsigned char flags);
869
/* Returns the value of an escape sequence, truncated to the correct
870
   target precision.  PSTR points to the input pointer, which is just
871
   after the backslash.  LIMIT is how much text we have.  WIDE is true
872
   if the escape sequence is part of a wide character constant or
873
   string literal.  Handles all relevant diagnostics.  */
874
extern cppchar_t cpp_parse_escape (cpp_reader *, const unsigned char ** pstr,
875
                                   const unsigned char *limit, int wide);
876
 
877
/* Structure used to hold a comment block at a given location in the
878
   source code.  */
879
 
880
typedef struct
881
{
882
  /* Text of the comment including the terminators.  */
883
  char *comment;
884
 
885
  /* source location for the given comment.  */
886
  source_location sloc;
887
} cpp_comment;
888
 
889
/* Structure holding all comments for a given cpp_reader.  */
890
 
891
typedef struct
892
{
893
  /* table of comment entries.  */
894
  cpp_comment *entries;
895
 
896
  /* number of actual entries entered in the table.  */
897
  int count;
898
 
899
  /* number of entries allocated currently.  */
900
  int allocated;
901
} cpp_comment_table;
902
 
903
/* Returns the table of comments encountered by the preprocessor. This
904
   table is only populated when pfile->state.save_comments is true. */
905
extern cpp_comment_table *cpp_get_comments (cpp_reader *);
906
 
907
/* In hash.c */
908
 
909
/* Lookup an identifier in the hashtable.  Puts the identifier in the
910
   table if it is not already there.  */
911
extern cpp_hashnode *cpp_lookup (cpp_reader *, const unsigned char *,
912
                                 unsigned int);
913
 
914
typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *);
915
extern void cpp_forall_identifiers (cpp_reader *, cpp_cb, void *);
916
 
917
/* In macro.c */
918
extern void cpp_scan_nooutput (cpp_reader *);
919
extern int  cpp_sys_macro_p (cpp_reader *);
920
extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *,
921
                                        unsigned int);
922
 
923
/* In files.c */
924
extern bool cpp_included (cpp_reader *, const char *);
925
extern bool cpp_included_before (cpp_reader *, const char *, source_location);
926
extern void cpp_make_system_header (cpp_reader *, int, int);
927
extern bool cpp_push_include (cpp_reader *, const char *);
928
extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
929
extern const char *cpp_get_path (struct _cpp_file *);
930
extern cpp_dir *cpp_get_dir (struct _cpp_file *);
931
extern cpp_buffer *cpp_get_buffer (cpp_reader *);
932
extern struct _cpp_file *cpp_get_file (cpp_buffer *);
933
extern cpp_buffer *cpp_get_prev (cpp_buffer *);
934
extern void cpp_clear_file_cache (cpp_reader *);
935
 
936
/* In pch.c */
937
struct save_macro_data;
938
extern int cpp_save_state (cpp_reader *, FILE *);
939
extern int cpp_write_pch_deps (cpp_reader *, FILE *);
940
extern int cpp_write_pch_state (cpp_reader *, FILE *);
941
extern int cpp_valid_state (cpp_reader *, const char *, int);
942
extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **);
943
extern int cpp_read_state (cpp_reader *, const char *, FILE *,
944
                           struct save_macro_data *);
945
 
946
#endif /* ! LIBCPP_CPPLIB_H */

powered by: WebSVN 2.1.0

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