From 40b37268eb0926b4ed55711d25fcf7aa19295e95 Mon Sep 17 00:00:00 2001 From: The 8472 Date: Mon, 19 Sep 2022 00:25:44 +0200 Subject: [PATCH] use partition_point instead of binary_search when looking up source lines In local benchmarks this results in 0.4% fewer cycles in a critical sequential section when compiling libcore. --- compiler/rustc_span/src/lib.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/compiler/rustc_span/src/lib.rs b/compiler/rustc_span/src/lib.rs index ada3bae6150..6ce75492caf 100644 --- a/compiler/rustc_span/src/lib.rs +++ b/compiler/rustc_span/src/lib.rs @@ -1631,10 +1631,9 @@ impl SourceFile { /// number. If the source_file is empty or the position is located before the /// first line, `None` is returned. pub fn lookup_line(&self, pos: BytePos) -> Option { - self.lines(|lines| match lines.binary_search(&pos) { - Ok(idx) => Some(idx), - Err(0) => None, - Err(idx) => Some(idx - 1), + self.lines(|lines| match lines.partition_point(|x| x <= &pos) { + 0 => None, + i => Some(i - 1), }) }