Avoid unnecessary line lookup.

`lookup_debug_loc` calls `SourceMap::lookup_line`, which does a binary
search over the files, and then a binary search over the lines within
the found file. It then calls `SourceFile::line_begin_pos`, which redoes
the binary search over the lines within the found file.

This commit removes the second binary search over the lines, instead
getting the line starting pos directly using the result of the first
binary search over the lines.

(And likewise for `get_span_loc`, in the cranelift backend.)
This commit is contained in:
Nicholas Nethercote 2023-06-28 08:14:29 +10:00
parent 7ba31b9938
commit 9db001dfbb

View File

@ -81,7 +81,7 @@ pub(crate) fn get_span_loc(
match tcx.sess.source_map().lookup_line(span.lo()) {
Ok(SourceFileAndLine { sf: file, line }) => {
let line_pos = file.line_begin_pos(span.lo());
let line_pos = file.lines(|lines| lines[line]);
(
file,