1
Fork 0

Optimize Symbol::integer by utilizing itoa in-place formatting

This commit is contained in:
Urgau 2024-03-06 19:39:36 +01:00
parent 1547c076bf
commit 33ef4b963b
3 changed files with 6 additions and 2 deletions

View file

@ -4570,6 +4570,7 @@ name = "rustc_span"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"itoa",
"md-5", "md-5",
"rustc_arena", "rustc_arena",
"rustc_data_structures", "rustc_data_structures",

View file

@ -6,6 +6,7 @@ edition = "2021"
[dependencies] [dependencies]
# tidy-alphabetical-start # tidy-alphabetical-start
indexmap = { version = "2.0.0" } indexmap = { version = "2.0.0" }
itoa = "1.0"
md5 = { package = "md-5", version = "0.10.0" } md5 = { package = "md-5", version = "0.10.0" }
rustc_arena = { path = "../rustc_arena" } rustc_arena = { path = "../rustc_arena" }
rustc_data_structures = { path = "../rustc_data_structures" } rustc_data_structures = { path = "../rustc_data_structures" }

View file

@ -2325,13 +2325,15 @@ pub mod sym {
/// ///
/// The first few non-negative integers each have a static symbol and therefore /// The first few non-negative integers each have a static symbol and therefore
/// are fast. /// are fast.
pub fn integer<N: TryInto<usize> + Copy + ToString>(n: N) -> Symbol { pub fn integer<N: TryInto<usize> + Copy + itoa::Integer>(n: N) -> Symbol {
if let Result::Ok(idx) = n.try_into() { if let Result::Ok(idx) = n.try_into() {
if idx < 10 { if idx < 10 {
return Symbol::new(super::SYMBOL_DIGITS_BASE + idx as u32); return Symbol::new(super::SYMBOL_DIGITS_BASE + idx as u32);
} }
} }
Symbol::intern(&n.to_string()) let mut buffer = itoa::Buffer::new();
let printed = buffer.format(n);
Symbol::intern(printed)
} }
} }