]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: refactor default infer vars to be its own function
authorPhilip Herron <herron.philip@googlemail.com>
Mon, 19 May 2025 16:55:53 +0000 (17:55 +0100)
committerPhilip Herron <philip.herron@embecosm.com>
Mon, 26 May 2025 18:09:16 +0000 (18:09 +0000)
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.philip@googlemail.com>
gcc/rust/typecheck/rust-hir-type-check.h
gcc/rust/typecheck/rust-typecheck-context.cc

index 65f38c6099cd170ea28b37ee6a61e3575df79616..b9238808b9fd629eb474969da0907734e3bd9592 100644 (file)
@@ -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;
index 95c78a7008ec273d3b36ef7ffc60365c1441f71b..7092fede6ee081229325807055dfab9a9753b5f2 100644 (file)
@@ -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 &