syntax: Avoid reallocating or copying in CodeMap::new_filemap

Avoid creating a new String when there is no BOM to strip, and
otherwises use .drain(..3) to strip the BOM using the same allocation.
This commit is contained in:
Ulrik Sverdrup
2015-05-01 17:08:39 +02:00
parent ee48e6d192
commit da03c9df33
2 changed files with 5 additions and 8 deletions

View File

@@ -543,7 +543,7 @@ impl CodeMap {
}
}
pub fn new_filemap(&self, filename: FileName, src: String) -> Rc<FileMap> {
pub fn new_filemap(&self, filename: FileName, mut src: String) -> Rc<FileMap> {
let mut files = self.files.borrow_mut();
let start_pos = match files.last() {
None => 0,
@@ -551,13 +551,9 @@ impl CodeMap {
};
// Remove utf-8 BOM if any.
// FIXME #12884: no efficient/safe way to remove from the start of a string
// and reuse the allocation.
let mut src = if src.starts_with("\u{feff}") {
String::from(&src[3..])
} else {
String::from(&src[..])
};
if src.starts_with("\u{feff}") {
src.drain(..3);
}
// Append '\n' in case it's not already there.
// This is a workaround to prevent CodeMap.lookup_filemap_idx from