diff options
author | Florian Diebold <[email protected]> | 2021-05-23 12:00:14 +0100 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2021-05-23 12:00:14 +0100 |
commit | 34a3bc4196db302ea5b31c51b6d555336965be5f (patch) | |
tree | f5de0f14403a7ff9df56abbfb347c651ade11a92 /crates/hir/src | |
parent | a5d85a6356dc761d047f46bf04eae09dc9ab80f9 (diff) |
Paper over #8931 a bit more
The problem was the skipping of binders in
`resolve_method_call_as_callable`; this still doesn't use the _correct_
substitution, but at least it doesn't return a type with free variables
in it.
Fixes #8931.
Diffstat (limited to 'crates/hir/src')
-rw-r--r-- | crates/hir/src/semantics.rs | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs index 38bd376bc..1b5064b5a 100644 --- a/crates/hir/src/semantics.rs +++ b/crates/hir/src/semantics.rs | |||
@@ -505,9 +505,10 @@ impl<'db> SemanticsImpl<'db> { | |||
505 | } | 505 | } |
506 | 506 | ||
507 | fn resolve_method_call_as_callable(&self, call: &ast::MethodCallExpr) -> Option<Callable> { | 507 | fn resolve_method_call_as_callable(&self, call: &ast::MethodCallExpr) -> Option<Callable> { |
508 | // FIXME: this erases Substs | 508 | // FIXME: this erases Substs, we should instead record the correct |
509 | // substitution during inference and use that | ||
509 | let func = self.resolve_method_call(call)?; | 510 | let func = self.resolve_method_call(call)?; |
510 | let (ty, _) = self.db.value_ty(func.into()).into_value_and_skipped_binders(); | 511 | let ty = hir_ty::TyBuilder::value_ty(self.db, func.into()).fill_with_unknown().build(); |
511 | let resolver = self.analyze(call.syntax()).resolver; | 512 | let resolver = self.analyze(call.syntax()).resolver; |
512 | let ty = Type::new_with_resolver(self.db, &resolver, ty)?; | 513 | let ty = Type::new_with_resolver(self.db, &resolver, ty)?; |
513 | let mut res = ty.as_callable(self.db)?; | 514 | let mut res = ty.as_callable(self.db)?; |