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

commit r15-8115-gddd0fb9e4bc725ba38396b36bfca0b143cb342f1
Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
Date:   Thu Apr 25 16:00:23 2024 +0200

    gccrs: Change return type of lookup_crate_name
    
    Change the function's return type to use an optional.
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-ast-resolve-toplevel.h: Adapt the code to the new
            return type.
            * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit):
            Likewise.
            * rust-session-manager.cc (Session::load_extern_crate): Likewise.
            * util/rust-hir-map.cc (Mappings::lookup_crate_name): Change the 
return
            type to 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/resolve/rust-ast-resolve-toplevel.h        |  9 ++++-----
 gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc |  3 +--
 gcc/rust/rust-session-manager.cc                    |  6 ++----
 gcc/rust/util/rust-hir-map.cc                       | 12 ++++--------
 gcc/rust/util/rust-hir-map.h                        |  4 ++--
 5 files changed, 13 insertions(+), 21 deletions(-)

diff --git a/gcc/rust/resolve/rust-ast-resolve-toplevel.h 
b/gcc/rust/resolve/rust-ast-resolve-toplevel.h
index 1cadf9829fee..99fc4f6bfcc8 100644
--- a/gcc/rust/resolve/rust-ast-resolve-toplevel.h
+++ b/gcc/rust/resolve/rust-ast-resolve-toplevel.h
@@ -434,16 +434,15 @@ public:
       }
     else
       {
-       CrateNum found_crate_num = UNKNOWN_CRATENUM;
-       bool found
-         = mappings.lookup_crate_name (extern_crate.get_referenced_crate (),
-                                       found_crate_num);
-       if (!found)
+       auto cnum
+         = mappings.lookup_crate_name (extern_crate.get_referenced_crate ());
+       if (!cnum)
          {
            rust_error_at (extern_crate.get_locus (), "unknown crate %qs",
                           extern_crate.get_referenced_crate ().c_str ());
            return;
          }
+       auto found_crate_num = cnum.value ();
 
        bool ok
          = mappings.crate_num_to_nodeid (found_crate_num, resolved_crate);
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 281d4752fe14..1d8b1c5a65c1 100644
--- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
@@ -231,8 +231,7 @@ void
 TopLevel::visit (AST::ExternCrate &crate)
 {
   auto &mappings = Analysis::Mappings::get ();
-  CrateNum num;
-  rust_assert (mappings.lookup_crate_name (crate.get_referenced_crate (), 
num));
+  CrateNum num = *mappings.lookup_crate_name (crate.get_referenced_crate ());
 
   auto attribute_macros = mappings.lookup_attribute_proc_macros (num);
 
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index 0dd17b2b43a9..da66479d608c 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -1048,13 +1048,11 @@ NodeId
 Session::load_extern_crate (const std::string &crate_name, location_t locus)
 {
   // has it already been loaded?
-  CrateNum found_crate_num = UNKNOWN_CRATENUM;
-  bool found = mappings.lookup_crate_name (crate_name, found_crate_num);
-  if (found)
+  if (auto crate_num = mappings.lookup_crate_name (crate_name))
     {
       NodeId resolved_node_id = UNKNOWN_NODEID;
       bool resolved
-       = mappings.crate_num_to_nodeid (found_crate_num, resolved_node_id);
+       = mappings.crate_num_to_nodeid (*crate_num, resolved_node_id);
       rust_assert (resolved);
 
       return resolved_node_id;
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index 99c2493da14e..95d3b3a4d611 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -164,19 +164,15 @@ Mappings::get_current_crate_name () const
   return name;
 }
 
-bool
-Mappings::lookup_crate_name (const std::string &crate_name,
-                            CrateNum &resolved_crate_num) const
+tl::optional<CrateNum>
+Mappings::lookup_crate_name (const std::string &crate_name) const
 {
   for (const auto &it : crate_names)
     {
       if (it.second.compare (crate_name) == 0)
-       {
-         resolved_crate_num = it.first;
-         return true;
-       }
+       return it.first;
     }
-  return false;
+  return tl::nullopt;
 }
 
 bool
diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h
index 912d42a4b970..a68d81f34efe 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -83,8 +83,8 @@ public:
   bool get_crate_name (CrateNum crate_num, std::string &name) const;
   void set_crate_name (CrateNum crate_num, const std::string &name);
   std::string get_current_crate_name () const;
-  bool lookup_crate_name (const std::string &crate_name,
-                         CrateNum &resolved_crate_num) const;
+  tl::optional<CrateNum>
+  lookup_crate_name (const std::string &crate_name) const;
   bool crate_num_to_nodeid (const CrateNum &crate_num, NodeId &node_id) const;
   bool node_is_crate (NodeId node_id) const;

Reply via email to