source: trunk/third/gcc/gcc/cpphash.h @ 18474

Revision 18474, 15.4 KB checked in by ghudson, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18473, which included commits to RCS files with non-trunk default branches.
Line 
1/* Part of CPP library.
2   Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
3   Free Software Foundation, Inc.
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
17Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
18
19/* This header defines all the internal data structures and functions
20   that need to be visible across files.  It's called cpphash.h for
21   historical reasons.  */
22
23#ifndef GCC_CPPHASH_H
24#define GCC_CPPHASH_H
25
26#include "hashtable.h"
27
28struct directive;               /* Deliberately incomplete.  */
29
30/* Test if a sign is valid within a preprocessing number.  */
31#define VALID_SIGN(c, prevc) \
32  (((c) == '+' || (c) == '-') && \
33   ((prevc) == 'e' || (prevc) == 'E' \
34    || (((prevc) == 'p' || (prevc) == 'P') \
35        && CPP_OPTION (pfile, extended_numbers))))
36
37#define CPP_OPTION(PFILE, OPTION) ((PFILE)->opts.OPTION)
38#define CPP_BUFFER(PFILE) ((PFILE)->buffer)
39#define CPP_BUF_COLUMN(BUF, CUR) ((CUR) - (BUF)->line_base + (BUF)->col_adjust)
40#define CPP_BUF_COL(BUF) CPP_BUF_COLUMN(BUF, (BUF)->cur)
41
42/* Maximum nesting of cpp_buffers.  We use a static limit, partly for
43   efficiency, and partly to limit runaway recursion.  */
44#define CPP_STACK_MAX 200
45
46/* A generic memory buffer, and operations on it.  */
47typedef struct _cpp_buff _cpp_buff;
48struct _cpp_buff
49{
50  struct _cpp_buff *next;
51  unsigned char *base, *cur, *limit;
52};
53
54extern _cpp_buff *_cpp_get_buff PARAMS ((cpp_reader *, size_t));
55extern void _cpp_release_buff PARAMS ((cpp_reader *, _cpp_buff *));
56extern void _cpp_extend_buff PARAMS ((cpp_reader *, _cpp_buff **, size_t));
57extern _cpp_buff *_cpp_append_extend_buff PARAMS ((cpp_reader *, _cpp_buff *,
58                                                   size_t));
59extern void _cpp_free_buff PARAMS ((_cpp_buff *));
60extern unsigned char *_cpp_aligned_alloc PARAMS ((cpp_reader *, size_t));
61extern unsigned char *_cpp_unaligned_alloc PARAMS ((cpp_reader *, size_t));
62
63#define BUFF_ROOM(BUFF) (size_t) ((BUFF)->limit - (BUFF)->cur)
64#define BUFF_FRONT(BUFF) ((BUFF)->cur)
65#define BUFF_LIMIT(BUFF) ((BUFF)->limit)
66
67/* List of directories to look for include files in.  */
68struct search_path
69{
70  struct search_path *next;
71
72  /* NOTE: NAME may not be null terminated for the case of the current
73     file's directory!  */
74  const char *name;
75  unsigned int len;
76  /* We use these to tell if the directory mentioned here is a duplicate
77     of an earlier directory on the search path.  */
78  ino_t ino;
79  dev_t dev;
80  /* Non-zero if it is a system include directory.  */
81  int sysp;
82  /* Mapping of file names for this directory.  Only used on MS-DOS
83     and related platforms.  */
84  struct file_name_map *name_map;
85};
86
87/* #include types.  */
88enum include_type {IT_INCLUDE, IT_INCLUDE_NEXT, IT_IMPORT, IT_CMDLINE};
89
90union utoken
91{
92  const cpp_token *token;
93  const cpp_token **ptoken;
94};
95
96/* A "run" of tokens; part of a chain of runs.  */
97typedef struct tokenrun tokenrun;
98struct tokenrun
99{
100  tokenrun *next, *prev;
101  cpp_token *base, *limit;
102};
103
104typedef struct cpp_context cpp_context;
105struct cpp_context
106{
107  /* Doubly-linked list.  */
108  cpp_context *next, *prev;
109
110  /* Contexts other than the base context are contiguous tokens.
111     e.g. macro expansions, expanded argument tokens.  */
112  union utoken first;
113  union utoken last;
114
115  /* If non-NULL, a buffer used for storage related to this context.
116     When the context is popped, the buffer is released.  */
117  _cpp_buff *buff;
118
119  /* For a macro context, the macro node, otherwise NULL.  */
120  cpp_hashnode *macro;
121
122  /* True if utoken element is token, else ptoken.  */
123  bool direct_p;
124};
125
126struct lexer_state
127{
128  /* Nonzero if first token on line is CPP_HASH.  */
129  unsigned char in_directive;
130
131  /* True if we are skipping a failed conditional group.  */
132  unsigned char skipping;
133
134  /* Nonzero if in a directive that takes angle-bracketed headers.  */
135  unsigned char angled_headers;
136
137  /* Nonzero to save comments.  Turned off if discard_comments, and in
138     all directives apart from #define.  */
139  unsigned char save_comments;
140
141  /* Nonzero if we're mid-comment.  */
142  unsigned char lexing_comment;
143
144  /* Nonzero if lexing __VA_ARGS__ is valid.  */
145  unsigned char va_args_ok;
146
147  /* Nonzero if lexing poisoned identifiers is valid.  */
148  unsigned char poisoned_ok;
149
150  /* Nonzero to prevent macro expansion.  */
151  unsigned char prevent_expansion; 
152
153  /* Nonzero when parsing arguments to a function-like macro.  */
154  unsigned char parsing_args;
155};
156
157/* Special nodes - identifiers with predefined significance.  */
158struct spec_nodes
159{
160  cpp_hashnode *n_defined;              /* defined operator */
161  cpp_hashnode *n_true;                 /* C++ keyword true */
162  cpp_hashnode *n_false;                /* C++ keyword false */
163  cpp_hashnode *n__STRICT_ANSI__;       /* STDC_0_IN_SYSTEM_HEADERS */
164  cpp_hashnode *n__VA_ARGS__;           /* C99 vararg macros */
165};
166
167/* Represents the contents of a file cpplib has read in.  */
168struct cpp_buffer
169{
170  const unsigned char *cur;      /* current position */
171  const unsigned char *backup_to; /* if peeked character is not wanted */
172  const unsigned char *rlimit; /* end of valid data */
173  const unsigned char *line_base; /* start of current line */
174
175  struct cpp_buffer *prev;
176
177  const unsigned char *buf;      /* Entire character buffer.  */
178
179  /* Pointer into the include table; non-NULL if this is a file
180     buffer.  Used for include_next and to record control macros.  */
181  struct include_file *inc;
182
183  /* Value of if_stack at start of this file.
184     Used to prohibit unmatched #endif (etc) in an include file.  */
185  struct if_stack *if_stack;
186
187  /* Token column position adjustment owing to tabs in whitespace.  */
188  unsigned int col_adjust;
189
190  /* Contains PREV_WHITE and/or AVOID_LPASTE.  */
191  unsigned char saved_flags;
192
193  /* Because of the way the lexer works, -Wtrigraphs can sometimes
194     warn twice for the same trigraph.  This helps prevent that.  */
195  const unsigned char *last_Wtrigraphs;
196
197  /* True if we have already warned about C++ comments in this file.
198     The warning happens only for C89 extended mode with -pedantic on,
199     or for -Wtraditional, and only once per file (otherwise it would
200     be far too noisy).  */
201  unsigned char warned_cplusplus_comments;
202
203  /* True if we don't process trigraphs and escaped newlines.  True
204     for preprocessed input, command line directives, and _Pragma
205     buffers.  */
206  unsigned char from_stage3;
207
208  /* Nonzero means that the directory to start searching for ""
209     include files has been calculated and stored in "dir" below.  */
210  unsigned char search_cached;
211
212  /* At EOF, a buffer is automatically popped.  If RETURN_AT_EOF is
213     true, a CPP_EOF token is then returned.  Otherwise, the next
214     token from the enclosing buffer is returned.  */
215  bool return_at_eof;
216
217  /* The directory of the this buffer's file.  Its NAME member is not
218     allocated, so we don't need to worry about freeing it.  */
219  struct search_path dir;
220};
221
222/* A cpp_reader encapsulates the "state" of a pre-processor run.
223   Applying cpp_get_token repeatedly yields a stream of pre-processor
224   tokens.  Usually, there is only one cpp_reader object active.  */
225struct cpp_reader
226{
227  /* Top of buffer stack.  */
228  cpp_buffer *buffer;
229
230  /* Lexer state.  */
231  struct lexer_state state;
232
233  /* Source line tracking.  */
234  struct line_maps line_maps;
235  const struct line_map *map;
236  unsigned int line;
237
238  /* The line of the '#' of the current directive.  */
239  unsigned int directive_line;
240
241  /* Memory buffers.  */
242  _cpp_buff *a_buff;            /* Aligned permanent storage.  */
243  _cpp_buff *u_buff;            /* Unaligned permanent storage.  */
244  _cpp_buff *free_buffs;        /* Free buffer chain.  */
245
246  /* Context stack.  */
247  struct cpp_context base_context;
248  struct cpp_context *context;
249
250  /* If in_directive, the directive if known.  */
251  const struct directive *directive;
252
253  /* Multiple inlcude optimisation.  */
254  const cpp_hashnode *mi_cmacro;
255  const cpp_hashnode *mi_ind_cmacro;
256  bool mi_valid;
257
258  /* Lexing.  */
259  cpp_token *cur_token;
260  tokenrun base_run, *cur_run;
261  unsigned int lookaheads;
262
263  /* Non-zero prevents the lexer from re-using the token runs.  */
264  unsigned int keep_tokens;
265
266  /* Error counter for exit code.  */
267  unsigned int errors;
268
269  /* Line and column where a newline was first seen in a string
270     constant (multi-line strings).  */
271  unsigned int mls_line;
272  unsigned int mls_col;
273
274  /* Buffer to hold macro definition string.  */
275  unsigned char *macro_buffer;
276  unsigned int macro_buffer_len;
277
278  /* Tree of other included files.  See cppfiles.c.  */
279  struct splay_tree_s *all_include_files;
280
281  /* Current maximum length of directory names in the search path
282     for include files.  (Altered as we get more of them.)  */
283  unsigned int max_include_len;
284
285  /* Date and time tokens.  Calculated together if either is requested.  */
286  cpp_token date;
287  cpp_token time;
288
289  /* EOF token, and a token forcing paste avoidance.  */
290  cpp_token avoid_paste;
291  cpp_token eof;
292
293  /* Opaque handle to the dependencies of mkdeps.c.  Used by -M etc.  */
294  struct deps *deps;
295
296  /* Obstack holding all macro hash nodes.  This never shrinks.
297     See cpphash.c */
298  struct obstack hash_ob;
299
300  /* Obstack holding buffer and conditional structures.  This is a
301     real stack.  See cpplib.c.  */
302  struct obstack buffer_ob;
303
304  /* Pragma table - dynamic, because a library user can add to the
305     list of recognized pragmas.  */
306  struct pragma_entry *pragmas;
307
308  /* Call backs.  */
309  struct cpp_callbacks cb;
310
311  /* Identifier hash table.  */
312  struct ht *hash_table;
313
314  /* User visible options.  */
315  struct cpp_options opts;
316
317  /* Special nodes - identifiers with predefined significance to the
318     preprocessor.  */
319  struct spec_nodes spec_nodes;
320
321  /* Whether to print our version number.  Done this way so
322     we don't get it twice for -v -version.  */
323  unsigned char print_version;
324
325  /* Whether cpplib owns the hashtable.  */
326  unsigned char our_hashtable;
327};
328
329/* Character classes.  Based on the more primitive macros in safe-ctype.h.
330   If the definition of `numchar' looks odd to you, please look up the
331   definition of a pp-number in the C standard [section 6.4.8 of C99].
332
333   In the unlikely event that characters other than \r and \n enter
334   the set is_vspace, the macro handle_newline() in cpplex.c must be
335   updated.  */
336#define _dollar_ok(x)   ((x) == '$' && CPP_OPTION (pfile, dollars_in_ident))
337
338#define is_idchar(x)    (ISIDNUM(x) || _dollar_ok(x))
339#define is_numchar(x)   ISIDNUM(x)
340#define is_idstart(x)   (ISIDST(x) || _dollar_ok(x))
341#define is_numstart(x)  ISDIGIT(x)
342#define is_hspace(x)    ISBLANK(x)
343#define is_vspace(x)    IS_VSPACE(x)
344#define is_nvspace(x)   IS_NVSPACE(x)
345#define is_space(x)     IS_SPACE_OR_NUL(x)
346
347/* This table is constant if it can be initialized at compile time,
348   which is the case if cpp was compiled with GCC >=2.7, or another
349   compiler that supports C99.  */
350#if HAVE_DESIGNATED_INITIALIZERS
351extern const unsigned char _cpp_trigraph_map[UCHAR_MAX + 1];
352#else
353extern unsigned char _cpp_trigraph_map[UCHAR_MAX + 1];
354#endif
355
356/* Macros.  */
357
358#define CPP_PRINT_DEPS(PFILE) CPP_OPTION (PFILE, print_deps)
359#define CPP_IN_SYSTEM_HEADER(PFILE) ((PFILE)->map && (PFILE)->map->sysp)
360#define CPP_PEDANTIC(PF) CPP_OPTION (PF, pedantic)
361#define CPP_WTRADITIONAL(PF) CPP_OPTION (PF, warn_traditional)
362
363/* In cpperror.c  */
364enum error_type { WARNING = 0, WARNING_SYSHDR, PEDWARN, ERROR, FATAL, ICE };
365extern int _cpp_begin_message PARAMS ((cpp_reader *, enum error_type,
366                                       unsigned int, unsigned int));
367
368/* In cppmacro.c */
369extern void _cpp_free_definition        PARAMS ((cpp_hashnode *));
370extern int _cpp_create_definition       PARAMS ((cpp_reader *, cpp_hashnode *));
371extern void _cpp_pop_context            PARAMS ((cpp_reader *));
372
373/* In cpphash.c */
374extern void _cpp_init_hashtable         PARAMS ((cpp_reader *, hash_table *));
375extern void _cpp_destroy_hashtable      PARAMS ((cpp_reader *));
376
377/* In cppfiles.c */
378extern void _cpp_fake_include           PARAMS ((cpp_reader *, const char *));
379extern void _cpp_never_reread           PARAMS ((struct include_file *));
380extern char *_cpp_simplify_pathname     PARAMS ((char *));
381extern bool _cpp_read_file              PARAMS ((cpp_reader *, const char *));
382extern bool _cpp_execute_include        PARAMS ((cpp_reader *,
383                                                 const cpp_token *,
384                                                 enum include_type));
385extern int _cpp_compare_file_date       PARAMS ((cpp_reader *,
386                                                 const cpp_token *));
387extern void _cpp_report_missing_guards  PARAMS ((cpp_reader *));
388extern void _cpp_init_includes          PARAMS ((cpp_reader *));
389extern void _cpp_cleanup_includes       PARAMS ((cpp_reader *));
390extern bool _cpp_pop_file_buffer        PARAMS ((cpp_reader *,
391                                                 struct include_file *));
392
393/* In cppexp.c */
394extern int _cpp_parse_expr              PARAMS ((cpp_reader *));
395
396/* In cpplex.c */
397extern cpp_token *_cpp_temp_token       PARAMS ((cpp_reader *));
398extern const cpp_token *_cpp_lex_token  PARAMS ((cpp_reader *));
399extern cpp_token *_cpp_lex_direct       PARAMS ((cpp_reader *));
400extern int _cpp_equiv_tokens            PARAMS ((const cpp_token *,
401                                                 const cpp_token *));
402extern void _cpp_init_tokenrun          PARAMS ((tokenrun *, unsigned int));
403
404/* In cppinit.c.  */
405extern bool _cpp_push_next_buffer       PARAMS ((cpp_reader *));
406
407/* In cpplib.c */
408extern int _cpp_test_assertion PARAMS ((cpp_reader *, int *));
409extern int _cpp_handle_directive PARAMS ((cpp_reader *, int));
410extern void _cpp_define_builtin PARAMS ((cpp_reader *, const char *));
411extern void _cpp_do__Pragma     PARAMS ((cpp_reader *));
412extern void _cpp_init_directives PARAMS ((cpp_reader *));
413extern void _cpp_init_internal_pragmas PARAMS ((cpp_reader *));
414extern void _cpp_do_file_change PARAMS ((cpp_reader *, enum lc_reason,
415                                         const char *,
416                                         unsigned int, unsigned int));
417extern void _cpp_pop_buffer PARAMS ((cpp_reader *));
418
419/* Utility routines and macros.  */
420#define DSC(str) (const U_CHAR *)str, sizeof str - 1
421#define xnew(T)         (T *) xmalloc (sizeof(T))
422#define xcnew(T)        (T *) xcalloc (1, sizeof(T))
423#define xnewvec(T, N)   (T *) xmalloc (sizeof(T) * (N))
424#define xcnewvec(T, N)  (T *) xcalloc (N, sizeof(T))
425#define xobnew(O, T)    (T *) obstack_alloc (O, sizeof(T))
426
427/* These are inline functions instead of macros so we can get type
428   checking.  */
429typedef unsigned char U_CHAR;
430#define U (const U_CHAR *)  /* Intended use: U"string" */
431
432static inline int ustrcmp       PARAMS ((const U_CHAR *, const U_CHAR *));
433static inline int ustrncmp      PARAMS ((const U_CHAR *, const U_CHAR *,
434                                         size_t));
435static inline size_t ustrlen    PARAMS ((const U_CHAR *));
436static inline U_CHAR *uxstrdup  PARAMS ((const U_CHAR *));
437static inline U_CHAR *ustrchr   PARAMS ((const U_CHAR *, int));
438static inline int ufputs        PARAMS ((const U_CHAR *, FILE *));
439
440static inline int
441ustrcmp (s1, s2)
442     const U_CHAR *s1, *s2;
443{
444  return strcmp ((const char *)s1, (const char *)s2);
445}
446
447static inline int
448ustrncmp (s1, s2, n)
449     const U_CHAR *s1, *s2;
450     size_t n;
451{
452  return strncmp ((const char *)s1, (const char *)s2, n);
453}
454
455static inline size_t
456ustrlen (s1)
457     const U_CHAR *s1;
458{
459  return strlen ((const char *)s1);
460}
461
462static inline U_CHAR *
463uxstrdup (s1)
464     const U_CHAR *s1;
465{
466  return (U_CHAR *) xstrdup ((const char *)s1);
467}
468
469static inline U_CHAR *
470ustrchr (s1, c)
471     const U_CHAR *s1;
472     int c;
473{
474  return (U_CHAR *) strchr ((const char *)s1, c);
475}
476
477static inline int
478ufputs (s, f)
479     const U_CHAR *s;
480     FILE *f;
481{
482  return fputs ((const char *)s, f);
483}
484
485#endif /* ! GCC_CPPHASH_H */
Note: See TracBrowser for help on using the repository browser.