Skip to content

Commit

Permalink
Auto merge of #97367 - WaffleLapkin:stabilize_checked_slice_to_str_co…
Browse files Browse the repository at this point in the history
…nv, 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: #91006 (comment)

[unstable in const context]: #57349
  • Loading branch information
bors committed Jun 19, 2022
2 parents 6c9be6e + 8929535 commit 5fb8a39
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
5 changes: 3 additions & 2 deletions library/core/src/str/converts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
6 changes: 3 additions & 3 deletions library/core/src/str/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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,
Expand Down

0 comments on commit 5fb8a39

Please sign in to comment.