aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2024-04-03 17:41:47 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2025-03-19 15:32:12 +0100
commitca285a61c35df7da6ff652a2b2fbba8eef7d246b (patch)
tree7eaf2062bea01b01e57e795452b7adf0bc5a4fb0 /gcc
parent68af48783006d7c51371b0e8634e82ef0256e4ab (diff)
downloadgcc-ca285a61c35df7da6ff652a2b2fbba8eef7d246b.zip
gcc-ca285a61c35df7da6ff652a2b2fbba8eef7d246b.tar.gz
gcc-ca285a61c35df7da6ff652a2b2fbba8eef7d246b.tar.bz2
gccrs: toplevel: Add note for resolving use declarations
gcc/rust/ChangeLog: * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::handle_use_dec): Add notes on the problem. * resolve/rust-toplevel-name-resolver-2.0.h: Likewise.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc11
-rw-r--r--gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h2
2 files changed, 12 insertions, 1 deletions
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 746b224..b18b86c 100644
--- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
@@ -452,6 +452,13 @@ TopLevel::handle_use_dec (AST::SimplePath &path)
auto locus = path.get_final_segment ().get_locus ();
auto declared_name = path.get_final_segment ().as_string ();
+ // In that function, we only need to declare a new definition - the use path.
+ // the resolution needs to happpen in the EarlyNameResolver. So the
+ // definitions we'll add will be the path's NodeId - that makes sense, as we
+ // need one definition per path declared in a Use tree. so all good.
+ // alright, now in what namespace do we declare them? all of them? do we only
+ // declare them in the EarlyNameResolver? this is dodgy
+
// in what namespace do we perform path resolution? All of them? see which one
// matches? Error out on ambiguities?
// so, apparently, for each one that matches, add it to the proper namespace
@@ -464,6 +471,10 @@ TopLevel::handle_use_dec (AST::SimplePath &path)
const AST::SimplePath &path) {
tl::optional<Rib::Definition> resolved = tl::nullopt;
+ insert_or_error_out (declared_name, locus, path.get_node_id (), ns);
+ // what do we do here with the full simplepath? do we add it to an extra
+ // map?
+
// FIXME: resolve_path needs to return an `expected<NodeId, Error>` so
// that we can improve it with hints or location or w/ever. and maybe
// only emit it the first time.
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 0950370..affddb9 100644
--- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h
+++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h
@@ -84,7 +84,7 @@ private:
std::unordered_map<NodeId, location_t> node_locations;
// Store node forwarding for use declaration, the link between a
- // "new" local name and its definition.
+ // definition and its new local name.
std::unordered_map<NodeId, NodeId> node_forwarding;
void visit (AST::Module &module) override;