https://gcc.gnu.org/g:457b3d1e29ce72bda6ac74a7c761decd657aab12

commit 457b3d1e29ce72bda6ac74a7c761decd657aab12
Author: Philip Herron <herron.phi...@googlemail.com>
Date:   Mon May 19 17:55:53 2025 +0100

    gccrs: refactor default infer vars to be its own function
    
    This is just a simple refactor to pull all the logic outside of the
    closure which makes it more readable.
    
    gcc/rust/ChangeLog:
    
            * typecheck/rust-hir-type-check.h: new function
            * typecheck/rust-typecheck-context.cc 
(TypeCheckContext::compute_inference_variables):
            call the new helper
            (TypeCheckContext::compute_infer_var): refactored code
    
    Signed-off-by: Philip Herron <herron.phi...@googlemail.com>

Diff:
---
 gcc/rust/typecheck/rust-hir-type-check.h     |  4 +-
 gcc/rust/typecheck/rust-typecheck-context.cc | 67 +++++++++++++++-------------
 2 files changed, 39 insertions(+), 32 deletions(-)

diff --git a/gcc/rust/typecheck/rust-hir-type-check.h 
b/gcc/rust/typecheck/rust-hir-type-check.h
index 65f38c6099cd..b9238808b9fd 100644
--- a/gcc/rust/typecheck/rust-hir-type-check.h
+++ b/gcc/rust/typecheck/rust-hir-type-check.h
@@ -263,13 +263,15 @@ public:
   WARN_UNUSED_RESULT std::vector<TyTy::Region>
   regions_from_generic_args (const HIR::GenericArgs &args) const;
 
-  void compute_inference_variables (bool error);
+  void compute_inference_variables (bool emit_error);
 
   TyTy::VarianceAnalysis::CrateCtx &get_variance_analysis_ctx ();
 
 private:
   TypeCheckContext ();
 
+  bool compute_infer_var (HirId id, TyTy::BaseType *ty, bool emit_error);
+
   std::map<NodeId, HirId> node_id_refs;
   std::map<HirId, TyTy::BaseType *> resolved;
   std::vector<std::unique_ptr<TyTy::BaseType>> builtins;
diff --git a/gcc/rust/typecheck/rust-typecheck-context.cc 
b/gcc/rust/typecheck/rust-typecheck-context.cc
index 95c78a7008ec..7092fede6ee0 100644
--- a/gcc/rust/typecheck/rust-typecheck-context.cc
+++ b/gcc/rust/typecheck/rust-typecheck-context.cc
@@ -575,43 +575,48 @@ TypeCheckContext::regions_from_generic_args (const 
HIR::GenericArgs &args) const
 }
 
 void
-TypeCheckContext::compute_inference_variables (bool error)
+TypeCheckContext::compute_inference_variables (bool emit_error)
 {
-  auto &mappings = Analysis::Mappings::get ();
-
   // default inference variables if possible
   iterate ([&] (HirId id, TyTy::BaseType *ty) mutable -> bool {
-    // nothing to do
-    if (ty->get_kind () != TyTy::TypeKind::INFER)
-      return true;
+    return compute_infer_var (id, ty, emit_error);
+  });
+}
 
-    TyTy::InferType *infer_var = static_cast<TyTy::InferType *> (ty);
-    TyTy::BaseType *default_type;
-
-    rust_debug_loc (mappings.lookup_location (id),
-                   "trying to default infer-var: %s",
-                   infer_var->as_string ().c_str ());
-    bool ok = infer_var->default_type (&default_type);
-    if (!ok)
-      {
-       if (error)
-         rust_error_at (mappings.lookup_location (id), ErrorCode::E0282,
-                        "type annotations needed");
-       return true;
-      }
-
-    auto result
-      = unify_site (id, TyTy::TyWithLocation (ty),
-                   TyTy::TyWithLocation (default_type), UNDEF_LOCATION);
-    rust_assert (result);
-    rust_assert (result->get_kind () != TyTy::TypeKind::ERROR);
-    result->set_ref (id);
-    insert_type (Analysis::NodeMapping (mappings.get_current_crate (), 0, id,
-                                       UNKNOWN_LOCAL_DEFID),
-                result);
+bool
+TypeCheckContext::compute_infer_var (HirId id, TyTy::BaseType *ty,
+                                    bool emit_error)
+{
+  auto &mappings = Analysis::Mappings::get ();
 
+  // nothing to do
+  if (ty->get_kind () != TyTy::TypeKind::INFER)
     return true;
-  });
+
+  TyTy::InferType *infer_var = static_cast<TyTy::InferType *> (ty);
+  TyTy::BaseType *default_type;
+
+  rust_debug_loc (mappings.lookup_location (id),
+                 "trying to default infer-var: %s",
+                 infer_var->as_string ().c_str ());
+  bool ok = infer_var->default_type (&default_type);
+  if (!ok)
+    {
+      if (emit_error)
+       rust_error_at (mappings.lookup_location (id), ErrorCode::E0282,
+                      "type annotations needed");
+      return true;
+    }
+
+  auto result
+    = unify_site (id, TyTy::TyWithLocation (ty),
+                 TyTy::TyWithLocation (default_type), UNDEF_LOCATION);
+  rust_assert (result);
+  rust_assert (result->get_kind () != TyTy::TypeKind::ERROR);
+  result->set_ref (id);
+  insert_implicit_type (id, result);
+
+  return true;
 }
 
 TyTy::VarianceAnalysis::CrateCtx &

Reply via email to