https://gcc.gnu.org/g:8c5be0dd1c460694a2c8ef78bdadc2c6aea01ad8

commit r15-8116-g8c5be0dd1c460694a2c8ef78bdadc2c6aea01ad8
Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
Date:   Thu Apr 25 16:15:42 2024 +0200

    gccrs: Change crate_num_to_nodeid return type
    
    Change the function's return type to an optional.
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-ast-resolve-toplevel.h: Adapt the code to the new
            return type.
            * rust-session-manager.cc (Session::load_extern_crate): Likewise.
            * util/rust-hir-map.cc (Mappings::crate_num_to_nodeid): Change the
            return type.
            * 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 | 11 ++++-------
 gcc/rust/rust-session-manager.cc             |  8 +++-----
 gcc/rust/util/rust-hir-map.cc                |  9 ++++-----
 gcc/rust/util/rust-hir-map.h                 |  2 +-
 4 files changed, 12 insertions(+), 18 deletions(-)

diff --git a/gcc/rust/resolve/rust-ast-resolve-toplevel.h 
b/gcc/rust/resolve/rust-ast-resolve-toplevel.h
index 99fc4f6bfcc8..565ca922e84d 100644
--- a/gcc/rust/resolve/rust-ast-resolve-toplevel.h
+++ b/gcc/rust/resolve/rust-ast-resolve-toplevel.h
@@ -429,8 +429,7 @@ public:
     if (extern_crate.references_self ())
       {
        CrateNum crate_num = mappings.get_current_crate ();
-       bool ok = mappings.crate_num_to_nodeid (crate_num, resolved_crate);
-       rust_assert (ok);
+       resolved_crate = mappings.crate_num_to_nodeid (crate_num).value ();
       }
     else
       {
@@ -442,11 +441,9 @@ public:
                           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);
-       if (!ok)
+       if (auto resolved = mappings.crate_num_to_nodeid (*cnum))
+         resolved_crate = resolved.value ();
+       else
          {
            rust_internal_error_at (extern_crate.get_locus (),
                                    "failed to resolve crate to nodeid");
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index da66479d608c..61a76d69a6b8 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -1050,12 +1050,10 @@ Session::load_extern_crate (const std::string 
&crate_name, location_t locus)
   // has it already been loaded?
   if (auto crate_num = mappings.lookup_crate_name (crate_name))
     {
-      NodeId resolved_node_id = UNKNOWN_NODEID;
-      bool resolved
-       = mappings.crate_num_to_nodeid (*crate_num, resolved_node_id);
-      rust_assert (resolved);
+      auto resolved_node_id = mappings.crate_num_to_nodeid (*crate_num);
+      rust_assert (resolved_node_id);
 
-      return resolved_node_id;
+      return *resolved_node_id;
     }
 
   std::string relative_import_path = "";
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index 95d3b3a4d611..76642a1b1320 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -175,15 +175,14 @@ Mappings::lookup_crate_name (const std::string 
&crate_name) const
   return tl::nullopt;
 }
 
-bool
-Mappings::crate_num_to_nodeid (const CrateNum &crate_num, NodeId &node_id) 
const
+tl::optional<NodeId>
+Mappings::crate_num_to_nodeid (const CrateNum &crate_num) const
 {
   auto it = ast_crate_mappings.find (crate_num);
   if (it == ast_crate_mappings.end ())
-    return false;
+    return tl::nullopt;
 
-  node_id = it->second->get_node_id ();
-  return true;
+  return it->second->get_node_id ();
 }
 
 bool
diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h
index a68d81f34efe..8181abe00a98 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -85,7 +85,7 @@ public:
   std::string get_current_crate_name () 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;
+  tl::optional<NodeId> crate_num_to_nodeid (const CrateNum &crate_num) const;
   bool node_is_crate (NodeId node_id) const;
 
   NodeId get_next_node_id ();

Reply via email to