Rollup merge of #107398 - scottmcm:its-their-funeral, r=dtolnay
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. r? libs
This commit is contained in:
commit
c95707a29b
15 changed files with 28 additions and 74 deletions
|
@ -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(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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(());
|
|
||||||
}
|
|
||||||
|
|
|
@ -61,14 +61,14 @@ impl HtmlWithLimit {
|
||||||
/// and returns [`ControlFlow::Break`].
|
/// and returns [`ControlFlow::Break`].
|
||||||
pub(super) fn push(&mut self, text: &str) -> ControlFlow<(), ()> {
|
pub(super) fn push(&mut self, text: &str) -> ControlFlow<(), ()> {
|
||||||
if self.len + text.len() > self.limit {
|
if self.len + text.len() > self.limit {
|
||||||
return ControlFlow::BREAK;
|
return ControlFlow::Break(());
|
||||||
}
|
}
|
||||||
|
|
||||||
self.flush_queue();
|
self.flush_queue();
|
||||||
write!(self.buf, "{}", Escape(text)).unwrap();
|
write!(self.buf, "{}", Escape(text)).unwrap();
|
||||||
self.len += text.len();
|
self.len += text.len();
|
||||||
|
|
||||||
ControlFlow::CONTINUE
|
ControlFlow::Continue(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Open an HTML tag.
|
/// Open an HTML tag.
|
||||||
|
|
|
@ -83,7 +83,7 @@ fn past_the_limit() {
|
||||||
buf.push("word#")?;
|
buf.push("word#")?;
|
||||||
buf.push(&n.to_string())?;
|
buf.push(&n.to_string())?;
|
||||||
buf.close_tag();
|
buf.close_tag();
|
||||||
ControlFlow::CONTINUE
|
ControlFlow::Continue(())
|
||||||
});
|
});
|
||||||
buf.close_tag();
|
buf.close_tag();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
|
|
@ -1188,18 +1188,18 @@ fn markdown_summary_with_limit(
|
||||||
Event::Start(tag) => match tag {
|
Event::Start(tag) => match tag {
|
||||||
Tag::Emphasis => buf.open_tag("em"),
|
Tag::Emphasis => buf.open_tag("em"),
|
||||||
Tag::Strong => buf.open_tag("strong"),
|
Tag::Strong => buf.open_tag("strong"),
|
||||||
Tag::CodeBlock(..) => return ControlFlow::BREAK,
|
Tag::CodeBlock(..) => return ControlFlow::Break(()),
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
Event::End(tag) => match tag {
|
Event::End(tag) => match tag {
|
||||||
Tag::Emphasis | Tag::Strong => buf.close_tag(),
|
Tag::Emphasis | Tag::Strong => buf.close_tag(),
|
||||||
Tag::Paragraph | Tag::Heading(..) => return ControlFlow::BREAK,
|
Tag::Paragraph | Tag::Heading(..) => return ControlFlow::Break(()),
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
Event::HardBreak | Event::SoftBreak => buf.push(" ")?,
|
Event::HardBreak | Event::SoftBreak => buf.push(" ")?,
|
||||||
_ => {}
|
_ => {}
|
||||||
};
|
};
|
||||||
ControlFlow::CONTINUE
|
ControlFlow::Continue(())
|
||||||
});
|
});
|
||||||
|
|
||||||
(buf.finish(), stopped_early)
|
(buf.finish(), stopped_early)
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
#![feature(array_methods)]
|
#![feature(array_methods)]
|
||||||
#![feature(assert_matches)]
|
#![feature(assert_matches)]
|
||||||
#![feature(box_patterns)]
|
#![feature(box_patterns)]
|
||||||
#![feature(control_flow_enum)]
|
|
||||||
#![feature(drain_filter)]
|
#![feature(drain_filter)]
|
||||||
#![feature(is_terminal)]
|
#![feature(is_terminal)]
|
||||||
#![feature(let_chains)]
|
#![feature(let_chains)]
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#![feature(array_windows)]
|
#![feature(array_windows)]
|
||||||
#![feature(binary_heap_into_iter_sorted)]
|
#![feature(binary_heap_into_iter_sorted)]
|
||||||
#![feature(box_patterns)]
|
#![feature(box_patterns)]
|
||||||
#![feature(control_flow_enum)]
|
|
||||||
#![feature(drain_filter)]
|
#![feature(drain_filter)]
|
||||||
#![feature(iter_intersperse)]
|
#![feature(iter_intersperse)]
|
||||||
#![feature(let_chains)]
|
#![feature(let_chains)]
|
||||||
|
|
|
@ -54,7 +54,7 @@ fn collect_replace_calls<'tcx>(
|
||||||
from_args.push_front(from);
|
from_args.push_front(from);
|
||||||
ControlFlow::Continue(())
|
ControlFlow::Continue(())
|
||||||
} else {
|
} else {
|
||||||
ControlFlow::BREAK
|
ControlFlow::Break(())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ControlFlow::Continue(())
|
ControlFlow::Continue(())
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#![feature(array_chunks)]
|
#![feature(array_chunks)]
|
||||||
#![feature(box_patterns)]
|
#![feature(box_patterns)]
|
||||||
#![feature(control_flow_enum)]
|
|
||||||
#![feature(let_chains)]
|
#![feature(let_chains)]
|
||||||
#![feature(lint_reasons)]
|
#![feature(lint_reasons)]
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
|
|
|
@ -327,7 +327,7 @@ fn is_assert_arg(cx: &LateContext<'_>, expr: &Expr<'_>, assert_expn: ExpnId) ->
|
||||||
} else {
|
} else {
|
||||||
match cx.tcx.item_name(macro_call.def_id) {
|
match cx.tcx.item_name(macro_call.def_id) {
|
||||||
// `cfg!(debug_assertions)` in `debug_assert!`
|
// `cfg!(debug_assertions)` in `debug_assert!`
|
||||||
sym::cfg => ControlFlow::CONTINUE,
|
sym::cfg => ControlFlow::Continue(()),
|
||||||
// assert!(other_macro!(..))
|
// assert!(other_macro!(..))
|
||||||
_ => ControlFlow::Break(true),
|
_ => ControlFlow::Break(true),
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,7 +140,7 @@ impl TypeVisitor<'_> for ContainsRegion {
|
||||||
type BreakTy = ();
|
type BreakTy = ();
|
||||||
|
|
||||||
fn visit_region(&mut self, _: ty::Region<'_>) -> ControlFlow<Self::BreakTy> {
|
fn visit_region(&mut self, _: ty::Region<'_>) -> ControlFlow<Self::BreakTy> {
|
||||||
ControlFlow::BREAK
|
ControlFlow::Break(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue