Fix CRLF line-ending parsing for comments.

This commit is contained in:
Lee Jeffery
2015-05-08 20:33:58 +01:00
parent b402c43f08
commit a76244fcef

View File

@@ -403,45 +403,47 @@ impl<'a> StringReader<'a> {
Some('/') => {
self.bump();
self.bump();
// line comments starting with "///" or "//!" are doc-comments
if self.curr_is('/') || self.curr_is('!') {
let start_bpos = self.pos - BytePos(3);
while !self.is_eof() {
match self.curr.unwrap() {
'\n' => break,
'\r' => {
if self.nextch_is('\n') {
// CRLF
break
} else {
self.err_span_(self.last_pos, self.pos,
"bare CR not allowed in doc-comment");
}
let doc_comment = self.curr_is('/') || self.curr_is('!');
let start_bpos = self.pos - BytePos(3);
while !self.is_eof() {
match self.curr.unwrap() {
'\n' => break,
'\r' => {
if self.nextch_is('\n') {
// CRLF
break
} else {
self.err_span_(self.last_pos, self.pos,
"bare CR not allowed in comment");
}
_ => ()
}
self.bump();
_ => ()
}
return self.with_str_from(start_bpos, |string| {
// but comments with only more "/"s are not
self.bump();
}
return if doc_comment {
self.with_str_from(start_bpos, |string| {
// comments with only more "/"s are not doc comments
let tok = if is_doc_comment(string) {
token::DocComment(token::intern(string))
} else {
token::Comment
};
return Some(TokenAndSpan{
Some(TokenAndSpan {
tok: tok,
sp: codemap::mk_sp(start_bpos, self.last_pos)
});
});
})
})
} else {
let start_bpos = self.last_pos - BytePos(2);
while !self.curr_is('\n') && !self.is_eof() { self.bump(); }
return Some(TokenAndSpan {
Some(TokenAndSpan {
tok: token::Comment,
sp: codemap::mk_sp(start_bpos, self.last_pos)
});
})
}
}
Some('*') => {