Take ocx by move for pending obligations
This commit is contained in:
parent
d9eb5232b6
commit
92861517aa
@ -188,7 +188,7 @@ impl<'a, 'tcx> Autoderef<'a, 'tcx> {
|
|||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
Some((normalized_ty, ocx.pending_obligations()))
|
Some((normalized_ty, ocx.into_pending_obligations()))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the final type we ended up with, which may be an inference
|
/// Returns the final type we ended up with, which may be an inference
|
||||||
|
@ -165,7 +165,7 @@ impl<'f, 'tcx> Coerce<'f, 'tcx> {
|
|||||||
let ocx = ObligationCtxt::new(self);
|
let ocx = ObligationCtxt::new(self);
|
||||||
ocx.register_obligations(obligations);
|
ocx.register_obligations(obligations);
|
||||||
if ocx.select_where_possible().is_empty() {
|
if ocx.select_where_possible().is_empty() {
|
||||||
Ok(InferOk { value, obligations: ocx.pending_obligations() })
|
Ok(InferOk { value, obligations: ocx.into_pending_obligations() })
|
||||||
} else {
|
} else {
|
||||||
Err(TypeError::Mismatch)
|
Err(TypeError::Mismatch)
|
||||||
}
|
}
|
||||||
@ -633,7 +633,7 @@ impl<'f, 'tcx> Coerce<'f, 'tcx> {
|
|||||||
if !ocx.select_where_possible().is_empty() {
|
if !ocx.select_where_possible().is_empty() {
|
||||||
return Err(TypeError::Mismatch);
|
return Err(TypeError::Mismatch);
|
||||||
}
|
}
|
||||||
coercion.obligations.extend(ocx.pending_obligations());
|
coercion.obligations.extend(ocx.into_pending_obligations());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
|
@ -195,8 +195,15 @@ impl<'a, 'tcx> ObligationCtxt<'a, 'tcx> {
|
|||||||
self.engine.borrow_mut().select_all_or_error(self.infcx)
|
self.engine.borrow_mut().select_all_or_error(self.infcx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the not-yet-processed and stalled obligations from the
|
||||||
|
/// `ObligationCtxt`.
|
||||||
|
///
|
||||||
|
/// Takes ownership of the context as doing operations such as
|
||||||
|
/// [`ObligationCtxt::eq`] afterwards will result in other obligations
|
||||||
|
/// getting ignored. You can make a new `ObligationCtxt` if this
|
||||||
|
/// needs to be done in a loop, for example.
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn pending_obligations(&self) -> Vec<PredicateObligation<'tcx>> {
|
pub fn into_pending_obligations(self) -> Vec<PredicateObligation<'tcx>> {
|
||||||
self.engine.borrow().pending_obligations()
|
self.engine.borrow().pending_obligations()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user