OSDN Git Service

1999-03-15 21:39 -0500 Zack Weinberg <zack@rabi.columbia.edu>
[pf3gnuchains/gcc-fork.git] / gcc / cpplib.h
1 /* Definitions for CPP library.
2    Copyright (C) 1995, 1996, 1997, 1998, 1999 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 unsigned char U_CHAR;
32
33 typedef struct cpp_reader cpp_reader;
34 typedef struct cpp_buffer cpp_buffer;
35 typedef struct cpp_options cpp_options;
36 typedef struct hashnode cpp_hashnode;
37
38 enum cpp_token {
39   CPP_EOF = -1,
40   CPP_OTHER = 0,
41   CPP_COMMENT = 1,
42   CPP_HSPACE,
43   CPP_VSPACE, /* newlines and #line directives */
44   CPP_NAME,
45   CPP_NUMBER,
46   CPP_CHAR,
47   CPP_STRING,
48   CPP_DIRECTIVE,
49   CPP_LPAREN,   /* "(" */
50   CPP_RPAREN,   /* ")" */
51   CPP_LBRACE,   /* "{" */
52   CPP_RBRACE,   /* "}" */
53   CPP_COMMA,    /* "," */
54   CPP_SEMICOLON,/* ";" */
55   CPP_3DOTS,    /* "..." */
56 #if 0
57   CPP_ANDAND, /* "&&" */
58   CPP_OROR,   /* "||" */
59   CPP_LSH,    /* "<<" */
60   CPP_RSH,    /* ">>" */
61   CPP_EQL,    /* "==" */
62   CPP_NEQ,    /* "!=" */
63   CPP_LEQ,    /* "<=" */
64   CPP_GEQ,    /* ">=" */
65   CPP_PLPL,   /* "++" */
66   CPP_MINMIN, /* "--" */
67 #endif
68   /* POP_TOKEN is returned when we've popped a cpp_buffer. */
69   CPP_POP
70 };
71
72 typedef enum cpp_token (*parse_underflow_t) PARAMS((cpp_reader *));
73 typedef int (*parse_cleanup_t) PARAMS((cpp_buffer *, cpp_reader *));
74
75 /* A parse_marker indicates a previous position,
76    which we can backtrack to. */
77
78 struct parse_marker {
79   cpp_buffer *buf;
80   struct parse_marker *next;
81   int position;
82 };
83
84 extern void parse_set_mark PARAMS ((struct parse_marker *, cpp_reader *));
85 extern void parse_clear_mark PARAMS ((struct parse_marker *));
86 extern void parse_goto_mark PARAMS((struct parse_marker *, cpp_reader *));
87 extern void parse_move_mark PARAMS((struct parse_marker *, cpp_reader *));
88
89 extern int cpp_handle_option PARAMS ((cpp_reader *, int, char **));
90 extern int cpp_handle_options PARAMS ((cpp_reader *, int, char **));
91 extern enum cpp_token cpp_get_token PARAMS ((cpp_reader *));
92 extern void cpp_skip_hspace PARAMS((cpp_reader *));
93 extern enum cpp_token cpp_get_non_space_token PARAMS ((cpp_reader *));
94
95 /* This frees resources used by PFILE. */
96 extern void cpp_cleanup PARAMS ((cpp_reader *PFILE));
97
98 /* If we have a huge buffer, may need to cache more recent counts */
99 #define CPP_LINE_BASE(BUF) ((BUF)->buf + (BUF)->line_base)
100
101 struct cpp_buffer
102 {
103   unsigned char *cur;    /* current position */
104   unsigned char *rlimit; /* end of valid data */
105   unsigned char *buf;    /* entire buffer */
106   unsigned char *alimit; /* end of allocated buffer */
107
108   struct cpp_buffer *prev;
109
110   /* Real filename.  (Alias to ->ihash->fname, obsolete). */
111   char *fname;
112   /* Filename specified with #line command.  */
113   char *nominal_fname;
114   /* Last filename specified with #line command.  */
115   char *last_nominal_fname;
116   /* Actual directory of this file, used only for "" includes */
117   struct file_name_list *actual_dir;
118
119   /* Pointer into the include hash table.  Used for include_next and
120      to record control macros. */
121   struct include_hash *ihash;
122
123   long line_base;
124   long lineno; /* Line number at CPP_LINE_BASE. */
125   long colno; /* Column number at CPP_LINE_BASE. */
126   parse_underflow_t underflow;
127   parse_cleanup_t cleanup;
128   void *data;
129   struct parse_marker *marks;
130   /* Value of if_stack at start of this file.
131      Used to prohibit unmatched #endif (etc) in an include file.  */
132   struct if_stack *if_stack;
133
134   /* True if this is a header file included using <FILENAME>.  */
135   char system_header_p;
136   char seen_eof;
137
138   /* True if buffer contains escape sequences.
139      Currently there are three kinds:
140      "@-" means following identifier should not be macro-expanded.
141      "@ " means a token-separator.  This turns into " " in final output
142           if not stringizing and needed to separate tokens; otherwise nothing.
143      "@@" means a normal '@'.
144      (An '@' inside a string stands for itself and is never an escape.) */
145   char has_escapes;
146 };
147
148 struct file_name_map_list;
149
150 /* Maximum nesting of cpp_buffers.  We use a static limit, partly for
151    efficiency, and partly to limit runaway recursion.  */
152 #define CPP_STACK_MAX 200
153
154 /* A cpp_reader encapsulates the "state" of a pre-processor run.
155    Applying cpp_get_token repeatedly yields a stream of pre-processor
156    tokens.  Usually, there is only one cpp_reader object active. */
157
158 struct cpp_reader
159 {
160   parse_underflow_t get_token;
161   cpp_buffer *buffer;
162   cpp_options *opts;
163
164   /* A buffer used for both for cpp_get_token's output, and also internally. */
165   unsigned char *token_buffer;
166   /* Allocated size of token_buffer.  CPP_RESERVE allocates space.  */
167   unsigned int token_buffer_size;
168   /* End of the written part of token_buffer. */
169   unsigned char *limit;
170
171   /* Error counter for exit code */
172   int errors;
173
174   /* Line where a newline was first seen in a string constant.  */
175   int multiline_string_line;
176
177   /* Current depth in #include directives that use <...>.  */
178   int system_include_depth;
179
180   /* Current depth of buffer stack. */
181   int buffer_stack_depth;
182
183   /* Hash table of macros and assertions.  See cpphash.c */
184 #define HASHSIZE 1403
185   struct hashnode **hashtab;
186   
187   /* Hash table of other included files.  See cppfiles.c */
188 #define ALL_INCLUDE_HASHSIZE 71
189   struct include_hash *all_include_files[ALL_INCLUDE_HASHSIZE];
190
191   /* Chain of `actual directory' file_name_list entries,
192      for "" inclusion. */
193   struct file_name_list *actual_dirs;
194
195   /* Current maximum length of directory names in the search path
196      for include files.  (Altered as we get more of them.)  */
197   unsigned int max_include_len;
198
199   struct if_stack *if_stack;
200
201   /* Nonzero means we are inside an IF during a -pcp run.  In this mode
202      macro expansion is done, and preconditions are output for all macro
203      uses requiring them. */
204   char pcp_inside_if;
205
206   /* Nonzero means we have printed (while error reporting) a list of
207      containing files that matches the current status. */
208   char input_stack_listing_current;
209
210   /* If non-zero, macros are not expanded. */
211   char no_macro_expand;
212
213   /* Print column number in error messages. */
214   char show_column;
215
216   /* We're printed a warning recommending against using #import. */
217   char import_warning;
218
219   /* If true, character between '<' and '>' are a single (string) token. */
220   char parsing_include_directive;
221
222   /* True if escape sequences (as described for has_escapes in
223      parse_buffer) should be emitted. */
224   char output_escapes;
225
226   /* 0: Have seen non-white-space on this line.
227      1: Only seen white space so far on this line.
228      2: Only seen white space so far in this file. */
229    char only_seen_white;
230
231   /* Nonzero means this file was included with a -imacros or -include
232      command line and should not be recorded as an include file.  */
233
234   int no_record_file;
235
236   long lineno;
237
238   struct tm *timebuf;
239
240   /* Buffer of -M output.  */
241   char *deps_buffer;
242
243   /* Number of bytes allocated in above.  */
244   int deps_allocated_size;
245
246   /* Number of bytes used.  */
247   int deps_size;
248
249   /* Number of bytes since the last newline.  */
250   int deps_column;
251 };
252
253 #define CPP_FATAL_LIMIT 1000
254 /* True if we have seen a "fatal" error. */
255 #define CPP_FATAL_ERRORS(READER) ((READER)->errors >= CPP_FATAL_LIMIT)
256
257 #define CPP_BUF_PEEK(BUFFER) \
258   ((BUFFER)->cur < (BUFFER)->rlimit ? *(BUFFER)->cur : EOF)
259 #define CPP_BUF_GET(BUFFER) \
260   ((BUFFER)->cur < (BUFFER)->rlimit ? *(BUFFER)->cur++ : EOF)
261 #define CPP_FORWARD(BUFFER, N) ((BUFFER)->cur += (N))
262
263 /* Macros for manipulating the token_buffer. */
264
265 #define CPP_OUT_BUFFER(PFILE) ((PFILE)->token_buffer)
266
267 /* Number of characters currently in PFILE's output buffer. */
268 #define CPP_WRITTEN(PFILE) ((size_t)((PFILE)->limit - (PFILE)->token_buffer))
269 #define CPP_PWRITTEN(PFILE) ((PFILE)->limit)
270
271 /* Make sure PFILE->token_buffer has space for at least N more characters. */
272 #define CPP_RESERVE(PFILE, N) \
273   (CPP_WRITTEN (PFILE) + (size_t)(N) > (PFILE)->token_buffer_size \
274    && (cpp_grow_buffer (PFILE, N), 0))
275
276 /* Append string STR (of length N) to PFILE's output buffer.
277    Assume there is enough space. */
278 #define CPP_PUTS_Q(PFILE, STR, N) \
279   (bcopy (STR, (PFILE)->limit, (N)), (PFILE)->limit += (N))
280 /* Append string STR (of length N) to PFILE's output buffer.  Make space. */
281 #define CPP_PUTS(PFILE, STR, N) CPP_RESERVE(PFILE, N), CPP_PUTS_Q(PFILE, STR,N)
282 /* Append character CH to PFILE's output buffer.  Assume sufficient space. */
283 #define CPP_PUTC_Q(PFILE, CH) (*(PFILE)->limit++ = (CH))
284 /* Append character CH to PFILE's output buffer.  Make space if need be. */
285 #define CPP_PUTC(PFILE, CH) (CPP_RESERVE (PFILE, 1), CPP_PUTC_Q (PFILE, CH))
286 /* Make sure PFILE->limit is followed by '\0'. */
287 #define CPP_NUL_TERMINATE_Q(PFILE) (*(PFILE)->limit = 0)
288 #define CPP_NUL_TERMINATE(PFILE) (CPP_RESERVE(PFILE, 1), *(PFILE)->limit = 0)
289 #define CPP_ADJUST_WRITTEN(PFILE,DELTA) ((PFILE)->limit += (DELTA))
290 #define CPP_SET_WRITTEN(PFILE,N) ((PFILE)->limit = (PFILE)->token_buffer + (N))
291
292 #define CPP_OPTIONS(PFILE) ((PFILE)->opts)
293
294 #define CPP_BUFFER(PFILE) ((PFILE)->buffer)
295 #define CPP_PREV_BUFFER(BUFFER) ((BUFFER)->prev)
296 /* The bottom of the buffer stack. */
297 #define CPP_NULL_BUFFER(PFILE) NULL
298
299 /* The `pending' structure accumulates all the options that are not
300    actually processed until we hit cpp_start_read.  It consists of
301    several lists, one for each type of option.  We keep both head and
302    tail pointers for quick insertion. */
303 struct cpp_pending
304 {
305   struct pending_option *define_head, *define_tail;
306   struct pending_option *assert_head, *assert_tail;
307
308   struct file_name_list *quote_head, *quote_tail;
309   struct file_name_list *brack_head, *brack_tail;
310   struct file_name_list *systm_head, *systm_tail;
311   struct file_name_list *after_head, *after_tail;
312
313   struct pending_option *imacros_head, *imacros_tail;
314   struct pending_option *include_head, *include_tail;
315 };
316
317 /* Pointed to by cpp_reader.opts. */
318 struct cpp_options {
319   char *in_fname;
320
321   /* Name of output file, for error messages.  */
322   char *out_fname;
323
324   struct file_name_map_list *map_list;
325
326   /* Non-0 means -v, so print the full set of include dirs.  */
327   char verbose;
328
329   /* Nonzero means use extra default include directories for C++.  */
330
331   char cplusplus;
332
333   /* Nonzero means handle cplusplus style comments */
334
335   char cplusplus_comments;
336
337   /* Nonzero means handle #import, for objective C.  */
338
339   char objc;
340
341   /* Nonzero means this is an assembly file, and allow
342      unknown directives, which could be comments.  */
343
344   int lang_asm;
345
346   /* Nonzero means turn NOTREACHED into #pragma NOTREACHED etc */
347
348   char for_lint;
349
350   /* Nonzero means handle CHILL comment syntax
351      and output CHILL string delimiter for __DATE___ etc. */
352
353   char chill;
354
355   /* Nonzero means copy comments into the output file.  */
356
357   char put_out_comments;
358
359   /* Nonzero means process the ANSI trigraph sequences.  */
360
361   char trigraphs;
362
363   /* Nonzero means print the names of included files rather than
364      the preprocessed output.  1 means just the #include "...",
365      2 means #include <...> as well.  */
366
367   char print_deps;
368
369   /* Nonzero if missing .h files in -M output are assumed to be generated
370      files and not errors.  */
371
372   char print_deps_missing_files;
373
374   /* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */
375   char print_deps_append;
376
377   /* Nonzero means print names of header files (-H).  */
378
379   char print_include_names;
380
381   /* Nonzero means try to make failure to fit ANSI C an error.  */
382
383   char pedantic_errors;
384
385   /* Nonzero means don't print warning messages.  -w.  */
386
387   char inhibit_warnings;
388
389   /* Nonzero means warn if slash-star appears in a comment.  */
390
391   char warn_comments;
392
393   /* Nonzero means warn if there are any trigraphs.  */
394
395   char warn_trigraphs;
396
397   /* Nonzero means warn if #import is used.  */
398
399   char warn_import;
400
401   /* Nonzero means warn if a macro argument is (or would be)
402      stringified with -traditional.  */
403
404   char warn_stringify;
405
406   /* Nonzero means turn warnings into errors.  */
407
408   char warnings_are_errors;
409
410   /* Nonzero causes output not to be done,
411      but directives such as #define that have side effects
412      are still obeyed.  */
413
414   char no_output;
415
416   /* Nonzero means we should look for header.gcc files that remap file
417      names.  */
418   char remap;
419
420   /* Nonzero means don't output line number information.  */
421
422   char no_line_commands;
423
424 /* Nonzero means output the text in failing conditionals,
425    inside #failed ... #endfailed.  */
426
427   char output_conditionals;
428
429   /* Nonzero means -I- has been seen,
430      so don't look for #include "foo" the source-file directory.  */
431   char ignore_srcdir;
432
433   /* Zero means dollar signs are punctuation.
434      This used to be needed for conformance to the C Standard,
435      before the C Standard was corrected.  */
436   char dollars_in_ident;
437
438   /* Nonzero means try to imitate old fashioned non-ANSI preprocessor.  */
439   char traditional;
440
441   /* Nonzero means warn if undefined identifiers are evaluated in an #if.  */
442   char warn_undef;
443
444   /* Nonzero for the 1989 C Standard, including corrigenda and amendments.  */
445   char c89;
446
447   /* Nonzero for the 199x C Standard, including corrigenda and amendments.  */
448   char c9x;
449   
450   /* Nonzero means give all the error messages the ANSI standard requires.  */
451   char pedantic;
452
453   char done_initializing;
454
455   /* Search paths for include files.  */
456   struct file_name_list *quote_include;  /* First dir to search for "file" */
457   struct file_name_list *bracket_include;/* First dir to search for <file> */
458
459   /* Directory prefix that should replace `/usr/lib/gcc-lib/TARGET/VERSION'
460      in the standard include file directories.  */
461   char *include_prefix;
462   int include_prefix_len;
463
464   char inhibit_predefs;
465   char no_standard_includes;
466   char no_standard_cplusplus_includes;
467
468 /* dump_only means inhibit output of the preprocessed text
469              and instead output the definitions of all user-defined
470              macros in a form suitable for use as input to cccp.
471    dump_names means pass #define and the macro name through to output.
472    dump_definitions means pass the whole definition (plus #define) through
473 */
474
475   enum {dump_none = 0, dump_only, dump_names, dump_definitions}
476      dump_macros;
477
478 /* Nonzero means pass all #define and #undef directives which we actually
479    process through to the output stream.  This feature is used primarily
480    to allow cc1 to record the #defines and #undefs for the sake of
481    debuggers which understand about preprocessor macros, but it may
482    also be useful with -E to figure out how symbols are defined, and
483    where they are defined.  */
484   int debug_output;
485
486   /* Nonzero means pass #include lines through to the output,
487      even if they are ifdefed out.  */
488   int dump_includes;
489
490   /* Pending options - -D, -U, -A, -I, -ixxx. */
491   struct cpp_pending *pending;
492
493   /* File name which deps are being written to.
494      This is 0 if deps are being written to stdout.  */
495   char *deps_file;
496
497   /* Target-name to write with the dependency information.  */
498   char *deps_target;
499 };
500
501 #define CPP_TRADITIONAL(PFILE) (CPP_OPTIONS(PFILE)-> traditional)
502 #define CPP_WARN_UNDEF(PFILE) (CPP_OPTIONS(PFILE)->warn_undef)
503 #define CPP_C89(PFILE) (CPP_OPTIONS(PFILE)->c89)
504 #define CPP_PEDANTIC(PFILE) (CPP_OPTIONS (PFILE)->pedantic)
505 #define CPP_PRINT_DEPS(PFILE) (CPP_OPTIONS (PFILE)->print_deps)
506
507 /* List of directories to look for include files in. */
508 struct file_name_list
509 {
510   struct file_name_list *next;
511   struct file_name_list *alloc; /* for the cache of
512                                    current directory entries */
513   char *name;
514   unsigned int nlen;
515   /* We use these to tell if the directory mentioned here is a duplicate
516      of an earlier directory on the search path. */
517   ino_t ino;
518   dev_t dev;
519   /* If the following is nonzero, it is a C-language system include
520      directory.  */
521   int sysp;
522   /* Mapping of file names for this directory.
523      Only used on MS-DOS and related platforms. */
524   struct file_name_map *name_map;
525 };
526 #define ABSOLUTE_PATH ((struct file_name_list *)-1)
527
528 /* This structure is used for the table of all includes.  It is
529    indexed by the `short name' (the name as it appeared in the
530    #include statement) which is stored in *nshort.  */
531 struct include_hash
532 {
533   struct include_hash *next;
534   /* Next file with the same short name but a
535      different (partial) pathname). */
536   struct include_hash *next_this_file;
537
538   /* Location of the file in the include search path.
539      Used for include_next */
540   struct file_name_list *foundhere;
541   char *name;           /* (partial) pathname of file */
542   char *nshort;         /* name of file as referenced in #include */
543   char *control_macro;  /* macro, if any, preventing reinclusion - see
544                            redundant_include_p */
545   char *buf, *limit;    /* for file content cache, not yet implemented */
546 };
547
548 /* Name under which this program was invoked.  */
549
550 extern char *progname;
551
552 /* The structure of a node in the hash table.  The hash table
553    has entries for all tokens defined by #define commands (type T_MACRO),
554    plus some special tokens like __LINE__ (these each have their own
555    type, and the appropriate code is run when that type of node is seen.
556    It does not contain control words like "#define", which are recognized
557    by a separate piece of code. */
558
559 /* different flavors of hash nodes --- also used in keyword table */
560 enum node_type {
561  T_DEFINE = 1,  /* the `#define' keyword */
562  T_INCLUDE,     /* the `#include' keyword */
563  T_INCLUDE_NEXT, /* the `#include_next' keyword */
564  T_IMPORT,      /* the `#import' keyword */
565  T_IFDEF,       /* the `#ifdef' keyword */
566  T_IFNDEF,      /* the `#ifndef' keyword */
567  T_IF,          /* the `#if' keyword */
568  T_ELSE,        /* `#else' */
569  T_PRAGMA,      /* `#pragma' */
570  T_ELIF,        /* `#elif' */
571  T_UNDEF,       /* `#undef' */
572  T_LINE,        /* `#line' */
573  T_ERROR,       /* `#error' */
574  T_WARNING,     /* `#warning' */
575  T_ENDIF,       /* `#endif' */
576  T_SCCS,        /* `#sccs', used on system V.  */
577  T_IDENT,       /* `#ident', used on system V.  */
578  T_ASSERT,      /* `#assert', taken from system V.  */
579  T_UNASSERT,    /* `#unassert', taken from system V.  */
580  T_SPECLINE,    /* special symbol `__LINE__' */
581  T_DATE,        /* `__DATE__' */
582  T_FILE,        /* `__FILE__' */
583  T_BASE_FILE,   /* `__BASE_FILE__' */
584  T_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */
585  T_VERSION,     /* `__VERSION__' */
586  T_TIME,        /* `__TIME__' */
587  T_STDC,        /* `__STDC__' */
588  T_CONST,       /* Constant string, used by `__SIZE_TYPE__' etc */
589  T_MACRO,       /* macro defined by `#define' */
590  T_DISABLED,    /* macro temporarily turned off for rescan */
591  T_PCSTRING,    /* precompiled string (hashval is KEYDEF *) */
592  T_UNUSED       /* Used for something not defined.  */
593  };
594
595 /* Structure returned by create_definition */
596 typedef struct macrodef MACRODEF;
597 struct macrodef
598 {
599   struct definition *defn;
600   unsigned char *symnam;
601   int symlen;
602 };
603
604 /* Structure allocated for every #define.  For a simple replacement
605    such as
606         #define foo bar ,
607    nargs = -1, the `pattern' list is null, and the expansion is just
608    the replacement text.  Nargs = 0 means a functionlike macro with no args,
609    e.g.,
610        #define getchar() getc (stdin) .
611    When there are args, the expansion is the replacement text with the
612    args squashed out, and the reflist is a list describing how to
613    build the output from the input: e.g., "3 chars, then the 1st arg,
614    then 9 chars, then the 3rd arg, then 0 chars, then the 2nd arg".
615    The chars here come from the expansion.  Whatever is left of the
616    expansion after the last arg-occurrence is copied after that arg.
617    Note that the reflist can be arbitrarily long---
618    its length depends on the number of times the arguments appear in
619    the replacement text, not how many args there are.  Example:
620    #define f(x) x+x+x+x+x+x+x would have replacement text "++++++" and
621    pattern list
622      { (0, 1), (1, 1), (1, 1), ..., (1, 1), NULL }
623    where (x, y) means (nchars, argno). */
624
625 typedef struct definition DEFINITION;
626 struct definition {
627   int nargs;
628   int length;                   /* length of expansion string */
629   int predefined;               /* True if the macro was builtin or */
630                                 /* came from the command line */
631   unsigned char *expansion;
632   int line;                     /* Line number of definition */
633   char *file;                   /* File of definition */
634   char rest_args;               /* Nonzero if last arg. absorbs the rest */
635   struct reflist {
636     struct reflist *next;
637     char stringify;             /* nonzero if this arg was preceded by a
638                                    # operator. */
639     char raw_before;            /* Nonzero if a ## operator before arg. */
640     char raw_after;             /* Nonzero if a ## operator after arg. */
641     char rest_args;             /* Nonzero if this arg. absorbs the rest */
642     int nchars;                 /* Number of literal chars to copy before
643                                    this arg occurrence.  */
644     int argno;                  /* Number of arg to substitute (origin-0) */
645   } *pattern;
646   union {
647     /* Names of macro args, concatenated in reverse order
648        with comma-space between them.
649        The only use of this is that we warn on redefinition
650        if this differs between the old and new definitions.  */
651     unsigned char *argnames;
652   } args;
653 };
654
655 /* These tables are not really `const', but they are only modified at
656    initialization time, in a separate translation unit from the rest
657    of the library.  We let the rest of the library think they are `const'
658    to get better code and some additional sanity checks.  */
659 #ifndef FAKE_CONST
660 #define FAKE_CONST const
661 #endif
662 extern FAKE_CONST unsigned char is_idstart[256];
663 extern FAKE_CONST unsigned char is_idchar[256];
664 extern FAKE_CONST unsigned char is_hor_space[256];
665 extern FAKE_CONST unsigned char is_space[256];
666 extern FAKE_CONST unsigned char trigraph_table[256];
667 #undef FAKE_CONST
668
669 /* Stack of conditionals currently in progress
670    (including both successful and failing conditionals).  */
671
672 struct if_stack {
673   struct if_stack *next;        /* for chaining to the next stack frame */
674   char *fname;          /* copied from input when frame is made */
675   int lineno;                   /* similarly */
676   int if_succeeded;             /* true if a leg of this if-group
677                                     has been passed through rescan */
678   unsigned char *control_macro; /* For #ifndef at start of file,
679                                    this is the macro name tested.  */
680   enum node_type type;          /* type of last directive seen in this group */
681 };
682 typedef struct if_stack IF_STACK_FRAME;
683
684 extern void cpp_buf_line_and_col PARAMS((cpp_buffer *, long *, long *));
685 extern cpp_buffer* cpp_file_buffer PARAMS((cpp_reader *));
686 extern void cpp_define PARAMS ((cpp_reader *, unsigned char *));
687 extern void cpp_assert PARAMS ((cpp_reader *, unsigned char *));
688 extern void cpp_undef  PARAMS ((cpp_reader *, unsigned char *));
689 extern void cpp_unassert PARAMS ((cpp_reader *, unsigned char *));
690
691 extern void cpp_error PVPROTO ((cpp_reader *, const char *, ...))
692   ATTRIBUTE_PRINTF_2;
693 extern void cpp_warning PVPROTO ((cpp_reader *, const char *, ...))
694   ATTRIBUTE_PRINTF_2;
695 extern void cpp_pedwarn PVPROTO ((cpp_reader *, const char *, ...))
696   ATTRIBUTE_PRINTF_2;
697 extern void cpp_error_with_line PVPROTO ((cpp_reader *, int, int, const char *, ...))
698   ATTRIBUTE_PRINTF_4;
699 extern void cpp_warning_with_line PVPROTO ((cpp_reader *, int, int, const char *, ...))
700   ATTRIBUTE_PRINTF_4;
701 extern void cpp_pedwarn_with_line PVPROTO ((cpp_reader *, int, int, const char *, ...))
702   ATTRIBUTE_PRINTF_4;
703 extern void cpp_pedwarn_with_file_and_line PVPROTO ((cpp_reader *, char *, int, const char *, ...))
704   ATTRIBUTE_PRINTF_4;
705 extern void cpp_message_from_errno PROTO ((cpp_reader *, int, const char *));
706 extern void cpp_error_from_errno PROTO ((cpp_reader *, const char *));
707 extern void cpp_perror_with_name PROTO ((cpp_reader *, const char *));
708 extern void v_cpp_message PROTO ((cpp_reader *, int, const char *, va_list));
709
710 extern void cpp_grow_buffer PARAMS ((cpp_reader *, long));
711 extern HOST_WIDEST_INT cpp_parse_escape PARAMS ((cpp_reader *, char **, HOST_WIDEST_INT));
712 extern cpp_buffer *cpp_push_buffer PARAMS ((cpp_reader *,
713                                             unsigned char *, long));
714 extern cpp_buffer *cpp_pop_buffer PARAMS ((cpp_reader *));
715
716 extern cpp_hashnode *cpp_lookup PARAMS ((cpp_reader *, const unsigned char *,
717                                          int, int));
718 extern void cpp_reader_init PARAMS ((cpp_reader *));
719 extern void cpp_options_init PARAMS ((cpp_options *));
720 extern int cpp_start_read PARAMS ((cpp_reader *, char *));
721 extern int cpp_read_check_assertion PARAMS ((cpp_reader *));
722 extern int scan_decls PARAMS ((cpp_reader *, int, char **));
723 extern void skip_rest_of_line PARAMS ((cpp_reader *));
724 extern void cpp_finish PARAMS ((cpp_reader *));
725
726 extern void quote_string                PARAMS ((cpp_reader *, const char *));
727 extern void cpp_expand_to_buffer        PARAMS ((cpp_reader *, U_CHAR *, int));
728 extern void cpp_scan_buffer             PARAMS ((cpp_reader *));
729 extern int check_macro_name             PARAMS ((cpp_reader *, U_CHAR *, int));
730
731 /* Last arg to output_line_command.  */
732 enum file_change_code {same_file, enter_file, leave_file};
733 extern void output_line_command         PARAMS ((cpp_reader *, int,
734                                                  enum file_change_code));
735
736 /* From cpperror.c */
737 extern void cpp_fatal PVPROTO ((cpp_reader *, const char *, ...))
738   ATTRIBUTE_PRINTF_2;
739 extern void cpp_message PVPROTO ((cpp_reader *, int, const char *, ...))
740   ATTRIBUTE_PRINTF_3;
741 extern void cpp_pfatal_with_name PROTO ((cpp_reader *, const char *));
742 extern void cpp_file_line_for_message PROTO ((cpp_reader *, char *, int, int));
743 extern void cpp_print_containing_files PROTO ((cpp_reader *));
744 extern void cpp_notice PVPROTO ((const char *msgid, ...)) ATTRIBUTE_PRINTF_1;
745
746 /* In cppfiles.c */
747 extern void simplify_pathname           PROTO ((char *));
748 extern void merge_include_chains        PROTO ((struct cpp_options *));
749 extern int find_include_file            PROTO ((cpp_reader *, char *,
750                                                 struct file_name_list *,
751                                                 struct include_hash **,
752                                                 int *));
753 extern int finclude                     PROTO ((cpp_reader *, int,
754                                                 struct include_hash *));
755 extern void deps_output                 PROTO ((cpp_reader *, char *, int));
756 extern struct include_hash *include_hash PROTO ((cpp_reader *, char *, int));
757
758 #ifndef INCLUDE_LEN_FUDGE
759 #define INCLUDE_LEN_FUDGE 0
760 #endif
761
762     
763 #ifdef __cplusplus
764 }
765 #endif
766 #endif /* __GCC_CPPLIB__ */
767