aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorOwen Avery <powerboat9.gamer@gmail.com>2025-01-07 14:03:13 -0500
committerCohenArthur <arthur.cohen@embecosm.com>2025-01-08 13:10:22 +0000
commit1eaf085607f39111370e2c485ca819da7e14dfd1 (patch)
tree1be62c67a418273a3b39cc8b44209305312ef0dc /gcc
parent02601c74706bbe645ee31e2e1a2cef0f168a73e2 (diff)
downloadgcc-1eaf085607f39111370e2c485ca819da7e14dfd1.zip
gcc-1eaf085607f39111370e2c485ca819da7e14dfd1.tar.gz
gcc-1eaf085607f39111370e2c485ca819da7e14dfd1.tar.bz2
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>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc26
-rw-r--r--gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h2
-rw-r--r--gcc/testsuite/rust/compile/nr2/exclude3
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 a88adab..61e9ea4 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 4b8a51c..ff86cf4 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 &macro) 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