From c2c31b2db33e0d0b5356a0c9e032269034cdc70a Mon Sep 17 00:00:00 2001 From: Inokentiy Babushkin Date: Sat, 10 Jun 2017 21:08:32 +0200 Subject: 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. --- src/libsyntax/codemap.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/libsyntax/codemap.rs') 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)] -- cgit 1.4.1-3-g733a5