From 8a5c5681da3695e1c2e3f23bee43a7ebfdce6161 Mon Sep 17 00:00:00 2001 From: Nathan Nguyen Date: Wed, 17 Feb 2021 23:44:37 -0600 Subject: [PATCH] nhwn: optimize counting digits in line numbers --- compiler/rustc_errors/src/emitter.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_errors/src/emitter.rs b/compiler/rustc_errors/src/emitter.rs index ea62e215230..42c3d5e48fe 100644 --- a/compiler/rustc_errors/src/emitter.rs +++ b/compiler/rustc_errors/src/emitter.rs @@ -1713,7 +1713,18 @@ impl EmitterWriter { let max_line_num_len = if self.ui_testing { ANONYMIZED_LINE_NUM.len() } else { - self.get_max_line_num(span, children).to_string().len() + // Instead of using .to_string().len(), we iteratively count the + // number of digits to avoid allocation. This strategy has sizable + // performance gains over the old string strategy. + let mut n = self.get_max_line_num(span, children); + let mut num_digits = 0; + loop { + num_digits += 1; + n /= 10; + if n == 0 { + break num_digits; + } + } }; match self.emit_message_default(span, message, code, level, max_line_num_len, false) {