24
24
namespace Rust {
25
25
namespace Resolver2_0 {
26
26
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
+
27
42
void
28
43
DefaultResolver::visit (AST::BlockExpr &expr)
29
44
{
@@ -38,19 +53,32 @@ DefaultResolver::visit (AST::BlockExpr &expr)
38
53
void
39
54
DefaultResolver::visit (AST::Module &module)
40
55
{
41
- auto item_fn = [this , &module] () { AST::DefaultASTVisitor::visit (module); };
56
+ auto item_fn_1
57
+ = [this , &module] () { AST::DefaultASTVisitor::visit (module); };
42
58
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,
44
65
module.get_name ());
45
66
}
46
67
47
68
void
48
69
DefaultResolver::visit (AST::Function &function)
49
70
{
50
- auto def_fn
71
+ auto def_fn_1
51
72
= [this , &function] () { AST::DefaultASTVisitor::visit (function); };
52
73
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 ());
54
82
}
55
83
56
84
void
@@ -63,9 +91,15 @@ DefaultResolver::visit (AST::ForLoopExpr &expr)
63
91
void
64
92
DefaultResolver::visit (AST::Trait &trait)
65
93
{
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
+ };
67
101
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 ,
69
103
trait.get_identifier () /* FIXME: Is that valid?*/ );
70
104
}
71
105
@@ -76,23 +110,27 @@ DefaultResolver::visit (AST::InherentImpl &impl)
76
110
visit (impl.get_visibility ());
77
111
visit_inner_attrs (impl);
78
112
79
- auto inner_fn_inner = [this , &impl] () {
113
+ auto inner_fn_1 = [this , &impl] () {
80
114
for (auto &item : impl.get_impl_items ())
81
115
visit (item);
82
116
};
83
117
84
- auto inner_fn_outer = [this , &impl, &inner_fn_inner ] () {
118
+ auto inner_fn_2 = [this , &impl, &inner_fn_1 ] () {
85
119
maybe_insert_big_self (impl);
86
120
for (auto &generic : impl.get_generic_params ())
87
121
visit (generic);
88
122
if (impl.has_where_clause ())
89
123
visit (impl.get_where_clause ());
90
124
visit (impl.get_type ());
91
125
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 );
93
127
};
94
128
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);
96
134
}
97
135
98
136
void
@@ -102,12 +140,12 @@ DefaultResolver::visit (AST::TraitImpl &impl)
102
140
visit (impl.get_visibility ());
103
141
visit_inner_attrs (impl);
104
142
105
- auto inner_fn_inner = [this , &impl] () {
143
+ auto inner_fn_1 = [this , &impl] () {
106
144
for (auto &item : impl.get_impl_items ())
107
145
visit (item);
108
146
};
109
147
110
- auto inner_fn_outer = [this , &impl, &inner_fn_inner ] () {
148
+ auto inner_fn_2 = [this , &impl, &inner_fn_1 ] () {
111
149
maybe_insert_big_self (impl);
112
150
for (auto &generic : impl.get_generic_params ())
113
151
visit (generic);
@@ -116,55 +154,120 @@ DefaultResolver::visit (AST::TraitImpl &impl)
116
154
visit (impl.get_type ());
117
155
visit (impl.get_trait_path ());
118
156
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));
120
162
};
121
163
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 );
123
165
}
124
166
125
167
void
126
168
DefaultResolver::visit (AST::StructStruct &type)
127
169
{
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
+ };
129
176
130
177
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 ());
132
179
}
133
180
134
181
void
135
182
DefaultResolver::visit (AST::TupleStruct &type)
136
183
{
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
+ };
138
190
139
191
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);
141
229
}
142
230
143
231
void
144
232
DefaultResolver::visit (AST::Enum &type)
145
233
{
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
+ };
147
240
148
241
ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */ , type.get_node_id (),
149
- variant_fn , type.get_identifier ());
242
+ inner_fn_2 , type.get_identifier ());
150
243
}
151
244
152
245
void
153
246
DefaultResolver::visit (AST::Union &type)
154
247
{
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
+ };
156
254
157
255
ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */ , type.get_node_id (),
158
- inner_fn , type.get_identifier ());
256
+ inner_fn_2 , type.get_identifier ());
159
257
}
160
258
161
259
void
162
260
DefaultResolver::visit (AST::TypeAlias &type)
163
261
{
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
+ };
165
268
166
269
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 ());
168
271
}
169
272
170
273
void
@@ -199,21 +302,31 @@ DefaultResolver::visit (AST::ConstantItem &item)
199
302
{
200
303
if (item.has_expr ())
201
304
{
202
- auto expr_vis
305
+ auto expr_vis_1
203
306
= [this , &item] () { AST::DefaultASTVisitor::visit (item); };
204
307
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
+
205
313
// 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 );
207
315
}
208
316
}
209
317
210
318
void
211
319
DefaultResolver::visit (AST::StaticItem &item)
212
320
{
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
+ };
214
327
215
328
// 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 );
217
330
}
218
331
219
332
void
0 commit comments