stabilize const_int_from_str
This commit is contained in:
@@ -128,7 +128,6 @@
|
|||||||
#![feature(const_hash)]
|
#![feature(const_hash)]
|
||||||
#![feature(const_heap)]
|
#![feature(const_heap)]
|
||||||
#![feature(const_index_range_slice_index)]
|
#![feature(const_index_range_slice_index)]
|
||||||
#![feature(const_int_from_str)]
|
|
||||||
#![feature(const_intrinsic_copy)]
|
#![feature(const_intrinsic_copy)]
|
||||||
#![feature(const_intrinsic_forget)]
|
#![feature(const_intrinsic_forget)]
|
||||||
#![feature(const_ipv4)]
|
#![feature(const_ipv4)]
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ pub enum IntErrorKind {
|
|||||||
impl ParseIntError {
|
impl ParseIntError {
|
||||||
/// Outputs the detailed cause of parsing an integer failing.
|
/// Outputs the detailed cause of parsing an integer failing.
|
||||||
#[must_use]
|
#[must_use]
|
||||||
#[rustc_const_unstable(feature = "const_int_from_str", issue = "59133")]
|
#[rustc_const_stable(feature = "const_int_from_str", since = "CURRENT_RUSTC_VERSION")]
|
||||||
#[stable(feature = "int_error_matching", since = "1.55.0")]
|
#[stable(feature = "int_error_matching", since = "1.55.0")]
|
||||||
pub const fn kind(&self) -> &IntErrorKind {
|
pub const fn kind(&self) -> &IntErrorKind {
|
||||||
&self.kind
|
&self.kind
|
||||||
|
|||||||
@@ -1387,6 +1387,7 @@ from_str_radix_int_impl! { isize i8 i16 i32 i64 i128 usize u8 u16 u32 u64 u128 }
|
|||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
#[unstable(issue = "none", feature = "std_internals")]
|
#[unstable(issue = "none", feature = "std_internals")]
|
||||||
|
#[rustc_const_unstable(issue = "none", feature = "const_int_cannot_overflow")]
|
||||||
pub const fn can_not_overflow<T>(radix: u32, is_signed_ty: bool, digits: &[u8]) -> bool {
|
pub const fn can_not_overflow<T>(radix: u32, is_signed_ty: bool, digits: &[u8]) -> bool {
|
||||||
radix <= 16 && digits.len() <= mem::size_of::<T>() * 2 - is_signed_ty as usize
|
radix <= 16 && digits.len() <= mem::size_of::<T>() * 2 - is_signed_ty as usize
|
||||||
}
|
}
|
||||||
@@ -1410,6 +1411,7 @@ const fn from_str_radix_panic(radix: u32) {
|
|||||||
intrinsics::const_eval_select((radix,), from_str_radix_panic_ct, from_str_radix_panic_rt);
|
intrinsics::const_eval_select((radix,), from_str_radix_panic_ct, from_str_radix_panic_rt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow_internal_unstable(const_int_cannot_overflow)]
|
||||||
macro_rules! from_str_radix {
|
macro_rules! from_str_radix {
|
||||||
($($int_ty:ty)+) => {$(
|
($($int_ty:ty)+) => {$(
|
||||||
impl $int_ty {
|
impl $int_ty {
|
||||||
@@ -1436,7 +1438,7 @@ macro_rules! from_str_radix {
|
|||||||
#[doc = concat!("assert_eq!(", stringify!($int_ty), "::from_str_radix(\"A\", 16), Ok(10));")]
|
#[doc = concat!("assert_eq!(", stringify!($int_ty), "::from_str_radix(\"A\", 16), Ok(10));")]
|
||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
#[rustc_const_unstable(feature = "const_int_from_str", issue = "59133")]
|
#[rustc_const_stable(feature = "const_int_from_str", since = "CURRENT_RUSTC_VERSION")]
|
||||||
pub const fn from_str_radix(src: &str, radix: u32) -> Result<$int_ty, ParseIntError> {
|
pub const fn from_str_radix(src: &str, radix: u32) -> Result<$int_ty, ParseIntError> {
|
||||||
use self::IntErrorKind::*;
|
use self::IntErrorKind::*;
|
||||||
use self::ParseIntError as PIE;
|
use self::ParseIntError as PIE;
|
||||||
@@ -1566,7 +1568,7 @@ macro_rules! from_str_radix_size_impl {
|
|||||||
#[doc = concat!("assert_eq!(", stringify!($size), "::from_str_radix(\"A\", 16), Ok(10));")]
|
#[doc = concat!("assert_eq!(", stringify!($size), "::from_str_radix(\"A\", 16), Ok(10));")]
|
||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
#[rustc_const_unstable(feature = "const_int_from_str", issue = "59133")]
|
#[rustc_const_stable(feature = "const_int_from_str", since = "CURRENT_RUSTC_VERSION")]
|
||||||
pub const fn from_str_radix(src: &str, radix: u32) -> Result<$size, ParseIntError> {
|
pub const fn from_str_radix(src: &str, radix: u32) -> Result<$size, ParseIntError> {
|
||||||
match <$t>::from_str_radix(src, radix) {
|
match <$t>::from_str_radix(src, radix) {
|
||||||
Ok(x) => Ok(x as $size),
|
Ok(x) => Ok(x as $size),
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
#![feature(const_hash)]
|
#![feature(const_hash)]
|
||||||
#![feature(const_heap)]
|
#![feature(const_heap)]
|
||||||
#![feature(const_intrinsic_copy)]
|
#![feature(const_intrinsic_copy)]
|
||||||
#![feature(const_int_from_str)]
|
|
||||||
#![feature(const_maybe_uninit_as_mut_ptr)]
|
#![feature(const_maybe_uninit_as_mut_ptr)]
|
||||||
#![feature(const_nonnull_new)]
|
#![feature(const_nonnull_new)]
|
||||||
#![feature(const_pointer_is_aligned)]
|
#![feature(const_pointer_is_aligned)]
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
#![feature(const_int_from_str)]
|
|
||||||
|
|
||||||
const _OK: () = match i32::from_str_radix("-1234", 10) {
|
const _OK: () = match i32::from_str_radix("-1234", 10) {
|
||||||
Ok(x) => assert!(x == -1234),
|
Ok(x) => assert!(x == -1234),
|
||||||
Err(_) => panic!(),
|
Err(_) => panic!(),
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ error[E0080]: evaluation of constant value failed
|
|||||||
note: inside `core::num::<impl u64>::from_str_radix`
|
note: inside `core::num::<impl u64>::from_str_radix`
|
||||||
--> $SRC_DIR/core/src/num/mod.rs:LL:COL
|
--> $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||||
note: inside `_TOO_LOW`
|
note: inside `_TOO_LOW`
|
||||||
--> $DIR/parse_ints.rs:7:24
|
--> $DIR/parse_ints.rs:5:24
|
||||||
|
|
|
|
||||||
LL | const _TOO_LOW: () = { u64::from_str_radix("12345ABCD", 1); };
|
LL | const _TOO_LOW: () = { u64::from_str_radix("12345ABCD", 1); };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
@@ -20,7 +20,7 @@ error[E0080]: evaluation of constant value failed
|
|||||||
note: inside `core::num::<impl u64>::from_str_radix`
|
note: inside `core::num::<impl u64>::from_str_radix`
|
||||||
--> $SRC_DIR/core/src/num/mod.rs:LL:COL
|
--> $SRC_DIR/core/src/num/mod.rs:LL:COL
|
||||||
note: inside `_TOO_HIGH`
|
note: inside `_TOO_HIGH`
|
||||||
--> $DIR/parse_ints.rs:8:25
|
--> $DIR/parse_ints.rs:6:25
|
||||||
|
|
|
|
||||||
LL | const _TOO_HIGH: () = { u64::from_str_radix("12345ABCD", 37); };
|
LL | const _TOO_HIGH: () = { u64::from_str_radix("12345ABCD", 37); };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|||||||
Reference in New Issue
Block a user