Auto merge of #26154 - pmarcelll:master, r=Gankro
Various methods in both libcore/char.rs and librustc_unicode/char.rs were previously marked with #[inline], now every method is marked in char's impl blocks. Partially fixes #26124. EDIT: I'm not familiar with pull reqests (yet), apparently Github added my second commit to thit PR... Fixes #26124
This commit is contained in:
commit
37cf025f1c
@ -468,24 +468,24 @@ impl String {
|
||||
#[inline]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn push(&mut self, ch: char) {
|
||||
if (ch as u32) < 0x80 {
|
||||
self.vec.push(ch as u8);
|
||||
return;
|
||||
}
|
||||
match ch.len_utf8() {
|
||||
1 => self.vec.push(ch as u8),
|
||||
ch_len => {
|
||||
let cur_len = self.len();
|
||||
// This may use up to 4 bytes.
|
||||
self.vec.reserve(ch_len);
|
||||
|
||||
let cur_len = self.len();
|
||||
// This may use up to 4 bytes.
|
||||
self.vec.reserve(4);
|
||||
|
||||
unsafe {
|
||||
// Attempt to not use an intermediate buffer by just pushing bytes
|
||||
// directly onto this string.
|
||||
let slice = slice::from_raw_parts_mut (
|
||||
self.vec.as_mut_ptr().offset(cur_len as isize),
|
||||
4
|
||||
);
|
||||
let used = ch.encode_utf8(slice).unwrap_or(0);
|
||||
self.vec.set_len(cur_len + used);
|
||||
unsafe {
|
||||
// Attempt to not use an intermediate buffer by just pushing bytes
|
||||
// directly onto this string.
|
||||
let slice = slice::from_raw_parts_mut (
|
||||
self.vec.as_mut_ptr().offset(cur_len as isize),
|
||||
ch_len
|
||||
);
|
||||
let used = ch.encode_utf8(slice).unwrap_or(0);
|
||||
self.vec.set_len(cur_len + used);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -152,10 +152,12 @@ pub trait CharExt {
|
||||
}
|
||||
|
||||
impl CharExt for char {
|
||||
#[inline]
|
||||
fn is_digit(self, radix: u32) -> bool {
|
||||
self.to_digit(radix).is_some()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn to_digit(self, radix: u32) -> Option<u32> {
|
||||
if radix > 36 {
|
||||
panic!("to_digit: radix is too high (maximum 36)");
|
||||
@ -170,10 +172,12 @@ impl CharExt for char {
|
||||
else { None }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn escape_unicode(self) -> EscapeUnicode {
|
||||
EscapeUnicode { c: self, state: EscapeUnicodeState::Backslash }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn escape_default(self) -> EscapeDefault {
|
||||
let init_state = match self {
|
||||
'\t' => EscapeDefaultState::Backslash('t'),
|
||||
|
@ -174,6 +174,7 @@ impl char {
|
||||
/// assert_eq!('f'.to_digit(16), Some(15));
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn to_digit(self, radix: u32) -> Option<u32> { C::to_digit(self, radix) }
|
||||
|
||||
/// Returns an iterator that yields the hexadecimal Unicode escape of a
|
||||
@ -212,6 +213,7 @@ impl char {
|
||||
/// assert_eq!(heart, r"\u{2764}");
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn escape_unicode(self) -> EscapeUnicode { C::escape_unicode(self) }
|
||||
|
||||
/// Returns an iterator that yields the 'default' ASCII and
|
||||
@ -250,6 +252,7 @@ impl char {
|
||||
/// assert_eq!(quote, "\\\"");
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn escape_default(self) -> EscapeDefault { C::escape_default(self) }
|
||||
|
||||
/// Returns the number of bytes this character would need if encoded in
|
||||
@ -263,6 +266,7 @@ impl char {
|
||||
/// assert_eq!(n, 2);
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn len_utf8(self) -> usize { C::len_utf8(self) }
|
||||
|
||||
/// Returns the number of 16-bit code units this character would need if
|
||||
@ -276,6 +280,7 @@ impl char {
|
||||
/// assert_eq!(n, 1);
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn len_utf16(self) -> usize { C::len_utf16(self) }
|
||||
|
||||
/// Encodes this character as UTF-8 into the provided byte buffer, and then
|
||||
@ -310,6 +315,7 @@ impl char {
|
||||
/// ```
|
||||
#[unstable(feature = "unicode",
|
||||
reason = "pending decision about Iterator/Writer/Reader")]
|
||||
#[inline]
|
||||
pub fn encode_utf8(self, dst: &mut [u8]) -> Option<usize> { C::encode_utf8(self, dst) }
|
||||
|
||||
/// Encodes this character as UTF-16 into the provided `u16` buffer, and
|
||||
@ -344,6 +350,7 @@ impl char {
|
||||
/// ```
|
||||
#[unstable(feature = "unicode",
|
||||
reason = "pending decision about Iterator/Writer/Reader")]
|
||||
#[inline]
|
||||
pub fn encode_utf16(self, dst: &mut [u16]) -> Option<usize> { C::encode_utf16(self, dst) }
|
||||
|
||||
/// Returns whether the specified character is considered a Unicode
|
||||
@ -527,5 +534,6 @@ impl char {
|
||||
since = "1.0.0")]
|
||||
#[unstable(feature = "unicode",
|
||||
reason = "needs expert opinion. is_cjk flag stands out as ugly")]
|
||||
#[inline]
|
||||
pub fn width(self, is_cjk: bool) -> Option<usize> { charwidth::width(self, is_cjk) }
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user