2424namespace Rust {
2525namespace Resolver2_0 {
2626
27+ void
28+ DefaultResolver::visit (AST::Crate &crate)
29+ {
30+ auto inner_fn = [this , &crate] () { AST::DefaultASTVisitor::visit (crate); };
31+
32+ auto &mappings = Analysis::Mappings::get ();
33+
34+ auto crate_num = mappings.lookup_crate_num (crate.get_node_id ());
35+ rust_assert (crate_num.has_value ());
36+ auto crate_name = mappings.get_crate_name (*crate_num);
37+ rust_assert (crate_name.has_value ());
38+
39+ ctx.canonical_ctx .scope (crate.get_node_id (), *crate_name, inner_fn);
40+ }
41+
2742void
2843DefaultResolver::visit (AST::BlockExpr &expr)
2944{
@@ -38,19 +53,32 @@ DefaultResolver::visit (AST::BlockExpr &expr)
3853void
3954DefaultResolver::visit (AST::Module &module )
4055{
41- auto item_fn = [this , &module ] () { AST::DefaultASTVisitor::visit (module ); };
56+ auto item_fn_1
57+ = [this , &module ] () { AST::DefaultASTVisitor::visit (module ); };
4258
43- ctx.scoped (Rib::Kind::Module, module .get_node_id (), item_fn,
59+ auto item_fn_2 = [this , &module , &item_fn_1] () {
60+ ctx.canonical_ctx .scope (module .get_node_id (), module .get_name (),
61+ std::move (item_fn_1));
62+ };
63+
64+ ctx.scoped (Rib::Kind::Module, module .get_node_id (), item_fn_2,
4465 module .get_name ());
4566}
4667
4768void
4869DefaultResolver::visit (AST::Function &function)
4970{
50- auto def_fn
71+ auto def_fn_1
5172 = [this , &function] () { AST::DefaultASTVisitor::visit (function); };
5273
53- ctx.scoped (Rib::Kind::Function, function.get_node_id (), def_fn);
74+ auto def_fn_2 = [this , &function, &def_fn_1] () {
75+ ctx.canonical_ctx .scope (function.get_node_id (),
76+ function.get_function_name (),
77+ std::move (def_fn_1));
78+ };
79+
80+ ctx.scoped (Rib::Kind::Function, function.get_node_id (), def_fn_2,
81+ function.get_function_name ());
5482}
5583
5684void
@@ -63,9 +91,15 @@ DefaultResolver::visit (AST::ForLoopExpr &expr)
6391void
6492DefaultResolver::visit (AST::Trait &trait)
6593{
66- auto inner_fn = [this , &trait] () { AST::DefaultASTVisitor::visit (trait); };
94+ auto inner_fn_1
95+ = [this , &trait] () { AST::DefaultASTVisitor::visit (trait); };
96+
97+ auto inner_fn_2 = [this , &trait, &inner_fn_1] () {
98+ ctx.canonical_ctx .scope (trait.get_node_id (), trait.get_identifier (),
99+ std::move (inner_fn_1));
100+ };
67101
68- ctx.scoped (Rib::Kind::TraitOrImpl, trait.get_node_id (), inner_fn ,
102+ ctx.scoped (Rib::Kind::TraitOrImpl, trait.get_node_id (), inner_fn_2 ,
69103 trait.get_identifier () /* FIXME: Is that valid?*/ );
70104}
71105
@@ -76,23 +110,27 @@ DefaultResolver::visit (AST::InherentImpl &impl)
76110 visit (impl.get_visibility ());
77111 visit_inner_attrs (impl);
78112
79- auto inner_fn_inner = [this , &impl] () {
113+ auto inner_fn_1 = [this , &impl] () {
80114 for (auto &item : impl.get_impl_items ())
81115 visit (item);
82116 };
83117
84- auto inner_fn_outer = [this , &impl, &inner_fn_inner ] () {
118+ auto inner_fn_2 = [this , &impl, &inner_fn_1 ] () {
85119 maybe_insert_big_self (impl);
86120 for (auto &generic : impl.get_generic_params ())
87121 visit (generic);
88122 if (impl.has_where_clause ())
89123 visit (impl.get_where_clause ());
90124 visit (impl.get_type ());
91125
92- ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn_inner );
126+ ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn_1 );
93127 };
94128
95- ctx.scoped (Rib::Kind::Generics, impl.get_node_id (), inner_fn_outer);
129+ auto inner_fn_3 = [this , &impl, &inner_fn_2] () {
130+ ctx.canonical_ctx .scope_impl (impl, std::move (inner_fn_2));
131+ };
132+
133+ ctx.scoped (Rib::Kind::Generics, impl.get_node_id (), inner_fn_3);
96134}
97135
98136void
@@ -102,12 +140,12 @@ DefaultResolver::visit (AST::TraitImpl &impl)
102140 visit (impl.get_visibility ());
103141 visit_inner_attrs (impl);
104142
105- auto inner_fn_inner = [this , &impl] () {
143+ auto inner_fn_1 = [this , &impl] () {
106144 for (auto &item : impl.get_impl_items ())
107145 visit (item);
108146 };
109147
110- auto inner_fn_outer = [this , &impl, &inner_fn_inner ] () {
148+ auto inner_fn_2 = [this , &impl, &inner_fn_1 ] () {
111149 maybe_insert_big_self (impl);
112150 for (auto &generic : impl.get_generic_params ())
113151 visit (generic);
@@ -116,55 +154,120 @@ DefaultResolver::visit (AST::TraitImpl &impl)
116154 visit (impl.get_type ());
117155 visit (impl.get_trait_path ());
118156
119- ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn_inner);
157+ ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn_1);
158+ };
159+
160+ auto inner_fn_3 = [this , &impl, &inner_fn_2] () {
161+ ctx.canonical_ctx .scope_impl (impl, std::move (inner_fn_2));
120162 };
121163
122- ctx.scoped (Rib::Kind::Generics, impl.get_node_id (), inner_fn_outer );
164+ ctx.scoped (Rib::Kind::Generics, impl.get_node_id (), inner_fn_3 );
123165}
124166
125167void
126168DefaultResolver::visit (AST::StructStruct &type)
127169{
128- auto inner_fn = [this , &type] () { AST::DefaultASTVisitor::visit (type); };
170+ auto inner_fn_1 = [this , &type] () { AST::DefaultASTVisitor::visit (type); };
171+
172+ auto inner_fn_2 = [this , &type, &inner_fn_1] () {
173+ ctx.canonical_ctx .scope (type.get_node_id (), type.get_struct_name (),
174+ std::move (inner_fn_1));
175+ };
129176
130177 ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */ , type.get_node_id (),
131- inner_fn , type.get_struct_name ());
178+ inner_fn_2 , type.get_struct_name ());
132179}
133180
134181void
135182DefaultResolver::visit (AST::TupleStruct &type)
136183{
137- auto inner_fn = [this , &type] () { AST::DefaultASTVisitor::visit (type); };
184+ auto inner_fn_1 = [this , &type] () { AST::DefaultASTVisitor::visit (type); };
185+
186+ auto inner_fn_2 = [this , &type, &inner_fn_1] () {
187+ ctx.canonical_ctx .scope (type.get_node_id (), type.get_struct_name (),
188+ std::move (inner_fn_1));
189+ };
138190
139191 ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */ , type.get_node_id (),
140- inner_fn, type.get_struct_name ());
192+ inner_fn_2, type.get_struct_name ());
193+ }
194+
195+ void
196+ DefaultResolver::visit (AST::EnumItem &item)
197+ {
198+ auto inner_fn = [this , &item] () { AST::DefaultASTVisitor::visit (item); };
199+
200+ ctx.canonical_ctx .scope (item.get_node_id (), item.get_identifier (),
201+ inner_fn);
202+ }
203+
204+ void
205+ DefaultResolver::visit (AST::EnumItemTuple &item)
206+ {
207+ auto inner_fn = [this , &item] () { AST::DefaultASTVisitor::visit (item); };
208+
209+ ctx.canonical_ctx .scope (item.get_node_id (), item.get_identifier (),
210+ inner_fn);
211+ }
212+
213+ void
214+ DefaultResolver::visit (AST::EnumItemStruct &item)
215+ {
216+ auto inner_fn = [this , &item] () { AST::DefaultASTVisitor::visit (item); };
217+
218+ ctx.canonical_ctx .scope (item.get_node_id (), item.get_identifier (),
219+ inner_fn);
220+ }
221+
222+ void
223+ DefaultResolver::visit (AST::EnumItemDiscriminant &item)
224+ {
225+ auto inner_fn = [this , &item] () { AST::DefaultASTVisitor::visit (item); };
226+
227+ ctx.canonical_ctx .scope (item.get_node_id (), item.get_identifier (),
228+ inner_fn);
141229}
142230
143231void
144232DefaultResolver::visit (AST::Enum &type)
145233{
146- auto variant_fn = [this , &type] () { AST::DefaultASTVisitor::visit (type); };
234+ auto inner_fn_1 = [this , &type] () { AST::DefaultASTVisitor::visit (type); };
235+
236+ auto inner_fn_2 = [this , &type, &inner_fn_1] () {
237+ ctx.canonical_ctx .scope (type.get_node_id (), type.get_identifier (),
238+ std::move (inner_fn_1));
239+ };
147240
148241 ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */ , type.get_node_id (),
149- variant_fn , type.get_identifier ());
242+ inner_fn_2 , type.get_identifier ());
150243}
151244
152245void
153246DefaultResolver::visit (AST::Union &type)
154247{
155- auto inner_fn = [this , &type] () { AST::DefaultASTVisitor::visit (type); };
248+ auto inner_fn_1 = [this , &type] () { AST::DefaultASTVisitor::visit (type); };
249+
250+ auto inner_fn_2 = [this , &type, &inner_fn_1] () {
251+ ctx.canonical_ctx .scope (type.get_node_id (), type.get_identifier (),
252+ std::move (inner_fn_1));
253+ };
156254
157255 ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */ , type.get_node_id (),
158- inner_fn , type.get_identifier ());
256+ inner_fn_2 , type.get_identifier ());
159257}
160258
161259void
162260DefaultResolver::visit (AST::TypeAlias &type)
163261{
164- auto inner_fn = [this , &type] () { AST::DefaultASTVisitor::visit (type); };
262+ auto inner_fn_1 = [this , &type] () { AST::DefaultASTVisitor::visit (type); };
263+
264+ auto inner_fn_2 = [this , &type, &inner_fn_1] () {
265+ ctx.canonical_ctx .scope (type.get_node_id (), type.get_new_type_name (),
266+ std::move (inner_fn_1));
267+ };
165268
166269 ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */ , type.get_node_id (),
167- inner_fn , type.get_new_type_name ());
270+ inner_fn_2 , type.get_new_type_name ());
168271}
169272
170273void
@@ -199,21 +302,31 @@ DefaultResolver::visit (AST::ConstantItem &item)
199302{
200303 if (item.has_expr ())
201304 {
202- auto expr_vis
305+ auto expr_vis_1
203306 = [this , &item] () { AST::DefaultASTVisitor::visit (item); };
204307
308+ auto expr_vis_2 = [this , &item, &expr_vis_1] () {
309+ ctx.canonical_ctx .scope (item.get_node_id (), item.get_identifier (),
310+ std::move (expr_vis_1));
311+ };
312+
205313 // FIXME: Why do we need a Rib here?
206- ctx.scoped (Rib::Kind::ConstantItem, item.get_node_id (), expr_vis );
314+ ctx.scoped (Rib::Kind::ConstantItem, item.get_node_id (), expr_vis_2 );
207315 }
208316}
209317
210318void
211319DefaultResolver::visit (AST::StaticItem &item)
212320{
213- auto expr_vis = [this , &item] () { AST::DefaultASTVisitor::visit (item); };
321+ auto expr_vis_1 = [this , &item] () { AST::DefaultASTVisitor::visit (item); };
322+
323+ auto expr_vis_2 = [this , &item, &expr_vis_1] () {
324+ ctx.canonical_ctx .scope (item.get_node_id (), item.get_identifier (),
325+ std::move (expr_vis_1));
326+ };
214327
215328 // FIXME: Why do we need a Rib here?
216- ctx.scoped (Rib::Kind::ConstantItem, item.get_node_id (), expr_vis );
329+ ctx.scoped (Rib::Kind::ConstantItem, item.get_node_id (), expr_vis_2 );
217330}
218331
219332void
0 commit comments