From 1d0fde359472a30483471c7e0364d24723717769 Mon Sep 17 00:00:00 2001 From: ctsk <9384305+ctsk@users.noreply.github.com> Date: Sat, 21 Oct 2023 10:36:18 +0200 Subject: [PATCH] [rlox] Fix comment scanning --- rlox/src/lc.rs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/rlox/src/lc.rs b/rlox/src/lc.rs index 5bc6d55..458e987 100644 --- a/rlox/src/lc.rs +++ b/rlox/src/lc.rs @@ -196,7 +196,7 @@ impl<'src> Scanner<'src> { } fn scan_comment(&mut self) { - self.consume_until_eq('"'); + self.consume_until_eq('\n'); } } @@ -233,7 +233,7 @@ impl<'src> Iterator for Scanner<'src> { '+' => make_simple_token(self, TokenType::Plus), ';' => make_simple_token(self, TokenType::Semicolon), '/' => match self.consume_if_eq('/') { - Some(_) => self.next(), + Some(_) => { self.scan_comment(); self.next() }, None => make_simple_token(self, TokenType::Slash), }, '*' => make_simple_token(self, TokenType::Star), @@ -455,6 +455,31 @@ mod tests { ); } + #[test] + fn comment_scan() { + let source = "1\n2//comment\n3"; + let scanner = Scanner::new(source); + let tokens: Vec = scanner.collect(); + + assert_eq!( + tokens, + vec![ + Token { + ttype: TokenType::Number, + span: &source[0..=0] + }, + Token { + ttype: TokenType::Number, + span: &source[2..=2] + }, + Token { + ttype: TokenType::Number, + span: &source[13..=13] + } + ] + ); + } + #[test] fn string_scan() { let source = "\"hello world\"";