OSDN Git Service

Index: gcc/ChangeLog
[pf3gnuchains/gcc-fork.git] / libcpp / include / cpplib.h
1 /* Definitions for CPP library.
2    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
3    Free Software Foundation, Inc.
4    Written by Per Bothner, 1994-95.
5
6 This program is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
9 later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19
20  In other words, you are welcome to use, share and improve this program.
21  You are forbidden to forbid anyone else to use, share and improve
22  what you give them.   Help stamp out software-hoarding!  */
23 #ifndef LIBCPP_CPPLIB_H
24 #define LIBCPP_CPPLIB_H
25
26 #include <sys/types.h>
27 #include "symtab.h"
28 #include "line-map.h"
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 typedef struct cpp_reader cpp_reader;
35 typedef struct cpp_buffer cpp_buffer;
36 typedef struct cpp_options cpp_options;
37 typedef struct cpp_token cpp_token;
38 typedef struct cpp_string cpp_string;
39 typedef struct cpp_hashnode cpp_hashnode;
40 typedef struct cpp_macro cpp_macro;
41 typedef struct cpp_callbacks cpp_callbacks;
42 typedef struct cpp_dir cpp_dir;
43
44 struct answer;
45 struct _cpp_file;
46
47 /* The first three groups, apart from '=', can appear in preprocessor
48    expressions (+= and -= are used to indicate unary + and - resp.).
49    This allows a lookup table to be implemented in _cpp_parse_expr.
50
51    The first group, to CPP_LAST_EQ, can be immediately followed by an
52    '='.  The lexer needs operators ending in '=', like ">>=", to be in
53    the same order as their counterparts without the '=', like ">>".  */
54
55 /* Positions in the table.  */
56 #define CPP_LAST_EQ CPP_MAX
57 #define CPP_FIRST_DIGRAPH CPP_HASH
58 #define CPP_LAST_PUNCTUATOR CPP_DOT_STAR
59 #define CPP_LAST_CPP_OP CPP_LESS_EQ
60
61 #define TTYPE_TABLE                             \
62   OP(CPP_EQ = 0,        "=")                    \
63   OP(CPP_NOT,           "!")                    \
64   OP(CPP_GREATER,       ">")    /* compare */   \
65   OP(CPP_LESS,          "<")                    \
66   OP(CPP_PLUS,          "+")    /* math */      \
67   OP(CPP_MINUS,         "-")                    \
68   OP(CPP_MULT,          "*")                    \
69   OP(CPP_DIV,           "/")                    \
70   OP(CPP_MOD,           "%")                    \
71   OP(CPP_AND,           "&")    /* bit ops */   \
72   OP(CPP_OR,            "|")                    \
73   OP(CPP_XOR,           "^")                    \
74   OP(CPP_RSHIFT,        ">>")                   \
75   OP(CPP_LSHIFT,        "<<")                   \
76   OP(CPP_MIN,           "<?")   /* extension */ \
77   OP(CPP_MAX,           ">?")                   \
78 \
79   OP(CPP_COMPL,         "~")                    \
80   OP(CPP_AND_AND,       "&&")   /* logical */   \
81   OP(CPP_OR_OR,         "||")                   \
82   OP(CPP_QUERY,         "?")                    \
83   OP(CPP_COLON,         ":")                    \
84   OP(CPP_COMMA,         ",")    /* grouping */  \
85   OP(CPP_OPEN_PAREN,    "(")                    \
86   OP(CPP_CLOSE_PAREN,   ")")                    \
87   TK(CPP_EOF,           SPELL_NONE)             \
88   OP(CPP_EQ_EQ,         "==")   /* compare */   \
89   OP(CPP_NOT_EQ,        "!=")                   \
90   OP(CPP_GREATER_EQ,    ">=")                   \
91   OP(CPP_LESS_EQ,       "<=")                   \
92 \
93   /* These two are unary + / - in preprocessor expressions.  */ \
94   OP(CPP_PLUS_EQ,       "+=")   /* math */      \
95   OP(CPP_MINUS_EQ,      "-=")                   \
96 \
97   OP(CPP_MULT_EQ,       "*=")                   \
98   OP(CPP_DIV_EQ,        "/=")                   \
99   OP(CPP_MOD_EQ,        "%=")                   \
100   OP(CPP_AND_EQ,        "&=")   /* bit ops */   \
101   OP(CPP_OR_EQ,         "|=")                   \
102   OP(CPP_XOR_EQ,        "^=")                   \
103   OP(CPP_RSHIFT_EQ,     ">>=")                  \
104   OP(CPP_LSHIFT_EQ,     "<<=")                  \
105   OP(CPP_MIN_EQ,        "<?=")  /* extension */ \
106   OP(CPP_MAX_EQ,        ">?=")                  \
107   /* Digraphs together, beginning with CPP_FIRST_DIGRAPH.  */   \
108   OP(CPP_HASH,          "#")    /* digraphs */  \
109   OP(CPP_PASTE,         "##")                   \
110   OP(CPP_OPEN_SQUARE,   "[")                    \
111   OP(CPP_CLOSE_SQUARE,  "]")                    \
112   OP(CPP_OPEN_BRACE,    "{")                    \
113   OP(CPP_CLOSE_BRACE,   "}")                    \
114   /* The remainder of the punctuation.  Order is not significant.  */   \
115   OP(CPP_SEMICOLON,     ";")    /* structure */ \
116   OP(CPP_ELLIPSIS,      "...")                  \
117   OP(CPP_PLUS_PLUS,     "++")   /* increment */ \
118   OP(CPP_MINUS_MINUS,   "--")                   \
119   OP(CPP_DEREF,         "->")   /* accessors */ \
120   OP(CPP_DOT,           ".")                    \
121   OP(CPP_SCOPE,         "::")                   \
122   OP(CPP_DEREF_STAR,    "->*")                  \
123   OP(CPP_DOT_STAR,      ".*")                   \
124   OP(CPP_ATSIGN,        "@")  /* used in Objective-C */ \
125 \
126   TK(CPP_NAME,          SPELL_IDENT)    /* word */                      \
127   TK(CPP_AT_NAME,       SPELL_IDENT)    /* @word - Objective-C */       \
128   TK(CPP_NUMBER,        SPELL_LITERAL)  /* 34_be+ta  */                 \
129 \
130   TK(CPP_CHAR,          SPELL_LITERAL)  /* 'char' */                    \
131   TK(CPP_WCHAR,         SPELL_LITERAL)  /* L'char' */                   \
132   TK(CPP_OTHER,         SPELL_LITERAL)  /* stray punctuation */         \
133 \
134   TK(CPP_STRING,        SPELL_LITERAL)  /* "string" */                  \
135   TK(CPP_WSTRING,       SPELL_LITERAL)  /* L"string" */                 \
136   TK(CPP_OBJC_STRING,   SPELL_LITERAL)  /* @"string" - Objective-C */   \
137   TK(CPP_HEADER_NAME,   SPELL_LITERAL)  /* <stdio.h> in #include */     \
138 \
139   TK(CPP_COMMENT,       SPELL_LITERAL)  /* Only if output comments.  */ \
140                                         /* SPELL_LITERAL happens to DTRT.  */ \
141   TK(CPP_MACRO_ARG,     SPELL_NONE)     /* Macro argument.  */          \
142   TK(CPP_PADDING,       SPELL_NONE)     /* Whitespace for cpp0.  */
143
144 #define OP(e, s) e,
145 #define TK(e, s) e,
146 enum cpp_ttype
147 {
148   TTYPE_TABLE
149   N_TTYPES
150 };
151 #undef OP
152 #undef TK
153
154 /* C language kind, used when calling cpp_reader_init.  */
155 enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99,
156              CLK_GNUCXX, CLK_CXX98, CLK_ASM};
157
158 /* Payload of a NUMBER, STRING, CHAR or COMMENT token.  */
159 struct cpp_string GTY(())
160 {
161   unsigned int len;
162   const unsigned char *text;
163 };
164
165 /* Flags for the cpp_token structure.  */
166 #define PREV_WHITE      (1 << 0) /* If whitespace before this token.  */
167 #define DIGRAPH         (1 << 1) /* If it was a digraph.  */
168 #define STRINGIFY_ARG   (1 << 2) /* If macro argument to be stringified.  */
169 #define PASTE_LEFT      (1 << 3) /* If on LHS of a ## operator.  */
170 #define NAMED_OP        (1 << 4) /* C++ named operators.  */
171 #define NO_EXPAND       (1 << 5) /* Do not macro-expand this token.  */
172 #define BOL             (1 << 6) /* Token at beginning of line.  */
173
174 /* Specify which field, if any, of the cpp_token union is used.  */
175
176 enum cpp_token_fld_kind {
177   CPP_TOKEN_FLD_NODE,
178   CPP_TOKEN_FLD_SOURCE,
179   CPP_TOKEN_FLD_STR,
180   CPP_TOKEN_FLD_ARG_NO,
181   CPP_TOKEN_FLD_NONE
182 };
183
184 /* A preprocessing token.  This has been carefully packed and should
185    occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts.  */
186 struct cpp_token GTY(())
187 {
188   source_location src_loc;      /* Location of first char of token.  */
189   ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT;  /* token type */
190   unsigned char flags;          /* flags - see above */
191
192   union cpp_token_u
193   {
194     /* An identifier.  */
195     cpp_hashnode *
196       GTY ((nested_ptr (union tree_node,
197                 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
198                         "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL"),
199             tag ("CPP_TOKEN_FLD_NODE")))
200          node;
201          
202     /* Inherit padding from this token.  */
203     cpp_token * GTY ((tag ("CPP_TOKEN_FLD_SOURCE"))) source;
204
205     /* A string, or number.  */
206     struct cpp_string GTY ((tag ("CPP_TOKEN_FLD_STR"))) str;
207
208     /* Argument no. for a CPP_MACRO_ARG.  */
209     unsigned int GTY ((tag ("CPP_TOKEN_FLD_ARG_NO"))) arg_no;
210   } GTY ((desc ("cpp_token_val_index (&%1)"))) val;
211 };
212
213 /* Say which field is in use.  */
214 extern enum cpp_token_fld_kind cpp_token_val_index (cpp_token *tok);
215
216 /* A type wide enough to hold any multibyte source character.
217    cpplib's character constant interpreter requires an unsigned type.
218    Also, a typedef for the signed equivalent.
219    The width of this type is capped at 32 bits; there do exist targets
220    where wchar_t is 64 bits, but only in a non-default mode, and there
221    would be no meaningful interpretation for a wchar_t value greater
222    than 2^32 anyway -- the widest wide-character encoding around is
223    ISO 10646, which stops at 2^31.  */
224 #if CHAR_BIT * SIZEOF_INT >= 32
225 # define CPPCHAR_SIGNED_T int
226 #elif CHAR_BIT * SIZEOF_LONG >= 32
227 # define CPPCHAR_SIGNED_T long
228 #else
229 # error "Cannot find a least-32-bit signed integer type"
230 #endif
231 typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
232 typedef CPPCHAR_SIGNED_T cppchar_signed_t;
233
234 /* This structure is nested inside struct cpp_reader, and
235    carries all the options visible to the command line.  */
236 struct cpp_options
237 {
238   /* Characters between tab stops.  */
239   unsigned int tabstop;
240
241   /* The language we're preprocessing.  */
242   enum c_lang lang;
243
244   /* Nonzero means use extra default include directories for C++.  */
245   unsigned char cplusplus;
246
247   /* Nonzero means handle cplusplus style comments.  */
248   unsigned char cplusplus_comments;
249
250   /* Nonzero means define __OBJC__, treat @ as a special token, and
251      use the OBJC[PLUS]_INCLUDE_PATH environment variable.  */
252   unsigned char objc;
253
254   /* Nonzero means don't copy comments into the output file.  */
255   unsigned char discard_comments;
256
257   /* Nonzero means don't copy comments into the output file during
258      macro expansion.  */
259   unsigned char discard_comments_in_macro_exp;
260
261   /* Nonzero means process the ISO trigraph sequences.  */
262   unsigned char trigraphs;
263
264   /* Nonzero means process the ISO digraph sequences.  */
265   unsigned char digraphs;
266
267   /* Nonzero means to allow hexadecimal floats and LL suffixes.  */
268   unsigned char extended_numbers;
269
270   /* Nonzero means print names of header files (-H).  */
271   unsigned char print_include_names;
272
273   /* Nonzero means cpp_pedwarn causes a hard error.  */
274   unsigned char pedantic_errors;
275
276   /* Nonzero means don't print warning messages.  */
277   unsigned char inhibit_warnings;
278
279   /* Nonzero means complain about deprecated features.  */
280   unsigned char warn_deprecated;
281
282   /* Nonzero means don't suppress warnings from system headers.  */
283   unsigned char warn_system_headers;
284
285   /* Nonzero means don't print error messages.  Has no option to
286      select it, but can be set by a user of cpplib (e.g. fix-header).  */
287   unsigned char inhibit_errors;
288
289   /* Nonzero means warn if slash-star appears in a comment.  */
290   unsigned char warn_comments;
291
292   /* Nonzero means warn if a user-supplied include directory does not
293      exist.  */
294   unsigned char warn_missing_include_dirs;
295
296   /* Nonzero means warn if there are any trigraphs.  */
297   unsigned char warn_trigraphs;
298
299   /* Nonzero means warn about multicharacter charconsts.  */
300   unsigned char warn_multichar;
301
302   /* Nonzero means warn about various incompatibilities with
303      traditional C.  */
304   unsigned char warn_traditional;
305
306   /* Nonzero means warn about long long numeric constants.  */
307   unsigned char warn_long_long;
308
309   /* Nonzero means warn about text after an #endif (or #else).  */
310   unsigned char warn_endif_labels;
311
312   /* Nonzero means warn about implicit sign changes owing to integer
313      promotions.  */
314   unsigned char warn_num_sign_change;
315
316   /* Zero means don't warn about __VA_ARGS__ usage in c89 pedantic mode.
317      Presumably the usage is protected by the appropriate #ifdef.  */
318   unsigned char warn_variadic_macros;
319
320   /* Nonzero means turn warnings into errors.  */
321   unsigned char warnings_are_errors;
322
323   /* Nonzero means we should look for header.gcc files that remap file
324      names.  */
325   unsigned char remap;
326
327   /* Zero means dollar signs are punctuation.  */
328   unsigned char dollars_in_ident;
329
330   /* True if we should warn about dollars in identifiers or numbers
331      for this translation unit.  */
332   unsigned char warn_dollars;
333
334   /* Nonzero means warn if undefined identifiers are evaluated in an #if.  */
335   unsigned char warn_undef;
336
337   /* Nonzero means warn of unused macros from the main file.  */
338   unsigned char warn_unused_macros;
339
340   /* Nonzero for the 1999 C Standard, including corrigenda and amendments.  */
341   unsigned char c99;
342
343   /* Nonzero if we are conforming to a specific C or C++ standard.  */
344   unsigned char std;
345
346   /* Nonzero means give all the error messages the ANSI standard requires.  */
347   unsigned char pedantic;
348
349   /* Nonzero means we're looking at already preprocessed code, so don't
350      bother trying to do macro expansion and whatnot.  */
351   unsigned char preprocessed;
352
353   /* Print column number in error messages.  */
354   unsigned char show_column;
355
356   /* Nonzero means handle C++ alternate operator names.  */
357   unsigned char operator_names;
358
359   /* True for traditional preprocessing.  */
360   unsigned char traditional;
361
362   /* Holds the name of the target (execution) character set.  */
363   const char *narrow_charset;
364
365   /* Holds the name of the target wide character set.  */
366   const char *wide_charset;
367
368   /* Holds the name of the input character set.  */
369   const char *input_charset;
370
371   /* True to warn about precompiled header files we couldn't use.  */
372   bool warn_invalid_pch;
373
374   /* True if dependencies should be restored from a precompiled header.  */
375   bool restore_pch_deps;
376
377   /* Dependency generation.  */
378   struct
379   {
380     /* Style of header dependencies to generate.  */
381     enum {DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM } style;
382
383     /* Assume missing files are generated files.  */
384     bool missing_files;
385
386     /* Generate phony targets for each dependency apart from the first
387        one.  */
388     bool phony_targets;
389
390     /* If true, no dependency is generated on the main file.  */
391     bool ignore_main_file;
392   } deps;
393
394   /* Target-specific features set by the front end or client.  */
395
396   /* Precision for target CPP arithmetic, target characters, target
397      ints and target wide characters, respectively.  */
398   size_t precision, char_precision, int_precision, wchar_precision;
399
400   /* True means chars (wide chars) are unsigned.  */
401   bool unsigned_char, unsigned_wchar;
402
403   /* True if the most significant byte in a word has the lowest
404      address in memory.  */
405   bool bytes_big_endian;
406
407   /* Nonzero means __STDC__ should have the value 0 in system headers.  */
408   unsigned char stdc_0_in_system_headers;
409 };
410
411 /* Callback for header lookup for HEADER, which is the name of a
412    source file.  It is used as a method of last resort to find headers
413    that are not otherwise found during the normal include processing.
414    The return value is the malloced name of a header to try and open,
415    if any, or NULL otherwise.  This callback is called only if the
416    header is otherwise unfound.  */
417 typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **);
418
419 /* Call backs to cpplib client.  */
420 struct cpp_callbacks
421 {
422   /* Called when a new line of preprocessed output is started.  */
423   void (*line_change) (cpp_reader *, const cpp_token *, int);
424
425   /* Called when switching to/from a new file.
426      The line_map is for the new file.  It is NULL if there is no new file.
427      (In C this happens when done with <built-in>+<command line> and also
428      when done with a main file.)  This can be used for resource cleanup.  */
429   void (*file_change) (cpp_reader *, const struct line_map *);
430
431   void (*dir_change) (cpp_reader *, const char *);
432   void (*include) (cpp_reader *, unsigned int, const unsigned char *,
433                    const char *, int);
434   void (*define) (cpp_reader *, unsigned int, cpp_hashnode *);
435   void (*undef) (cpp_reader *, unsigned int, cpp_hashnode *);
436   void (*ident) (cpp_reader *, unsigned int, const cpp_string *);
437   void (*def_pragma) (cpp_reader *, unsigned int);
438   int (*valid_pch) (cpp_reader *, const char *, int);
439   void (*read_pch) (cpp_reader *, const char *, int, const char *);
440   missing_header_cb missing_header;
441 };
442
443 /* Chain of directories to look for include files in.  */
444 struct cpp_dir
445 {
446   /* NULL-terminated singly-linked list.  */
447   struct cpp_dir *next;
448
449   /* NAME of the directory, NUL-terminated.  */
450   char *name;
451   unsigned int len;
452
453   /* One if a system header, two if a system header that has extern
454      "C" guards for C++.  */
455   unsigned char sysp;
456
457   /* Mapping of file names for this directory for MS-DOS and related
458      platforms.  A NULL-terminated array of (from, to) pairs.  */
459   const char **name_map;
460
461   /* Routine to construct pathname, given the search path name and the
462      HEADER we are trying to find, return a constructed pathname to
463      try and open.  If this is NULL, the constructed pathname is as
464      constructed by append_file_to_dir.  */
465   char *(*construct) (const char *header, cpp_dir *dir);
466
467   /* The C front end uses these to recognize duplicated
468      directories in the search path.  */
469   ino_t ino;
470   dev_t dev;
471
472   /* Is this a user-supplied directory? */
473   bool user_supplied_p;
474 };
475
476 /* Name under which this program was invoked.  */
477 extern const char *progname;
478
479 /* The structure of a node in the hash table.  The hash table has
480    entries for all identifiers: either macros defined by #define
481    commands (type NT_MACRO), assertions created with #assert
482    (NT_ASSERTION), or neither of the above (NT_VOID).  Builtin macros
483    like __LINE__ are flagged NODE_BUILTIN.  Poisoned identifiers are
484    flagged NODE_POISONED.  NODE_OPERATOR (C++ only) indicates an
485    identifier that behaves like an operator such as "xor".
486    NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
487    diagnostic may be required for this node.  Currently this only
488    applies to __VA_ARGS__ and poisoned identifiers.  */
489
490 /* Hash node flags.  */
491 #define NODE_OPERATOR   (1 << 0)        /* C++ named operator.  */
492 #define NODE_POISONED   (1 << 1)        /* Poisoned identifier.  */
493 #define NODE_BUILTIN    (1 << 2)        /* Builtin macro.  */
494 #define NODE_DIAGNOSTIC (1 << 3)        /* Possible diagnostic when lexed.  */
495 #define NODE_WARN       (1 << 4)        /* Warn if redefined or undefined.  */
496 #define NODE_DISABLED   (1 << 5)        /* A disabled macro.  */
497 #define NODE_MACRO_ARG  (1 << 6)        /* Used during #define processing.  */
498
499 /* Different flavors of hash node.  */
500 enum node_type
501 {
502   NT_VOID = 0,     /* No definition yet.  */
503   NT_MACRO,        /* A macro of some form.  */
504   NT_ASSERTION     /* Predicate for #assert.  */
505 };
506
507 /* Different flavors of builtin macro.  _Pragma is an operator, but we
508    handle it with the builtin code for efficiency reasons.  */
509 enum builtin_type
510 {
511   BT_SPECLINE = 0,              /* `__LINE__' */
512   BT_DATE,                      /* `__DATE__' */
513   BT_FILE,                      /* `__FILE__' */
514   BT_BASE_FILE,                 /* `__BASE_FILE__' */
515   BT_INCLUDE_LEVEL,             /* `__INCLUDE_LEVEL__' */
516   BT_TIME,                      /* `__TIME__' */
517   BT_STDC,                      /* `__STDC__' */
518   BT_PRAGMA                     /* `_Pragma' operator */
519 };
520
521 #define CPP_HASHNODE(HNODE)     ((cpp_hashnode *) (HNODE))
522 #define HT_NODE(NODE)           ((ht_identifier *) (NODE))
523 #define NODE_LEN(NODE)          HT_LEN (&(NODE)->ident)
524 #define NODE_NAME(NODE)         HT_STR (&(NODE)->ident)
525
526 /* Specify which field, if any, of the union is used.  */
527
528 enum {
529   NTV_MACRO,
530   NTV_ANSWER,
531   NTV_BUILTIN,
532   NTV_ARGUMENT,
533   NTV_NONE
534 };
535
536 #define CPP_HASHNODE_VALUE_IDX(HNODE)                           \
537   ((HNODE.flags & NODE_MACRO_ARG) ? NTV_ARGUMENT                \
538    : HNODE.type == NT_MACRO ? ((HNODE.flags & NODE_BUILTIN)     \
539                                ? NTV_BUILTIN : NTV_MACRO)       \
540    : HNODE.type == NT_ASSERTION ? NTV_ANSWER                    \
541    : NTV_NONE)
542
543 /* The common part of an identifier node shared amongst all 3 C front
544    ends.  Also used to store CPP identifiers, which are a superset of
545    identifiers in the grammatical sense.  */
546 struct cpp_hashnode GTY(())
547 {
548   struct ht_identifier ident;
549   unsigned int is_directive : 1;
550   unsigned int directive_index : 7;     /* If is_directive,
551                                            then index into directive table.
552                                            Otherwise, a NODE_OPERATOR.  */
553   unsigned char rid_code;               /* Rid code - for front ends.  */
554   ENUM_BITFIELD(node_type) type : 8;    /* CPP node type.  */
555   unsigned char flags;                  /* CPP flags.  */
556
557   union _cpp_hashnode_value
558   {
559     /* If a macro.  */
560     cpp_macro * GTY((tag ("NTV_MACRO"))) macro;
561     /* Answers to an assertion.  */
562     struct answer * GTY ((tag ("NTV_ANSWER"))) answers;
563     /* Code for a builtin macro.  */
564     enum builtin_type GTY ((tag ("NTV_BUILTIN"))) builtin;
565     /* Macro argument index.  */
566     unsigned short GTY ((tag ("NTV_ARGUMENT"))) arg_index;
567   } GTY ((desc ("CPP_HASHNODE_VALUE_IDX (%1)"))) value;
568 };
569
570 /* Call this first to get a handle to pass to other functions.
571
572    If you want cpplib to manage its own hashtable, pass in a NULL
573    pointer.  Otherwise you should pass in an initialized hash table
574    that cpplib will share; this technique is used by the C front
575    ends.  */
576 extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
577                                       struct line_maps *);
578
579 /* Call this to change the selected language standard (e.g. because of
580    command line options).  */
581 extern void cpp_set_lang (cpp_reader *, enum c_lang);
582
583 /* Set the include paths.  */
584 extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
585
586 /* Call these to get pointers to the options, callback, and deps
587    structures for a given reader.  These pointers are good until you
588    call cpp_finish on that reader.  You can either edit the callbacks
589    through the pointer returned from cpp_get_callbacks, or set them
590    with cpp_set_callbacks.  */
591 extern cpp_options *cpp_get_options (cpp_reader *);
592 extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
593 extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
594 extern struct deps *cpp_get_deps (cpp_reader *);
595
596 /* This function reads the file, but does not start preprocessing.  It
597    returns the name of the original file; this is the same as the
598    input file, except for preprocessed input.  This will generate at
599    least one file change callback, and possibly a line change callback
600    too.  If there was an error opening the file, it returns NULL.  */
601 extern const char *cpp_read_main_file (cpp_reader *, const char *);
602
603 /* Set up built-ins like __FILE__.  */
604 extern void cpp_init_builtins (cpp_reader *, int);
605
606 /* This is called after options have been parsed, and partially
607    processed.  */
608 extern void cpp_post_options (cpp_reader *);
609
610 /* Set up translation to the target character set.  */
611 extern void cpp_init_iconv (cpp_reader *);
612
613 /* Call this to finish preprocessing.  If you requested dependency
614    generation, pass an open stream to write the information to,
615    otherwise NULL.  It is your responsibility to close the stream.
616
617    Returns cpp_errors (pfile).  */
618 extern int cpp_finish (cpp_reader *, FILE *deps_stream);
619
620 /* Call this to release the handle at the end of preprocessing.  Any
621    use of the handle after this function returns is invalid.  Returns
622    cpp_errors (pfile).  */
623 extern void cpp_destroy (cpp_reader *);
624
625 /* Error count.  */
626 extern unsigned int cpp_errors (cpp_reader *);
627
628 extern unsigned int cpp_token_len (const cpp_token *);
629 extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
630 extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
631                                        unsigned char *);
632 extern void cpp_register_pragma (cpp_reader *, const char *, const char *,
633                                  void (*) (cpp_reader *));
634 extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
635                             const cpp_token *);
636 extern const cpp_token *cpp_get_token (cpp_reader *);
637 extern const unsigned char *cpp_macro_definition (cpp_reader *,
638                                                   const cpp_hashnode *);
639 extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
640
641 /* Evaluate a CPP_CHAR or CPP_WCHAR token.  */
642 extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *,
643                                           unsigned int *, int *);
644 /* Evaluate a vector of CPP_STRING or CPP_WSTRING tokens.  */
645 extern bool cpp_interpret_string (cpp_reader *,
646                                   const cpp_string *, size_t,
647                                   cpp_string *, bool);
648 extern bool cpp_interpret_string_notranslate (cpp_reader *,
649                                               const cpp_string *, size_t,
650                                               cpp_string *, bool);
651
652 /* Used to register macros and assertions, perhaps from the command line.
653    The text is the same as the command line argument.  */
654 extern void cpp_define (cpp_reader *, const char *);
655 extern void cpp_assert (cpp_reader *, const char *);
656 extern void cpp_undef (cpp_reader *, const char *);
657 extern void cpp_unassert (cpp_reader *, const char *);
658
659 /* Undefine all macros and assertions.  */
660 extern void cpp_undef_all (cpp_reader *);
661
662 extern cpp_buffer *cpp_push_buffer (cpp_reader *, const unsigned char *,
663                                     size_t, int);
664 extern int cpp_defined (cpp_reader *, const unsigned char *, int);
665
666 /* A preprocessing number.  Code assumes that any unused high bits of
667    the double integer are set to zero.  */
668 typedef unsigned HOST_WIDE_INT cpp_num_part;
669 typedef struct cpp_num cpp_num;
670 struct cpp_num
671 {
672   cpp_num_part high;
673   cpp_num_part low;
674   bool unsignedp;  /* True if value should be treated as unsigned.  */
675   bool overflow;   /* True if the most recent calculation overflowed.  */
676 };
677
678 /* cpplib provides two interfaces for interpretation of preprocessing
679    numbers.
680
681    cpp_classify_number categorizes numeric constants according to
682    their field (integer, floating point, or invalid), radix (decimal,
683    octal, hexadecimal), and type suffixes.  */
684
685 #define CPP_N_CATEGORY  0x000F
686 #define CPP_N_INVALID   0x0000
687 #define CPP_N_INTEGER   0x0001
688 #define CPP_N_FLOATING  0x0002
689
690 #define CPP_N_WIDTH     0x00F0
691 #define CPP_N_SMALL     0x0010  /* int, float.  */
692 #define CPP_N_MEDIUM    0x0020  /* long, double.  */
693 #define CPP_N_LARGE     0x0040  /* long long, long double.  */
694
695 #define CPP_N_RADIX     0x0F00
696 #define CPP_N_DECIMAL   0x0100
697 #define CPP_N_HEX       0x0200
698 #define CPP_N_OCTAL     0x0400
699
700 #define CPP_N_UNSIGNED  0x1000  /* Properties.  */
701 #define CPP_N_IMAGINARY 0x2000
702
703 /* Classify a CPP_NUMBER token.  The return value is a combination of
704    the flags from the above sets.  */
705 extern unsigned cpp_classify_number (cpp_reader *, const cpp_token *);
706
707 /* Evaluate a token classified as category CPP_N_INTEGER.  */
708 extern cpp_num cpp_interpret_integer (cpp_reader *, const cpp_token *,
709                                       unsigned int type);
710
711 /* Sign extend a number, with PRECISION significant bits and all
712    others assumed clear, to fill out a cpp_num structure.  */
713 cpp_num cpp_num_sign_extend (cpp_num, size_t);
714
715 /* Diagnostic levels.  To get a diagnostic without associating a
716    position in the translation unit with it, use cpp_error_with_line
717    with a line number of zero.  */
718
719 /* Warning, an error with -Werror.  */
720 #define CPP_DL_WARNING          0x00
721 /* Same as CPP_DL_WARNING, except it is not suppressed in system headers.  */
722 #define CPP_DL_WARNING_SYSHDR   0x01
723 /* Warning, an error with -pedantic-errors or -Werror.  */
724 #define CPP_DL_PEDWARN          0x02
725 /* An error.  */
726 #define CPP_DL_ERROR            0x03
727 /* An internal consistency check failed.  Prints "internal error: ",
728    otherwise the same as CPP_DL_ERROR.  */
729 #define CPP_DL_ICE              0x04
730 /* Extracts a diagnostic level from an int.  */
731 #define CPP_DL_EXTRACT(l)       (l & 0xf)
732 /* Nonzero if a diagnostic level is one of the warnings.  */
733 #define CPP_DL_WARNING_P(l)     (CPP_DL_EXTRACT (l) >= CPP_DL_WARNING \
734                                  && CPP_DL_EXTRACT (l) <= CPP_DL_PEDWARN)
735
736 /* N.B. The error-message-printer prototypes have not been nicely
737    formatted because exgettext needs to see 'msgid' on the same line
738    as the name of the function in order to work properly.  Only the
739    string argument gets a name in an effort to keep the lines from
740    getting ridiculously oversized.  */
741
742 /* Output a diagnostic of some kind.  */
743 extern void cpp_error (cpp_reader *, int, const char *msgid, ...)
744   ATTRIBUTE_PRINTF_3;
745
746 /* Output a diagnostic with "MSGID: " preceding the
747    error string of errno.  No location is printed.  */
748 extern void cpp_errno (cpp_reader *, int, const char *msgid);
749
750 /* Same as cpp_error, except additionally specifies a position as a
751    (translation unit) physical line and physical column.  If the line is
752    zero, then no location is printed.  */
753 extern void cpp_error_with_line (cpp_reader *, int, source_location, unsigned,
754                                  const char *msgid, ...) ATTRIBUTE_PRINTF_5;
755
756 /* In cpplex.c */
757 extern int cpp_ideq (const cpp_token *, const char *);
758 extern void cpp_output_line (cpp_reader *, FILE *);
759 extern void cpp_output_token (const cpp_token *, FILE *);
760 extern const char *cpp_type2name (enum cpp_ttype);
761 /* Returns the value of an escape sequence, truncated to the correct
762    target precision.  PSTR points to the input pointer, which is just
763    after the backslash.  LIMIT is how much text we have.  WIDE is true
764    if the escape sequence is part of a wide character constant or
765    string literal.  Handles all relevant diagnostics.  */
766 extern cppchar_t cpp_parse_escape (cpp_reader *, const unsigned char ** pstr,
767                                    const unsigned char *limit, int wide);
768
769 /* In cpphash.c */
770
771 /* Lookup an identifier in the hashtable.  Puts the identifier in the
772    table if it is not already there.  */
773 extern cpp_hashnode *cpp_lookup (cpp_reader *, const unsigned char *,
774                                  unsigned int);
775
776 typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *);
777 extern void cpp_forall_identifiers (cpp_reader *, cpp_cb, void *);
778
779 /* In cppmacro.c */
780 extern void cpp_scan_nooutput (cpp_reader *);
781 extern int  cpp_sys_macro_p (cpp_reader *);
782 extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *,
783                                         unsigned int);
784
785 /* In cppfiles.c */
786 extern bool cpp_included (cpp_reader *, const char *);
787 extern void cpp_make_system_header (cpp_reader *, int, int);
788 extern bool cpp_push_include (cpp_reader *, const char *);
789 extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
790 extern const char *cpp_get_path (struct _cpp_file *);
791 extern cpp_dir *cpp_get_dir (struct _cpp_file *);
792 extern cpp_buffer *cpp_get_buffer (cpp_reader *);
793 extern struct _cpp_file *cpp_get_file (cpp_buffer *);
794 extern cpp_buffer *cpp_get_prev (cpp_buffer *);
795
796 /* In cpppch.c */
797 struct save_macro_data;
798 extern int cpp_save_state (cpp_reader *, FILE *);
799 extern int cpp_write_pch_deps (cpp_reader *, FILE *);
800 extern int cpp_write_pch_state (cpp_reader *, FILE *);
801 extern int cpp_valid_state (cpp_reader *, const char *, int);
802 extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **);
803 extern int cpp_read_state (cpp_reader *, const char *, FILE *,
804                            struct save_macro_data *);
805
806 #ifdef __cplusplus
807 }
808 #endif
809
810 #endif /* ! LIBCPP_CPPLIB_H */