diff options
| author | bors <bors@rust-lang.org> | 2022-06-19 05:51:42 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-06-19 05:51:42 +0000 |
| commit | 5fb8a3926619a18a2e31627e4cdf05f16530b0eb (patch) | |
| tree | bf422d1f8697954e89cc67e89b7bcff1b69b2d31 | |
| parent | 6c9be6e4e9074ca58cef8b1ded299eff72e3ac52 (diff) | |
| parent | 89295352ee00a5555141db5fb7bcc41c822d4aec (diff) | |
| download | rust-5fb8a3926619a18a2e31627e4cdf05f16530b0eb.tar.gz rust-5fb8a3926619a18a2e31627e4cdf05f16530b0eb.zip | |
Auto merge of #97367 - WaffleLapkin:stabilize_checked_slice_to_str_conv, r=dtolnay
Stabilize checked slice->str conversion functions
This PR stabilizes the following APIs as `const` functions in Rust 1.63:
```rust
// core::str
pub const fn from_utf8(v: &[u8]) -> Result<&str, Utf8Error>;
impl Utf8Error {
pub const fn valid_up_to(&self) -> usize;
pub const fn error_len(&self) -> Option<usize>;
}
```
Note that the `from_utf8_mut` function is not stabilized as unique references (`&mut _`) are [unstable in const context].
FCP: https://github.com/rust-lang/rust/issues/91006#issuecomment-1134593095
[unstable in const context]: https://github.com/rust-lang/rust/issues/57349
| -rw-r--r-- | library/core/src/str/converts.rs | 5 | ||||
| -rw-r--r-- | library/core/src/str/error.rs | 6 |
2 files changed, 6 insertions, 5 deletions
diff --git a/library/core/src/str/converts.rs b/library/core/src/str/converts.rs index 81b1db4ac6f..b0c55ca4f51 100644 --- a/library/core/src/str/converts.rs +++ b/library/core/src/str/converts.rs @@ -82,9 +82,10 @@ use super::Utf8Error; /// assert_eq!("💖", sparkle_heart); /// ``` #[stable(feature = "rust1", since = "1.0.0")] -#[rustc_const_unstable(feature = "const_str_from_utf8", issue = "91006")] +#[rustc_const_stable(feature = "const_str_from_utf8_shared", since = "1.63.0")] +#[rustc_allow_const_fn_unstable(str_internals)] pub const fn from_utf8(v: &[u8]) -> Result<&str, Utf8Error> { - // This should use `?` again, once it's `const` + // FIXME: This should use `?` again, once it's `const` match run_utf8_validation(v) { Ok(_) => { // SAFETY: validation succeeded. diff --git a/library/core/src/str/error.rs b/library/core/src/str/error.rs index a127dd57eee..4e569fcc866 100644 --- a/library/core/src/str/error.rs +++ b/library/core/src/str/error.rs @@ -72,7 +72,7 @@ impl Utf8Error { /// assert_eq!(1, error.valid_up_to()); /// ``` #[stable(feature = "utf8_error", since = "1.5.0")] - #[rustc_const_unstable(feature = "const_str_from_utf8", issue = "91006")] + #[rustc_const_stable(feature = "const_str_from_utf8_shared", since = "1.63.0")] #[must_use] #[inline] pub const fn valid_up_to(&self) -> usize { @@ -95,11 +95,11 @@ impl Utf8Error { /// /// [U+FFFD]: ../../std/char/constant.REPLACEMENT_CHARACTER.html #[stable(feature = "utf8_error_error_len", since = "1.20.0")] - #[rustc_const_unstable(feature = "const_str_from_utf8", issue = "91006")] + #[rustc_const_stable(feature = "const_str_from_utf8_shared", since = "1.63.0")] #[must_use] #[inline] pub const fn error_len(&self) -> Option<usize> { - // This should become `map` again, once it's `const` + // FIXME: This should become `map` again, once it's `const` match self.error_len { Some(len) => Some(len as usize), None => None, |
