std::range
This commit is contained in:
parent
6c1d960d88
commit
95eaadc773
17 changed files with 42 additions and 40 deletions
|
@ -530,6 +530,8 @@ pub use core::option;
|
|||
pub use core::pin;
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::ptr;
|
||||
#[unstable(feature = "new_range_api", issue = "125687")]
|
||||
pub use core::range;
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::result;
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
|
|
@ -19,16 +19,16 @@ fn inclusive_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
|
|||
scope 2 {
|
||||
debug x => _9;
|
||||
}
|
||||
scope 5 (inlined iter::range::<impl Iterator for RangeInclusive<u32>>::next) {
|
||||
scope 5 (inlined iter::range::<impl Iterator for std::ops::RangeInclusive<u32>>::next) {
|
||||
}
|
||||
}
|
||||
scope 3 (inlined RangeInclusive::<u32>::new) {
|
||||
scope 3 (inlined std::ops::RangeInclusive::<u32>::new) {
|
||||
}
|
||||
scope 4 (inlined <RangeInclusive<u32> as IntoIterator>::into_iter) {
|
||||
scope 4 (inlined <std::ops::RangeInclusive<u32> as IntoIterator>::into_iter) {
|
||||
}
|
||||
|
||||
bb0: {
|
||||
_4 = RangeInclusive::<u32> { start: copy _1, end: copy _2, exhausted: const false };
|
||||
_4 = std::ops::RangeInclusive::<u32> { start: copy _1, end: copy _2, exhausted: const false };
|
||||
StorageLive(_5);
|
||||
_5 = copy _4;
|
||||
goto -> bb1;
|
||||
|
@ -37,7 +37,7 @@ fn inclusive_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
|
|||
bb1: {
|
||||
StorageLive(_7);
|
||||
_6 = &mut _5;
|
||||
_7 = <RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(move _6) -> [return: bb2, unwind unreachable];
|
||||
_7 = <std::ops::RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(move _6) -> [return: bb2, unwind unreachable];
|
||||
}
|
||||
|
||||
bb2: {
|
||||
|
|
|
@ -19,16 +19,16 @@ fn inclusive_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
|
|||
scope 2 {
|
||||
debug x => _9;
|
||||
}
|
||||
scope 5 (inlined iter::range::<impl Iterator for RangeInclusive<u32>>::next) {
|
||||
scope 5 (inlined iter::range::<impl Iterator for std::ops::RangeInclusive<u32>>::next) {
|
||||
}
|
||||
}
|
||||
scope 3 (inlined RangeInclusive::<u32>::new) {
|
||||
scope 3 (inlined std::ops::RangeInclusive::<u32>::new) {
|
||||
}
|
||||
scope 4 (inlined <RangeInclusive<u32> as IntoIterator>::into_iter) {
|
||||
scope 4 (inlined <std::ops::RangeInclusive<u32> as IntoIterator>::into_iter) {
|
||||
}
|
||||
|
||||
bb0: {
|
||||
_4 = RangeInclusive::<u32> { start: copy _1, end: copy _2, exhausted: const false };
|
||||
_4 = std::ops::RangeInclusive::<u32> { start: copy _1, end: copy _2, exhausted: const false };
|
||||
StorageLive(_5);
|
||||
_5 = copy _4;
|
||||
goto -> bb1;
|
||||
|
@ -37,7 +37,7 @@ fn inclusive_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
|
|||
bb1: {
|
||||
StorageLive(_7);
|
||||
_6 = &mut _5;
|
||||
_7 = <RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(move _6) -> [return: bb2, unwind: bb8];
|
||||
_7 = <std::ops::RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(move _6) -> [return: bb2, unwind: bb8];
|
||||
}
|
||||
|
||||
bb2: {
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
// MIR for `range_inclusive_iter_next` after PreCodegen
|
||||
|
||||
fn range_inclusive_iter_next(_1: &mut RangeInclusive<u32>) -> Option<u32> {
|
||||
fn range_inclusive_iter_next(_1: &mut std::ops::RangeInclusive<u32>) -> Option<u32> {
|
||||
debug it => _1;
|
||||
let mut _0: std::option::Option<u32>;
|
||||
scope 1 (inlined iter::range::<impl Iterator for RangeInclusive<u32>>::next) {
|
||||
scope 1 (inlined iter::range::<impl Iterator for std::ops::RangeInclusive<u32>>::next) {
|
||||
}
|
||||
|
||||
bb0: {
|
||||
_0 = <RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(move _1) -> [return: bb1, unwind unreachable];
|
||||
_0 = <std::ops::RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(move _1) -> [return: bb1, unwind unreachable];
|
||||
}
|
||||
|
||||
bb1: {
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
// MIR for `range_inclusive_iter_next` after PreCodegen
|
||||
|
||||
fn range_inclusive_iter_next(_1: &mut RangeInclusive<u32>) -> Option<u32> {
|
||||
fn range_inclusive_iter_next(_1: &mut std::ops::RangeInclusive<u32>) -> Option<u32> {
|
||||
debug it => _1;
|
||||
let mut _0: std::option::Option<u32>;
|
||||
scope 1 (inlined iter::range::<impl Iterator for RangeInclusive<u32>>::next) {
|
||||
scope 1 (inlined iter::range::<impl Iterator for std::ops::RangeInclusive<u32>>::next) {
|
||||
}
|
||||
|
||||
bb0: {
|
||||
_0 = <RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(move _1) -> [return: bb1, unwind continue];
|
||||
_0 = <std::ops::RangeInclusive<u32> as iter::range::RangeInclusiveIteratorImpl>::spec_next(move _1) -> [return: bb1, unwind continue];
|
||||
}
|
||||
|
||||
bb1: {
|
||||
|
|
|
@ -4,7 +4,7 @@ error[E0741]: `std::ops::Range<usize>` must implement `ConstParamTy` to be used
|
|||
LL | struct _Range<const R: std::ops::Range<usize>>;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0741]: `RangeFrom<usize>` must implement `ConstParamTy` to be used as the type of a const generic parameter
|
||||
error[E0741]: `std::ops::RangeFrom<usize>` must implement `ConstParamTy` to be used as the type of a const generic parameter
|
||||
--> $DIR/const-generics-range.rs:13:28
|
||||
|
|
||||
LL | struct _RangeFrom<const R: std::ops::RangeFrom<usize>>;
|
||||
|
@ -16,7 +16,7 @@ error[E0741]: `RangeFull` must implement `ConstParamTy` to be used as the type o
|
|||
LL | struct _RangeFull<const R: std::ops::RangeFull>;
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0741]: `RangeInclusive<usize>` must implement `ConstParamTy` to be used as the type of a const generic parameter
|
||||
error[E0741]: `std::ops::RangeInclusive<usize>` must implement `ConstParamTy` to be used as the type of a const generic parameter
|
||||
--> $DIR/const-generics-range.rs:24:33
|
||||
|
|
||||
LL | struct _RangeInclusive<const R: std::ops::RangeInclusive<usize>>;
|
||||
|
|
|
@ -10,7 +10,7 @@ help: add `#![feature(adt_const_params)]` to the crate attributes to enable more
|
|||
LL + #![feature(adt_const_params)]
|
||||
|
|
||||
|
||||
error: `RangeFrom<usize>` is forbidden as the type of a const generic parameter
|
||||
error: `std::ops::RangeFrom<usize>` is forbidden as the type of a const generic parameter
|
||||
--> $DIR/const-generics-range.rs:13:28
|
||||
|
|
||||
LL | struct _RangeFrom<const R: std::ops::RangeFrom<usize>>;
|
||||
|
@ -34,7 +34,7 @@ help: add `#![feature(adt_const_params)]` to the crate attributes to enable more
|
|||
LL + #![feature(adt_const_params)]
|
||||
|
|
||||
|
||||
error: `RangeInclusive<usize>` is forbidden as the type of a const generic parameter
|
||||
error: `std::ops::RangeInclusive<usize>` is forbidden as the type of a const generic parameter
|
||||
--> $DIR/const-generics-range.rs:24:33
|
||||
|
|
||||
LL | struct _RangeInclusive<const R: std::ops::RangeInclusive<usize>>;
|
||||
|
|
|
@ -11,7 +11,7 @@ const RANGE : _Range<{ 0 .. 1000 }> = _Range;
|
|||
|
||||
// `RangeFrom` should be usable within const generics:
|
||||
struct _RangeFrom<const R: std::ops::RangeFrom<usize>>;
|
||||
//[min]~^ ERROR `RangeFrom<usize>` is forbidden
|
||||
//[min]~^ ERROR `std::ops::RangeFrom<usize>` is forbidden
|
||||
const RANGE_FROM : _RangeFrom<{ 0 .. }> = _RangeFrom;
|
||||
|
||||
// `RangeFull` should be usable within const generics:
|
||||
|
@ -22,7 +22,7 @@ const RANGE_FULL : _RangeFull<{ .. }> = _RangeFull;
|
|||
// Regression test for #70155
|
||||
// `RangeInclusive` should be usable within const generics:
|
||||
struct _RangeInclusive<const R: std::ops::RangeInclusive<usize>>;
|
||||
//[min]~^ ERROR `RangeInclusive<usize>` is forbidden
|
||||
//[min]~^ ERROR `std::ops::RangeInclusive<usize>` is forbidden
|
||||
const RANGE_INCLUSIVE : _RangeInclusive<{ 0 ..= 999 }> = _RangeInclusive;
|
||||
|
||||
// `RangeTo` should be usable within const generics:
|
||||
|
|
|
@ -21,7 +21,7 @@ LL | RANGE => {}
|
|||
| `RANGE` is interpreted as a constant, not a new binding
|
||||
|
|
||||
= note: expected type `i32`
|
||||
found struct `RangeInclusive<i32>`
|
||||
found struct `std::ops::RangeInclusive<i32>`
|
||||
help: you may want to move the range into the match block
|
||||
|
|
||||
LL | 0..=255 => {}
|
||||
|
@ -43,7 +43,7 @@ LL | RANGE2 => {}
|
|||
| `RANGE2` is interpreted as a constant, not a new binding
|
||||
|
|
||||
= note: expected type `i32`
|
||||
found struct `RangeInclusive<i32>`
|
||||
found struct `std::ops::RangeInclusive<i32>`
|
||||
= note: constants only support matching by type, if you meant to match against a range of values, consider using a range pattern like `min ..= max` in the match block
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
fn main() {
|
||||
let _ = (-10..=10).find(|x: &i32| x.signum() == 0);
|
||||
//[current]~^ ERROR type mismatch in closure arguments
|
||||
//[next]~^^ ERROR expected a `FnMut(&<RangeInclusive<{integer}> as Iterator>::Item)` closure, found
|
||||
//[next]~^^ ERROR expected a `FnMut(&<std::ops::RangeInclusive<{integer}> as Iterator>::Item)` closure, found
|
||||
let _ = (-10..=10).find(|x: &i32| x.signum() == 0);
|
||||
//[current]~^ ERROR type mismatch in closure arguments
|
||||
//[next]~^^ ERROR expected `RangeInclusive<{integer}>` to be an iterator that yields `&&i32`, but it yields `{integer}`
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
error[E0277]: expected a `FnMut(&<RangeInclusive<{integer}> as Iterator>::Item)` closure, found `{closure@$DIR/closure-arg-type-mismatch-issue-45727.rs:6:29: 6:37}`
|
||||
error[E0277]: expected a `FnMut(&<std::ops::RangeInclusive<{integer}> as Iterator>::Item)` closure, found `{closure@$DIR/closure-arg-type-mismatch-issue-45727.rs:6:29: 6:37}`
|
||||
--> $DIR/closure-arg-type-mismatch-issue-45727.rs:6:29
|
||||
|
|
||||
LL | let _ = (-10..=10).find(|x: i32| x.signum() == 0);
|
||||
| ---- ^^^^^^^^^^^^^^^^^^^^^^^^ expected an `FnMut(&<RangeInclusive<{integer}> as Iterator>::Item)` closure, found `{closure@$DIR/closure-arg-type-mismatch-issue-45727.rs:6:29: 6:37}`
|
||||
| ---- ^^^^^^^^^^^^^^^^^^^^^^^^ expected an `FnMut(&<std::ops::RangeInclusive<{integer}> as Iterator>::Item)` closure, found `{closure@$DIR/closure-arg-type-mismatch-issue-45727.rs:6:29: 6:37}`
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= help: the trait `for<'a> FnMut(&'a <RangeInclusive<{integer}> as Iterator>::Item)` is not implemented for closure `{closure@$DIR/closure-arg-type-mismatch-issue-45727.rs:6:29: 6:37}`
|
||||
= help: the trait `for<'a> FnMut(&'a <std::ops::RangeInclusive<{integer}> as Iterator>::Item)` is not implemented for closure `{closure@$DIR/closure-arg-type-mismatch-issue-45727.rs:6:29: 6:37}`
|
||||
= note: expected a closure with arguments `(i32,)`
|
||||
found a closure with arguments `(&<RangeInclusive<{integer}> as Iterator>::Item,)`
|
||||
found a closure with arguments `(&<std::ops::RangeInclusive<{integer}> as Iterator>::Item,)`
|
||||
note: required by a bound in `find`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
fn main() {
|
||||
let _ = (-10..=10).find(|x: i32| x.signum() == 0);
|
||||
//[current]~^ ERROR type mismatch in closure arguments
|
||||
//[next]~^^ ERROR expected a `FnMut(&<RangeInclusive<{integer}> as Iterator>::Item)` closure, found
|
||||
//[next]~^^ ERROR expected a `FnMut(&<std::ops::RangeInclusive<{integer}> as Iterator>::Item)` closure, found
|
||||
let _ = (-10..=10).find(|x: &&&i32| x.signum() == 0);
|
||||
//[current]~^ ERROR type mismatch in closure arguments
|
||||
//[next]~^^ ERROR expected `RangeInclusive<{integer}>` to be an iterator that yields `&&i32`, but it yields `{integer}`
|
||||
|
|
|
@ -31,7 +31,7 @@ help: give the `break` a value of the expected type
|
|||
LL | [(); loop { break 42 }];
|
||||
| ++
|
||||
|
||||
error[E0015]: cannot use `for` loop on `RangeFrom<usize>` in constants
|
||||
error[E0015]: cannot use `for` loop on `std::ops::RangeFrom<usize>` in constants
|
||||
--> $DIR/issue-52443.rs:9:21
|
||||
|
|
||||
LL | [(); { for _ in 0usize.. {}; 0}];
|
||||
|
@ -39,7 +39,7 @@ LL | [(); { for _ in 0usize.. {}; 0}];
|
|||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0015]: cannot use `for` loop on `RangeFrom<usize>` in constants
|
||||
error[E0015]: cannot use `for` loop on `std::ops::RangeFrom<usize>` in constants
|
||||
--> $DIR/issue-52443.rs:9:21
|
||||
|
|
||||
LL | [(); { for _ in 0usize.. {}; 0}];
|
||||
|
|
|
@ -47,7 +47,7 @@ LL | take_range(std::ops::RangeFrom { start: 1 });
|
|||
| arguments to this function are incorrect
|
||||
|
|
||||
= note: expected reference `&_`
|
||||
found struct `RangeFrom<{integer}>`
|
||||
found struct `std::ops::RangeFrom<{integer}>`
|
||||
note: function defined here
|
||||
--> $DIR/issue-54505-no-literals.rs:12:4
|
||||
|
|
||||
|
@ -67,7 +67,7 @@ LL | take_range(::std::ops::RangeFrom { start: 1 });
|
|||
| arguments to this function are incorrect
|
||||
|
|
||||
= note: expected reference `&_`
|
||||
found struct `RangeFrom<{integer}>`
|
||||
found struct `std::ops::RangeFrom<{integer}>`
|
||||
note: function defined here
|
||||
--> $DIR/issue-54505-no-literals.rs:12:4
|
||||
|
|
||||
|
@ -127,7 +127,7 @@ LL | take_range(std::ops::RangeInclusive::new(0, 1));
|
|||
| arguments to this function are incorrect
|
||||
|
|
||||
= note: expected reference `&_`
|
||||
found struct `RangeInclusive<{integer}>`
|
||||
found struct `std::ops::RangeInclusive<{integer}>`
|
||||
note: function defined here
|
||||
--> $DIR/issue-54505-no-literals.rs:12:4
|
||||
|
|
||||
|
@ -147,7 +147,7 @@ LL | take_range(::std::ops::RangeInclusive::new(0, 1));
|
|||
| arguments to this function are incorrect
|
||||
|
|
||||
= note: expected reference `&_`
|
||||
found struct `RangeInclusive<{integer}>`
|
||||
found struct `std::ops::RangeInclusive<{integer}>`
|
||||
note: function defined here
|
||||
--> $DIR/issue-54505-no-literals.rs:12:4
|
||||
|
|
||||
|
|
|
@ -27,7 +27,7 @@ LL | take_range(1..);
|
|||
| arguments to this function are incorrect
|
||||
|
|
||||
= note: expected reference `&_`
|
||||
found struct `RangeFrom<{integer}>`
|
||||
found struct `std::ops::RangeFrom<{integer}>`
|
||||
note: function defined here
|
||||
--> $DIR/issue-54505.rs:10:4
|
||||
|
|
||||
|
@ -72,7 +72,7 @@ LL | take_range(0..=1);
|
|||
| arguments to this function are incorrect
|
||||
|
|
||||
= note: expected reference `&_`
|
||||
found struct `RangeInclusive<{integer}>`
|
||||
found struct `std::ops::RangeInclusive<{integer}>`
|
||||
note: function defined here
|
||||
--> $DIR/issue-54505.rs:10:4
|
||||
|
|
||||
|
|
|
@ -30,7 +30,7 @@ LL | let range = *arr..;
|
|||
| ^^^^ doesn't have a size known at compile-time
|
||||
|
|
||||
= help: the trait `Sized` is not implemented for `[{integer}]`
|
||||
note: required by an implicit `Sized` bound in `RangeFrom`
|
||||
note: required by an implicit `Sized` bound in `std::ops::RangeFrom`
|
||||
--> $SRC_DIR/core/src/ops/range.rs:LL:COL
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
|
|
@ -22,7 +22,7 @@ LL | let _: f64 = 1..;
|
|||
| expected due to this
|
||||
|
|
||||
= note: expected type `f64`
|
||||
found struct `RangeFrom<{integer}>`
|
||||
found struct `std::ops::RangeFrom<{integer}>`
|
||||
help: remove the unnecessary `.` operator for a floating point literal
|
||||
|
|
||||
LL | let _: f64 = 1.;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue