annotate gcc/cp/name-lookup.h @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1 /* Declarations for -*- C++ -*- name lookup routines.
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2003-2020 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
3 Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 This file is part of GCC.
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 GCC is free software; you can redistribute it and/or modify
kono
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
9 the Free Software Foundation; either version 3, or (at your option)
kono
parents:
diff changeset
10 any later version.
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 GCC is distributed in the hope that it will be useful,
kono
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
kono
parents:
diff changeset
15 GNU General Public License for more details.
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
18 along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
19 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 #ifndef GCC_CP_NAME_LOOKUP_H
kono
parents:
diff changeset
22 #define GCC_CP_NAME_LOOKUP_H
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 #include "c-family/c-common.h"
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 /* The type of dictionary used to map names to types declared at
kono
parents:
diff changeset
27 a given scope. */
kono
parents:
diff changeset
28 typedef struct binding_table_s *binding_table;
kono
parents:
diff changeset
29 typedef struct binding_entry_s *binding_entry;
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 /* The type of a routine repeatedly called by binding_table_foreach. */
kono
parents:
diff changeset
32 typedef void (*bt_foreach_proc) (binding_entry, void *);
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 struct GTY(()) binding_entry_s {
kono
parents:
diff changeset
35 binding_entry chain;
kono
parents:
diff changeset
36 tree name;
kono
parents:
diff changeset
37 tree type;
kono
parents:
diff changeset
38 };
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 /* These macros indicate the initial chains count for binding_table. */
kono
parents:
diff changeset
41 #define SCOPE_DEFAULT_HT_SIZE (1 << 3)
kono
parents:
diff changeset
42 #define CLASS_SCOPE_HT_SIZE (1 << 3)
kono
parents:
diff changeset
43 #define NAMESPACE_ORDINARY_HT_SIZE (1 << 5)
kono
parents:
diff changeset
44 #define NAMESPACE_STD_HT_SIZE (1 << 8)
kono
parents:
diff changeset
45 #define GLOBAL_SCOPE_HT_SIZE (1 << 8)
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 extern void binding_table_foreach (binding_table, bt_foreach_proc, void *);
kono
parents:
diff changeset
48 extern binding_entry binding_table_find (binding_table, tree);
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 /* Datatype that represents binding established by a declaration between
kono
parents:
diff changeset
51 a name and a C++ entity. */
kono
parents:
diff changeset
52 typedef struct cxx_binding cxx_binding;
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 /* The datatype used to implement C++ scope. */
kono
parents:
diff changeset
55 typedef struct cp_binding_level cp_binding_level;
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 /* Nonzero if this binding is for a local scope, as opposed to a class
kono
parents:
diff changeset
58 or namespace scope. */
kono
parents:
diff changeset
59 #define LOCAL_BINDING_P(NODE) ((NODE)->is_local)
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 /* True if NODE->value is from a base class of the class which is
kono
parents:
diff changeset
62 currently being defined. */
kono
parents:
diff changeset
63 #define INHERITED_VALUE_BINDING_P(NODE) ((NODE)->value_is_inherited)
kono
parents:
diff changeset
64
kono
parents:
diff changeset
65 struct GTY(()) cxx_binding {
kono
parents:
diff changeset
66 /* Link to chain together various bindings for this name. */
kono
parents:
diff changeset
67 cxx_binding *previous;
kono
parents:
diff changeset
68 /* The non-type entity this name is bound to. */
kono
parents:
diff changeset
69 tree value;
kono
parents:
diff changeset
70 /* The type entity this name is bound to. */
kono
parents:
diff changeset
71 tree type;
kono
parents:
diff changeset
72 /* The scope at which this binding was made. */
kono
parents:
diff changeset
73 cp_binding_level *scope;
kono
parents:
diff changeset
74 unsigned value_is_inherited : 1;
kono
parents:
diff changeset
75 unsigned is_local : 1;
kono
parents:
diff changeset
76 };
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 /* Datatype used to temporarily save C++ bindings (for implicit
kono
parents:
diff changeset
79 instantiations purposes and like). Implemented in decl.c. */
kono
parents:
diff changeset
80 struct GTY(()) cxx_saved_binding {
kono
parents:
diff changeset
81 /* The name of the current binding. */
kono
parents:
diff changeset
82 tree identifier;
kono
parents:
diff changeset
83 /* The binding we're saving. */
kono
parents:
diff changeset
84 cxx_binding *binding;
kono
parents:
diff changeset
85 tree real_type_value;
kono
parents:
diff changeset
86 };
kono
parents:
diff changeset
87
kono
parents:
diff changeset
88
kono
parents:
diff changeset
89 extern tree identifier_type_value (tree);
kono
parents:
diff changeset
90 extern void set_identifier_type_value (tree, tree);
kono
parents:
diff changeset
91 extern void push_binding (tree, tree, cp_binding_level*);
kono
parents:
diff changeset
92 extern void pop_local_binding (tree, tree);
kono
parents:
diff changeset
93 extern void pop_bindings_and_leave_scope (void);
kono
parents:
diff changeset
94 extern tree constructor_name (tree);
kono
parents:
diff changeset
95 extern bool constructor_name_p (tree, tree);
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 /* The kinds of scopes we recognize. */
kono
parents:
diff changeset
98 enum scope_kind {
kono
parents:
diff changeset
99 sk_block = 0, /* An ordinary block scope. This enumerator must
kono
parents:
diff changeset
100 have the value zero because "cp_binding_level"
kono
parents:
diff changeset
101 is initialized by using "memset" to set the
kono
parents:
diff changeset
102 contents to zero, and the default scope kind
kono
parents:
diff changeset
103 is "sk_block". */
kono
parents:
diff changeset
104 sk_cleanup, /* A scope for (pseudo-)scope for cleanup. It is
kono
parents:
diff changeset
105 pseudo in that it is transparent to name lookup
kono
parents:
diff changeset
106 activities. */
kono
parents:
diff changeset
107 sk_try, /* A try-block. */
kono
parents:
diff changeset
108 sk_catch, /* A catch-block. */
kono
parents:
diff changeset
109 sk_for, /* The scope of the variable declared in a
kono
parents:
diff changeset
110 init-statement. */
kono
parents:
diff changeset
111 sk_cond, /* The scope of the variable declared in the condition
kono
parents:
diff changeset
112 of an if or switch statement. */
kono
parents:
diff changeset
113 sk_function_parms, /* The scope containing function parameters. */
kono
parents:
diff changeset
114 sk_class, /* The scope containing the members of a class. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
115 sk_scoped_enum, /* The scope containing the enumerators of a C++11
111
kono
parents:
diff changeset
116 scoped enumeration. */
kono
parents:
diff changeset
117 sk_namespace, /* The scope containing the members of a
kono
parents:
diff changeset
118 namespace, including the global scope. */
kono
parents:
diff changeset
119 sk_template_parms, /* A scope for template parameters. */
kono
parents:
diff changeset
120 sk_template_spec, /* Like sk_template_parms, but for an explicit
kono
parents:
diff changeset
121 specialization. Since, by definition, an
kono
parents:
diff changeset
122 explicit specialization is introduced by
kono
parents:
diff changeset
123 "template <>", this scope is always empty. */
kono
parents:
diff changeset
124 sk_transaction, /* A synchronized or atomic statement. */
kono
parents:
diff changeset
125 sk_omp /* An OpenMP structured block. */
kono
parents:
diff changeset
126 };
kono
parents:
diff changeset
127
kono
parents:
diff changeset
128 /* The scope where the class/struct/union/enum tag applies. */
kono
parents:
diff changeset
129 enum tag_scope {
kono
parents:
diff changeset
130 ts_current = 0, /* Current scope only. This is for the
kono
parents:
diff changeset
131 class-key identifier;
kono
parents:
diff changeset
132 case mentioned in [basic.lookup.elab]/2,
kono
parents:
diff changeset
133 or the class/enum definition
kono
parents:
diff changeset
134 class-key identifier { ... }; */
kono
parents:
diff changeset
135 ts_global = 1, /* All scopes. This is the 3.4.1
kono
parents:
diff changeset
136 [basic.lookup.unqual] lookup mentioned
kono
parents:
diff changeset
137 in [basic.lookup.elab]/2. */
kono
parents:
diff changeset
138 ts_within_enclosing_non_class = 2, /* Search within enclosing non-class
kono
parents:
diff changeset
139 only, for friend class lookup
kono
parents:
diff changeset
140 according to [namespace.memdef]/3
kono
parents:
diff changeset
141 and [class.friend]/9. */
kono
parents:
diff changeset
142 ts_lambda = 3 /* Declaring a lambda closure. */
kono
parents:
diff changeset
143 };
kono
parents:
diff changeset
144
kono
parents:
diff changeset
145 struct GTY(()) cp_class_binding {
kono
parents:
diff changeset
146 cxx_binding *base;
kono
parents:
diff changeset
147 /* The bound name. */
kono
parents:
diff changeset
148 tree identifier;
kono
parents:
diff changeset
149 };
kono
parents:
diff changeset
150
kono
parents:
diff changeset
151 /* For each binding contour we allocate a binding_level structure
kono
parents:
diff changeset
152 which records the names defined in that contour.
kono
parents:
diff changeset
153 Contours include:
kono
parents:
diff changeset
154 0) the global one
kono
parents:
diff changeset
155 1) one for each function definition,
kono
parents:
diff changeset
156 where internal declarations of the parameters appear.
kono
parents:
diff changeset
157 2) one for each compound statement,
kono
parents:
diff changeset
158 to record its declarations.
kono
parents:
diff changeset
159
kono
parents:
diff changeset
160 The current meaning of a name can be found by searching the levels
kono
parents:
diff changeset
161 from the current one out to the global one.
kono
parents:
diff changeset
162
kono
parents:
diff changeset
163 Off to the side, may be the class_binding_level. This exists only
kono
parents:
diff changeset
164 to catch class-local declarations. It is otherwise nonexistent.
kono
parents:
diff changeset
165
kono
parents:
diff changeset
166 Also there may be binding levels that catch cleanups that must be
kono
parents:
diff changeset
167 run when exceptions occur. Thus, to see whether a name is bound in
kono
parents:
diff changeset
168 the current scope, it is not enough to look in the
kono
parents:
diff changeset
169 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
kono
parents:
diff changeset
170 instead. */
kono
parents:
diff changeset
171
kono
parents:
diff changeset
172 struct GTY(()) cp_binding_level {
kono
parents:
diff changeset
173 /* A chain of _DECL nodes for all variables, constants, functions,
kono
parents:
diff changeset
174 and typedef types. These are in the reverse of the order
kono
parents:
diff changeset
175 supplied. There may be OVERLOADs on this list, too, but they
kono
parents:
diff changeset
176 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
kono
parents:
diff changeset
177 tree names;
kono
parents:
diff changeset
178
kono
parents:
diff changeset
179 /* Using directives. */
kono
parents:
diff changeset
180 vec<tree, va_gc> *using_directives;
kono
parents:
diff changeset
181
kono
parents:
diff changeset
182 /* For the binding level corresponding to a class, the entities
kono
parents:
diff changeset
183 declared in the class or its base classes. */
kono
parents:
diff changeset
184 vec<cp_class_binding, va_gc> *class_shadowed;
kono
parents:
diff changeset
185
kono
parents:
diff changeset
186 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
kono
parents:
diff changeset
187 is used for all binding levels. The TREE_PURPOSE is the name of
kono
parents:
diff changeset
188 the entity, the TREE_TYPE is the associated type. In addition
kono
parents:
diff changeset
189 the TREE_VALUE is the IDENTIFIER_TYPE_VALUE before we entered
kono
parents:
diff changeset
190 the class. */
kono
parents:
diff changeset
191 tree type_shadowed;
kono
parents:
diff changeset
192
kono
parents:
diff changeset
193 /* For each level (except not the global one),
kono
parents:
diff changeset
194 a chain of BLOCK nodes for all the levels
kono
parents:
diff changeset
195 that were entered and exited one level down. */
kono
parents:
diff changeset
196 tree blocks;
kono
parents:
diff changeset
197
kono
parents:
diff changeset
198 /* The entity (namespace, class, function) the scope of which this
kono
parents:
diff changeset
199 binding contour corresponds to. Otherwise NULL. */
kono
parents:
diff changeset
200 tree this_entity;
kono
parents:
diff changeset
201
kono
parents:
diff changeset
202 /* The binding level which this one is contained in (inherits from). */
kono
parents:
diff changeset
203 cp_binding_level *level_chain;
kono
parents:
diff changeset
204
kono
parents:
diff changeset
205 /* STATEMENT_LIST for statements in this binding contour.
kono
parents:
diff changeset
206 Only used at present for SK_CLEANUP temporary bindings. */
kono
parents:
diff changeset
207 tree statement_list;
kono
parents:
diff changeset
208
kono
parents:
diff changeset
209 /* Binding depth at which this level began. */
kono
parents:
diff changeset
210 int binding_depth;
kono
parents:
diff changeset
211
kono
parents:
diff changeset
212 /* The kind of scope that this object represents. However, a
kono
parents:
diff changeset
213 SK_TEMPLATE_SPEC scope is represented with KIND set to
kono
parents:
diff changeset
214 SK_TEMPLATE_PARMS and EXPLICIT_SPEC_P set to true. */
kono
parents:
diff changeset
215 ENUM_BITFIELD (scope_kind) kind : 4;
kono
parents:
diff changeset
216
kono
parents:
diff changeset
217 /* True if this scope is an SK_TEMPLATE_SPEC scope. This field is
kono
parents:
diff changeset
218 only valid if KIND == SK_TEMPLATE_PARMS. */
kono
parents:
diff changeset
219 BOOL_BITFIELD explicit_spec_p : 1;
kono
parents:
diff changeset
220
kono
parents:
diff changeset
221 /* true means make a BLOCK for this level regardless of all else. */
kono
parents:
diff changeset
222 unsigned keep : 1;
kono
parents:
diff changeset
223
kono
parents:
diff changeset
224 /* Nonzero if this level can safely have additional
kono
parents:
diff changeset
225 cleanup-needing variables added to it. */
kono
parents:
diff changeset
226 unsigned more_cleanups_ok : 1;
kono
parents:
diff changeset
227 unsigned have_cleanups : 1;
kono
parents:
diff changeset
228
kono
parents:
diff changeset
229 /* Transient state set if this scope is of sk_class kind
kono
parents:
diff changeset
230 and is in the process of defining 'this_entity'. Reset
kono
parents:
diff changeset
231 on leaving the class definition to allow for the scope
kono
parents:
diff changeset
232 to be subsequently re-used as a non-defining scope for
kono
parents:
diff changeset
233 'this_entity'. */
kono
parents:
diff changeset
234 unsigned defining_class_p : 1;
kono
parents:
diff changeset
235
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
236 /* true for SK_FUNCTION_PARMS of immediate functions. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
237 unsigned immediate_fn_ctx_p : 1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
238
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
239 /* 22 bits left to fill a 32-bit word. */
111
kono
parents:
diff changeset
240 };
kono
parents:
diff changeset
241
kono
parents:
diff changeset
242 /* The binding level currently in effect. */
kono
parents:
diff changeset
243
kono
parents:
diff changeset
244 #define current_binding_level \
kono
parents:
diff changeset
245 (*(cfun && cp_function_chain && cp_function_chain->bindings \
kono
parents:
diff changeset
246 ? &cp_function_chain->bindings \
kono
parents:
diff changeset
247 : &scope_chain->bindings))
kono
parents:
diff changeset
248
kono
parents:
diff changeset
249 /* The binding level of the current class, if any. */
kono
parents:
diff changeset
250
kono
parents:
diff changeset
251 #define class_binding_level scope_chain->class_bindings
kono
parents:
diff changeset
252
kono
parents:
diff changeset
253 /* True if SCOPE designates the global scope binding contour. */
kono
parents:
diff changeset
254 #define global_scope_p(SCOPE) \
kono
parents:
diff changeset
255 ((SCOPE) == NAMESPACE_LEVEL (global_namespace))
kono
parents:
diff changeset
256
kono
parents:
diff changeset
257 extern cp_binding_level *leave_scope (void);
kono
parents:
diff changeset
258 extern bool kept_level_p (void);
kono
parents:
diff changeset
259 extern bool global_bindings_p (void);
kono
parents:
diff changeset
260 extern bool toplevel_bindings_p (void);
kono
parents:
diff changeset
261 extern bool namespace_bindings_p (void);
kono
parents:
diff changeset
262 extern bool local_bindings_p (void);
kono
parents:
diff changeset
263 extern bool template_parm_scope_p (void);
kono
parents:
diff changeset
264 extern scope_kind innermost_scope_kind (void);
kono
parents:
diff changeset
265 extern cp_binding_level *begin_scope (scope_kind, tree);
kono
parents:
diff changeset
266 extern void print_binding_stack (void);
kono
parents:
diff changeset
267 extern void pop_everything (void);
kono
parents:
diff changeset
268 extern void keep_next_level (bool);
kono
parents:
diff changeset
269 extern bool is_ancestor (tree ancestor, tree descendant);
kono
parents:
diff changeset
270 extern bool is_nested_namespace (tree parent, tree descendant,
kono
parents:
diff changeset
271 bool inline_only = false);
kono
parents:
diff changeset
272 extern tree push_scope (tree);
kono
parents:
diff changeset
273 extern void pop_scope (tree);
kono
parents:
diff changeset
274 extern tree push_inner_scope (tree);
kono
parents:
diff changeset
275 extern void pop_inner_scope (tree, tree);
kono
parents:
diff changeset
276 extern void push_binding_level (cp_binding_level *);
kono
parents:
diff changeset
277
kono
parents:
diff changeset
278 extern bool handle_namespace_attrs (tree, tree);
kono
parents:
diff changeset
279 extern void pushlevel_class (void);
kono
parents:
diff changeset
280 extern void poplevel_class (void);
kono
parents:
diff changeset
281 extern tree lookup_name_prefer_type (tree, int);
kono
parents:
diff changeset
282 extern tree lookup_name_real (tree, int, int, bool, int, int);
kono
parents:
diff changeset
283 extern tree lookup_type_scope (tree, tag_scope);
kono
parents:
diff changeset
284 extern tree get_namespace_binding (tree ns, tree id);
kono
parents:
diff changeset
285 extern void set_global_binding (tree decl);
kono
parents:
diff changeset
286 inline tree get_global_binding (tree id)
kono
parents:
diff changeset
287 {
kono
parents:
diff changeset
288 return get_namespace_binding (NULL_TREE, id);
kono
parents:
diff changeset
289 }
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
290 extern tree lookup_qualified_name (tree, tree, int = 0, bool = true, /*hidden*/bool = false);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
291 extern tree lookup_qualified_name (tree t, const char *p, int = 0, bool = true, bool = false);
111
kono
parents:
diff changeset
292 extern tree lookup_name_nonclass (tree);
kono
parents:
diff changeset
293 extern bool is_local_extern (tree);
kono
parents:
diff changeset
294 extern bool pushdecl_class_level (tree);
kono
parents:
diff changeset
295 extern tree pushdecl_namespace_level (tree, bool);
kono
parents:
diff changeset
296 extern bool push_class_level_binding (tree, tree);
kono
parents:
diff changeset
297 extern tree get_local_decls ();
kono
parents:
diff changeset
298 extern int function_parm_depth (void);
kono
parents:
diff changeset
299 extern tree cp_namespace_decls (tree);
kono
parents:
diff changeset
300 extern void set_decl_namespace (tree, tree, bool);
kono
parents:
diff changeset
301 extern void push_decl_namespace (tree);
kono
parents:
diff changeset
302 extern void pop_decl_namespace (void);
kono
parents:
diff changeset
303 extern void do_namespace_alias (tree, tree);
kono
parents:
diff changeset
304 extern tree do_class_using_decl (tree, tree);
kono
parents:
diff changeset
305 extern tree lookup_arg_dependent (tree, tree, vec<tree, va_gc> *);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
306 extern tree search_anon_aggr (tree, tree, bool = false);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
307 extern tree get_class_binding_direct (tree, tree, bool want_type = false);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
308 extern tree get_class_binding (tree, tree, bool want_type = false);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
309 extern tree *find_member_slot (tree klass, tree name);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
310 extern tree *add_member_slot (tree klass, tree name);
111
kono
parents:
diff changeset
311 extern void resort_type_member_vec (void *, void *,
kono
parents:
diff changeset
312 gt_pointer_operator, void *);
kono
parents:
diff changeset
313 extern void set_class_bindings (tree, unsigned extra = 0);
kono
parents:
diff changeset
314 extern void insert_late_enum_def_bindings (tree, tree);
kono
parents:
diff changeset
315 extern tree innermost_non_namespace_value (tree);
kono
parents:
diff changeset
316 extern cxx_binding *outer_binding (tree, cxx_binding *, bool);
kono
parents:
diff changeset
317 extern void cp_emit_debug_info_for_using (tree, tree);
kono
parents:
diff changeset
318
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
319 extern void finish_nonmember_using_decl (tree scope, tree name);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
320 extern void finish_using_directive (tree target, tree attribs);
111
kono
parents:
diff changeset
321 extern tree pushdecl (tree, bool is_friend = false);
kono
parents:
diff changeset
322 extern tree pushdecl_outermost_localscope (tree);
kono
parents:
diff changeset
323 extern tree pushdecl_top_level (tree, bool is_friend = false);
kono
parents:
diff changeset
324 extern tree pushdecl_top_level_and_finish (tree, tree);
kono
parents:
diff changeset
325 extern tree pushtag (tree, tree, tag_scope);
kono
parents:
diff changeset
326 extern int push_namespace (tree, bool make_inline = false);
kono
parents:
diff changeset
327 extern void pop_namespace (void);
kono
parents:
diff changeset
328 extern void push_nested_namespace (tree);
kono
parents:
diff changeset
329 extern void pop_nested_namespace (tree);
kono
parents:
diff changeset
330 extern void push_to_top_level (void);
kono
parents:
diff changeset
331 extern void pop_from_top_level (void);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
332 extern void maybe_save_operator_binding (tree);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
333 extern void push_operator_bindings (void);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
334 extern void discard_operator_bindings (tree);
111
kono
parents:
diff changeset
335
kono
parents:
diff changeset
336 #endif /* GCC_CP_NAME_LOOKUP_H */