1 | /* Define constants and variables for communication with parse.y. |
---|
2 | Copyright (C) 1987, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. |
---|
3 | Hacked by Michael Tiemann (tiemann@cygnus.com) |
---|
4 | and by Brendan Kehoe (brendan@cygnus.com). |
---|
5 | |
---|
6 | This file is part of GNU CC. |
---|
7 | |
---|
8 | GNU CC is distributed in the hope that it will be useful, |
---|
9 | but WITHOUT ANY WARRANTY. No author or distributor |
---|
10 | accepts responsibility to anyone for the consequences of using it |
---|
11 | or for whether it serves any particular purpose or works at all, |
---|
12 | unless he says so in writing. Refer to the GNU CC General Public |
---|
13 | License for full details. |
---|
14 | |
---|
15 | Everyone is granted permission to copy, modify and redistribute |
---|
16 | GNU CC, but only under the conditions described in the |
---|
17 | GNU CC General Public License. A copy of this license is |
---|
18 | supposed to have been given to you along with GNU CC so you |
---|
19 | can know your rights and responsibilities. It should be in a |
---|
20 | file named COPYING. Among other things, the copyright notice |
---|
21 | and this notice must be preserved on all copies. */ |
---|
22 | |
---|
23 | |
---|
24 | |
---|
25 | enum rid |
---|
26 | { |
---|
27 | RID_UNUSED, |
---|
28 | RID_INT, |
---|
29 | RID_BOOL, |
---|
30 | RID_CHAR, |
---|
31 | RID_WCHAR, |
---|
32 | RID_FLOAT, |
---|
33 | RID_DOUBLE, |
---|
34 | RID_VOID, |
---|
35 | |
---|
36 | /* C++ extension */ |
---|
37 | RID_CLASS, |
---|
38 | RID_RECORD, |
---|
39 | RID_UNION, |
---|
40 | RID_ENUM, |
---|
41 | RID_LONGLONG, |
---|
42 | |
---|
43 | /* This is where grokdeclarator starts its search when setting the specbits. |
---|
44 | The first seven are in the order of most frequently used, as found |
---|
45 | building libg++. */ |
---|
46 | |
---|
47 | RID_EXTERN, |
---|
48 | RID_CONST, |
---|
49 | RID_LONG, |
---|
50 | RID_TYPEDEF, |
---|
51 | RID_UNSIGNED, |
---|
52 | RID_SHORT, |
---|
53 | RID_INLINE, |
---|
54 | |
---|
55 | RID_STATIC, |
---|
56 | |
---|
57 | RID_REGISTER, |
---|
58 | RID_VOLATILE, |
---|
59 | RID_FRIEND, |
---|
60 | RID_VIRTUAL, |
---|
61 | RID_EXPLICIT, |
---|
62 | RID_SIGNED, |
---|
63 | RID_AUTO, |
---|
64 | RID_MUTABLE, |
---|
65 | |
---|
66 | /* This is where grokdeclarator ends its search when setting the specbits. */ |
---|
67 | |
---|
68 | RID_PUBLIC, |
---|
69 | RID_PRIVATE, |
---|
70 | RID_PROTECTED, |
---|
71 | RID_EXCEPTION, |
---|
72 | RID_TEMPLATE, |
---|
73 | RID_SIGNATURE, |
---|
74 | /* Before adding enough to get up to 64, the RIDBIT_* macros |
---|
75 | will have to be changed a little. */ |
---|
76 | RID_MAX |
---|
77 | }; |
---|
78 | |
---|
79 | #define NORID RID_UNUSED |
---|
80 | |
---|
81 | #define RID_FIRST_MODIFIER RID_EXTERN |
---|
82 | #define RID_LAST_MODIFIER RID_MUTABLE |
---|
83 | |
---|
84 | /* The type that can represent all values of RIDBIT. */ |
---|
85 | /* We assume that we can stick in at least 32 bits into this. */ |
---|
86 | typedef struct { unsigned long idata[2]; } |
---|
87 | RID_BIT_TYPE; |
---|
88 | |
---|
89 | /* Be careful, all these modify N twice. */ |
---|
90 | #define RIDBIT_SETP(N, V) (((unsigned long)1 << (int) ((N)%32)) \ |
---|
91 | & (V).idata[(N)/32]) |
---|
92 | #define RIDBIT_NOTSETP(NN, VV) (! RIDBIT_SETP (NN, VV)) |
---|
93 | #define RIDBIT_SET(N, V) do { \ |
---|
94 | (V).idata[(N)/32] \ |
---|
95 | |= ((unsigned long)1 << (int) ((N)%32)); \ |
---|
96 | } while (0) |
---|
97 | #define RIDBIT_RESET(N, V) do { \ |
---|
98 | (V).idata[(N)/32] \ |
---|
99 | &= ~((unsigned long)1 << (int) ((N)%32)); \ |
---|
100 | } while (0) |
---|
101 | #define RIDBIT_RESET_ALL(V) do { \ |
---|
102 | (V).idata[0] = 0; \ |
---|
103 | (V).idata[1] = 0; \ |
---|
104 | } while (0) |
---|
105 | #define RIDBIT_ANY_SET(V) ((V).idata[0] || (V).idata[1]) |
---|
106 | |
---|
107 | /* The elements of `ridpointers' are identifier nodes |
---|
108 | for the reserved type names and storage classes. |
---|
109 | It is indexed by a RID_... value. */ |
---|
110 | extern tree ridpointers[(int) RID_MAX]; |
---|
111 | |
---|
112 | /* the declaration found for the last IDENTIFIER token read in. |
---|
113 | yylex must look this up to detect typedefs, which get token type TYPENAME, |
---|
114 | so it is left around in case the identifier is not a typedef but is |
---|
115 | used in a context which makes it a reference to a variable. */ |
---|
116 | extern tree lastiddecl; |
---|
117 | |
---|
118 | extern char *token_buffer; /* Pointer to token buffer. */ |
---|
119 | |
---|
120 | /* Back-door communication channel to the lexer. */ |
---|
121 | extern int looking_for_typename; |
---|
122 | extern int looking_for_template; |
---|
123 | |
---|
124 | /* Tell the lexer where to look for names. */ |
---|
125 | extern tree got_scope; |
---|
126 | extern tree got_object; |
---|
127 | |
---|
128 | /* Pending language change. |
---|
129 | Positive is push count, negative is pop count. */ |
---|
130 | extern int pending_lang_change; |
---|
131 | |
---|
132 | extern tree make_pointer_declarator (), make_reference_declarator (); |
---|
133 | extern void reinit_parse_for_function (); |
---|
134 | extern void reinit_parse_for_method (); |
---|
135 | extern int yylex (); |
---|