]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Improve handling of struct expressions in nr2.0
authorOwen Avery <powerboat9.gamer@gmail.com>
Sun, 27 Oct 2024 02:19:21 +0000 (22:19 -0400)
committerP-E-P <32375388+P-E-P@users.noreply.github.com>
Mon, 4 Nov 2024 09:46:50 +0000 (09:46 +0000)
gcc/rust/ChangeLog:

* resolve/rust-late-name-resolver-2.0.cc
(Late::visit): Handle StructExprStruct and use
ForeverStack::resolve_path instead of ForeverStack::get to
resolve struct expression paths.
* resolve/rust-late-name-resolver-2.0.h
(Late::visit): Handle StructExprStruct.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
gcc/rust/resolve/rust-late-name-resolver-2.0.cc
gcc/rust/resolve/rust-late-name-resolver-2.0.h

index e1670b8f3d8f5fadae9268e0bfbb67953ab9dda0..4dbd86aa5d0d40bd48b279dcf945b1e94cc424fb 100644 (file)
@@ -272,10 +272,19 @@ Late::visit (AST::StructStruct &s)
   ctx.scoped (Rib::Kind::Item, s.get_node_id (), s_vis);
 }
 
+void
+Late::visit (AST::StructExprStruct &s)
+{
+  auto resolved = ctx.types.resolve_path (s.get_struct_name ().get_segments ());
+
+  ctx.map_usage (Usage (s.get_struct_name ().get_node_id ()),
+                Definition (resolved->get_node_id ()));
+}
+
 void
 Late::visit (AST::StructExprStructBase &s)
 {
-  auto resolved = ctx.types.get (s.get_struct_name ().as_string ());
+  auto resolved = ctx.types.resolve_path (s.get_struct_name ().get_segments ());
 
   ctx.map_usage (Usage (s.get_struct_name ().get_node_id ()),
                 Definition (resolved->get_node_id ()));
@@ -285,7 +294,7 @@ Late::visit (AST::StructExprStructBase &s)
 void
 Late::visit (AST::StructExprStructFields &s)
 {
-  auto resolved = ctx.types.get (s.get_struct_name ().as_string ());
+  auto resolved = ctx.types.resolve_path (s.get_struct_name ().get_segments ());
 
   ctx.map_usage (Usage (s.get_struct_name ().get_node_id ()),
                 Definition (resolved->get_node_id ()));
index 81c3a046bf4fb008ea1dd05c173ca89131230cf9..59077035ce3c3cab63066722336d6416b3096916 100644 (file)
@@ -47,6 +47,7 @@ public:
   void visit (AST::IdentifierExpr &) override;
   void visit (AST::PathInExpression &) override;
   void visit (AST::TypePath &) override;
+  void visit (AST::StructExprStruct &) override;
   void visit (AST::StructExprStructBase &) override;
   void visit (AST::StructExprStructFields &) override;
   void visit (AST::StructStruct &) override;