libsyntax: librustdoc: ignore utf-8 BOM in .rs files

Closes #12974
This commit is contained in:
Liigo Zhuang
2014-03-18 08:59:44 +08:00
committed by Alex Crichton
parent 8f7a7970f3
commit 20e178c582
3 changed files with 31 additions and 2 deletions

View File

@@ -271,13 +271,22 @@ impl CodeMap {
}
}
pub fn new_filemap(&self, filename: FileName, mut src: ~str) -> Rc<FileMap> {
pub fn new_filemap(&self, filename: FileName, src: ~str) -> Rc<FileMap> {
let mut files = self.files.borrow_mut();
let start_pos = match files.get().last() {
None => 0,
Some(last) => last.deref().start_pos.to_uint() + last.deref().src.len(),
};
// 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("\ufeff") {
src.as_slice().slice_from(3).into_owned()
} else {
src
};
// Append '\n' in case it's not already there.
// This is a workaround to prevent CodeMap.lookup_filemap_idx from accidentally
// overflowing into the next filemap in case the last byte of span is also the last