From 2aad8c9744e563b143e11360423ee8f54066d2f7 Mon Sep 17 00:00:00 2001 From: Gabriel Majeri Date: Tue, 9 Jun 2020 13:02:43 +0300 Subject: [PATCH] Fix parsing a line comment then EOF --- src/lexer.rs | 3 ++- tests/parse_tokens.rs | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/lexer.rs b/src/lexer.rs index d7a3b92..9360b33 100644 --- a/src/lexer.rs +++ b/src/lexer.rs @@ -128,7 +128,7 @@ impl<'a, R: Read> Lexer<'a, R> { fn single_line_comment(&mut self) -> Result<(), ParserError> { loop { - if new_line_char!(self.skip_char()?) { + if self.eof()? || new_line_char!(self.skip_char()?) { break; } } @@ -872,6 +872,7 @@ impl<'a, R: Read> Lexer<'a, R> { self.name_token(c) }, + Err(ParserError::UnexpectedEOF) => Ok(Token::End), Err(e) => Err(e) } } diff --git a/tests/parse_tokens.rs b/tests/parse_tokens.rs index 7ea8251..263fcf8 100644 --- a/tests/parse_tokens.rs +++ b/tests/parse_tokens.rs @@ -91,3 +91,17 @@ fn char_with_hexseq() -> Result<(), ParserError> { fn char_with_hexseq_invalid() { assert!(read_all_tokens(r"'\x\' ").is_err()); } + +#[test] +fn empty() -> Result<(), ParserError> { + let tokens = read_all_tokens("")?; + assert!(tokens.is_empty()); + Ok(()) +} + +#[test] +fn comment_then_eof() -> Result<(), ParserError> { + let tokens = read_all_tokens("% only a comment")?; + assert_eq!(tokens, [Token::End]); + Ok(()) +}