https://gcc.gnu.org/g:fa6c5c08a131d108a6a9f927b5154d2db81a84ba

commit r15-8119-gfa6c5c08a131d108a6a9f927b5154d2db81a84ba
Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
Date:   Thu May 2 11:43:02 2024 +0200

    gccrs: Change lookup_local_defid return type to optional
    
    Make the API more convenient by changing the function's return type. We
    can now differentiate between a stored null pointer and a missing value.
    
    gcc/rust/ChangeLog:
    
            * util/rust-hir-map.cc (Mappings::insert_defid_mapping): Adapt call
            to new return type.
            (Mappings::insert_local_defid_mapping): Likewise.
            (Mappings::lookup_local_defid): Change return type to wrap it with 
an
            optional.
            * util/rust-hir-map.h: Update the function's prototype.
    
    Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>

Diff:
---
 gcc/rust/util/rust-hir-map.cc | 12 ++++++------
 gcc/rust/util/rust-hir-map.h  |  3 ++-
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index 899f71be49d8..dcedea97e09f 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -313,7 +313,7 @@ Mappings::insert_defid_mapping (DefId id, HIR::Item *item)
   LocalDefId local_def_id = id.localDefId;
 
   rust_assert (!lookup_defid (id));
-  rust_assert (lookup_local_defid (crate_num, local_def_id) == nullptr);
+  rust_assert (!lookup_local_defid (crate_num, local_def_id));
   rust_assert (lookup_trait_item_defid (id) == nullptr);
 
   defIdMappings[id] = item;
@@ -337,7 +337,7 @@ Mappings::insert_defid_mapping (DefId id, HIR::TraitItem 
*item)
   LocalDefId local_def_id = id.localDefId;
 
   rust_assert (!lookup_defid (id));
-  rust_assert (lookup_local_defid (crate_num, local_def_id) == nullptr);
+  rust_assert (!lookup_local_defid (crate_num, local_def_id));
   rust_assert (lookup_trait_item_defid (id) == nullptr);
 
   defIdTraitItemMappings[id] = item;
@@ -718,20 +718,20 @@ void
 Mappings::insert_local_defid_mapping (CrateNum crateNum, LocalDefId id,
                                      HIR::Item *item)
 {
-  rust_assert (lookup_local_defid (crateNum, id) == nullptr);
+  rust_assert (!lookup_local_defid (crateNum, id));
   localDefIdMappings[crateNum][id] = item;
 }
 
-HIR::Item *
+tl::optional<HIR::Item *>
 Mappings::lookup_local_defid (CrateNum crateNum, LocalDefId id)
 {
   auto it = localDefIdMappings.find (crateNum);
   if (it == localDefIdMappings.end ())
-    return nullptr;
+    return tl::nullopt;
 
   auto iy = it->second.find (id);
   if (iy == it->second.end ())
-    return nullptr;
+    return tl::nullopt;
 
   return iy->second;
 }
diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h
index 8a927c9ad4fa..b4c39a94e829 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -112,7 +112,8 @@ public:
 
   void insert_local_defid_mapping (CrateNum crateNum, LocalDefId id,
                                   HIR::Item *item);
-  HIR::Item *lookup_local_defid (CrateNum crateNum, LocalDefId id);
+  tl::optional<HIR::Item *> lookup_local_defid (CrateNum crateNum,
+                                               LocalDefId id);
 
   void insert_hir_item (HIR::Item *item);
   tl::optional<HIR::Item *> lookup_hir_item (HirId id);

Reply via email to