Skip to content

Commit d11973a

Browse files
committed
External spans: added lazy source loading elsewhere
* In other places where the `src` member of a file map is accessed, we now load and possibly work with external source as well.
1 parent 271133b commit d11973a

File tree

1 file changed

+25
-24
lines changed

1 file changed

+25
-24
lines changed

src/libsyntax/codemap.rs

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -415,30 +415,31 @@ impl CodeMap {
415415
local_end.fm.start_pos)
416416
}));
417417
} else {
418-
match local_begin.fm.src {
419-
Some(ref src) => {
420-
let start_index = local_begin.pos.to_usize();
421-
let end_index = local_end.pos.to_usize();
422-
let source_len = (local_begin.fm.end_pos -
423-
local_begin.fm.start_pos).to_usize();
424-
425-
if start_index > end_index || end_index > source_len {
426-
return Err(SpanSnippetError::MalformedForCodemap(
427-
MalformedCodemapPositions {
428-
name: local_begin.fm.name.clone(),
429-
source_len: source_len,
430-
begin_pos: local_begin.pos,
431-
end_pos: local_end.pos,
432-
}));
433-
}
434-
435-
return Ok((&src[start_index..end_index]).to_string())
436-
}
437-
None => {
438-
return Err(SpanSnippetError::SourceNotAvailable {
439-
filename: local_begin.fm.name.clone()
440-
});
441-
}
418+
self.ensure_filemap_source_present(local_begin.fm.clone());
419+
420+
let start_index = local_begin.pos.to_usize();
421+
let end_index = local_end.pos.to_usize();
422+
let source_len = (local_begin.fm.end_pos -
423+
local_begin.fm.start_pos).to_usize();
424+
425+
if start_index > end_index || end_index > source_len {
426+
return Err(SpanSnippetError::MalformedForCodemap(
427+
MalformedCodemapPositions {
428+
name: local_begin.fm.name.clone(),
429+
source_len: source_len,
430+
begin_pos: local_begin.pos,
431+
end_pos: local_end.pos,
432+
}));
433+
}
434+
435+
if let Some(ref src) = local_begin.fm.src {
436+
return Ok((&src[start_index..end_index]).to_string());
437+
} else if let Some(src) = local_begin.fm.external_src.borrow().get_source() {
438+
return Ok((&src[start_index..end_index]).to_string());
439+
} else {
440+
return Err(SpanSnippetError::SourceNotAvailable {
441+
filename: local_begin.fm.name.clone()
442+
});
442443
}
443444
}
444445
}

0 commit comments

Comments
 (0)