Skip to content

Commit

Permalink
Fix CRLF line-ending parsing for comments.
Browse files Browse the repository at this point in the history
  • Loading branch information
Lee Jeffery committed May 8, 2015
1 parent b402c43 commit a76244f
Showing 1 changed file with 26 additions and 24 deletions.
50 changes: 26 additions & 24 deletions src/libsyntax/parse/lexer/mod.rs
Expand Up @@ -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('*') => {
Expand Down

0 comments on commit a76244f

Please sign in to comment.