Replace Rc with Lrc for shared data

This commit is contained in:
John Kåre Alsaker
2018-02-27 17:11:14 +01:00
parent 878f5b0514
commit b74e97cf42
86 changed files with 435 additions and 413 deletions

View File

@@ -24,11 +24,11 @@ pub use self::ExpnFormat::*;
use rustc_data_structures::fx::FxHashMap;
use rustc_data_structures::stable_hasher::StableHasher;
use rustc_data_structures::sync::Lrc;
use std::cell::{RefCell, Ref};
use std::cmp;
use std::hash::Hash;
use std::path::{Path, PathBuf};
use std::rc::Rc;
use std::env;
use std::fs;
@@ -126,12 +126,12 @@ impl StableFilemapId {
//
pub struct CodeMap {
pub(super) files: RefCell<Vec<Rc<FileMap>>>,
pub(super) files: RefCell<Vec<Lrc<FileMap>>>,
file_loader: Box<FileLoader>,
// This is used to apply the file path remapping as specified via
// --remap-path-prefix to all FileMaps allocated within this CodeMap.
path_mapping: FilePathMapping,
stable_id_to_filemap: RefCell<FxHashMap<StableFilemapId, Rc<FileMap>>>,
stable_id_to_filemap: RefCell<FxHashMap<StableFilemapId, Lrc<FileMap>>>,
/// In case we are in a doctest, replace all file names with the PathBuf,
/// and add the given offsets to the line info
doctest_offset: Option<(FileName, isize)>,
@@ -177,7 +177,7 @@ impl CodeMap {
self.file_loader.file_exists(path)
}
pub fn load_file(&self, path: &Path) -> io::Result<Rc<FileMap>> {
pub fn load_file(&self, path: &Path) -> io::Result<Lrc<FileMap>> {
let src = self.file_loader.read_file(path)?;
let filename = if let Some((ref name, _)) = self.doctest_offset {
name.clone()
@@ -187,11 +187,11 @@ impl CodeMap {
Ok(self.new_filemap(filename, src))
}
pub fn files(&self) -> Ref<Vec<Rc<FileMap>>> {
pub fn files(&self) -> Ref<Vec<Lrc<FileMap>>> {
self.files.borrow()
}
pub fn filemap_by_stable_id(&self, stable_id: StableFilemapId) -> Option<Rc<FileMap>> {
pub fn filemap_by_stable_id(&self, stable_id: StableFilemapId) -> Option<Lrc<FileMap>> {
self.stable_id_to_filemap.borrow().get(&stable_id).map(|fm| fm.clone())
}
@@ -207,7 +207,7 @@ impl CodeMap {
/// Creates a new filemap without setting its line information. If you don't
/// intend to set the line information yourself, you should use new_filemap_and_lines.
pub fn new_filemap(&self, filename: FileName, src: String) -> Rc<FileMap> {
pub fn new_filemap(&self, filename: FileName, src: String) -> Lrc<FileMap> {
let start_pos = self.next_start_pos();
let mut files = self.files.borrow_mut();
@@ -225,7 +225,7 @@ impl CodeMap {
},
other => (other, false),
};
let filemap = Rc::new(FileMap::new(
let filemap = Lrc::new(FileMap::new(
filename,
was_remapped,
unmapped_path,
@@ -243,7 +243,7 @@ impl CodeMap {
}
/// Creates a new filemap and sets its line information.
pub fn new_filemap_and_lines(&self, filename: &Path, src: &str) -> Rc<FileMap> {
pub fn new_filemap_and_lines(&self, filename: &Path, src: &str) -> Lrc<FileMap> {
let fm = self.new_filemap(filename.to_owned().into(), src.to_owned());
let mut byte_pos: u32 = fm.start_pos.0;
for line in src.lines() {
@@ -271,7 +271,7 @@ impl CodeMap {
mut file_local_lines: Vec<BytePos>,
mut file_local_multibyte_chars: Vec<MultiByteChar>,
mut file_local_non_narrow_chars: Vec<NonNarrowChar>)
-> Rc<FileMap> {
-> Lrc<FileMap> {
let start_pos = self.next_start_pos();
let mut files = self.files.borrow_mut();
@@ -290,7 +290,7 @@ impl CodeMap {
*swc = *swc + start_pos;
}
let filemap = Rc::new(FileMap {
let filemap = Lrc::new(FileMap {
name: filename,
name_was_remapped,
unmapped_path: None,
@@ -398,7 +398,7 @@ impl CodeMap {
}
// If the relevant filemap is empty, we don't return a line number.
pub fn lookup_line(&self, pos: BytePos) -> Result<FileMapAndLine, Rc<FileMap>> {
pub fn lookup_line(&self, pos: BytePos) -> Result<FileMapAndLine, Lrc<FileMap>> {
let idx = self.lookup_filemap_idx(pos);
let files = self.files.borrow();
@@ -730,7 +730,7 @@ impl CodeMap {
}
}
pub fn get_filemap(&self, filename: &FileName) -> Option<Rc<FileMap>> {
pub fn get_filemap(&self, filename: &FileName) -> Option<Lrc<FileMap>> {
for fm in self.files.borrow().iter() {
if *filename == fm.name {
return Some(fm.clone());
@@ -827,7 +827,7 @@ impl CodeMapper for CodeMap {
}
sp
}
fn ensure_filemap_source_present(&self, file_map: Rc<FileMap>) -> bool {
fn ensure_filemap_source_present(&self, file_map: Lrc<FileMap>) -> bool {
file_map.add_external_src(
|| match file_map.name {
FileName::Real(ref name) => self.file_loader.read_file(name).ok(),
@@ -883,7 +883,7 @@ impl FilePathMapping {
mod tests {
use super::*;
use std::borrow::Cow;
use std::rc::Rc;
use rustc_data_structures::sync::Lrc;
#[test]
fn t1 () {
@@ -1104,7 +1104,7 @@ mod tests {
/// `substring` in `source_text`.
trait CodeMapExtension {
fn span_substr(&self,
file: &Rc<FileMap>,
file: &Lrc<FileMap>,
source_text: &str,
substring: &str,
n: usize)
@@ -1113,7 +1113,7 @@ mod tests {
impl CodeMapExtension for CodeMap {
fn span_substr(&self,
file: &Rc<FileMap>,
file: &Lrc<FileMap>,
source_text: &str,
substring: &str,
n: usize)