1
Fork 0

Remove ControlFlow::{BREAK, CONTINUE}

Libs-API decided to remove these in #102697.

Follow-up to #107023, which removed them from `compiler/`, but a couple new ones showed up since that was merged.
This commit is contained in:
Scott McMurray 2023-01-27 19:46:42 -08:00
parent 7d4df2d30e
commit 868d099a72
6 changed files with 19 additions and 62 deletions

View file

@ -93,24 +93,24 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
fn visit_ty(&mut self, t: Ty<'tcx>) -> ControlFlow<Self::BreakTy> { fn visit_ty(&mut self, t: Ty<'tcx>) -> ControlFlow<Self::BreakTy> {
if t.needs_infer() { if t.needs_infer() {
if ty::Term::from(t) == self.term { if ty::Term::from(t) == self.term {
ControlFlow::BREAK ControlFlow::Break(())
} else { } else {
t.super_visit_with(self) t.super_visit_with(self)
} }
} else { } else {
ControlFlow::CONTINUE ControlFlow::Continue(())
} }
} }
fn visit_const(&mut self, c: ty::Const<'tcx>) -> ControlFlow<Self::BreakTy> { fn visit_const(&mut self, c: ty::Const<'tcx>) -> ControlFlow<Self::BreakTy> {
if c.needs_infer() { if c.needs_infer() {
if ty::Term::from(c) == self.term { if ty::Term::from(c) == self.term {
ControlFlow::BREAK ControlFlow::Break(())
} else { } else {
c.super_visit_with(self) c.super_visit_with(self)
} }
} else { } else {
ControlFlow::CONTINUE ControlFlow::Continue(())
} }
} }
} }

View file

@ -99,7 +99,7 @@ where
) -> impl FnMut((), T) -> ControlFlow<B> + '_ { ) -> impl FnMut((), T) -> ControlFlow<B> + '_ {
move |(), x| match f(x) { move |(), x| match f(x) {
Some(x) => ControlFlow::Break(x), Some(x) => ControlFlow::Break(x),
None => ControlFlow::CONTINUE, None => ControlFlow::Continue(()),
} }
} }

View file

@ -539,7 +539,7 @@ where
#[rustc_inherit_overflow_checks] #[rustc_inherit_overflow_checks]
fn advance<U: Iterator>(n: usize, iter: &mut U) -> ControlFlow<(), usize> { fn advance<U: Iterator>(n: usize, iter: &mut U) -> ControlFlow<(), usize> {
match iter.advance_by(n) { match iter.advance_by(n) {
Ok(()) => ControlFlow::BREAK, Ok(()) => ControlFlow::Break(()),
Err(advanced) => ControlFlow::Continue(n - advanced), Err(advanced) => ControlFlow::Continue(n - advanced),
} }
} }
@ -629,7 +629,7 @@ where
#[rustc_inherit_overflow_checks] #[rustc_inherit_overflow_checks]
fn advance<U: DoubleEndedIterator>(n: usize, iter: &mut U) -> ControlFlow<(), usize> { fn advance<U: DoubleEndedIterator>(n: usize, iter: &mut U) -> ControlFlow<(), usize> {
match iter.advance_back_by(n) { match iter.advance_back_by(n) {
Ok(()) => ControlFlow::BREAK, Ok(()) => ControlFlow::Break(()),
Err(advanced) => ControlFlow::Continue(n - advanced), Err(advanced) => ControlFlow::Continue(n - advanced),
} }
} }

View file

