blob: 3ff0c9214bfcf8eb23992ac64142d12d98c46026 [file] [log] [blame]
Per Bothner7f2935c1995-03-16 13:59:07 -08001/* Definitions for CPP library.
Richard Kenner76e80421997-03-19 16:58:58 -05002 Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Per Bothner7f2935c1995-03-16 13:59:07 -08003 Written by Per Bothner, 1994-95.
4
5This program is free software; you can redistribute it and/or modify it
6under the terms of the GNU General Public License as published by the
7Free Software Foundation; either version 2, or (at your option) any
8later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program; if not, write to the Free Software
Richard Kenner940d9d61995-06-15 07:33:25 -040017Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Per Bothner7f2935c1995-03-16 13:59:07 -080018
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! */
Jeff Law990c6421998-10-08 15:09:20 -060022#ifndef __GCC_CPPLIB__
23#define __GCC_CPPLIB__
Per Bothner7f2935c1995-03-16 13:59:07 -080024
25#include <sys/types.h>
26#include <sys/stat.h>
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
Per Bothner7f2935c1995-03-16 13:59:07 -080032typedef unsigned char U_CHAR;
33
Per Bothner7f2935c1995-03-16 13:59:07 -080034typedef struct cpp_reader cpp_reader;
35typedef struct cpp_buffer cpp_buffer;
36typedef struct cpp_options cpp_options;
37typedef struct hashnode cpp_hashnode;
38
39enum cpp_token {
40 CPP_EOF = -1,
41 CPP_OTHER = 0,
42 CPP_COMMENT = 1,
43 CPP_HSPACE,
44 CPP_VSPACE, /* newlines and #line directives */
45 CPP_NAME,
46 CPP_NUMBER,
47 CPP_CHAR,
48 CPP_STRING,
49 CPP_DIRECTIVE,
50 CPP_LPAREN, /* "(" */
51 CPP_RPAREN, /* ")" */
52 CPP_LBRACE, /* "{" */
53 CPP_RBRACE, /* "}" */
54 CPP_COMMA, /* "," */
55 CPP_SEMICOLON,/* ";" */
56 CPP_3DOTS, /* "..." */
57#if 0
58 CPP_ANDAND, /* "&&" */
59 CPP_OROR, /* "||" */
60 CPP_LSH, /* "<<" */
61 CPP_RSH, /* ">>" */
62 CPP_EQL, /* "==" */
63 CPP_NEQ, /* "!=" */
64 CPP_LEQ, /* "<=" */
65 CPP_GEQ, /* ">=" */
66 CPP_PLPL, /* "++" */
67 CPP_MINMIN, /* "--" */
68#endif
69 /* POP_TOKEN is returned when we've popped a cpp_buffer. */
70 CPP_POP
71};
72
73#ifndef PARAMS
Kaveh R. Ghazi487a6e01998-05-19 08:42:48 +000074#define PARAMS(P) PROTO(P)
Per Bothner7f2935c1995-03-16 13:59:07 -080075#endif /* !PARAMS */
76
Mike Stump0f413021996-07-03 22:07:53 +000077typedef enum cpp_token (*parse_underflow_t) PARAMS((cpp_reader *));
78typedef int (*parse_cleanup_t) PARAMS((cpp_buffer *, cpp_reader *));
Per Bothner7f2935c1995-03-16 13:59:07 -080079
80/* A parse_marker indicates a previous position,
81 which we can backtrack to. */
82
83struct parse_marker {
84 cpp_buffer *buf;
85 struct parse_marker *next;
86 int position;
87};
88
Mike Stump0f413021996-07-03 22:07:53 +000089extern void parse_set_mark PARAMS ((struct parse_marker *, cpp_reader *));
90extern void parse_clear_mark PARAMS ((struct parse_marker *));
91extern void parse_goto_mark PARAMS((struct parse_marker *, cpp_reader *));
92extern void parse_move_mark PARAMS((struct parse_marker *, cpp_reader *));
Per Bothner7f2935c1995-03-16 13:59:07 -080093
Dave Brolleya0d85b71998-06-10 10:12:36 +000094extern int cpp_handle_option PARAMS ((cpp_reader *, int, char **));
Mike Stump0f413021996-07-03 22:07:53 +000095extern int cpp_handle_options PARAMS ((cpp_reader *, int, char **));
Jeff Law31031ed1998-04-03 09:37:26 -070096extern enum cpp_token cpp_get_token PARAMS ((cpp_reader *));
Mike Stump0f413021996-07-03 22:07:53 +000097extern void cpp_skip_hspace PARAMS((cpp_reader *));
Per Bothner7f2935c1995-03-16 13:59:07 -080098extern enum cpp_token cpp_get_non_space_token PARAMS ((cpp_reader *));
99
Per Bothneraf453bb1996-06-05 16:24:48 -0700100/* This frees resources used by PFILE. */
Mike Stump0f413021996-07-03 22:07:53 +0000101extern void cpp_cleanup PARAMS ((cpp_reader *PFILE));
Per Bothner7f2935c1995-03-16 13:59:07 -0800102
103/* Maintain and search list of included files, for #import. */
104
105#define IMPORT_HASH_SIZE 31
106
107struct import_file {
108 char *name;
109 ino_t inode;
110 dev_t dev;
111 struct import_file *next;
112};
113
114/* If we have a huge buffer, may need to cache more recent counts */
115#define CPP_LINE_BASE(BUF) ((BUF)->buf + (BUF)->line_base)
116
117struct cpp_buffer {
118 unsigned char *buf;
119 unsigned char *cur;
120 unsigned char *rlimit; /* end of valid data */
121 unsigned char *alimit; /* end of allocated buffer */
122 unsigned char *prev; /* start of current token */
123
124 char *fname;
125 /* Filename specified with #line command. */
126 char *nominal_fname;
127
128 /* Record where in the search path this file was found.
129 For #include_next. */
130 struct file_name_list *dir;
131
132 long line_base;
133 long lineno; /* Line number at CPP_LINE_BASE. */
134 long colno; /* Column number at CPP_LINE_BASE. */
Per Bothner7f2935c1995-03-16 13:59:07 -0800135 parse_underflow_t underflow;
136 parse_cleanup_t cleanup;
137 void *data;
138 struct parse_marker *marks;
139 /* Value of if_stack at start of this file.
140 Used to prohibit unmatched #endif (etc) in an include file. */
141 struct if_stack *if_stack;
142
143 /* True if this is a header file included using <FILENAME>. */
144 char system_header_p;
145 char seen_eof;
146
147 /* True if buffer contains escape sequences.
Per Bothneraf453bb1996-06-05 16:24:48 -0700148 Currently there are three kinds:
Per Bothner7f2935c1995-03-16 13:59:07 -0800149 "@-" means following identifier should not be macro-expanded.
Per Bothner7e2eb691995-04-30 14:43:12 -0700150 "@ " means a token-separator. This turns into " " in final output
151 if not stringizing and needed to separate tokens; otherwise nothing.
Per Bothner6536dfc1995-05-19 11:20:31 -0700152 "@@" means a normal '@'.
153 (An '@' inside a string stands for itself and is never an escape.) */
Per Bothner7f2935c1995-03-16 13:59:07 -0800154 char has_escapes;
155};
156
157struct cpp_pending; /* Forward declaration - for C++. */
Per Bothner7e2eb691995-04-30 14:43:12 -0700158struct file_name_map_list;
Per Bothner7f2935c1995-03-16 13:59:07 -0800159
160typedef struct assertion_hashnode ASSERTION_HASHNODE;
161#define ASSERTION_HASHSIZE 37
162
Per Bothner7f2935c1995-03-16 13:59:07 -0800163/* Maximum nesting of cpp_buffers. We use a static limit, partly for
164 efficiency, and partly to limit runaway recursion. */
165#define CPP_STACK_MAX 200
Per Bothneraf453bb1996-06-05 16:24:48 -0700166
167/* A cpp_reader encapsulates the "state" of a pre-processor run.
168 Applying cpp_get_token repeatedly yields a stream of pre-processor
169 tokens. Usually, there is only one cpp_reader object active. */
Per Bothner7f2935c1995-03-16 13:59:07 -0800170
171struct cpp_reader {
Per Bothner7f2935c1995-03-16 13:59:07 -0800172 parse_underflow_t get_token;
173 cpp_buffer *buffer;
Per Bothner7f2935c1995-03-16 13:59:07 -0800174 cpp_buffer buffer_stack[CPP_STACK_MAX];
Per Bothner7f2935c1995-03-16 13:59:07 -0800175
176 int errors; /* Error counter for exit code */
Per Bothner7f2935c1995-03-16 13:59:07 -0800177 void *data;
178
Per Bothneraf453bb1996-06-05 16:24:48 -0700179 /* A buffer used for both for cpp_get_token's output, and also internally. */
180 unsigned char *token_buffer;
Jeff Law31031ed1998-04-03 09:37:26 -0700181 /* Allocated size of token_buffer. CPP_RESERVE allocates space. */
Zack Weinbergfaa76591998-10-11 00:05:11 +0000182 unsigned int token_buffer_size;
Per Bothneraf453bb1996-06-05 16:24:48 -0700183 /* End of the written part of token_buffer. */
184 unsigned char *limit;
Per Bothner7f2935c1995-03-16 13:59:07 -0800185
Per Bothner32320501995-05-12 01:13:44 -0700186 /* Line where a newline was first seen in a string constant. */
187 int multiline_string_line;
188
Per Bothner7f2935c1995-03-16 13:59:07 -0800189 /* Current depth in #include directives that use <...>. */
190 int system_include_depth;
191
192 /* List of included files that contained #pragma once. */
193 struct file_name_list *dont_repeat_files;
194
195 /* List of other included files.
196 If ->control_macro if nonzero, the file had a #ifndef
197 around the entire contents, and ->control_macro gives the macro name. */
198 struct file_name_list *all_include_files;
199
200 /* Current maximum length of directory names in the search path
201 for include files. (Altered as we get more of them.) */
202 int max_include_len;
203
204 /* Hash table of files already included with #include or #import. */
205 struct import_file *import_hash_table[IMPORT_HASH_SIZE];
206
207 struct if_stack *if_stack;
208
209 /* Nonzero means we are inside an IF during a -pcp run. In this mode
210 macro expansion is done, and preconditions are output for all macro
211 uses requiring them. */
212 char pcp_inside_if;
213
214 /* Nonzero means we have printed (while error reporting) a list of
215 containing files that matches the current status. */
216 char input_stack_listing_current;
217
218 /* If non-zero, macros are not expanded. */
219 char no_macro_expand;
220
221 /* Print column number in error messages. */
222 char show_column;
223
224 /* We're printed a warning recommending against using #import. */
225 char import_warning;
226
227 /* If true, character between '<' and '>' are a single (string) token. */
228 char parsing_include_directive;
229
230 /* True if escape sequences (as described for has_escapes in
231 parse_buffer) should be emitted. */
232 char output_escapes;
233
234 /* 0: Have seen non-white-space on this line.
235 1: Only seen white space so far on this line.
236 2: Only seen white space so far in this file. */
237 char only_seen_white;
238
239 /* Nonzero means this file was included with a -imacros or -include
240 command line and should not be recorded as an include file. */
241
242 int no_record_file;
243
244 long lineno;
245
246 struct tm *timebuf;
247
248 ASSERTION_HASHNODE *assertion_hashtab[ASSERTION_HASHSIZE];
249
250 /* Buffer of -M output. */
251 char *deps_buffer;
252
253 /* Number of bytes allocated in above. */
254 int deps_allocated_size;
255
256 /* Number of bytes used. */
257 int deps_size;
258
259 /* Number of bytes since the last newline. */
260 int deps_column;
Per Bothneraf453bb1996-06-05 16:24:48 -0700261
262#ifdef __cplusplus
263 ~cpp_reader () { cpp_cleanup (this); }
264#endif
Per Bothner7f2935c1995-03-16 13:59:07 -0800265};
266
Per Bothner194d7491996-06-06 20:04:04 -0700267#define CPP_FATAL_LIMIT 1000
268/* True if we have seen a "fatal" error. */
269#define CPP_FATAL_ERRORS(READER) ((READER)->errors >= CPP_FATAL_LIMIT)
270
Per Bothner7f2935c1995-03-16 13:59:07 -0800271#define CPP_BUF_PEEK(BUFFER) \
272 ((BUFFER)->cur < (BUFFER)->rlimit ? *(BUFFER)->cur : EOF)
273#define CPP_BUF_GET(BUFFER) \
274 ((BUFFER)->cur < (BUFFER)->rlimit ? *(BUFFER)->cur++ : EOF)
275#define CPP_FORWARD(BUFFER, N) ((BUFFER)->cur += (N))
276
Per Bothner194d7491996-06-06 20:04:04 -0700277/* Macros for manipulating the token_buffer. */
278
279#define CPP_OUT_BUFFER(PFILE) ((PFILE)->token_buffer)
280
Per Bothner7f2935c1995-03-16 13:59:07 -0800281/* Number of characters currently in PFILE's output buffer. */
Zack Weinbergfaa76591998-10-11 00:05:11 +0000282#define CPP_WRITTEN(PFILE) ((size_t)((PFILE)->limit - (PFILE)->token_buffer))
Per Bothner7f2935c1995-03-16 13:59:07 -0800283#define CPP_PWRITTEN(PFILE) ((PFILE)->limit)
284
285/* Make sure PFILE->token_buffer has space for at least N more characters. */
286#define CPP_RESERVE(PFILE, N) \
Zack Weinbergfaa76591998-10-11 00:05:11 +0000287 (CPP_WRITTEN (PFILE) + (size_t)(N) > (PFILE)->token_buffer_size \
Per Bothner7f2935c1995-03-16 13:59:07 -0800288 && (cpp_grow_buffer (PFILE, N), 0))
289
290/* Append string STR (of length N) to PFILE's output buffer.
291 Assume there is enough space. */
292#define CPP_PUTS_Q(PFILE, STR, N) \
293 (bcopy (STR, (PFILE)->limit, (N)), (PFILE)->limit += (N))
294/* Append string STR (of length N) to PFILE's output buffer. Make space. */
295#define CPP_PUTS(PFILE, STR, N) CPP_RESERVE(PFILE, N), CPP_PUTS_Q(PFILE, STR,N)
296/* Append character CH to PFILE's output buffer. Assume sufficient space. */
297#define CPP_PUTC_Q(PFILE, CH) (*(PFILE)->limit++ = (CH))
298/* Append character CH to PFILE's output buffer. Make space if need be. */
299#define CPP_PUTC(PFILE, CH) (CPP_RESERVE (PFILE, 1), CPP_PUTC_Q (PFILE, CH))
300/* Make sure PFILE->limit is followed by '\0'. */
301#define CPP_NUL_TERMINATE_Q(PFILE) (*(PFILE)->limit = 0)
302#define CPP_NUL_TERMINATE(PFILE) (CPP_RESERVE(PFILE, 1), *(PFILE)->limit = 0)
303#define CPP_ADJUST_WRITTEN(PFILE,DELTA) ((PFILE)->limit += (DELTA))
304#define CPP_SET_WRITTEN(PFILE,N) ((PFILE)->limit = (PFILE)->token_buffer + (N))
305
Mike Stump0f413021996-07-03 22:07:53 +0000306#define CPP_OPTIONS(PFILE) ((cpp_options *) (PFILE)->data)
Per Bothner194d7491996-06-06 20:04:04 -0700307
Per Bothner7f2935c1995-03-16 13:59:07 -0800308#define CPP_BUFFER(PFILE) ((PFILE)->buffer)
Per Bothner7f2935c1995-03-16 13:59:07 -0800309#define CPP_PREV_BUFFER(BUFFER) ((BUFFER)+1)
Per Bothner194d7491996-06-06 20:04:04 -0700310/* The bottom of the buffer stack. */
Per Bothner7f2935c1995-03-16 13:59:07 -0800311#define CPP_NULL_BUFFER(PFILE) (&(PFILE)->buffer_stack[CPP_STACK_MAX])
Per Bothner7f2935c1995-03-16 13:59:07 -0800312
Per Bothneraf453bb1996-06-05 16:24:48 -0700313/* Pointed to by cpp_reader::data. */
Per Bothner7f2935c1995-03-16 13:59:07 -0800314struct cpp_options {
315 char *in_fname;
316
317 /* Name of output file, for error messages. */
318 char *out_fname;
319
Per Bothner7e2eb691995-04-30 14:43:12 -0700320 struct file_name_map_list *map_list;
321
Per Bothner7f2935c1995-03-16 13:59:07 -0800322 /* Non-0 means -v, so print the full set of include dirs. */
323 char verbose;
324
325 /* Nonzero means use extra default include directories for C++. */
326
327 char cplusplus;
328
329 /* Nonzero means handle cplusplus style comments */
330
331 char cplusplus_comments;
332
333 /* Nonzero means handle #import, for objective C. */
334
335 char objc;
336
337 /* Nonzero means this is an assembly file, and allow
338 unknown directives, which could be comments. */
339
340 int lang_asm;
341
342 /* Nonzero means turn NOTREACHED into #pragma NOTREACHED etc */
343
344 char for_lint;
345
346 /* Nonzero means handle CHILL comment syntax
Richard Kennerddd5a7c1995-05-16 08:14:26 -0400347 and output CHILL string delimiter for __DATE___ etc. */
Per Bothner7f2935c1995-03-16 13:59:07 -0800348
349 char chill;
350
351 /* Nonzero means copy comments into the output file. */
352
353 char put_out_comments;
354
355 /* Nonzero means don't process the ANSI trigraph sequences. */
356
357 char no_trigraphs;
358
359 /* Nonzero means print the names of included files rather than
360 the preprocessed output. 1 means just the #include "...",
361 2 means #include <...> as well. */
362
363 char print_deps;
364
365 /* Nonzero if missing .h files in -M output are assumed to be generated
366 files and not errors. */
367
368 char print_deps_missing_files;
369
370 /* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */
371 char print_deps_append;
372
373 /* Nonzero means print names of header files (-H). */
374
375 char print_include_names;
376
377 /* Nonzero means try to make failure to fit ANSI C an error. */
378
379 char pedantic_errors;
380
381 /* Nonzero means don't print warning messages. -w. */
382
383 char inhibit_warnings;
384
385 /* Nonzero means warn if slash-star appears in a comment. */
386
387 char warn_comments;
388
389 /* Nonzero means warn if there are any trigraphs. */
390
391 char warn_trigraphs;
392
393 /* Nonzero means warn if #import is used. */
394
395 char warn_import;
396
397 /* Nonzero means warn if a macro argument is (or would be)
398 stringified with -traditional. */
399
400 char warn_stringify;
401
402 /* Nonzero means turn warnings into errors. */
403
404 char warnings_are_errors;
405
406 /* Nonzero causes output not to be done,
407 but directives such as #define that have side effects
408 are still obeyed. */
409
410 char no_output;
411
Jeff Law31031ed1998-04-03 09:37:26 -0700412 /* Nonzero means we should look for header.gcc files that remap file
413 names. */
414 char remap;
415
Per Bothner7f2935c1995-03-16 13:59:07 -0800416 /* Nonzero means don't output line number information. */
417
418 char no_line_commands;
419
420/* Nonzero means output the text in failing conditionals,
421 inside #failed ... #endfailed. */
422
423 char output_conditionals;
424
425 /* Nonzero means -I- has been seen,
426 so don't look for #include "foo" the source-file directory. */
427 char ignore_srcdir;
428
Richard Kenner99740981996-10-09 16:26:20 -0400429 /* Zero means dollar signs are punctuation.
430 This used to be needed for conformance to the C Standard,
431 before the C Standard was corrected. */
Per Bothner7f2935c1995-03-16 13:59:07 -0800432 char dollars_in_ident;
Per Bothner7f2935c1995-03-16 13:59:07 -0800433
434 /* Nonzero means try to imitate old fashioned non-ANSI preprocessor. */
435 char traditional;
436
Richard Kenner6ac34fd1997-04-13 12:50:11 -0400437 /* Nonzero means warn if undefined identifiers are evaluated in an #if. */
438 char warn_undef;
439
Richard Kenner76e80421997-03-19 16:58:58 -0500440 /* Nonzero for the 1989 C Standard, including corrigenda and amendments. */
441 char c89;
442
Per Bothner7f2935c1995-03-16 13:59:07 -0800443 /* Nonzero means give all the error messages the ANSI standard requires. */
444 char pedantic;
445
446 char done_initializing;
447
448 struct file_name_list *include; /* First dir to search */
449 /* First dir to search for <file> */
450 /* This is the first element to use for #include <...>.
451 If it is 0, use the entire chain for such includes. */
452 struct file_name_list *first_bracket_include;
453 /* This is the first element in the chain that corresponds to
454 a directory of system header files. */
455 struct file_name_list *first_system_include;
456 struct file_name_list *last_include; /* Last in chain */
457
458 /* Chain of include directories to put at the end of the other chain. */
459 struct file_name_list *after_include;
460 struct file_name_list *last_after_include; /* Last in chain */
461
462 /* Chain to put at the start of the system include files. */
463 struct file_name_list *before_system;
464 struct file_name_list *last_before_system; /* Last in chain */
465
466 /* Directory prefix that should replace `/usr' in the standard
467 include file directories. */
468 char *include_prefix;
469
470 char inhibit_predefs;
471 char no_standard_includes;
472 char no_standard_cplusplus_includes;
473
474/* dump_only means inhibit output of the preprocessed text
475 and instead output the definitions of all user-defined
476 macros in a form suitable for use as input to cccp.
477 dump_names means pass #define and the macro name through to output.
478 dump_definitions means pass the whole definition (plus #define) through
479*/
480
481 enum {dump_none = 0, dump_only, dump_names, dump_definitions}
482 dump_macros;
483
484/* Nonzero means pass all #define and #undef directives which we actually
485 process through to the output stream. This feature is used primarily
486 to allow cc1 to record the #defines and #undefs for the sake of
487 debuggers which understand about preprocessor macros, but it may
488 also be useful with -E to figure out how symbols are defined, and
489 where they are defined. */
490 int debug_output;
491
Jeff Law31031ed1998-04-03 09:37:26 -0700492 /* Nonzero means pass #include lines through to the output,
493 even if they are ifdefed out. */
494 int dump_includes;
495
Per Bothner7f2935c1995-03-16 13:59:07 -0800496 /* Pending -D, -U and -A options, in reverse order. */
497 struct cpp_pending *pending;
498
499 /* File name which deps are being written to.
500 This is 0 if deps are being written to stdout. */
501 char *deps_file;
502
503 /* Target-name to write with the dependency information. */
504 char *deps_target;
505};
506
507#define CPP_TRADITIONAL(PFILE) (CPP_OPTIONS(PFILE)-> traditional)
Richard Kenner6ac34fd1997-04-13 12:50:11 -0400508#define CPP_WARN_UNDEF(PFILE) (CPP_OPTIONS(PFILE)->warn_undef)
Richard Kenner76e80421997-03-19 16:58:58 -0500509#define CPP_C89(PFILE) (CPP_OPTIONS(PFILE)->c89)
Per Bothner7f2935c1995-03-16 13:59:07 -0800510#define CPP_PEDANTIC(PFILE) (CPP_OPTIONS (PFILE)->pedantic)
511#define CPP_PRINT_DEPS(PFILE) (CPP_OPTIONS (PFILE)->print_deps)
512
Zack Weinbergadd70911998-10-29 11:54:13 +0000513struct file_name_list
514 {
515 struct file_name_list *next;
516 char *fname;
517 /* If the following is nonzero, it is a macro name.
518 Don't include the file again if that macro is defined. */
519 U_CHAR *control_macro;
520 /* If the following is nonzero, it is a C-language system include
521 directory. */
522 int c_system_include_path;
523 /* Mapping of file names for this directory. */
524 struct file_name_map *name_map;
525 /* Non-zero if name_map is valid. */
526 int got_name_map;
527 };
528
529/* If a buffer's dir field is SELF_DIR_DUMMY, it means the file was found
530 via the same directory as the file that #included it. */
531#define SELF_DIR_DUMMY ((struct file_name_list *) (~0))
532
533
Per Bothner7f2935c1995-03-16 13:59:07 -0800534/* Name under which this program was invoked. */
535
536extern char *progname;
537
538/* The structure of a node in the hash table. The hash table
539 has entries for all tokens defined by #define commands (type T_MACRO),
540 plus some special tokens like __LINE__ (these each have their own
541 type, and the appropriate code is run when that type of node is seen.
542 It does not contain control words like "#define", which are recognized
543 by a separate piece of code. */
544
545/* different flavors of hash nodes --- also used in keyword table */
546enum node_type {
547 T_DEFINE = 1, /* the `#define' keyword */
548 T_INCLUDE, /* the `#include' keyword */
549 T_INCLUDE_NEXT, /* the `#include_next' keyword */
550 T_IMPORT, /* the `#import' keyword */
551 T_IFDEF, /* the `#ifdef' keyword */
552 T_IFNDEF, /* the `#ifndef' keyword */
553 T_IF, /* the `#if' keyword */
554 T_ELSE, /* `#else' */
555 T_PRAGMA, /* `#pragma' */
556 T_ELIF, /* `#elif' */
557 T_UNDEF, /* `#undef' */
558 T_LINE, /* `#line' */
559 T_ERROR, /* `#error' */
560 T_WARNING, /* `#warning' */
561 T_ENDIF, /* `#endif' */
562 T_SCCS, /* `#sccs', used on system V. */
563 T_IDENT, /* `#ident', used on system V. */
564 T_ASSERT, /* `#assert', taken from system V. */
565 T_UNASSERT, /* `#unassert', taken from system V. */
566 T_SPECLINE, /* special symbol `__LINE__' */
567 T_DATE, /* `__DATE__' */
568 T_FILE, /* `__FILE__' */
569 T_BASE_FILE, /* `__BASE_FILE__' */
570 T_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */
571 T_VERSION, /* `__VERSION__' */
572 T_SIZE_TYPE, /* `__SIZE_TYPE__' */
573 T_PTRDIFF_TYPE, /* `__PTRDIFF_TYPE__' */
574 T_WCHAR_TYPE, /* `__WCHAR_TYPE__' */
575 T_USER_LABEL_PREFIX_TYPE, /* `__USER_LABEL_PREFIX__' */
576 T_REGISTER_PREFIX_TYPE, /* `__REGISTER_PREFIX__' */
577 T_TIME, /* `__TIME__' */
578 T_CONST, /* Constant value, used by `__STDC__' */
579 T_MACRO, /* macro defined by `#define' */
580 T_DISABLED, /* macro temporarily turned off for rescan */
581 T_SPEC_DEFINED, /* special `defined' macro for use in #if statements */
582 T_PCSTRING, /* precompiled string (hashval is KEYDEF *) */
583 T_UNUSED /* Used for something not defined. */
584 };
585
586/* Structure returned by create_definition */
587typedef struct macrodef MACRODEF;
588struct macrodef
589{
590 struct definition *defn;
Per Bothneraf453bb1996-06-05 16:24:48 -0700591 unsigned char *symnam;
Per Bothner7f2935c1995-03-16 13:59:07 -0800592 int symlen;
593};
594
595/* Structure allocated for every #define. For a simple replacement
596 such as
597 #define foo bar ,
598 nargs = -1, the `pattern' list is null, and the expansion is just
599 the replacement text. Nargs = 0 means a functionlike macro with no args,
600 e.g.,
601 #define getchar() getc (stdin) .
602 When there are args, the expansion is the replacement text with the
603 args squashed out, and the reflist is a list describing how to
604 build the output from the input: e.g., "3 chars, then the 1st arg,
605 then 9 chars, then the 3rd arg, then 0 chars, then the 2nd arg".
606 The chars here come from the expansion. Whatever is left of the
607 expansion after the last arg-occurrence is copied after that arg.
608 Note that the reflist can be arbitrarily long---
609 its length depends on the number of times the arguments appear in
610 the replacement text, not how many args there are. Example:
611 #define f(x) x+x+x+x+x+x+x would have replacement text "++++++" and
612 pattern list
613 { (0, 1), (1, 1), (1, 1), ..., (1, 1), NULL }
614 where (x, y) means (nchars, argno). */
615
616typedef struct definition DEFINITION;
617struct definition {
618 int nargs;
619 int length; /* length of expansion string */
620 int predefined; /* True if the macro was builtin or */
621 /* came from the command line */
Per Bothneraf453bb1996-06-05 16:24:48 -0700622 unsigned char *expansion;
Per Bothner7f2935c1995-03-16 13:59:07 -0800623 int line; /* Line number of definition */
624 char *file; /* File of definition */
625 char rest_args; /* Nonzero if last arg. absorbs the rest */
626 struct reflist {
627 struct reflist *next;
628 char stringify; /* nonzero if this arg was preceded by a
629 # operator. */
630 char raw_before; /* Nonzero if a ## operator before arg. */
631 char raw_after; /* Nonzero if a ## operator after arg. */
632 char rest_args; /* Nonzero if this arg. absorbs the rest */
633 int nchars; /* Number of literal chars to copy before
634 this arg occurrence. */
635 int argno; /* Number of arg to substitute (origin-0) */
636 } *pattern;
637 union {
638 /* Names of macro args, concatenated in reverse order
639 with comma-space between them.
640 The only use of this is that we warn on redefinition
641 if this differs between the old and new definitions. */
Per Bothneraf453bb1996-06-05 16:24:48 -0700642 unsigned char *argnames;
Per Bothner7f2935c1995-03-16 13:59:07 -0800643 } args;
644};
645
Per Bothneraf453bb1996-06-05 16:24:48 -0700646extern unsigned char is_idchar[256];
Zack Weinbergadd70911998-10-29 11:54:13 +0000647extern unsigned char is_hor_space[256];
648extern unsigned char is_space[256];
Per Bothner7f2935c1995-03-16 13:59:07 -0800649
650/* Stack of conditionals currently in progress
651 (including both successful and failing conditionals). */
652
653struct if_stack {
654 struct if_stack *next; /* for chaining to the next stack frame */
655 char *fname; /* copied from input when frame is made */
656 int lineno; /* similarly */
657 int if_succeeded; /* true if a leg of this if-group
658 has been passed through rescan */
Per Bothneraf453bb1996-06-05 16:24:48 -0700659 unsigned char *control_macro; /* For #ifndef at start of file,
Per Bothner7f2935c1995-03-16 13:59:07 -0800660 this is the macro name tested. */
661 enum node_type type; /* type of last directive seen in this group */
662};
663typedef struct if_stack IF_STACK_FRAME;
664
Mike Stump0f413021996-07-03 22:07:53 +0000665extern void cpp_buf_line_and_col PARAMS((cpp_buffer *, long *, long *));
666extern cpp_buffer* cpp_file_buffer PARAMS((cpp_reader *));
667extern void cpp_define PARAMS ((cpp_reader*, unsigned char *));
Per Bothner7f2935c1995-03-16 13:59:07 -0800668
Kaveh R. Ghazi487a6e01998-05-19 08:42:48 +0000669extern void cpp_error PVPROTO ((cpp_reader *, const char *, ...))
670 ATTRIBUTE_PRINTF_2;
671extern void cpp_warning PVPROTO ((cpp_reader *, const char *, ...))
672 ATTRIBUTE_PRINTF_2;
673extern void cpp_pedwarn PVPROTO ((cpp_reader *, const char *, ...))
674 ATTRIBUTE_PRINTF_2;
675extern void cpp_error_with_line PVPROTO ((cpp_reader *, int, int, const char *, ...))
676 ATTRIBUTE_PRINTF_4;
677extern void cpp_pedwarn_with_line PVPROTO ((cpp_reader *, int, int, const char *, ...))
678 ATTRIBUTE_PRINTF_4;
679extern void cpp_pedwarn_with_file_and_line PVPROTO ((cpp_reader *, char *, int, const char *, ...))
680 ATTRIBUTE_PRINTF_4;
Dave Brolleyd2f8cff1998-06-23 13:51:33 +0000681extern void cpp_message_from_errno PROTO ((cpp_reader *, int, const char *));
Kaveh R. Ghazi487a6e01998-05-19 08:42:48 +0000682extern void cpp_error_from_errno PROTO ((cpp_reader *, const char *));
683extern void cpp_perror_with_name PROTO ((cpp_reader *, const char *));
Dave Brolley33b019a1998-05-25 11:04:40 +0000684extern void v_cpp_message PROTO ((cpp_reader *, int, const char *, va_list));
Per Bothner7f2935c1995-03-16 13:59:07 -0800685
Mike Stump0f413021996-07-03 22:07:53 +0000686extern void cpp_grow_buffer PARAMS ((cpp_reader *, long));
687extern int cpp_parse_escape PARAMS ((cpp_reader *, char **));
688extern cpp_buffer *cpp_push_buffer PARAMS ((cpp_reader *,
689 unsigned char *, long));
690extern cpp_buffer *cpp_pop_buffer PARAMS ((cpp_reader *));
Per Bothner7f2935c1995-03-16 13:59:07 -0800691
Mike Stump0f413021996-07-03 22:07:53 +0000692extern cpp_hashnode *cpp_lookup PARAMS ((cpp_reader *, const unsigned char *,
Per Bothner7f2935c1995-03-16 13:59:07 -0800693 int, int));
Kaveh R. Ghazid6f4ec51998-05-13 12:40:39 +0000694extern void cpp_reader_init PARAMS ((cpp_reader *));
695extern void cpp_options_init PARAMS ((cpp_options *));
696extern int cpp_start_read PARAMS ((cpp_reader *, char *));
697extern int cpp_read_check_assertion PARAMS ((cpp_reader *));
Kaveh R. Ghazi487a6e01998-05-19 08:42:48 +0000698extern int scan_decls PARAMS ((cpp_reader *, int, char **));
Kaveh R. Ghazid6f4ec51998-05-13 12:40:39 +0000699extern void skip_rest_of_line PARAMS ((cpp_reader *));
Kaveh R. Ghazi487a6e01998-05-19 08:42:48 +0000700extern void cpp_finish PARAMS ((cpp_reader *));
701
702/* From cpperror.c */
703extern void cpp_fatal PVPROTO ((cpp_reader *, const char *, ...))
704 ATTRIBUTE_PRINTF_2;
705extern void cpp_message PVPROTO ((cpp_reader *, int, const char *, ...))
706 ATTRIBUTE_PRINTF_3;
707extern void cpp_pfatal_with_name PROTO ((cpp_reader *, const char *));
708extern void cpp_file_line_for_message PROTO ((cpp_reader *, char *, int, int));
709extern void cpp_print_containing_files PROTO ((cpp_reader *));
Per Bothner7f2935c1995-03-16 13:59:07 -0800710
Zack Weinbergadd70911998-10-29 11:54:13 +0000711/* In cppfiles.c */
712extern void append_include_chain PROTO ((cpp_reader *,
713 struct file_name_list *,
714 struct file_name_list *));
715extern int finclude PROTO ((cpp_reader *, int, char *,
716 int, struct file_name_list *));
717extern int find_include_file PROTO ((cpp_reader *, char *,
718 unsigned long, char *, int,
719 struct file_name_list *,
720 struct file_name_list **));
721extern void deps_output PROTO ((cpp_reader *, char *, int));
722
723/* Bleargh. */
724extern char *savestring PROTO ((char *));
725#ifndef INCLUDE_LEN_FUDGE
726#define INCLUDE_LEN_FUDGE 0
727#endif
728
729
Per Bothner7f2935c1995-03-16 13:59:07 -0800730#ifdef __cplusplus
731}
732#endif
Jeff Law990c6421998-10-08 15:09:20 -0600733#endif /* __GCC_CPPLIB__ */
734