Auto merge of #100209 - cjgillot:source-file-index, r=estebank
Lazily decode SourceFile from metadata Currently, source files from foreign crates are decoded up-front from metadata. Spans from those crates were matched with the corresponding source using binary search among those files. This PR changes the strategy by matching spans to files during encoding. This allows to decode source files on-demand, instead of up-front. The on-disk format for spans becomes: `<tag> <position from start of file> <length> <file index> <crate (if foreign file)>`.
This commit is contained in:
commit
468887ef91
8 changed files with 199 additions and 219 deletions
|
@ -336,7 +336,7 @@ impl SourceMap {
|
|||
mut file_local_non_narrow_chars: Vec<NonNarrowChar>,
|
||||
mut file_local_normalized_pos: Vec<NormalizedPos>,
|
||||
original_start_pos: BytePos,
|
||||
original_end_pos: BytePos,
|
||||
metadata_index: u32,
|
||||
) -> Lrc<SourceFile> {
|
||||
let start_pos = self
|
||||
.allocate_address_space(source_len)
|
||||
|
@ -381,8 +381,7 @@ impl SourceMap {
|
|||
src_hash,
|
||||
external_src: Lock::new(ExternalSource::Foreign {
|
||||
kind: ExternalSourceKind::AbsentOk,
|
||||
original_start_pos,
|
||||
original_end_pos,
|
||||
metadata_index,
|
||||
}),
|
||||
start_pos,
|
||||
end_pos,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue