1
Fork 0

Review comments

This commit is contained in:
Jack Huey 2020-10-16 15:14:38 -04:00
parent eba10270c6
commit f6a53b4c69
15 changed files with 34 additions and 31 deletions

View file

@ -1058,11 +1058,11 @@ impl<'tcx> Predicate<'tcx> {
/// Converts this to a `Binder<PredicateAtom<'tcx>>`. If the value was an
/// `Atom`, then it is not allowed to contain escaping bound vars.
pub fn bound_atom(self, _tcx: TyCtxt<'tcx>) -> Binder<PredicateAtom<'tcx>> {
pub fn bound_atom(self) -> Binder<PredicateAtom<'tcx>> {
match self.kind() {
&PredicateKind::ForAll(binder) => binder,
&PredicateKind::Atom(atom) => {
assert!(!atom.has_escaping_bound_vars());
debug_assert!(!atom.has_escaping_bound_vars());
Binder::dummy(atom)
}
}

View file

@ -1006,6 +1006,11 @@ impl<T> Binder<T> {
/// current `Binder`. This should not be used if the new value *changes*
/// the bound variables. Note: the (old or new) value itself does not
/// necessarily need to *name* all the bound variables.
///
/// This currently doesn't do anything different than `bind`, because we
/// don't actually track bound vars. However, semantically, it is different
/// because bound vars aren't allowed to change here, whereas they are
/// in `bind`. This may be (debug) asserted in the future.
pub fn rebind<U>(&self, value: U) -> Binder<U> {
Binder(value)
}