OSDN Git Service

2000-04-26 Nathan C. Myers <ncm@cantrip.org>
[pf3gnuchains/gcc-fork.git] / gcc / cpplib.h
1 /* Definitions for CPP library.
2    Copyright (C) 1995, 96-99, 2000 Free Software Foundation, Inc.
3    Written by Per Bothner, 1994-95.
4
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 2, or (at your option) any
8 later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19  In other words, you are welcome to use, share and improve this program.
20  You are forbidden to forbid anyone else to use, share and improve
21  what you give them.   Help stamp out software-hoarding!  */
22 #ifndef __GCC_CPPLIB__
23 #define __GCC_CPPLIB__
24
25 #include <sys/types.h>
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
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_printer cpp_printer;
35 typedef struct cpp_token cpp_token;
36 typedef struct cpp_toklist cpp_toklist;
37 typedef struct cpp_name cpp_name;
38
39 /* The first two groups, apart from '=', can appear in preprocessor
40    expressions.  This allows a lookup table to be implemented in
41    _cpp_parse_expr.
42
43    The first group, to CPP_LAST_EQ, can be immediately followed by an
44    '='.  The lexer needs operators ending in '=', like ">>=", to be in
45    the same order as their counterparts without the '=', like ">>".  */
46
47 /* Positions in the table.  */
48 #define CPP_LAST_EQ CPP_LSHIFT
49 #define CPP_FIRST_DIGRAPH CPP_HASH
50
51 #define TTYPE_TABLE                             \
52   T(CPP_EQ = 0,         "=")                    \
53   T(CPP_NOT,            "!")                    \
54   T(CPP_GREATER,        ">")    /* compare */   \
55   T(CPP_LESS,           "<")                    \
56   T(CPP_PLUS,           "+")    /* math */      \
57   T(CPP_MINUS,          "-")                    \
58   T(CPP_MULT,           "*")                    \
59   T(CPP_DIV,            "/")                    \
60   T(CPP_MOD,            "%")                    \
61   T(CPP_AND,            "&")    /* bit ops */   \
62   T(CPP_OR,             "|")                    \
63   T(CPP_XOR,            "^")                    \
64   T(CPP_RSHIFT,         ">>")                   \
65   T(CPP_LSHIFT,         "<<")                   \
66 \
67   T(CPP_COMPL,          "~")                    \
68   T(CPP_AND_AND,        "&&")   /* logical */   \
69   T(CPP_OR_OR,          "||")                   \
70   T(CPP_QUERY,          "?")                    \
71   T(CPP_COLON,          ":")                    \
72   T(CPP_COMMA,          ",")    /* grouping */  \
73   T(CPP_OPEN_PAREN,     "(")                    \
74   T(CPP_CLOSE_PAREN,    ")")                    \
75   T(CPP_EQ_EQ,          "==")   /* compare */   \
76   T(CPP_NOT_EQ,         "!=")                   \
77   T(CPP_GREATER_EQ,     ">=")                   \
78   T(CPP_LESS_EQ,        "<=")                   \
79 \
80   T(CPP_PLUS_EQ,        "+=")   /* math */      \
81   T(CPP_MINUS_EQ,       "-=")                   \
82   T(CPP_MULT_EQ,        "*=")                   \
83   T(CPP_DIV_EQ,         "/=")                   \
84   T(CPP_MOD_EQ,         "%=")                   \
85   T(CPP_AND_EQ,         "&=")   /* bit ops */   \
86   T(CPP_OR_EQ,          "|=")                   \
87   T(CPP_XOR_EQ,         "^=")                   \
88   T(CPP_RSHIFT_EQ,      ">>=")                  \
89   T(CPP_LSHIFT_EQ,      "<<=")                  \
90   /* Digraphs together, beginning with CPP_FIRST_DIGRAPH.  */   \
91   T(CPP_HASH,           "#")    /* digraphs */  \
92   T(CPP_PASTE,          "##")                   \
93   T(CPP_OPEN_SQUARE,    "[")                    \
94   T(CPP_CLOSE_SQUARE,   "]")                    \
95   T(CPP_OPEN_BRACE,     "{")                    \
96   T(CPP_CLOSE_BRACE,    "}")                    \
97   /* The remainder of the punctuation.  Order is not significant. */    \
98   T(CPP_SEMICOLON,      ";")    /* structure */ \
99   T(CPP_ELLIPSIS,       "...")                  \
100   T(CPP_BACKSLASH,      "\\")                   \
101   T(CPP_PLUS_PLUS,      "++")   /* increment */ \
102   T(CPP_MINUS_MINUS,    "--")                   \
103   T(CPP_DEREF,          "->")   /* accessors */ \
104   T(CPP_DOT,            ".")                    \
105   T(CPP_SCOPE,          "::")                   \
106   T(CPP_DEREF_STAR,     "->*")                  \
107   T(CPP_DOT_STAR,       ".*")                   \
108   T(CPP_MIN,            "<?")   /* extension */ \
109   T(CPP_MAX,            ">?")                   \
110   C(CPP_OTHER,          0)      /* stray punctuation */ \
111 \
112   H(CPP_NAME,           spell_name)     /* word */      \
113   N(CPP_INT,            0)              /* 23 */        \
114   N(CPP_FLOAT,          0)              /* 3.14159 */   \
115   H(CPP_NUMBER,         spell_name)     /* 34_be+ta  */ \
116   H(CPP_CHAR,           spell_string)   /* 'char' */    \
117   H(CPP_WCHAR,          spell_string)   /* L'char' */   \
118   H(CPP_STRING,         spell_string)   /* "string" */  \
119   H(CPP_WSTRING,        spell_string)   /* L"string" */ \
120 \
121   H(CPP_C_COMMENT,      spell_comment)  /* Only if output comments.  */ \
122   H(CPP_CPP_COMMENT,    spell_comment)  /* Only if output comments.  */ \
123   H(CPP_CHILL_COMMENT,  spell_comment)  /* Only if output comments.  */ \
124   N(CPP_MACRO_ARG,      0)              /* Macro argument.  */          \
125   N(CPP_SUBLIST,        0)              /* Sublist.  */                 \
126   E(CPP_VSPACE,         "\n")           /* End of line.  */             \
127   N(CPP_EOF,            0)              /* End of file.  */             \
128   N(CPP_HEADER_NAME,    0)              /* <stdio.h> in #include */     \
129   N(CPP_ASSERTION,      0)              /* (...) in #assert */          \
130 \
131   /* Obsolete - will be removed when no code uses them still.  */       \
132   H(CPP_COMMENT,        0)              /* Only if output comments.  */ \
133   N(CPP_HSPACE,         0)              /* Horizontal white space.  */  \
134   N(CPP_POP,            0)              /* End of buffer.  */           \
135   N(CPP_DIRECTIVE,      0)              /* #define and the like */      \
136   N(CPP_MACRO,          0)              /* Like a NAME, but expanded.  */
137
138 #define T(e, s) e,
139 #define H(e, s) e,
140 #define C(e, s) e,
141 #define N(e, s) e,
142 #define E(e, s) e,
143 enum cpp_ttype
144 {
145   TTYPE_TABLE
146   N_TTYPES
147 };
148 #undef T
149 #undef H
150 #undef C
151 #undef N
152 #undef E
153
154 /* Payload of a NAME, NUMBER, FLOAT, STRING, or COMMENT token.  */
155 struct cpp_name
156 {
157   unsigned int len;
158   unsigned int offset;          /* from list->namebuf */
159 };
160
161 #define TOK_NAME(list, token) ((list)->namebuf + (token)->val.name.offset)
162
163 /* Flags for the cpp_token structure.  */
164 #define PREV_WHITESPACE     1   /* If whitespace before this token.  */
165 #define DIGRAPH             2   /* If it was a digraph.  */
166 #define UNSIGNED_INT        4   /* If int preprocessing token unsigned.  */
167
168 /* A preprocessing token.
169    This has been carefully packed and should occupy 16 bytes on
170    both 32- and 64-bit hosts.  */
171 struct cpp_token
172 {
173   unsigned short col;                   /* starting column of this token */
174 #ifdef ENUM_BITFIELDS_ARE_UNSIGNED
175   enum cpp_ttype type : CHAR_BIT;       /* node type */
176 #else
177   unsigned char type;
178 #endif
179   unsigned char flags;                  /* flags - see above */
180   unsigned int aux;                     /* CPP_OTHER character.  Hash of a
181                                            NAME, or something - see uses
182                                            in the code */
183   union
184   {
185     struct cpp_name name;               /* a string */
186     HOST_WIDEST_INT integer;            /* an integer */
187   } val;
188 };
189
190 /* Directive flags.  */
191 #define SYNTAX_INCLUDE (1 << 8)
192 #define SYNTAX_ASSERT  (1 << 9)
193
194 typedef int (*directive_handler) PARAMS ((cpp_reader *));
195 typedef int (*parse_cleanup_t) PARAMS ((cpp_buffer *, cpp_reader *));
196
197 struct cpp_toklist
198 {
199   cpp_token *tokens;            /* actual tokens as an array */
200   unsigned int tokens_used;     /* tokens used */
201   unsigned int tokens_cap;      /* tokens allocated */
202
203   unsigned char *namebuf;       /* names buffer */
204   unsigned int name_used;       /* _bytes_ used */
205   unsigned int name_cap;        /* _bytes_ allocated */
206
207   unsigned int line;            /* starting line number */
208
209   /* Comment copying.  */
210   cpp_token *comments;          /* comment tokens.  */
211   unsigned int comments_used;   /* comment tokens used.  */
212   unsigned int comments_cap;    /* comment token capacity.  */
213
214   /* Only used if tokens[0].type == CPP_DIRECTIVE.  This is the
215      handler to call after lexing the rest of this line.  The flags
216      indicate whether the rest of the line gets special treatment
217      during lexing (#include, #if, #assert, #unassert).  */
218   directive_handler dir_handler;
219   unsigned short dir_flags;
220 };
221
222 struct cpp_buffer
223 {
224   const unsigned char *cur;      /* current position */
225   const unsigned char *rlimit; /* end of valid data */
226   const unsigned char *buf;      /* entire buffer */
227   const unsigned char *line_base; /* start of current line */
228   const unsigned char *mark;  /* Saved position for lengthy backtrack. */
229
230   struct cpp_buffer *prev;
231
232   /* Filename specified with #line command.  */
233   const char *nominal_fname;
234   /* Actual directory of this file, used only for "" includes */
235   struct file_name_list *actual_dir;
236
237   /* Pointer into the include hash table.  Used for include_next and
238      to record control macros. */
239   struct ihash *ihash;
240
241   parse_cleanup_t cleanup;
242
243   /* If the buffer is the expansion of a macro, this points to the
244      macro's hash table entry.  */
245   struct hashnode *macro;
246
247   /* Value of if_stack at start of this file.
248      Used to prohibit unmatched #endif (etc) in an include file.  */
249   struct if_stack *if_stack;
250
251   /* Line number at line_base (above). */
252   unsigned int lineno;
253
254   /* True if this is a header file included using <FILENAME>.  */
255   char system_header_p;
256
257   /* True if end-of-file has already been hit once in this buffer.  */
258   char seen_eof;
259
260   /* True if buffer contains escape sequences.
261      Currently there are two kinds:
262      "\r-" means following identifier should not be macro-expanded.
263      "\r " means a token-separator.  This turns into " " in final output
264           if not stringizing and needed to separate tokens; otherwise nothing.
265      Any other two-character sequence beginning with \r is an error.
266
267      If this is NOT set, then \r is a one-character escape meaning backslash
268      newline.  This is guaranteed not to occur in the middle of a token.
269      The two interpretations of \r do not conflict, because the two-character
270      escapes are used only in macro buffers, and backslash-newline is removed
271      from macro expansion text in collect_expansion and/or macarg.  */
272   char has_escapes;
273
274   /* Used by the C++ frontend to implement redirected input (such as for
275      default argument and/or template parsing).  */
276   char manual_pop;
277
278   /* True if we have already warned about C++ comments in this file.
279      The warning happens only for C89 extended mode with -pedantic on,
280      or for -Wtraditional, and only once per file (otherwise it would
281      be far too noisy).  */
282   char warned_cplusplus_comments;
283
284   /* True if this buffer's data is mmapped.  */
285   char mapped;
286 };
287
288 struct file_name_map_list;
289 struct htab;
290
291 /* Maximum nesting of cpp_buffers.  We use a static limit, partly for
292    efficiency, and partly to limit runaway recursion.  */
293 #define CPP_STACK_MAX 200
294
295 /* Values for opts.dump_macros.
296   dump_only means inhibit output of the preprocessed text
297              and instead output the definitions of all user-defined
298              macros in a form suitable for use as input to cpp.
299    dump_names means pass #define and the macro name through to output.
300    dump_definitions means pass the whole definition (plus #define) through
301 */
302 enum { dump_none = 0, dump_only, dump_names, dump_definitions };
303
304 /* This structure is nested inside struct cpp_reader, and
305    carries all the options visible to the command line.  */
306 struct cpp_options
307 {
308   /* Name of input and output files.  */
309   const char *in_fname;
310   const char *out_fname;
311
312   /* Pending options - -D, -U, -A, -I, -ixxx. */
313   struct cpp_pending *pending;
314
315   /* File name which deps are being written to.  This is 0 if deps are
316      being written to stdout.  */
317   const char *deps_file;
318
319   /* Target-name to write with the dependency information.  */
320   char *deps_target;
321
322   /* Search paths for include files.  */
323   struct file_name_list *quote_include;  /* First dir to search for "file" */
324   struct file_name_list *bracket_include;/* First dir to search for <file> */
325
326   /* Map between header names and file names, used only on DOS where
327      file names are limited in length.  */
328   struct file_name_map_list *map_list;
329
330   /* Directory prefix that should replace `/usr/lib/gcc-lib/TARGET/VERSION'
331      in the standard include file directories.  */
332   const char *include_prefix;
333   unsigned int include_prefix_len;
334
335   /* Non-0 means -v, so print the full set of include dirs.  */
336   unsigned char verbose;
337
338   /* Nonzero means use extra default include directories for C++.  */
339   unsigned char cplusplus;
340
341   /* Nonzero means handle cplusplus style comments */
342   unsigned char cplusplus_comments;
343
344   /* Nonzero means handle #import, for objective C.  */
345   unsigned char objc;
346
347   /* Nonzero means this is an assembly file, so ignore unrecognized
348      directives and the "# 33" form of #line, both of which are
349      probably comments.  Also, permit unbalanced ' strings (again,
350      likely to be in comments).  */
351   unsigned char lang_asm;
352
353   /* Nonzero means this is Fortran, and we don't know where the
354      comments are, so permit unbalanced ' strings.  Unlike lang_asm,
355      this does not ignore unrecognized directives.  */
356   unsigned char lang_fortran;
357
358   /* Nonzero means handle CHILL comment syntax and output CHILL string
359      delimiters for __DATE__ etc. */
360   unsigned char chill;
361
362   /* Nonzero means don't copy comments into the output file.  */
363   unsigned char discard_comments;
364
365   /* Nonzero means process the ANSI trigraph sequences.  */
366   unsigned char trigraphs;
367
368   /* Nonzero means print the names of included files rather than the
369      preprocessed output.  1 means just the #include "...", 2 means
370      #include <...> as well.  */
371   unsigned char print_deps;
372
373   /* Nonzero if missing .h files in -M output are assumed to be
374      generated files and not errors.  */
375   unsigned char print_deps_missing_files;
376
377   /* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */
378   unsigned char print_deps_append;
379
380   /* Nonzero means print names of header files (-H).  */
381   unsigned char print_include_names;
382
383   /* Nonzero means cpp_pedwarn causes a hard error.  */
384   unsigned char pedantic_errors;
385
386   /* Nonzero means don't print warning messages.  */
387   unsigned char inhibit_warnings;
388
389   /* Nonzero means don't print error messages.  Has no option to
390      select it, but can be set by a user of cpplib (e.g. fix-header).  */
391   unsigned char inhibit_errors;
392
393   /* Nonzero means warn if slash-star appears in a comment.  */
394   unsigned char warn_comments;
395
396   /* Nonzero means warn if there are any trigraphs.  */
397   unsigned char warn_trigraphs;
398
399   /* Nonzero means warn if #import is used.  */
400   unsigned char warn_import;
401
402   /* Nonzero means warn if a macro argument is (or would be)
403      stringified with -traditional, and warn about directives
404      with the # indented from the beginning of the line.  */
405   unsigned char warn_traditional;
406
407   /* Nonzero means turn warnings into errors.  */
408   unsigned char warnings_are_errors;
409
410   /* Nonzero causes output not to be done, but directives such as
411      #define that have side effects are still obeyed.  */
412   unsigned char no_output;
413
414   /* Nonzero means we should look for header.gcc files that remap file
415      names.  */
416   unsigned char remap;
417
418   /* Nonzero means don't output line number information.  */
419   unsigned char no_line_commands;
420
421   /* Nonzero means -I- has been seen, so don't look for #include "foo"
422      the source-file directory.  */
423   unsigned char ignore_srcdir;
424
425   /* Zero means dollar signs are punctuation. */
426   unsigned char dollars_in_ident;
427
428   /* Nonzero means try to imitate old fashioned non-ANSI preprocessor.  */
429   unsigned char traditional;
430
431   /* Nonzero means warn if undefined identifiers are evaluated in an #if.  */
432   unsigned char warn_undef;
433
434   /* Nonzero for the 1989 C Standard, including corrigenda and amendments.  */
435   unsigned char c89;
436
437   /* Nonzero for the 1999 C Standard, including corrigenda and amendments.  */
438   unsigned char c99;
439
440   /* Nonzero means give all the error messages the ANSI standard requires.  */
441   unsigned char pedantic;
442
443   /* Nonzero means we're looking at already preprocessed code, so don't
444      bother trying to do macro expansion and whatnot.  */
445   unsigned char preprocessed;
446
447   /* Nonzero disables all the standard directories for headers.  */
448   unsigned char no_standard_includes;
449
450   /* Nonzero disables the C++-specific standard directories for headers.  */
451   unsigned char no_standard_cplusplus_includes;
452
453   /* Nonzero means dump macros in some fashion - see above.  */
454   unsigned char dump_macros;
455
456   /* Nonzero means pass all #define and #undef directives which we
457      actually process through to the output stream.  This feature is
458      used primarily to allow cc1 to record the #defines and #undefs
459      for the sake of debuggers which understand about preprocessor
460      macros, but it may also be useful with -E to figure out how
461      symbols are defined, and where they are defined.  */
462   unsigned char debug_output;
463
464   /* Nonzero means pass #include lines through to the output.  */
465   unsigned char dump_includes;
466
467   /* Print column number in error messages.  */
468   unsigned char show_column;
469 };
470
471
472 /* A cpp_reader encapsulates the "state" of a pre-processor run.
473    Applying cpp_get_token repeatedly yields a stream of pre-processor
474    tokens.  Usually, there is only one cpp_reader object active. */
475
476 struct cpp_reader
477 {
478   /* Top of buffer stack.  */
479   cpp_buffer *buffer;
480
481   /* Token list used by get_directive_token.  */
482   cpp_toklist directbuf;
483
484   /* A buffer used for both for cpp_get_token's output, and also internally. */
485   unsigned char *token_buffer;
486   /* Allocated size of token_buffer.  CPP_RESERVE allocates space.  */
487   unsigned int token_buffer_size;
488   /* End of the written part of token_buffer. */
489   unsigned char *limit;
490
491   /* Error counter for exit code */
492   unsigned int errors;
493
494   /* Line where a newline was first seen in a string constant.  */
495   unsigned int multiline_string_line;
496
497   /* Current depth in #include directives that use <...>.  */
498   unsigned int system_include_depth;
499
500   /* Current depth of buffer stack. */
501   unsigned int buffer_stack_depth;
502
503   /* Hash table of macros and assertions.  See cpphash.c */
504   struct htab *hashtab;
505
506   /* Hash table of other included files.  See cppfiles.c */
507   struct htab *all_include_files;
508
509   /* Chain of `actual directory' file_name_list entries,
510      for "" inclusion. */
511   struct file_name_list *actual_dirs;
512
513   /* Current maximum length of directory names in the search path
514      for include files.  (Altered as we get more of them.)  */
515   unsigned int max_include_len;
516
517   struct if_stack *if_stack;
518   const unsigned char *potential_control_macro;
519
520   /* Buffer of -M output.  */
521   struct deps *deps;
522
523   /* A buffer used only by read_and_prescan (in cppfiles.c), which is
524      allocated once per cpp_reader object to keep it off the stack.  */
525   unsigned char *input_buffer;
526   size_t input_buffer_len;
527
528   /* User visible options.  */
529   struct cpp_options opts;
530
531   /* Nonzero means we have printed (while error reporting) a list of
532      containing files that matches the current status.  */
533   unsigned char input_stack_listing_current;
534
535   /* If non-zero, macros are not expanded.  */
536   unsigned char no_macro_expand;
537
538   /* If non-zero, directives cause a hard error.  Used when parsing
539      macro arguments.  */
540   unsigned char no_directives;
541
542   /* We're printed a warning recommending against using #import.  */
543   unsigned char import_warning;
544
545   /* If true, characters between '<' and '>' are a single (string) token.  */
546   unsigned char parsing_include_directive;
547
548   /* If true, # introduces an assertion (see do_assert) */
549   unsigned char parsing_if_directive;
550
551   /* If true, # and ## are the STRINGIZE and TOKPASTE operators */
552   unsigned char parsing_define_directive;
553
554   /* True if escape sequences (as described for has_escapes in
555      parse_buffer) should be emitted.  */
556   unsigned char output_escapes;
557
558   /* 0: Have seen non-white-space on this line.
559      1: Only seen white space so far on this line.
560      2: Only seen white space so far in this file.  */
561   unsigned char only_seen_white;
562
563   /* True after cpp_start_read completes.  Used to inhibit some
564      warnings while parsing the command line.  */
565   unsigned char done_initializing;
566 };
567
568 /* struct cpp_printer encapsulates state used to convert the stream of
569    tokens coming from cpp_get_token back into a text file.  Not
570    everyone wants to do that, hence we separate the function.  */
571
572 struct cpp_printer
573 {
574   FILE *outf;                   /* stream to write to */
575   const char *last_fname;       /* previous file name */
576   unsigned int last_bsd;        /* did we just push? */
577   unsigned int lineno;          /* line currently being written */
578   unsigned int written;         /* low water mark in token buffer */
579 };
580
581 #define CPP_FATAL_LIMIT 1000
582 /* True if we have seen a "fatal" error. */
583 #define CPP_FATAL_ERRORS(READER) ((READER)->errors >= CPP_FATAL_LIMIT)
584
585 /* Macros for manipulating the token_buffer. */
586
587 /* Number of characters currently in PFILE's output buffer. */
588 #define CPP_WRITTEN(PFILE) ((size_t)((PFILE)->limit - (PFILE)->token_buffer))
589 #define CPP_PWRITTEN(PFILE) ((PFILE)->limit)
590 #define CPP_ADJUST_WRITTEN(PFILE,DELTA) ((PFILE)->limit += (DELTA))
591 #define CPP_SET_WRITTEN(PFILE,N) ((PFILE)->limit = (PFILE)->token_buffer + (N))
592
593 #define CPP_OPTION(PFILE, OPTION) ((PFILE)->opts.OPTION)
594 #define CPP_BUFFER(PFILE) ((PFILE)->buffer)
595 #define CPP_BUF_LINE(BUF) ((BUF)->lineno)
596 #define CPP_BUF_COL(BUF) ((BUF)->cur - (BUF)->line_base)
597
598 /* Name under which this program was invoked.  */
599 extern const char *progname;
600
601 extern void _cpp_lex_file PARAMS((cpp_reader *));
602 extern int cpp_handle_options PARAMS ((cpp_reader *, int, char **));
603 extern enum cpp_ttype cpp_get_token PARAMS ((cpp_reader *));
604 extern enum cpp_ttype cpp_get_non_space_token PARAMS ((cpp_reader *));
605
606 extern void cpp_reader_init PARAMS ((cpp_reader *));
607 extern cpp_printer *cpp_printer_init PARAMS ((cpp_reader *, cpp_printer *));
608 extern int cpp_start_read PARAMS ((cpp_reader *, cpp_printer *, const char *));
609 extern void cpp_output_tokens PARAMS ((cpp_reader *, cpp_printer *));
610 extern void cpp_output_list PARAMS ((cpp_reader *, cpp_printer *,
611                                      const cpp_toklist *));
612 extern void cpp_finish PARAMS ((cpp_reader *, cpp_printer *));
613 extern void cpp_cleanup PARAMS ((cpp_reader *));
614
615 extern cpp_buffer *cpp_file_buffer PARAMS((cpp_reader *));
616 extern void cpp_define PARAMS ((cpp_reader *, const char *));
617 extern void cpp_assert PARAMS ((cpp_reader *, const char *));
618 extern void cpp_undef  PARAMS ((cpp_reader *, const char *));
619 extern void cpp_unassert PARAMS ((cpp_reader *, const char *));
620
621 extern void cpp_free_token_list PARAMS ((cpp_toklist *));
622
623 /* N.B. The error-message-printer prototypes have not been nicely
624    formatted because exgettext needs to see 'msgid' on the same line
625    as the name of the function in order to work properly.  Only the
626    string argument gets a name in an effort to keep the lines from
627    getting ridiculously oversized.  */
628
629 extern void cpp_ice PARAMS ((cpp_reader *, const char *msgid, ...))
630   ATTRIBUTE_PRINTF_2;
631 extern void cpp_fatal PARAMS ((cpp_reader *, const char *msgid, ...))
632   ATTRIBUTE_PRINTF_2;
633 extern void cpp_error PARAMS ((cpp_reader *, const char *msgid, ...))
634   ATTRIBUTE_PRINTF_2;
635 extern void cpp_warning PARAMS ((cpp_reader *, const char *msgid, ...))
636   ATTRIBUTE_PRINTF_2;
637 extern void cpp_pedwarn PARAMS ((cpp_reader *, const char *msgid, ...))
638   ATTRIBUTE_PRINTF_2;
639 extern void cpp_notice PARAMS ((cpp_reader *, const char *msgid, ...))
640   ATTRIBUTE_PRINTF_2;
641 extern void cpp_error_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...))
642   ATTRIBUTE_PRINTF_4;
643 extern void cpp_warning_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...))
644   ATTRIBUTE_PRINTF_4;
645 extern void cpp_pedwarn_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...))
646   ATTRIBUTE_PRINTF_4;
647 extern void cpp_pedwarn_with_file_and_line PARAMS ((cpp_reader *, const char *, int, int, const char *msgid, ...))
648   ATTRIBUTE_PRINTF_5;
649 extern void cpp_error_from_errno        PARAMS ((cpp_reader *, const char *));
650 extern void cpp_notice_from_errno       PARAMS ((cpp_reader *, const char *));
651
652 /* In cpplex.c */
653 extern cpp_buffer *cpp_push_buffer      PARAMS ((cpp_reader *,
654                                                  const unsigned char *, long));
655 extern cpp_buffer *cpp_pop_buffer       PARAMS ((cpp_reader *));
656 extern void cpp_scan_buffer             PARAMS ((cpp_reader *, cpp_printer *));
657 extern void cpp_scan_buffer_nooutput    PARAMS ((cpp_reader *));
658
659
660
661 /* In cpphash.c */
662 extern int cpp_defined                  PARAMS ((cpp_reader *,
663                                                  const unsigned char *, int));
664
665 /* In cppfiles.c */
666 extern int cpp_included                 PARAMS ((cpp_reader *, const char *));
667 extern int cpp_read_file                PARAMS ((cpp_reader *, const char *));
668
669 #ifdef __cplusplus
670 }
671 #endif
672 #endif /* __GCC_CPPLIB__ */