diff options
author | Owen Avery <powerboat9.gamer@gmail.com> | 2025-01-07 14:03:13 -0500 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-03-21 12:56:55 +0100 |
commit | 2fa9719068774ab7ec5ed4cbe95cfe30fa94dbb1 (patch) | |
tree | 9b54b166afd3fb6a6231e54a247d8440aab9d8e7 | |
parent | d3efd2a91f54a19c3c2d59d690c447c0def26367 (diff) | |
download | gcc-2fa9719068774ab7ec5ed4cbe95cfe30fa94dbb1.zip gcc-2fa9719068774ab7ec5ed4cbe95cfe30fa94dbb1.tar.gz gcc-2fa9719068774ab7ec5ed4cbe95cfe30fa94dbb1.tar.bz2 |
gccrs: 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 <powerboat9.gamer@gmail.com>
-rw-r--r-- | gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc | 26 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h | 2 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/nr2/exclude | 3 |
3 files changed, 28 insertions, 3 deletions
diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc index 4aca709..4c6664f 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc @@ -104,6 +104,32 @@ TopLevel::visit (AST::Trait &trait) } void +TopLevel::visit (AST::InherentImpl &impl) +{ + auto inner_fn = [this, &impl] () { + insert_or_error_out (Identifier ("Self", impl.get_type ().get_locus ()), + impl.get_type (), Namespace::Types); + + AST::DefaultASTVisitor::visit (impl); + }; + + ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn); +} + +void +TopLevel::visit (AST::TraitImpl &impl) +{ + auto inner_fn = [this, &impl] () { + insert_or_error_out (Identifier ("Self", impl.get_type ().get_locus ()), + impl.get_type (), Namespace::Types); + + AST::DefaultASTVisitor::visit (impl); + }; + + ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn); +} + +void TopLevel::visit (AST::TraitItemType &trait_item) { insert_or_error_out (trait_item.get_identifier ().as_string (), trait_item, diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h index 64d2174..fabcb5b 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h @@ -148,6 +148,8 @@ private: void visit (AST::Module &module) override; void visit (AST::Trait &trait) override; + void visit (AST::InherentImpl &impl) override; + void visit (AST::TraitImpl &impl) override; void visit (AST::TraitItemType &trait_item) override; void visit (AST::MacroRulesDefinition ¯o) override; void visit (AST::Function &function) override; diff --git a/gcc/testsuite/rust/compile/nr2/exclude b/gcc/testsuite/rust/compile/nr2/exclude index af7d105..9b1ee7c 100644 --- a/gcc/testsuite/rust/compile/nr2/exclude +++ b/gcc/testsuite/rust/compile/nr2/exclude @@ -39,13 +39,11 @@ generics6.rs generics9.rs if_let_expr.rs issue-1019.rs -issue-1031.rs issue-1034.rs issue-1129-2.rs issue-1130.rs issue-1173.rs issue-1272.rs -issue-1289.rs issue-1447.rs issue-1483.rs issue-1725-1.rs @@ -85,7 +83,6 @@ issue-855.rs issue-925.rs iterators1.rs lookup_err1.rs -macros/mbe/macro-issue1233.rs macros/mbe/macro-issue1400.rs macros/mbe/macro13.rs macros/mbe/macro15.rs |