Make char methods const
`escape_unicode`, `escape_default`, `len_utf8`, `len_utf16`, to_ascii_lowercase`, `eq_ignore_ascii_case` `u8` methods `to_ascii_lowercase`, `to_ascii_uppercase` also must be made const u8 methods made const Update methods.rs Update mod.rs Update methods.rs Fix `since` in rustc_const_stable to next stable Fix `since` in rustc_const_stable to next stable Update methods.rs Update mod.rs
This commit is contained in:
parent
446d4533e8
commit
bcb1f068bc
|
@ -384,8 +384,9 @@ impl char {
|
|||
/// assert_eq!('❤'.escape_unicode().to_string(), "\\u{2764}");
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_stable(feature = "const_char_escape_unicode", since = "1.50.0")]
|
||||
#[inline]
|
||||
pub fn escape_unicode(self) -> EscapeUnicode {
|
||||
pub const fn escape_unicode(self) -> EscapeUnicode {
|
||||
let c = self as u32;
|
||||
|
||||
// or-ing 1 ensures that for c==0 the code computes that one
|
||||
|
@ -510,8 +511,9 @@ impl char {
|
|||
/// assert_eq!('"'.escape_default().to_string(), "\\\"");
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_stable(feature = "const_char_escape_default", since = "1.50.0")]
|
||||
#[inline]
|
||||
pub fn escape_default(self) -> EscapeDefault {
|
||||
pub const fn escape_default(self) -> EscapeDefault {
|
||||
let init_state = match self {
|
||||
'\t' => EscapeDefaultState::Backslash('t'),
|
||||
'\r' => EscapeDefaultState::Backslash('r'),
|
||||
|
@ -569,8 +571,9 @@ impl char {
|
|||
/// assert_eq!(len, tokyo.len());
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_stable(feature = "const_char_len_utf", since = "1.50.0")]
|
||||
#[inline]
|
||||
pub fn len_utf8(self) -> usize {
|
||||
pub const fn len_utf8(self) -> usize {
|
||||
len_utf8(self as u32)
|
||||
}
|
||||
|
||||
|
@ -594,8 +597,9 @@ impl char {
|
|||
/// assert_eq!(len, 2);
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_stable(feature = "const_char_len_utf", since = "1.50.0")]
|
||||
#[inline]
|
||||
pub fn len_utf16(self) -> usize {
|
||||
pub const fn len_utf16(self) -> usize {
|
||||
let ch = self as u32;
|
||||
if (ch & 0xFFFF) == ch { 1 } else { 2 }
|
||||
}
|
||||
|
@ -1086,8 +1090,9 @@ impl char {
|
|||
/// [`make_ascii_uppercase()`]: #method.make_ascii_uppercase
|
||||
/// [`to_uppercase()`]: #method.to_uppercase
|
||||
#[stable(feature = "ascii_methods_on_intrinsics", since = "1.23.0")]
|
||||
#[rustc_const_stable(feature = "const_ascii_methods_on_intrinsics", since = "1.50.0")]
|
||||
#[inline]
|
||||
pub fn to_ascii_uppercase(&self) -> char {
|
||||
pub const fn to_ascii_uppercase(&self) -> char {
|
||||
if self.is_ascii_lowercase() {
|
||||
(*self as u8).ascii_change_case_unchecked() as char
|
||||
} else {
|
||||
|
@ -1118,8 +1123,9 @@ impl char {
|
|||
/// [`make_ascii_lowercase()`]: #method.make_ascii_lowercase
|
||||
/// [`to_lowercase()`]: #method.to_lowercase
|
||||
#[stable(feature = "ascii_methods_on_intrinsics", since = "1.23.0")]
|
||||
#[rustc_const_stable(feature = "const_ascii_methods_on_intrinsics", since = "1.50.0")]
|
||||
#[inline]
|
||||
pub fn to_ascii_lowercase(&self) -> char {
|
||||
pub const fn to_ascii_lowercase(&self) -> char {
|
||||
if self.is_ascii_uppercase() {
|
||||
(*self as u8).ascii_change_case_unchecked() as char
|
||||
} else {
|
||||
|
@ -1143,8 +1149,9 @@ impl char {
|
|||
/// assert!(!upper_a.eq_ignore_ascii_case(&lower_z));
|
||||
/// ```
|
||||
#[stable(feature = "ascii_methods_on_intrinsics", since = "1.23.0")]
|
||||
#[rustc_const_stable(feature = "const_ascii_methods_on_intrinsics", since = "1.50.0")]
|
||||
#[inline]
|
||||
pub fn eq_ignore_ascii_case(&self, other: &char) -> bool {
|
||||
pub const fn eq_ignore_ascii_case(&self, other: &char) -> bool {
|
||||
self.to_ascii_lowercase() == other.to_ascii_lowercase()
|
||||
}
|
||||
|
||||
|
@ -1561,7 +1568,7 @@ impl char {
|
|||
}
|
||||
|
||||
#[inline]
|
||||
fn len_utf8(code: u32) -> usize {
|
||||
const fn len_utf8(code: u32) -> usize {
|
||||
if code < MAX_ONE_B {
|
||||
1
|
||||
} else if code < MAX_TWO_B {
|
||||
|
|
|
@ -195,8 +195,9 @@ impl u8 {
|
|||
///
|
||||
/// [`make_ascii_uppercase`]: #method.make_ascii_uppercase
|
||||
#[stable(feature = "ascii_methods_on_intrinsics", since = "1.23.0")]
|
||||
#[rustc_const_stable(feature = "const_ascii_methods_on_intrinsics", since = "1.50.0")]
|
||||
#[inline]
|
||||
pub fn to_ascii_uppercase(&self) -> u8 {
|
||||
pub const fn to_ascii_uppercase(&self) -> u8 {
|
||||
// Unset the fifth bit if this is a lowercase letter
|
||||
*self & !((self.is_ascii_lowercase() as u8) * ASCII_CASE_MASK)
|
||||
}
|
||||
|
@ -218,8 +219,9 @@ impl u8 {
|
|||
///
|
||||
/// [`make_ascii_lowercase`]: #method.make_ascii_lowercase
|
||||
#[stable(feature = "ascii_methods_on_intrinsics", since = "1.23.0")]
|
||||
#[rustc_const_stable(feature = "const_ascii_methods_on_intrinsics", since = "1.50.0")]
|
||||
#[inline]
|
||||
pub fn to_ascii_lowercase(&self) -> u8 {
|
||||
pub const fn to_ascii_lowercase(&self) -> u8 {
|
||||
// Set the fifth bit if this is an uppercase letter
|
||||
*self | (self.is_ascii_uppercase() as u8 * ASCII_CASE_MASK)
|
||||
}
|
||||
|
@ -243,8 +245,9 @@ impl u8 {
|
|||
/// assert!(lowercase_a.eq_ignore_ascii_case(&uppercase_a));
|
||||
/// ```
|
||||
#[stable(feature = "ascii_methods_on_intrinsics", since = "1.23.0")]
|
||||
#[rustc_const_stable(feature = "const_ascii_methods_on_intrinsics", since = "1.50.0")]
|
||||
#[inline]
|
||||
pub fn eq_ignore_ascii_case(&self, other: &u8) -> bool {
|
||||
pub const fn eq_ignore_ascii_case(&self, other: &u8) -> bool {
|
||||
self.to_ascii_lowercase() == other.to_ascii_lowercase()
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue