diff options
author | Owen Avery <powerboat9.gamer@gmail.com> | 2025-04-25 18:06:41 -0400 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2025-05-08 15:39:40 +0000 |
commit | d90770b53854d6b81e1912a205aeffdd9bfc4078 (patch) | |
tree | f8ef5b6085a69a6f04d5e263b644d1a1a1965b09 /gcc/rust/resolve/rust-default-resolver.cc | |
parent | dd3de3f0e5516573179b2ed412fa87e0c8bd246a (diff) | |
download | gcc-d90770b53854d6b81e1912a205aeffdd9bfc4078.zip gcc-d90770b53854d6b81e1912a205aeffdd9bfc4078.tar.gz gcc-d90770b53854d6b81e1912a205aeffdd9bfc4078.tar.bz2 |
nr2.0: Adjust resolution of impl items
gcc/rust/ChangeLog:
* ast/rust-path.cc
(TypePath::make_debug_string): Add definition.
* ast/rust-path.h
(TypePath::make_debug_string): Add declaration.
* resolve/rust-default-resolver.cc
(DefaultResolver::visit): Adjust InherentImpl and TraitImpl
visitors to better handle associated item scope.
* resolve/rust-default-resolver.h
(DefaultResolver::maybe_insert_big_self): Add.
* resolve/rust-late-name-resolver-2.0.cc
(Late::visit): Adjust type path resolution errors.
* resolve/rust-rib.h
(Rib::Kind): Add Generics kind.
* resolve/rust-toplevel-name-resolver-2.0.cc
(TopLevel::visit): Remove InherentImpl and TraitImpl visitor
overrides.
(TopLevel::maybe_insert_big_self): Add override in order to add
a definition of 'Self'.
* resolve/rust-toplevel-name-resolver-2.0.h
(TopLevel::visit): Remove InherentImpl and TraitImpl visitor
overrides.
(TopLevel::maybe_insert_big_self): Add override.
gcc/testsuite/ChangeLog:
* rust/compile/nr2/exclude: Remove entries.
Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diffstat (limited to 'gcc/rust/resolve/rust-default-resolver.cc')
-rw-r--r-- | gcc/rust/resolve/rust-default-resolver.cc | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/gcc/rust/resolve/rust-default-resolver.cc b/gcc/rust/resolve/rust-default-resolver.cc index 1ec38ba..7d8029f 100644 --- a/gcc/rust/resolve/rust-default-resolver.cc +++ b/gcc/rust/resolve/rust-default-resolver.cc @@ -72,17 +72,54 @@ DefaultResolver::visit (AST::Trait &trait) void DefaultResolver::visit (AST::InherentImpl &impl) { - auto inner_fn = [this, &impl] () { AST::DefaultASTVisitor::visit (impl); }; + visit_outer_attrs (impl); + visit (impl.get_visibility ()); + visit_inner_attrs (impl); - ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn); + auto inner_fn_inner = [this, &impl] () { + for (auto &item : impl.get_impl_items ()) + visit (item); + }; + + auto inner_fn_outer = [this, &impl, &inner_fn_inner] () { + maybe_insert_big_self (impl); + for (auto &generic : impl.get_generic_params ()) + visit (generic); + if (impl.has_where_clause ()) + visit (impl.get_where_clause ()); + visit (impl.get_type ()); + + ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn_inner); + }; + + ctx.scoped (Rib::Kind::Generics, impl.get_node_id (), inner_fn_outer); } void DefaultResolver::visit (AST::TraitImpl &impl) { - auto inner_fn = [this, &impl] () { AST::DefaultASTVisitor::visit (impl); }; + visit_outer_attrs (impl); + visit (impl.get_visibility ()); + visit_inner_attrs (impl); + + auto inner_fn_inner = [this, &impl] () { + for (auto &item : impl.get_impl_items ()) + visit (item); + }; + + auto inner_fn_outer = [this, &impl, &inner_fn_inner] () { + maybe_insert_big_self (impl); + for (auto &generic : impl.get_generic_params ()) + visit (generic); + if (impl.has_where_clause ()) + visit (impl.get_where_clause ()); + visit (impl.get_type ()); + visit (impl.get_trait_path ()); + + ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn_inner); + }; - ctx.scoped (Rib::Kind::TraitOrImpl, impl.get_node_id (), inner_fn); + ctx.scoped (Rib::Kind::Generics, impl.get_node_id (), inner_fn_outer); } void |