diff options
author | Owen Avery <powerboat9.gamer@gmail.com> | 2025-02-09 03:28:43 -0500 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2025-03-20 16:59:17 +0000 |
commit | 0d7c150572681b9feaf353ad776961d63d9fef27 (patch) | |
tree | 5122bbc66a3075ab8333100aa57fc484e41f9f2e /gcc/rust/resolve/rust-late-name-resolver-2.0.cc | |
parent | c185688b63ab8671b8552b83359b737f48fbecb6 (diff) | |
download | gcc-0d7c150572681b9feaf353ad776961d63d9fef27.zip gcc-0d7c150572681b9feaf353ad776961d63d9fef27.tar.gz gcc-0d7c150572681b9feaf353ad776961d63d9fef27.tar.bz2 |
nr2.0: Adjust visitors for struct expressions
gcc/rust/ChangeLog:
* ast/rust-ast-visitor.cc
(DefaultASTVisitor::visit): Make sure to always visit the struct
name.
* resolve/rust-late-name-resolver-2.0.cc
(Late::visit): Avoid visiting the struct name twice.
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-late-name-resolver-2.0.cc')
-rw-r--r-- | gcc/rust/resolve/rust-late-name-resolver-2.0.cc | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc index ef09fb0..71c63f1 100644 --- a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc @@ -351,6 +351,10 @@ Late::visit (AST::StructStruct &s) void Late::visit (AST::StructExprStruct &s) { + visit_outer_attrs (s); + visit_inner_attrs (s); + DefaultResolver::visit (s.get_struct_name ()); + auto resolved = ctx.resolve_path (s.get_struct_name ().get_segments (), Namespace::Types); @@ -361,24 +365,34 @@ Late::visit (AST::StructExprStruct &s) void Late::visit (AST::StructExprStructBase &s) { + visit_outer_attrs (s); + visit_inner_attrs (s); + DefaultResolver::visit (s.get_struct_name ()); + visit (s.get_struct_base ()); + auto resolved = ctx.resolve_path (s.get_struct_name ().get_segments (), Namespace::Types); ctx.map_usage (Usage (s.get_struct_name ().get_node_id ()), Definition (resolved->get_node_id ())); - DefaultResolver::visit (s); } void Late::visit (AST::StructExprStructFields &s) { + visit_outer_attrs (s); + visit_inner_attrs (s); + DefaultResolver::visit (s.get_struct_name ()); + if (s.has_struct_base ()) + visit (s.get_struct_base ()); + for (auto &field : s.get_fields ()) + visit (field); + auto resolved = ctx.resolve_path (s.get_struct_name ().get_segments (), Namespace::Types); ctx.map_usage (Usage (s.get_struct_name ().get_node_id ()), Definition (resolved->get_node_id ())); - - DefaultResolver::visit (s); } // needed because Late::visit (AST::GenericArg &) is non-virtual |