Fix CRLF line-ending parsing for comments.
This commit is contained in:
@@ -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('*') => {
|
||||
|
||||
Reference in New Issue
Block a user