OSDN Git Service

* c-parse.in (finish_parse): Add comment about cpp_destroy.
[pf3gnuchains/gcc-fork.git] / gcc / cpplib.h
1 /* Definitions for CPP library.
2    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
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 __GCC_CPPLIB__
24 #define __GCC_CPPLIB__
25
26 #include <sys/types.h>
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 /* For complex reasons, cpp_reader is also typedefed in c-pragma.h.  */
33 #ifndef _C_PRAGMA_H
34 typedef struct cpp_reader cpp_reader;
35 #endif
36 typedef struct cpp_buffer cpp_buffer;
37 typedef struct cpp_options cpp_options;
38 typedef struct cpp_token cpp_token;
39 typedef struct cpp_string cpp_string;
40 typedef struct cpp_hashnode cpp_hashnode;
41 typedef struct cpp_macro cpp_macro;
42 typedef struct cpp_lexer_pos cpp_lexer_pos;
43 typedef struct cpp_lookahead cpp_lookahead;
44 typedef struct cpp_callbacks cpp_callbacks;
45
46 struct answer;
47 struct file_name_map_list;
48
49 /* The first two groups, apart from '=', can appear in preprocessor
50    expressions.  This allows a lookup table to be implemented in
51    _cpp_parse_expr.
52
53    The first group, to CPP_LAST_EQ, can be immediately followed by an
54    '='.  The lexer needs operators ending in '=', like ">>=", to be in
55    the same order as their counterparts without the '=', like ">>".  */
56
57 /* Positions in the table.  */
58 #define CPP_LAST_EQ CPP_MAX
59 #define CPP_FIRST_DIGRAPH CPP_HASH
60 #define CPP_LAST_PUNCTUATOR CPP_DOT_STAR
61
62 #define TTYPE_TABLE                             \
63   OP(CPP_EQ = 0,        "=")                    \
64   OP(CPP_NOT,           "!")                    \
65   OP(CPP_GREATER,       ">")    /* compare */   \
66   OP(CPP_LESS,          "<")                    \
67   OP(CPP_PLUS,          "+")    /* math */      \
68   OP(CPP_MINUS,         "-")                    \
69   OP(CPP_MULT,          "*")                    \
70   OP(CPP_DIV,           "/")                    \
71   OP(CPP_MOD,           "%")                    \
72   OP(CPP_AND,           "&")    /* bit ops */   \
73   OP(CPP_OR,            "|")                    \
74   OP(CPP_XOR,           "^")                    \
75   OP(CPP_RSHIFT,        ">>")                   \
76   OP(CPP_LSHIFT,        "<<")                   \
77   OP(CPP_MIN,           "<?")   /* extension */ \
78   OP(CPP_MAX,           ">?")                   \
79 \
80   OP(CPP_COMPL,         "~")                    \
81   OP(CPP_AND_AND,       "&&")   /* logical */   \
82   OP(CPP_OR_OR,         "||")                   \
83   OP(CPP_QUERY,         "?")                    \
84   OP(CPP_COLON,         ":")                    \
85   OP(CPP_COMMA,         ",")    /* grouping */  \
86   OP(CPP_OPEN_PAREN,    "(")                    \
87   OP(CPP_CLOSE_PAREN,   ")")                    \
88   OP(CPP_EQ_EQ,         "==")   /* compare */   \
89   OP(CPP_NOT_EQ,        "!=")                   \
90   OP(CPP_GREATER_EQ,    ">=")                   \
91   OP(CPP_LESS_EQ,       "<=")                   \
92 \
93   OP(CPP_PLUS_EQ,       "+=")   /* math */      \
94   OP(CPP_MINUS_EQ,      "-=")                   \
95   OP(CPP_MULT_EQ,       "*=")                   \
96   OP(CPP_DIV_EQ,        "/=")                   \
97   OP(CPP_MOD_EQ,        "%=")                   \
98   OP(CPP_AND_EQ,        "&=")   /* bit ops */   \
99   OP(CPP_OR_EQ,         "|=")                   \
100   OP(CPP_XOR_EQ,        "^=")                   \
101   OP(CPP_RSHIFT_EQ,     ">>=")                  \
102   OP(CPP_LSHIFT_EQ,     "<<=")                  \
103   OP(CPP_MIN_EQ,        "<?=")  /* extension */ \
104   OP(CPP_MAX_EQ,        ">?=")                  \
105   /* Digraphs together, beginning with CPP_FIRST_DIGRAPH.  */   \
106   OP(CPP_HASH,          "#")    /* digraphs */  \
107   OP(CPP_PASTE,         "##")                   \
108   OP(CPP_OPEN_SQUARE,   "[")                    \
109   OP(CPP_CLOSE_SQUARE,  "]")                    \
110   OP(CPP_OPEN_BRACE,    "{")                    \
111   OP(CPP_CLOSE_BRACE,   "}")                    \
112   /* The remainder of the punctuation.  Order is not significant.  */   \
113   OP(CPP_SEMICOLON,     ";")    /* structure */ \
114   OP(CPP_ELLIPSIS,      "...")                  \
115   OP(CPP_PLUS_PLUS,     "++")   /* increment */ \
116   OP(CPP_MINUS_MINUS,   "--")                   \
117   OP(CPP_DEREF,         "->")   /* accessors */ \
118   OP(CPP_DOT,           ".")                    \
119   OP(CPP_SCOPE,         "::")                   \
120   OP(CPP_DEREF_STAR,    "->*")                  \
121   OP(CPP_DOT_STAR,      ".*")                   \
122 \
123   TK(CPP_NAME,          SPELL_IDENT)    /* word */                      \
124   TK(CPP_INT,           SPELL_STRING)   /* 23 */                        \
125   TK(CPP_FLOAT,         SPELL_STRING)   /* 3.14159 */                   \
126   TK(CPP_NUMBER,        SPELL_STRING)   /* 34_be+ta  */                 \
127 \
128   TK(CPP_CHAR,          SPELL_STRING)   /* 'char' */                    \
129   TK(CPP_WCHAR,         SPELL_STRING)   /* L'char' */                   \
130   TK(CPP_OTHER,         SPELL_CHAR)     /* stray punctuation */         \
131 \
132   TK(CPP_STRING,        SPELL_STRING)   /* "string" */                  \
133   TK(CPP_WSTRING,       SPELL_STRING)   /* L"string" */                 \
134   TK(CPP_OSTRING,       SPELL_STRING)   /* @"string" - Objective C */   \
135   TK(CPP_HEADER_NAME,   SPELL_STRING)   /* <stdio.h> in #include */     \
136 \
137   TK(CPP_COMMENT,       SPELL_STRING)   /* Only if output comments.  */ \
138   TK(CPP_MACRO_ARG,     SPELL_NONE)     /* Macro argument.  */          \
139   OP(CPP_EOF,           "EOL")          /* End of line or file.  */
140
141 #define OP(e, s) e,
142 #define TK(e, s) e,
143 enum cpp_ttype
144 {
145   TTYPE_TABLE
146   N_TTYPES
147 };
148 #undef OP
149 #undef TK
150
151 /* C language kind, used when calling cpp_reader_init.  */
152 enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99,
153              CLK_GNUCXX, CLK_CXX98, CLK_OBJC, CLK_OBJCXX, CLK_ASM};
154
155 /* Payload of a NUMBER, FLOAT, STRING, or COMMENT token.  */
156 struct cpp_string
157 {
158   unsigned int len;
159   const unsigned char *text;
160 };
161
162 /* Flags for the cpp_token structure.  */
163 #define PREV_WHITE      (1 << 0) /* If whitespace before this token.  */
164 #define DIGRAPH         (1 << 1) /* If it was a digraph.  */
165 #define STRINGIFY_ARG   (1 << 2) /* If macro argument to be stringified.  */
166 #define PASTE_LEFT      (1 << 3) /* If on LHS of a ## operator.  */
167 #define NAMED_OP        (1 << 4) /* C++ named operators.  */
168 #define NO_EXPAND       (1 << 5) /* Do not macro-expand this token.  */
169
170 /* A preprocessing token.  This has been carefully packed and should
171    occupy 12 bytes on 32-bit hosts and 16 bytes on 64-bit hosts.  */
172 struct cpp_token
173 {
174   ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT;  /* token type */
175   unsigned char flags;          /* flags - see above */
176
177   union
178   {
179     struct cpp_hashnode *node;  /* An identifier.  */
180     struct cpp_string str;      /* A string, or number.  */
181     unsigned int arg_no;        /* Argument no. for a CPP_MACRO_ARG.  */
182     unsigned char c;            /* Character represented by CPP_OTHER.  */
183   } val;
184 };
185
186 /* The position of a token in the current file.  */
187 struct cpp_lexer_pos
188 {
189   unsigned int line;
190   unsigned int output_line;
191   unsigned short col;
192 };
193
194 typedef struct cpp_token_with_pos cpp_token_with_pos;
195 struct cpp_token_with_pos
196 {
197   cpp_token token;
198   cpp_lexer_pos pos;
199 };
200
201 /* Token lookahead.  */
202 struct cpp_lookahead
203 {
204   struct cpp_lookahead *next;
205   cpp_token_with_pos *tokens;
206   cpp_lexer_pos pos;
207   unsigned int cur, count, cap;
208 };
209
210 /* A standalone character.  We may want to make it unsigned for the
211    same reason we use unsigned char - to avoid signedness issues.  */
212 typedef int cppchar_t;
213
214 /* Values for opts.dump_macros.
215   dump_only means inhibit output of the preprocessed text
216              and instead output the definitions of all user-defined
217              macros in a form suitable for use as input to cpp.
218    dump_names means pass #define and the macro name through to output.
219    dump_definitions means pass the whole definition (plus #define) through
220 */
221 enum { dump_none = 0, dump_only, dump_names, dump_definitions };
222
223 /* This structure is nested inside struct cpp_reader, and
224    carries all the options visible to the command line.  */
225 struct cpp_options
226 {
227   /* Name of input and output files.  */
228   const char *in_fname;
229   const char *out_fname;
230
231   /* Characters between tab stops.  */
232   unsigned int tabstop;
233
234   /* Pending options - -D, -U, -A, -I, -ixxx. */
235   struct cpp_pending *pending;
236
237   /* File name which deps are being written to.  This is 0 if deps are
238      being written to stdout.  */
239   const char *deps_file;
240
241   /* Search paths for include files.  */
242   struct file_name_list *quote_include;  /* First dir to search for "file" */
243   struct file_name_list *bracket_include;/* First dir to search for <file> */
244
245   /* Map between header names and file names, used only on DOS where
246      file names are limited in length.  */
247   struct file_name_map_list *map_list;
248
249   /* Directory prefix that should replace `/usr/lib/gcc-lib/TARGET/VERSION'
250      in the standard include file directories.  */
251   const char *include_prefix;
252   unsigned int include_prefix_len;
253
254   /* -fleading_underscore sets this to "_".  */
255   const char *user_label_prefix;
256
257   /* The language we're preprocessing.  */
258   enum c_lang lang;
259
260   /* Non-0 means -v, so print the full set of include dirs.  */
261   unsigned char verbose;
262
263   /* Nonzero means use extra default include directories for C++.  */
264   unsigned char cplusplus;
265
266   /* Nonzero means handle cplusplus style comments */
267   unsigned char cplusplus_comments;
268
269   /* Nonzero means handle #import, for objective C.  */
270   unsigned char objc;
271
272   /* Nonzero means don't copy comments into the output file.  */
273   unsigned char discard_comments;
274
275   /* Nonzero means process the ISO trigraph sequences.  */
276   unsigned char trigraphs;
277
278   /* Nonzero means process the ISO digraph sequences.  */
279   unsigned char digraphs;
280
281   /* Nonzero means to allow hexadecimal floats and LL suffixes.  */
282   unsigned char extended_numbers;
283
284   /* Nonzero means print the names of included files rather than the
285      preprocessed output.  1 means just the #include "...", 2 means
286      #include <...> as well.  */
287   unsigned char print_deps;
288
289   /* Nonzero if phony targets are created for each header.  */
290   unsigned char deps_phony_targets;
291
292   /* Nonzero if missing .h files in -M output are assumed to be
293      generated files and not errors.  */
294   unsigned char print_deps_missing_files;
295
296   /* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */
297   unsigned char print_deps_append;
298
299   /* Nonzero means print names of header files (-H).  */
300   unsigned char print_include_names;
301
302   /* Nonzero means cpp_pedwarn causes a hard error.  */
303   unsigned char pedantic_errors;
304
305   /* Nonzero means don't print warning messages.  */
306   unsigned char inhibit_warnings;
307
308   /* Nonzero means don't suppress warnings from system headers.  */
309   unsigned char warn_system_headers;
310
311   /* Nonzero means don't print error messages.  Has no option to
312      select it, but can be set by a user of cpplib (e.g. fix-header).  */
313   unsigned char inhibit_errors;
314
315   /* Nonzero means warn if slash-star appears in a comment.  */
316   unsigned char warn_comments;
317
318   /* Nonzero means warn if there are any trigraphs.  */
319   unsigned char warn_trigraphs;
320
321   /* Nonzero means warn if #import is used.  */
322   unsigned char warn_import;
323
324   /* Nonzero means warn about various incompatibilities with
325      traditional C.  */
326   unsigned char warn_traditional;
327
328   /* Nonzero means turn warnings into errors.  */
329   unsigned char warnings_are_errors;
330
331   /* Nonzero causes output not to be done, but directives such as
332      #define that have side effects are still obeyed.  */
333   unsigned char no_output;
334
335   /* Nonzero means we should look for header.gcc files that remap file
336      names.  */
337   unsigned char remap;
338
339   /* Nonzero means don't output line number information.  */
340   unsigned char no_line_commands;
341
342   /* Nonzero means -I- has been seen, so don't look for #include "foo"
343      the source-file directory.  */
344   unsigned char ignore_srcdir;
345
346   /* Zero means dollar signs are punctuation. */
347   unsigned char dollars_in_ident;
348
349   /* Nonzero means warn if undefined identifiers are evaluated in an #if.  */
350   unsigned char warn_undef;
351
352   /* Nonzero for the 1999 C Standard, including corrigenda and amendments.  */
353   unsigned char c99;
354
355   /* Nonzero means give all the error messages the ANSI standard requires.  */
356   unsigned char pedantic;
357
358   /* Nonzero means we're looking at already preprocessed code, so don't
359      bother trying to do macro expansion and whatnot.  */
360   unsigned char preprocessed;
361
362   /* Nonzero disables all the standard directories for headers.  */
363   unsigned char no_standard_includes;
364
365   /* Nonzero disables the C++-specific standard directories for headers.  */
366   unsigned char no_standard_cplusplus_includes;
367
368   /* Nonzero means dump macros in some fashion - see above.  */
369   unsigned char dump_macros;
370
371   /* Nonzero means pass #include lines through to the output.  */
372   unsigned char dump_includes;
373
374   /* Print column number in error messages.  */
375   unsigned char show_column;
376
377   /* Treat C++ alternate operator names special.  */
378   unsigned char operator_names;
379
380   /* True if --help, --version or --target-help appeared in the
381      options.  Stand-alone CPP should then bail out after option
382      parsing; drivers might want to continue printing help.  */
383   unsigned char help_only;
384 };
385
386 /* This structure is passed to the call back when changing file.  */
387 enum cpp_fc_reason {FC_ENTER = 0, FC_LEAVE, FC_RENAME};
388
389 struct cpp_file_loc
390 {
391   const char *filename;
392   unsigned int lineno;
393 };
394
395 typedef struct cpp_file_change cpp_file_change;
396 struct cpp_file_change
397 {
398   struct cpp_file_loc from;     /* Line of #include or #line.  */
399   struct cpp_file_loc to;       /* Line after #include or #line, or start.  */
400   enum cpp_fc_reason reason;    /* Reason for change.  */
401   unsigned char sysp;           /* Nonzero if system header.  */
402   unsigned char externc;        /* Nonzero if wrapper needed.  */
403 };
404
405 /* Call backs.  */
406 struct cpp_callbacks
407 {
408     void (*file_change) PARAMS ((cpp_reader *, const cpp_file_change *));
409     void (*include) PARAMS ((cpp_reader *, const unsigned char *,
410                              const cpp_token *));
411     void (*define) PARAMS ((cpp_reader *, cpp_hashnode *));
412     void (*undef) PARAMS ((cpp_reader *, cpp_hashnode *));
413     void (*poison) PARAMS ((cpp_reader *));
414     void (*ident) PARAMS ((cpp_reader *, const cpp_string *));
415     void (*def_pragma) PARAMS ((cpp_reader *));
416 };
417
418 #define CPP_FATAL_LIMIT 1000
419 /* True if we have seen a "fatal" error. */
420 #define CPP_FATAL_ERRORS(PFILE) (cpp_errors (PFILE) >= CPP_FATAL_LIMIT)
421
422 /* Name under which this program was invoked.  */
423 extern const char *progname;
424
425 /* Where does this buffer come from?  A faked include, a source file,
426    a builtin macro, a command-line option, or a _Pragma operator.  */
427 enum cpp_buffer_type {BUF_FAKE, BUF_FILE, BUF_BUILTIN,
428                       BUF_CL_OPTION, BUF_PRAGMA};
429
430 /* The structure of a node in the hash table.  The hash table has
431    entries for all identifiers: either macros defined by #define
432    commands (type NT_MACRO), assertions created with #assert
433    (NT_ASSERTION), or neither of the above (NT_VOID).  Builtin macros
434    like __LINE__ are flagged NODE_BUILTIN.  Poisioned identifiers are
435    flagged NODE_POISONED.  NODE_OPERATOR (C++ only) indicates an
436    identifier that behaves like an operator such as "xor".
437    NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
438    diagnostic may be required for this node.  Currently this only
439    applies to __VA_ARGS__ and poisoned identifiers.  */
440
441 /* Hash node flags.  */
442 #define NODE_OPERATOR   (1 << 0)        /* C++ named operator.  */
443 #define NODE_POISONED   (1 << 1)        /* Poisoned identifier.  */
444 #define NODE_BUILTIN    (1 << 2)        /* Builtin macro.  */
445 #define NODE_DIAGNOSTIC (1 << 3)        /* Possible diagnostic when lexed.  */
446
447 /* Different flavors of hash node.  */
448 enum node_type
449 {
450   NT_VOID = 0,     /* No definition yet.  */
451   NT_MACRO,        /* A macro of some form.  */
452   NT_ASSERTION     /* Predicate for #assert.  */
453 };
454
455 /* Different flavors of builtin macro.  */
456 enum builtin_type
457 {
458   BT_SPECLINE = 0,              /* `__LINE__' */
459   BT_DATE,                      /* `__DATE__' */
460   BT_FILE,                      /* `__FILE__' */
461   BT_BASE_FILE,                 /* `__BASE_FILE__' */
462   BT_INCLUDE_LEVEL,             /* `__INCLUDE_LEVEL__' */
463   BT_TIME,                      /* `__TIME__' */
464   BT_STDC                       /* `__STDC__' */
465 };
466
467 /* There is a slot in the hashnode for use by front ends when integrated
468    with cpplib.  It holds a tree (see tree.h) but we mustn't drag that
469    header into every user of cpplib.h.  cpplib does not do anything with
470    this slot except clear it when a new node is created.  */
471 union tree_node;
472
473 struct cpp_hashnode
474 {
475   const unsigned char *name;            /* Null-terminated name.  */
476   unsigned int hash;                    /* Cached hash value.  */
477   unsigned short length;                /* Length of name excluding null.  */
478   unsigned short arg_index;             /* Macro argument index.  */
479   unsigned char directive_index;        /* Index into directive table.  */
480   ENUM_BITFIELD(node_type) type : 8;    /* Node type.  */
481   unsigned char flags;                  /* Node flags.  */
482
483   union
484   {
485     cpp_macro *macro;                   /* If a macro.  */
486     struct answer *answers;             /* Answers to an assertion.  */
487     enum cpp_ttype operator;            /* Code for a named operator.  */
488     enum builtin_type builtin;          /* Code for a builtin macro.  */
489   } value;
490
491   union tree_node *fe_value;            /* Front end value.  */
492 };
493
494 /* Call this first to get a handle to pass to other functions.  */
495 extern cpp_reader *cpp_create_reader PARAMS ((enum c_lang));
496
497 /* Call this to release the handle.  Any use of the handle after this
498    function returns is invalid.  Returns cpp_errors (pfile).  */
499 extern int cpp_destroy PARAMS ((cpp_reader *));
500
501 /* Call these to get pointers to the options and callback structures
502    for a given reader.  These pointers are good until you call
503    cpp_finish on that reader.  You can either edit the callbacks
504    through the pointer returned from cpp_get_callbacks, or set them
505    with cpp_set_callbacks.  */
506 extern cpp_options *cpp_get_options PARAMS ((cpp_reader *));
507 extern cpp_callbacks *cpp_get_callbacks PARAMS ((cpp_reader *));
508 extern void cpp_set_callbacks PARAMS ((cpp_reader *, cpp_callbacks *));
509
510 /* Now call cpp_handle_option[s] to handle 1[or more] switches.  The
511    return value is the number of arguments used.  If
512    cpp_handle_options returns without using all arguments, it couldn't
513    understand the next switch.  When there are no switches left, you
514    must call cpp_post_options before calling cpp_start_read.  Only
515    after cpp_post_options are the contents of the cpp_options
516    structure reliable.  */
517 extern int cpp_handle_options PARAMS ((cpp_reader *, int, char **));
518 extern int cpp_handle_option PARAMS ((cpp_reader *, int, char **));
519 extern void cpp_post_options PARAMS ((cpp_reader *));
520
521 /* Error count.  */
522 extern unsigned int cpp_errors PARAMS ((cpp_reader *));
523
524 extern unsigned int cpp_token_len PARAMS ((const cpp_token *));
525 extern unsigned char *cpp_token_as_text PARAMS ((cpp_reader *,
526                                                  const cpp_token *));
527 extern unsigned char *cpp_spell_token PARAMS ((cpp_reader *, const cpp_token *,
528                                                unsigned char *));
529 extern void cpp_register_pragma PARAMS ((cpp_reader *,
530                                          const char *, const char *,
531                                          void (*) PARAMS ((cpp_reader *))));
532 extern void cpp_register_pragma_space PARAMS ((cpp_reader *, const char *));
533
534 extern int cpp_start_read PARAMS ((cpp_reader *, const char *));
535 extern void cpp_finish PARAMS ((cpp_reader *));
536 extern int cpp_avoid_paste PARAMS ((cpp_reader *, const cpp_token *,
537                                     const cpp_token *));
538 extern enum cpp_ttype cpp_can_paste PARAMS ((cpp_reader *, const cpp_token *,
539                                              const cpp_token *, int *));
540 extern void cpp_get_token PARAMS ((cpp_reader *, cpp_token *));
541 extern const cpp_lexer_pos *cpp_get_line PARAMS ((cpp_reader *));
542 extern const unsigned char *cpp_macro_definition PARAMS ((cpp_reader *,
543                                                   const cpp_hashnode *));
544
545 extern void cpp_define PARAMS ((cpp_reader *, const char *));
546 extern void cpp_assert PARAMS ((cpp_reader *, const char *));
547 extern void cpp_undef  PARAMS ((cpp_reader *, const char *));
548 extern void cpp_unassert PARAMS ((cpp_reader *, const char *));
549
550 extern cpp_buffer *cpp_push_buffer PARAMS ((cpp_reader *,
551                                             const unsigned char *, size_t,
552                                             enum cpp_buffer_type,
553                                             const char *));
554 extern cpp_buffer *cpp_pop_buffer PARAMS ((cpp_reader *));
555 extern int cpp_defined PARAMS ((cpp_reader *, const unsigned char *, int));
556
557 /* N.B. The error-message-printer prototypes have not been nicely
558    formatted because exgettext needs to see 'msgid' on the same line
559    as the name of the function in order to work properly.  Only the
560    string argument gets a name in an effort to keep the lines from
561    getting ridiculously oversized.  */
562
563 extern void cpp_ice PARAMS ((cpp_reader *, const char *msgid, ...))
564   ATTRIBUTE_PRINTF_2;
565 extern void cpp_fatal PARAMS ((cpp_reader *, const char *msgid, ...))
566   ATTRIBUTE_PRINTF_2;
567 extern void cpp_error PARAMS ((cpp_reader *, const char *msgid, ...))
568   ATTRIBUTE_PRINTF_2;
569 extern void cpp_warning PARAMS ((cpp_reader *, const char *msgid, ...))
570   ATTRIBUTE_PRINTF_2;
571 extern void cpp_pedwarn PARAMS ((cpp_reader *, const char *msgid, ...))
572   ATTRIBUTE_PRINTF_2;
573 extern void cpp_notice PARAMS ((cpp_reader *, const char *msgid, ...))
574   ATTRIBUTE_PRINTF_2;
575 extern void cpp_error_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...))
576   ATTRIBUTE_PRINTF_4;
577 extern void cpp_warning_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...))
578   ATTRIBUTE_PRINTF_4;
579 extern void cpp_pedwarn_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...))
580   ATTRIBUTE_PRINTF_4;
581 extern void cpp_pedwarn_with_file_and_line PARAMS ((cpp_reader *, const char *, int, int, const char *msgid, ...))
582   ATTRIBUTE_PRINTF_5;
583 extern void cpp_error_from_errno PARAMS ((cpp_reader *, const char *));
584 extern void cpp_notice_from_errno PARAMS ((cpp_reader *, const char *));
585
586 /* In cpplex.c */
587 extern int cpp_ideq                     PARAMS ((const cpp_token *,
588                                                  const char *));
589 extern void cpp_output_line             PARAMS ((cpp_reader *, FILE *));
590 extern void cpp_output_token            PARAMS ((const cpp_token *, FILE *));
591 extern const char *cpp_type2name        PARAMS ((enum cpp_ttype));
592
593 /* In cpphash.c */
594 extern cpp_hashnode *cpp_lookup         PARAMS ((cpp_reader *,
595                                                  const unsigned char *, size_t));
596 extern void cpp_forall_identifiers      PARAMS ((cpp_reader *,
597                                                  int (*) PARAMS ((cpp_reader *,
598                                                                   cpp_hashnode *,
599                                                                   void *)),
600                                                  void *));
601
602 /* In cppmacro.c */
603 extern void cpp_scan_buffer_nooutput    PARAMS ((cpp_reader *, int));
604 extern void cpp_start_lookahead         PARAMS ((cpp_reader *));
605 extern void cpp_stop_lookahead          PARAMS ((cpp_reader *, int));
606
607 /* In cppfiles.c */
608 extern int cpp_included PARAMS ((cpp_reader *, const char *));
609 extern void cpp_make_system_header PARAMS ((cpp_reader *, int, int));
610
611 #ifdef __cplusplus
612 }
613 #endif
614 #endif /* __GCC_CPPLIB__ */