reintroduce commit_if_ok
call into higher_ranked_sub
This commit is contained in:
parent
3cd286bac2
commit
6cb4ffbe14
@ -29,27 +29,29 @@ impl<'a, 'gcx, 'tcx> CombineFields<'a, 'gcx, 'tcx> {
|
||||
|
||||
let span = self.trace.cause.span;
|
||||
|
||||
// First, we instantiate each bound region in the supertype with a
|
||||
// fresh placeholder region.
|
||||
let (b_prime, _) = self.infcx.replace_bound_vars_with_placeholders(b);
|
||||
return self.infcx.commit_if_ok(|_snapshot| {
|
||||
// First, we instantiate each bound region in the supertype with a
|
||||
// fresh placeholder region.
|
||||
let (b_prime, _) = self.infcx.replace_bound_vars_with_placeholders(b);
|
||||
|
||||
// Next, we instantiate each bound region in the subtype
|
||||
// with a fresh region variable. These region variables --
|
||||
// but no other pre-existing region variables -- can name
|
||||
// the placeholders.
|
||||
let (a_prime, _) =
|
||||
self.infcx
|
||||
.replace_bound_vars_with_fresh_vars(span, HigherRankedType, a);
|
||||
// Next, we instantiate each bound region in the subtype
|
||||
// with a fresh region variable. These region variables --
|
||||
// but no other pre-existing region variables -- can name
|
||||
// the placeholders.
|
||||
let (a_prime, _) =
|
||||
self.infcx
|
||||
.replace_bound_vars_with_fresh_vars(span, HigherRankedType, a);
|
||||
|
||||
debug!("a_prime={:?}", a_prime);
|
||||
debug!("b_prime={:?}", b_prime);
|
||||
debug!("a_prime={:?}", a_prime);
|
||||
debug!("b_prime={:?}", b_prime);
|
||||
|
||||
// Compare types now that bound regions have been replaced.
|
||||
let result = self.sub(a_is_expected).relate(&a_prime, &b_prime)?;
|
||||
// Compare types now that bound regions have been replaced.
|
||||
let result = self.sub(a_is_expected).relate(&a_prime, &b_prime)?;
|
||||
|
||||
debug!("higher_ranked_sub: OK result={:?}", result);
|
||||
debug!("higher_ranked_sub: OK result={:?}", result);
|
||||
|
||||
Ok(ty::Binder::bind(result))
|
||||
Ok(ty::Binder::bind(result))
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -72,10 +74,10 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
||||
/// [rustc guide]: https://rust-lang.github.io/rustc-guide/traits/hrtb.html
|
||||
pub fn replace_bound_vars_with_placeholders<T>(
|
||||
&self,
|
||||
binder: &ty::Binder<T>
|
||||
binder: &ty::Binder<T>,
|
||||
) -> (T, PlaceholderMap<'tcx>)
|
||||
where
|
||||
T: TypeFoldable<'tcx>
|
||||
T: TypeFoldable<'tcx>,
|
||||
{
|
||||
let next_universe = self.create_next_universe();
|
||||
|
||||
@ -97,14 +99,11 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
||||
|
||||
debug!(
|
||||
"replace_bound_vars_with_placeholders(\
|
||||
next_universe={:?}, \
|
||||
binder={:?}, \
|
||||
result={:?}, \
|
||||
map={:?})",
|
||||
next_universe,
|
||||
binder,
|
||||
result,
|
||||
map,
|
||||
next_universe={:?}, \
|
||||
binder={:?}, \
|
||||
result={:?}, \
|
||||
map={:?})",
|
||||
next_universe, binder, result, map,
|
||||
);
|
||||
|
||||
(result, map)
|
||||
|
Loading…
Reference in New Issue
Block a user