Optional are more convenient to use and avoid uninitialized data.
gcc/rust/ChangeLog:
* backend/rust-compile-expr.cc (CompileExpr::generate_closure_function):
Adapt code for new optional return type.
* checks/errors/privacy/rust-privacy-reporter.cc (PrivacyReporter::check_base_type_privacy):
Likewise.
* util/rust-hir-map.cc (Mappings::lookup_hir_to_node): Change return
type to an optional.
* util/rust-hir-map.h: Adapt function prototype with the new return
type.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
const Resolver::CanonicalPath &parent_canonical_path
= closure_tyty.get_ident ().path;
- NodeId node_id;
- bool ok = ctx->get_mappings ().lookup_hir_to_node (
- expr.get_mappings ().get_hirid (), &node_id);
- rust_assert (ok);
+
+ tl::optional<NodeId> nid = ctx->get_mappings ().lookup_hir_to_node (
+ expr.get_mappings ().get_hirid ());
+ rust_assert (nid.has_value ());
+ auto node_id = nid.value ();
+
Resolver::CanonicalPath path = parent_canonical_path.append (
Resolver::CanonicalPath::new_seg (node_id, "{{closure}}"));
case TyTy::ADT:
case TyTy::STR: {
auto ref_id = ty->get_ref ();
- NodeId lookup_id;
-
- bool ok = mappings.lookup_hir_to_node (ref_id, &lookup_id);
- rust_assert (ok);
-
- return check_for_privacy_violation (lookup_id, locus);
+ if (auto lookup_id = mappings.lookup_hir_to_node (ref_id))
+ return check_for_privacy_violation (*lookup_id, locus);
+ rust_unreachable ();
}
case TyTy::REF:
return recursive_check (
return {it->second};
}
-bool
-Mappings::lookup_hir_to_node (HirId id, NodeId *ref)
+tl::optional<NodeId>
+Mappings::lookup_hir_to_node (HirId id)
{
auto it = hirIdToNodeMappings.find (id);
if (it == hirIdToNodeMappings.end ())
- return false;
+ return tl::nullopt;
- *ref = it->second;
- return true;
+ return {it->second};
}
void
void insert_node_to_hir (NodeId id, HirId ref);
tl::optional<HirId> lookup_node_to_hir (NodeId id);
- bool lookup_hir_to_node (HirId id, NodeId *ref);
+ tl::optional<NodeId> lookup_hir_to_node (HirId id);
void insert_location (HirId id, location_t locus);
location_t lookup_location (HirId id);