Replace Rc with Lrc for shared data
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user