typeck: Remove Coerce::unpack_actual_value.
This commit is contained in:
parent
dc37664c94
commit
dbab236a9e
1 changed files with 20 additions and 30 deletions
|
@ -96,12 +96,6 @@ impl<'f, 'tcx> Coerce<'f, 'tcx> {
|
||||||
Ok(None) // No coercion required.
|
Ok(None) // No coercion required.
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unpack_actual_value<T, F>(&self, a: Ty<'tcx>, f: F) -> T where
|
|
||||||
F: FnOnce(Ty<'tcx>) -> T,
|
|
||||||
{
|
|
||||||
f(self.fcx.infcx().shallow_resolve(a))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn coerce(&self,
|
fn coerce(&self,
|
||||||
expr_a: &hir::Expr,
|
expr_a: &hir::Expr,
|
||||||
a: Ty<'tcx>,
|
a: Ty<'tcx>,
|
||||||
|
@ -353,22 +347,20 @@ impl<'f, 'tcx> Coerce<'f, 'tcx> {
|
||||||
* into a closure or a `proc`.
|
* into a closure or a `proc`.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
self.unpack_actual_value(b, |b| {
|
let b = self.fcx.infcx().shallow_resolve(b);
|
||||||
debug!("coerce_from_fn_pointer(a={:?}, b={:?})",
|
debug!("coerce_from_fn_pointer(a={:?}, b={:?})", a, b);
|
||||||
a, b);
|
|
||||||
|
|
||||||
if let ty::TyFnPtr(fn_ty_b) = b.sty {
|
if let ty::TyFnPtr(fn_ty_b) = b.sty {
|
||||||
match (fn_ty_a.unsafety, fn_ty_b.unsafety) {
|
match (fn_ty_a.unsafety, fn_ty_b.unsafety) {
|
||||||
(hir::Unsafety::Normal, hir::Unsafety::Unsafe) => {
|
(hir::Unsafety::Normal, hir::Unsafety::Unsafe) => {
|
||||||
let unsafe_a = self.tcx().safe_to_unsafe_fn_ty(fn_ty_a);
|
let unsafe_a = self.tcx().safe_to_unsafe_fn_ty(fn_ty_a);
|
||||||
try!(self.subtype(unsafe_a, b));
|
try!(self.subtype(unsafe_a, b));
|
||||||
return Ok(Some(AdjustUnsafeFnPointer));
|
return Ok(Some(AdjustUnsafeFnPointer));
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
}
|
||||||
|
_ => {}
|
||||||
}
|
}
|
||||||
self.subtype(a, b)
|
}
|
||||||
})
|
self.subtype(a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn coerce_from_fn_item(&self,
|
fn coerce_from_fn_item(&self,
|
||||||
|
@ -381,19 +373,17 @@ impl<'f, 'tcx> Coerce<'f, 'tcx> {
|
||||||
* into a closure or a `proc`.
|
* into a closure or a `proc`.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
self.unpack_actual_value(b, |b| {
|
let b = self.fcx.infcx().shallow_resolve(b);
|
||||||
debug!("coerce_from_fn_item(a={:?}, b={:?})",
|
debug!("coerce_from_fn_item(a={:?}, b={:?})", a, b);
|
||||||
a, b);
|
|
||||||
|
|
||||||
match b.sty {
|
match b.sty {
|
||||||
ty::TyFnPtr(_) => {
|
ty::TyFnPtr(_) => {
|
||||||
let a_fn_pointer = self.tcx().mk_ty(ty::TyFnPtr(fn_ty_a));
|
let a_fn_pointer = self.tcx().mk_ty(ty::TyFnPtr(fn_ty_a));
|
||||||
try!(self.subtype(a_fn_pointer, b));
|
try!(self.subtype(a_fn_pointer, b));
|
||||||
Ok(Some(AdjustReifyFnPointer))
|
Ok(Some(AdjustReifyFnPointer))
|
||||||
}
|
|
||||||
_ => self.subtype(a, b)
|
|
||||||
}
|
}
|
||||||
})
|
_ => self.subtype(a, b)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn coerce_unsafe_ptr(&self,
|
fn coerce_unsafe_ptr(&self,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue