From: Arthur Cohen <[email protected]>
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.
---
.../resolve/rust-late-name-resolver-2.0.cc | 1 +
.../rust-toplevel-name-resolver-2.0.cc | 13 +++++++--
.../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 068d231c6fb..fa759d7bc8b 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 b6695f6de7c..f2f8f359c4c 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 ¯os_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 7b505cb6ace..92a964d2c14 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 ¯os_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 ¯os_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 ¯os_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 ¯os_rib;
+
private:
- ImportKind (Kind kind, AST::SimplePath &&to_resolve,
+ ImportKind (Kind kind, AST::SimplePath &&to_resolve, Rib &values_rib,
+ Rib &types_rib, Rib ¯os_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)
{}
};
--
2.45.2