@ -352,7 +352,7 @@ pub trait DoubleEndedIterator: Iterator {
#[inline] #[inline]
fn check<T>(mut predicate: impl FnMut(&T) -> bool) -> impl FnMut((), T) -> ControlFlow<T> { fn check<T>(mut predicate: impl FnMut(&T) -> bool) -> impl FnMut((), T) -> ControlFlow<T> {
move |(), x| { move |(), x| {
if predicate(&x) { ControlFlow::Break(x) } else { ControlFlow::CONTINUE } if predicate(&x) { ControlFlow::Break(x) } else { ControlFlow::Continue(()) }
} }
} }

View file

@ -2601,10 +2601,10 @@ pub trait Iterator {
#[inline] #[inline]
fn check<T>(mut f: impl FnMut(T) -> bool) -> impl FnMut((), T) -> ControlFlow<()> { fn check<T>(mut f: impl FnMut(T) -> bool) -> impl FnMut((), T) -> ControlFlow<()> {
move |(), x| { move |(), x| {
if f(x) { ControlFlow::CONTINUE } else { ControlFlow::BREAK } if f(x) { ControlFlow::Continue(()) } else { ControlFlow::Break(()) }
} }
} }
self.try_fold((), check(f)) == ControlFlow::CONTINUE self.try_fold((), check(f)) == ControlFlow::Continue(())
} }
/// Tests if any element of the iterator matches a predicate. /// Tests if any element of the iterator matches a predicate.
@ -2654,11 +2654,11 @@ pub trait Iterator {
#[inline] #[inline]
fn check<T>(mut f: impl FnMut(T) -> bool) -> impl FnMut((), T) -> ControlFlow<()> { fn check<T>(mut f: impl FnMut(T) -> bool) -> impl FnMut((), T) -> ControlFlow<()> {
move |(), x| { move |(), x| {
if f(x) { ControlFlow::BREAK } else { ControlFlow::CONTINUE } if f(x) { ControlFlow::Break(()) } else { ControlFlow::Continue(()) }
} }
} }
self.try_fold((), check(f)) == ControlFlow::BREAK self.try_fold((), check(f)) == ControlFlow::Break(())
} }
/// Searches for an element of an iterator that satisfies a predicate. /// Searches for an element of an iterator that satisfies a predicate.
@ -2717,7 +2717,7 @@ pub trait Iterator {
#[inline] #[inline]
fn check<T>(mut predicate: impl FnMut(&T) -> bool) -> impl FnMut((), T) -> ControlFlow<T> { fn check<T>(mut predicate: impl FnMut(&T) -> bool) -> impl FnMut((), T) -> ControlFlow<T> {
move |(), x| { move |(), x| {
if predicate(&x) { ControlFlow::Break(x) } else { ControlFlow::CONTINUE } if predicate(&x) { ControlFlow::Break(x) } else { ControlFlow::Continue(()) }
} }
} }
@ -2749,7 +2749,7 @@ pub trait Iterator {
fn check<T, B>(mut f: impl FnMut(T) -> Option<B>) -> impl FnMut((), T) -> ControlFlow<B> { fn check<T, B>(mut f: impl FnMut(T) -> Option<B>) -> impl FnMut((), T) -> ControlFlow<B> {
move |(), x| match f(x) { move |(), x| match f(x) {
Some(x) => ControlFlow::Break(x), Some(x) => ControlFlow::Break(x),
None => ControlFlow::CONTINUE, None => ControlFlow::Continue(()),
} }
} }
@ -2812,7 +2812,7 @@ pub trait Iterator {
R: Residual<Option<I>>, R: Residual<Option<I>>,
{ {
move |(), x| match f(&x).branch() { move |(), x| match f(&x).branch() {
ControlFlow::Continue(false) => ControlFlow::CONTINUE, ControlFlow::Continue(false) => ControlFlow::Continue(()),
ControlFlow::Continue(true) => ControlFlow::Break(Try::from_output(Some(x))), ControlFlow::Continue(true) => ControlFlow::Break(Try::from_output(Some(x))),
ControlFlow::Break(r) => ControlFlow::Break(FromResidual::from_residual(r)), ControlFlow::Break(r) => ControlFlow::Break(FromResidual::from_residual(r)),
} }
@ -3491,7 +3491,7 @@ pub trait Iterator {
F: FnMut(X, Y) -> Ordering, F: FnMut(X, Y) -> Ordering,
{ {
move |x, y| match cmp(x, y) { move |x, y| match cmp(x, y) {
Ordering::Equal => ControlFlow::CONTINUE, Ordering::Equal => ControlFlow::Continue(()),
non_eq => ControlFlow::Break(non_eq), non_eq => ControlFlow::Break(non_eq),
} }
} }
@ -3567,7 +3567,7 @@ pub trait Iterator {
F: FnMut(X, Y) -> Option<Ordering>, F: FnMut(X, Y) -> Option<Ordering>,
{ {
move |x, y| match partial_cmp(x, y) { move |x, y| match partial_cmp(x, y) {
Some(Ordering::Equal) => ControlFlow::CONTINUE, Some(Ordering::Equal) => ControlFlow::Continue(()),
non_eq => ControlFlow::Break(non_eq), non_eq => ControlFlow::Break(non_eq),
} }
} }
@ -3625,7 +3625,7 @@ pub trait Iterator {
F: FnMut(X, Y) -> bool, F: FnMut(X, Y) -> bool,
{ {
move |x, y| { move |x, y| {
if eq(x, y) { ControlFlow::CONTINUE } else { ControlFlow::BREAK } if eq(x, y) { ControlFlow::Continue(()) } else { ControlFlow::Break(()) }
} }
} }
@ -3859,7 +3859,7 @@ pub trait Iterator {
/// Compares two iterators element-wise using the given function. /// Compares two iterators element-wise using the given function.
/// ///
/// If `ControlFlow::CONTINUE` is returned from the function, the comparison moves on to the next /// If `ControlFlow::Continue(())` is returned from the function, the comparison moves on to the next
/// elements of both iterators. Returning `ControlFlow::Break(x)` short-circuits the iteration and /// elements of both iterators. Returning `ControlFlow::Break(x)` short-circuits the iteration and
/// returns `ControlFlow::Break(x)`. If one of the iterators runs out of elements, /// returns `ControlFlow::Break(x)`. If one of the iterators runs out of elements,
/// `ControlFlow::Continue(ord)` is returned where `ord` is the result of comparing the lengths of /// `ControlFlow::Continue(ord)` is returned where `ord` is the result of comparing the lengths of

View file

@ -259,46 +259,3 @@ impl<R: ops::Try> ControlFlow<R, R::Output> {
} }
} }
} }
impl<B> ControlFlow<B, ()> {
/// It's frequently the case that there's no value needed with `Continue`,
/// so this provides a way to avoid typing `(())`, if you prefer it.
///
/// # Examples
///
/// ```
/// #![feature(control_flow_enum)]
/// use std::ops::ControlFlow;
///
/// let mut partial_sum = 0;
/// let last_used = (1..10).chain(20..25).try_for_each(|x| {
/// partial_sum += x;
/// if partial_sum > 100 { ControlFlow::Break(x) }
/// else { ControlFlow::CONTINUE }
/// });
/// assert_eq!(last_used.break_value(), Some(22));
/// ```
#[unstable(feature = "control_flow_enum", reason = "new API", issue = "75744")]
pub const CONTINUE: Self = ControlFlow::Continue(());
}
impl<C> ControlFlow<(), C> {
/// APIs like `try_for_each` don't need values with `Break`,
/// so this provides a way to avoid typing `(())`, if you prefer it.
///
/// # Examples
///
/// ```
/// #![feature(control_flow_enum)]
/// use std::ops::ControlFlow;
///
/// let mut partial_sum = 0;
/// (1..10).chain(20..25).try_for_each(|x| {
/// if partial_sum > 100 { ControlFlow::BREAK }
/// else { partial_sum += x; ControlFlow::CONTINUE }
/// });
/// assert_eq!(partial_sum, 108);
/// ```
#[unstable(feature = "control_flow_enum", reason = "new API", issue = "75744")]
pub const BREAK: Self = ControlFlow::Break(());
}