diff options
| author | Inokentiy Babushkin <twk@twki.de> | 2017-06-10 21:08:32 +0200 |
|---|---|---|
| committer | Inokentiy Babushkin <twk@twki.de> | 2017-06-10 21:08:32 +0200 |
| commit | c2c31b2db33e0d0b5356a0c9e032269034cdc70a (patch) | |
| tree | 4a2ddeafa8e6ff5a359c2bd954831adfbb60663f /src/libsyntax | |
| parent | dd8f7cd126403955295c8b0cdbccc5ca5cbef763 (diff) | |
| download | rust-c2c31b2db33e0d0b5356a0c9e032269034cdc70a.tar.gz rust-c2c31b2db33e0d0b5356a0c9e032269034cdc70a.zip | |
Added external crates' sources to FileMap.
They are now handled in their own member to prevent mutating access to the `src` member. This way, we can safely load external sources, while keeping the mutation of local source strings off-limits.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/codemap.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index 442b92be1cb..9779a678845 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -219,6 +219,7 @@ impl CodeMap { crate_of_origin: crate_of_origin, src: None, src_hash: src_hash, + external_src: RefCell::new(ExternalSource::AbsentOk), start_pos: start_pos, end_pos: end_pos, lines: RefCell::new(file_local_lines), @@ -558,6 +559,25 @@ impl CodeMapper for CodeMap { } sp } + fn load_source_for_filemap(&mut self, filename: FileName) -> bool { + let file_map = if let Some(fm) = self.get_filemap(&filename) { + fm + } else { + return false; + }; + + if *file_map.external_src.borrow() == ExternalSource::AbsentOk { + let mut external_src = file_map.external_src.borrow_mut(); + if let Ok(src) = self.file_loader.read_file(Path::new(&filename)) { + *external_src = ExternalSource::Present(src); + return true; + } else { + *external_src = ExternalSource::AbsentErr; + } + } + + false + } } #[derive(Clone)] |
