https://gcc.gnu.org/g:6a47e726ea5d86a6028709ca723c0725f774b4de

commit 6a47e726ea5d86a6028709ca723c0725f774b4de
Author: Arthur Cohen <arthur.co...@embecosm.com>
Date:   Sat Apr 6 00:32:57 2024 +0200

    imports: Start storing Ribs in ImportKind
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-late-name-resolver-2.0.cc (Late::visit): Add debug 
call.
            * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit): 
Store
            imports using the new classes.
            * resolve/rust-toplevel-name-resolver-2.0.h: Use new classes.

Diff:
---
 gcc/rust/resolve/rust-late-name-resolver-2.0.cc    |  1 +
 .../resolve/rust-toplevel-name-resolver-2.0.cc     | 13 +++++++---
 gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h | 29 +++++++++++++++-------
 3 files changed, 31 insertions(+), 12 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 f171f14429c3..16140a232051 100644
--- a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
@@ -201,6 +201,7 @@ Late::visit (AST::PathInExpression &expr)
   // in a function item` error here?
   // do we emit it in `get<Namespace::Labels>`?
 
+  rust_debug ("[ARTHUR]: %s", expr.as_simple_path ().as_string ().c_str ());
   auto value = ctx.values.resolve_path (expr.get_segments ());
   if (!value.has_value ())
     rust_unreachable (); // Should have been resolved earlier
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 a82bc6cb8b9d..e612027577d6 100644
--- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
@@ -455,6 +455,10 @@ TopLevel::visit (AST::UseDeclaration &use)
   auto rebind_path
     = std::vector<std::pair<AST::SimplePath, AST::UseTreeRebind>> ();
 
+  auto &values_rib = ctx.values.peek ();
+  auto &types_rib = ctx.types.peek ();
+  auto &macros_rib = ctx.macros.peek ();
+
   // FIXME: How do we handle `use foo::{self}` imports? Some beforehand 
cleanup?
   // How do we handle module imports in general? Should they get added to all
   // namespaces?
@@ -463,14 +467,17 @@ TopLevel::visit (AST::UseDeclaration &use)
   flatten (tree.get (), paths, glob_path, rebind_path, this->ctx);
 
   for (auto &&path : paths)
-    imports_to_resolve.emplace_back (ImportKind::Simple (std::move (path)));
+    imports_to_resolve.emplace_back (
+      ImportKind::Simple (std::move (path), values_rib, types_rib, 
macros_rib));
 
   for (auto &&glob : glob_path)
-    imports_to_resolve.emplace_back (ImportKind::Glob (std::move (glob)));
+    imports_to_resolve.emplace_back (
+      ImportKind::Glob (std::move (glob), values_rib, types_rib, macros_rib));
 
   for (auto &&rebind : rebind_path)
     imports_to_resolve.emplace_back (
-      ImportKind::Rebind (std::move (rebind.first), std::move 
(rebind.second)));
+      ImportKind::Rebind (std::move (rebind.first), std::move (rebind.second),
+                         values_rib, types_rib, macros_rib));
 }
 
 } // namespace Resolver2_0
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 66eb948d6572..52a88aae95cc 100644
--- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h
+++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h
@@ -64,21 +64,26 @@ public:
       Rebind,
     } kind;
 
-    static ImportKind Glob (AST::SimplePath &&to_resolve)
+    static ImportKind Glob (AST::SimplePath &&to_resolve, Rib &values_rib,
+                           Rib &types_rib, Rib &macros_rib)
     {
-      return ImportKind (Kind::Glob, std::move (to_resolve));
+      return ImportKind (Kind::Glob, std::move (to_resolve), values_rib,
+                        types_rib, macros_rib);
     }
 
-    static ImportKind Simple (AST::SimplePath &&to_resolve)
+    static ImportKind Simple (AST::SimplePath &&to_resolve, Rib &values_rib,
+                             Rib &types_rib, Rib &macros_rib)
     {
-      return ImportKind (Kind::Simple, std::move (to_resolve));
+      return ImportKind (Kind::Simple, std::move (to_resolve), values_rib,
+                        types_rib, macros_rib);
     }
 
     static ImportKind Rebind (AST::SimplePath &&to_resolve,
-                             AST::UseTreeRebind &&rebind)
+                             AST::UseTreeRebind &&rebind, Rib &values_rib,
+                             Rib &types_rib, Rib &macros_rib)
     {
-      return ImportKind (Kind::Rebind, std::move (to_resolve),
-                        std::move (rebind));
+      return ImportKind (Kind::Rebind, std::move (to_resolve), values_rib,
+                        types_rib, macros_rib, std::move (rebind));
     }
 
     // The path for `Early` to resolve.
@@ -87,11 +92,17 @@ public:
     // The path to rebind an import to - only present if kind is Kind::Rebind
     tl::optional<AST::UseTreeRebind> rebind;
 
+    Rib &values_rib;
+    Rib &types_rib;
+    Rib &macros_rib;
+
   private:
-    ImportKind (Kind kind, AST::SimplePath &&to_resolve,
+    ImportKind (Kind kind, AST::SimplePath &&to_resolve, Rib &values_rib,
+               Rib &types_rib, Rib &macros_rib,
                tl::optional<AST::UseTreeRebind> &&rebind = tl::nullopt)
       : kind (kind), to_resolve (std::move (to_resolve)),
-       rebind (std::move (rebind))
+       rebind (std::move (rebind)), values_rib (values_rib),
+       types_rib (types_rib), macros_rib (macros_rib)
     {}
   };

Reply via email to