From a76244fcef9e1ae83b6a7631f33c409c156ad3d9 Mon Sep 17 00:00:00 2001 From: Lee Jeffery Date: Fri, 8 May 2015 20:33:58 +0100 Subject: Fix CRLF line-ending parsing for comments. --- src/libsyntax/parse/lexer/mod.rs | 50 +++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 24 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/libsyntax/parse/lexer/mod.rs b/src/libsyntax/parse/lexer/mod.rs index 6b0674c9a41..1a772783c9d 100644 --- a/src/libsyntax/parse/lexer/mod.rs +++ b/src/libsyntax/parse/lexer/mod.rs @@ -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('*') => { -- cgit 1.4.1-3-g733a5