Skip to content

Commit fa6747f

Browse files
powerboat9CohenArthur
authored andcommitted
nr2.0: Improve default, top-level, and late resolvers
gcc/rust/ChangeLog: * resolve/rust-default-resolver.cc (DefaultResolver::visit): Make sure to scope visitation of the children of type definition items. * resolve/rust-default-resolver.h (DefaultResolver::visit): Add overrides for TupleStruct, Union, and TypeAlias. * resolve/rust-late-name-resolver-2.0.cc (Late::visit): Remove override for Enum. * resolve/rust-late-name-resolver-2.0.h (Late::visit): Likewise. * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit): Rely more on DefaultResolver::visit. * resolve/rust-toplevel-name-resolver-2.0.h (TopLevel::visit): Remove override for BlockExpr. gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: Remove entries. Signed-off-by: Owen Avery <[email protected]>
1 parent 48aa71c commit fa6747f

7 files changed

+41
-65
lines changed

gcc/rust/resolve/rust-default-resolver.cc

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,27 +88,48 @@ DefaultResolver::visit (AST::TraitImpl &impl)
8888
void
8989
DefaultResolver::visit (AST::StructStruct &type)
9090
{
91-
// do we need to scope anything here? no, right?
91+
auto inner_fn = [this, &type] () { AST::DefaultASTVisitor::visit (type); };
9292

93-
// we also can't visit `StructField`s by default, so there's nothing to do -
94-
// correct? or should we do something like
93+
ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */, type.get_node_id (),
94+
inner_fn, type.get_struct_name ());
95+
}
9596

96-
AST::DefaultASTVisitor::visit (type);
97+
void
98+
DefaultResolver::visit (AST::TupleStruct &type)
99+
{
100+
auto inner_fn = [this, &type] () { AST::DefaultASTVisitor::visit (type); };
97101

98-
// FIXME: ???
102+
ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */, type.get_node_id (),
103+
inner_fn, type.get_struct_name ());
99104
}
100105

101106
void
102107
DefaultResolver::visit (AST::Enum &type)
103108
{
104-
// FIXME: Do we need to scope anything by default?
105-
106109
auto variant_fn = [this, &type] () { AST::DefaultASTVisitor::visit (type); };
107110

108111
ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */, type.get_node_id (),
109112
variant_fn, type.get_identifier ());
110113
}
111114

115+
void
116+
DefaultResolver::visit (AST::Union &type)
117+
{
118+
auto inner_fn = [this, &type] () { AST::DefaultASTVisitor::visit (type); };
119+
120+
ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */, type.get_node_id (),
121+
inner_fn, type.get_identifier ());
122+
}
123+
124+
void
125+
DefaultResolver::visit (AST::TypeAlias &type)
126+
{
127+
auto inner_fn = [this, &type] () { AST::DefaultASTVisitor::visit (type); };
128+
129+
ctx.scoped (Rib::Kind::Item /* FIXME: Correct? */, type.get_node_id (),
130+
inner_fn, type.get_new_type_name ());
131+
}
132+
112133
void
113134
DefaultResolver::visit (AST::ClosureExprInner &expr)
114135
{

gcc/rust/resolve/rust-default-resolver.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,10 @@ class DefaultResolver : public AST::DefaultASTVisitor
5252

5353
// type dec nodes, which visit their fields or variants by default
5454
void visit (AST::StructStruct &) override;
55+
void visit (AST::TupleStruct &) override;
5556
void visit (AST::Enum &) override;
57+
void visit (AST::Union &) override;
58+
void visit (AST::TypeAlias &) override;
5659

5760
// Visitors that visit their expression node(s)
5861
void visit (AST::ClosureExprInner &) override;

gcc/rust/resolve/rust-late-name-resolver-2.0.cc

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -308,13 +308,6 @@ Late::visit (AST::StructStruct &s)
308308
ctx.scoped (Rib::Kind::Item, s.get_node_id (), s_vis);
309309
}
310310

311-
void
312-
Late::visit (AST::Enum &s)
313-
{
314-
auto s_vis = [this, &s] () { AST::DefaultASTVisitor::visit (s); };
315-
ctx.scoped (Rib::Kind::Item, s.get_node_id (), s_vis);
316-
}
317-
318311
void
319312
Late::visit (AST::StructExprStruct &s)
320313
{

gcc/rust/resolve/rust-late-name-resolver-2.0.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ class Late : public DefaultResolver
5353
void visit (AST::StructExprStructBase &) override;
5454
void visit (AST::StructExprStructFields &) override;
5555
void visit (AST::StructStruct &) override;
56-
void visit (AST::Enum &) override;
5756
void visit (AST::GenericArgs &) override;
5857
void visit (AST::GenericArg &);
5958

gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,7 @@ TopLevel::visit (AST::Module &module)
8787
if (module.get_kind () == AST::Module::UNLOADED)
8888
module.load_items ();
8989

90-
auto sub_visitor = [this, &module] () {
91-
for (auto &item : module.get_items ())
92-
item->accept_vis (*this);
93-
};
94-
95-
ctx.scoped (Rib::Kind::Module, module.get_node_id (), sub_visitor,
96-
module.get_name ());
90+
DefaultResolver::visit (module);
9791

9892
if (Analysis::Mappings::get ().lookup_ast_module (module.get_node_id ())
9993
== tl::nullopt)
@@ -230,23 +224,6 @@ TopLevel::visit (AST::Function &function)
230224
DefaultResolver::visit (function);
231225
}
232226

