diff options
| author | Inokentiy Babushkin <twk@twki.de> | 2017-06-12 21:47:39 +0200 |
|---|---|---|
| committer | Inokentiy Babushkin <twk@twki.de> | 2017-06-12 21:47:39 +0200 |
| commit | d11973ae2a41bb84cd933e6646f3d8e6f28201e8 (patch) | |
| tree | 1442e011211e47776aa3808bd1409172be59c3bd /src/libsyntax | |
| parent | 271133b03ee5da57334670f50cd8a6ebbc35d140 (diff) | |
| download | rust-d11973ae2a41bb84cd933e6646f3d8e6f28201e8.tar.gz rust-d11973ae2a41bb84cd933e6646f3d8e6f28201e8.zip | |
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.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/codemap.rs | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index 5b10139cd19..b3d9cf9da36 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -415,30 +415,31 @@ impl CodeMap { local_end.fm.start_pos) })); } else { - match local_begin.fm.src { - Some(ref src) => { - let start_index = local_begin.pos.to_usize(); - let end_index = local_end.pos.to_usize(); - let source_len = (local_begin.fm.end_pos - - local_begin.fm.start_pos).to_usize(); - - if start_index > end_index || end_index > source_len { - return Err(SpanSnippetError::MalformedForCodemap( - MalformedCodemapPositions { - name: local_begin.fm.name.clone(), - source_len: source_len, - begin_pos: local_begin.pos, - end_pos: local_end.pos, - })); - } - - return Ok((&src[start_index..end_index]).to_string()) - } - None => { - return Err(SpanSnippetError::SourceNotAvailable { - filename: local_begin.fm.name.clone() - }); - } + self.ensure_filemap_source_present(local_begin.fm.clone()); + + let start_index = local_begin.pos.to_usize(); + let end_index = local_end.pos.to_usize(); + let source_len = (local_begin.fm.end_pos - + local_begin.fm.start_pos).to_usize(); + + if start_index > end_index || end_index > source_len { + return Err(SpanSnippetError::MalformedForCodemap( + MalformedCodemapPositions { + name: local_begin.fm.name.clone(), + source_len: source_len, + begin_pos: local_begin.pos, + end_pos: local_end.pos, + })); + } + + if let Some(ref src) = local_begin.fm.src { + return Ok((&src[start_index..end_index]).to_string()); + } else if let Some(src) = local_begin.fm.external_src.borrow().get_source() { + return Ok((&src[start_index..end_index]).to_string()); + } else { + return Err(SpanSnippetError::SourceNotAvailable { + filename: local_begin.fm.name.clone() + }); } } } |
