https://gcc.gnu.org/g:dcc146b341a2865cfa240739d2cc8e4604d82eb4
commit dcc146b341a2865cfa240739d2cc8e4604d82eb4 Author: Arthur Cohen <arthur.co...@embecosm.com> Date: Wed Apr 3 17:41:47 2024 +0200 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. Diff: --- gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc | 11 +++++++++++ gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) 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 6524a303061b..0054a9a25d27 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 fb16866aeb12..7edc70c5db7c 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;