233-
void
234-
TopLevel::visit (AST::BlockExpr &expr)
235-
{
236-
// extracting the lambda from the `scoped` call otherwise the code looks like
237-
// a hot turd thanks to our .clang-format
238-
239-
auto sub_vis = [this, &expr] () {
240-
for (auto &stmt : expr.get_statements ())
241-
stmt->accept_vis (*this);
242-
243-
if (expr.has_tail_expr ())
244-
expr.get_tail_expr ().accept_vis (*this);
245-
};
246-
247-
ctx.scoped (Rib::Kind::Normal, expr.get_node_id (), sub_vis);
248-
}
249-
250227
void
251228
TopLevel::visit (AST::StaticItem &static_item)
252229
{
@@ -261,6 +238,8 @@ TopLevel::visit (AST::ExternalStaticItem &static_item)
261238
{
262239
insert_or_error_out (static_item.get_identifier ().as_string (), static_item,
263240
Namespace::Values);
241+
242+
DefaultResolver::visit (static_item);
264243
}
265244

266245
void
@@ -291,6 +270,8 @@ TopLevel::visit (AST::TypeParam &type_param)
291270
{
292271
insert_or_error_out (type_param.get_type_representation (), type_param,
293272
Namespace::Types);
273+
274+
DefaultResolver::visit (type_param);
294275
}
295276

296277
void
@@ -309,6 +290,8 @@ TopLevel::visit (AST::TupleStruct &tuple_struct)
309290

310291
insert_or_error_out (tuple_struct.get_struct_name (), tuple_struct,
311292
Namespace::Values);
293+
294+
DefaultResolver::visit (tuple_struct);
312295
}
313296

314297
void
@@ -338,32 +321,19 @@ TopLevel::visit (AST::EnumItemDiscriminant &variant)
338321
void
339322
TopLevel::visit (AST::Enum &enum_item)
340323
{
341-
auto generic_vis = [this, &enum_item] () {
342-
for (auto &g : enum_item.get_generic_params ())
343-
{
344-
g->accept_vis (*this);
345-
}
346-
};
347-
348-
ctx.scoped (Rib::Kind::Item, enum_item.get_node_id (), generic_vis);
349-
350324
insert_or_error_out (enum_item.get_identifier (), enum_item,
351325
Namespace::Types);
352326

353-
auto field_vis = [this, &enum_item] () {
354-
for (auto &variant : enum_item.get_variants ())
355-
variant->accept_vis (*this);
356-
};
357-
358-
ctx.scoped (Rib::Kind::Item /* FIXME: Is that correct? */,
359-
enum_item.get_node_id (), field_vis, enum_item.get_identifier ());
327+
DefaultResolver::visit (enum_item);
360328
}
361329

362330
void
363331
TopLevel::visit (AST::Union &union_item)
364332
{
365333
insert_or_error_out (union_item.get_identifier (), union_item,
366334
Namespace::Types);
335+
336+
DefaultResolver::visit (union_item);
367337
}
368338

369339
void

gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ class TopLevel : public DefaultResolver
151151
void visit (AST::TraitItemType &trait_item) override;
152152
void visit (AST::MacroRulesDefinition &macro) override;
153153
void visit (AST::Function &function) override;
154-
void visit (AST::BlockExpr &expr) override;
155154
void visit (AST::StaticItem &static_item) override;
156155
void visit (AST::ExternalStaticItem &static_item) override;
157156
void visit (AST::StructStruct &struct_item) override;

gcc/testsuite/rust/compile/nr2/exclude

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,25 @@ derive_macro3.rs
2525
derive_macro4.rs
2626
derive_macro6.rs
2727
expected_type_args2.rs
28-
expected_type_args3.rs
2928
feature_rust_attri0.rs
3029
for_lifetimes.rs
3130
format_args_basic_expansion.rs
3231
generic-default1.rs
3332
generics1.rs
3433
generics10.rs
3534
generics11.rs
36-
generics2.rs
3735
generics3.rs
3836
generics4.rs
3937
generics5.rs
4038
generics6.rs
41-
generics8.rs
4239
generics9.rs
4340
if_let_expr.rs
4441
issue-1019.rs
4542
issue-1031.rs
4643
issue-1034.rs
4744
issue-1129-2.rs
4845
issue-1130.rs
49-
issue-1165.rs
5046
issue-1173.rs
51-
issue-1235.rs
5247
issue-1272.rs
5348
issue-1289.rs
5449
issue-1447.rs
@@ -66,7 +61,6 @@ issue-2036.rs
6661
issue-2037.rs
6762
issue-2043.rs
6863
issue-2070.rs
69-
issue-2105.rs
7064
issue-2135.rs
7165
issue-2136-1.rs
7266
issue-2136-2.rs
@@ -117,7 +111,6 @@ multiple_bindings1.rs
117111
multiple_bindings2.rs
118112
name_resolution2.rs
119113
name_resolution4.rs
120-
nested_generic.rs
121114
nested_macro_use1.rs
122115
nested_macro_use2.rs
123116
nested_macro_use3.rs
@@ -142,7 +135,6 @@ pub_restricted_3.rs
142135
redef_error2.rs
143136
redef_error4.rs
144137
redef_error5.rs
145-
redef_error6.rs
146138
self-path1.rs
147139
self-path2.rs
148140
sizeof-stray-infer-var-bug.rs
@@ -193,7 +185,6 @@ if_let_expr_simple.rs
193185
iflet.rs
194186
issue-3033.rs
195187
issue-3009.rs
196-
issue-2323.rs
197188
issue-2953-2.rs
198189
issue-1773.rs
199190
issue-2905-1.rs

0 commit comments

Comments
 (0)