Skip to content

Commit 1eaf085

Browse files
powerboat9CohenArthur
authored andcommitted
nr2.0: Resolve Self inside impl blocks
gcc/rust/ChangeLog: * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit): Insert a definition for Self when visiting InherentImpl and TraitImpl instances. * resolve/rust-toplevel-name-resolver-2.0.h (TopLevel::visit): Add visitors for InherentImpl and TraitImpl. gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: Remove entries. Signed-off-by: Owen Avery <[email protected]>
1 parent 02601c7 commit 1eaf085

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

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

+26
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,32 @@ TopLevel::visit (AST::Trait &trait)
103103
DefaultResolver::visit (trait);
104104
}
105105

106+
void
107+
TopLevel::visit (AST::InherentImpl &impl)
108+
{
109+
auto inner_fn = [this, &impl] () {
110+
insert_or_error_out (Identifier ("Self", impl.get_type ().get_locus ()),
111+
impl.get_type (), Namespace::Types);
112+
113+
AST::DefaultASTVisitor::visit (impl);
114+
};
115+
116+
ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn);
117+
}
118+
119+
void
120+
TopLevel::visit (AST::TraitImpl &impl)
121+
{
122+
auto inner_fn = [this, &impl] () {
123+
insert_or_error_out (Identifier ("Self", impl.get_type ().get_locus ()),
124+
impl.get_type (), Namespace::Types);
125+
126+
AST::DefaultASTVisitor::visit (impl);
127+
};
128+
129+
ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn);
130+
}
131+
106132
void
107133
TopLevel::visit (AST::TraitItemType &trait_item)
108134
{

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

+2
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ class TopLevel : public DefaultResolver
148148

149149
void visit (AST::Module &module) override;
150150
void visit (AST::Trait &trait) override;
151+
void visit (AST::InherentImpl &impl) override;
152+
void visit (AST::TraitImpl &impl) override;
151153
void visit (AST::TraitItemType &trait_item) override;
152154
void visit (AST::MacroRulesDefinition &macro) override;
153155
void visit (AST::Function &function) override;

gcc/testsuite/rust/compile/nr2/exclude

-3
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,11 @@ generics6.rs
3939
generics9.rs
4040
if_let_expr.rs
4141
issue-1019.rs
42-
issue-1031.rs
4342
issue-1034.rs
4443
issue-1129-2.rs
4544
issue-1130.rs
4645
issue-1173.rs
4746
issue-1272.rs
48-
issue-1289.rs
4947
issue-1447.rs
5048
issue-1483.rs
5149
issue-1725-1.rs
@@ -85,7 +83,6 @@ issue-855.rs
8583
issue-925.rs
8684
iterators1.rs
8785
lookup_err1.rs
88-
macros/mbe/macro-issue1233.rs
8986
macros/mbe/macro-issue1400.rs
9087
macros/mbe/macro13.rs
9188
macros/mbe/macro15.rs

0 commit comments

Comments
 (0)