mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
new_source_file no longer enters duplicate files, expand_include_bytes includes the source if it can convert bytes to string
This commit is contained in:
parent
906deae079
commit
6ee4d3cafc
@ -182,9 +182,12 @@ pub fn expand_include_bytes(cx: &mut ExtCtxt, sp: Span, tts: &[tokenstream::Toke
|
||||
DummyResult::expr(sp)
|
||||
}
|
||||
Ok(..) => {
|
||||
// Add this input file to the code map to make it available as
|
||||
// dependency information, but don't enter it's contents
|
||||
cx.source_map().new_source_file(file.into(), String::new());
|
||||
let src = match String::from_utf8(bytes.clone()) {
|
||||
Ok(contents) => contents,
|
||||
Err(..) => "".to_string()
|
||||
};
|
||||
|
||||
cx.source_map().new_source_file(file.into(), src);
|
||||
|
||||
base::MacEager::expr(cx.expr_lit(sp, ast::LitKind::ByteStr(Lrc::new(bytes))))
|
||||
}
|
||||
|
@ -110,11 +110,19 @@ pub struct StableSourceFileId(u128);
|
||||
|
||||
impl StableSourceFileId {
|
||||
pub fn new(source_file: &SourceFile) -> StableSourceFileId {
|
||||
StableFilemapId::new_from_pieces(&source_file.name,
|
||||
source_file.name_was_remapped,
|
||||
source_file.unmapped_path.as_ref())
|
||||
}
|
||||
|
||||
pub fn new_from_pieces(name: &FileName,
|
||||
name_was_remapped: bool,
|
||||
unmapped_path: Option<&FileName>) -> StableFilemapId {
|
||||
let mut hasher = StableHasher::new();
|
||||
|
||||
source_file.name.hash(&mut hasher);
|
||||
source_file.name_was_remapped.hash(&mut hasher);
|
||||
source_file.unmapped_path.hash(&mut hasher);
|
||||
name.hash(&mut hasher);
|
||||
name_was_remapped.hash(&mut hasher);
|
||||
unmapped_path.hash(&mut hasher);
|
||||
|
||||
StableSourceFileId(hasher.finish())
|
||||
}
|
||||
@ -208,7 +216,8 @@ impl SourceMap {
|
||||
}
|
||||
|
||||
/// Creates a new source_file.
|
||||
/// This does not ensure that only one SourceFile exists per file name.
|
||||
/// If a file already exists in the source_map with the same id, that file is returned
|
||||
/// unmodified
|
||||
pub fn new_source_file(&self, filename: FileName, src: String) -> Lrc<SourceFile> {
|
||||
let start_pos = self.next_start_pos();
|
||||
|
||||
@ -226,21 +235,30 @@ impl SourceMap {
|
||||
},
|
||||
other => (other, false),
|
||||
};
|
||||
let source_file = Lrc::new(SourceFile::new(
|
||||
filename,
|
||||
was_remapped,
|
||||
unmapped_path,
|
||||
src,
|
||||
Pos::from_usize(start_pos),
|
||||
));
|
||||
|
||||
let mut files = self.files.borrow_mut();
|
||||
let file_id = StableFilemapId::new_from_pieces(&filename,
|
||||
was_remapped,
|
||||
Some(&unmapped_path));
|
||||
|
||||
files.source_files.push(source_file.clone());
|
||||
files.stable_id_to_source_file.insert(StableSourceFileId::new(&source_file),
|
||||
source_file.clone());
|
||||
return match self.source_file_by_stable_id(file_id) {
|
||||
Some(lrc_sf) => lrc_sf,
|
||||
None => {
|
||||
let source_file = Lrc::new(SourceFile::new(
|
||||
filename,
|
||||
was_remapped,
|
||||
unmapped_path,
|
||||
src,
|
||||
Pos::from_usize(start_pos),
|
||||
));
|
||||
|
||||
source_file
|
||||
let mut files = self.files.borrow_mut();
|
||||
|
||||
files.source_files.push(source_file.clone());
|
||||
files.stable_id_to_source_file.insert(file_id, source_file.clone());
|
||||
|
||||
source_file
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Allocates a new SourceFile representing a source file from an external
|
||||
|
Loading…
Reference in New Issue
Block a user