[rlox] Fix comment scanning
This commit is contained in:
@@ -196,7 +196,7 @@ impl<'src> Scanner<'src> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn scan_comment(&mut self) {
|
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::Plus),
|
||||||
';' => make_simple_token(self, TokenType::Semicolon),
|
';' => make_simple_token(self, TokenType::Semicolon),
|
||||||
'/' => match self.consume_if_eq('/') {
|
'/' => match self.consume_if_eq('/') {
|
||||||
Some(_) => self.next(),
|
Some(_) => { self.scan_comment(); self.next() },
|
||||||
None => make_simple_token(self, TokenType::Slash),
|
None => make_simple_token(self, TokenType::Slash),
|
||||||
},
|
},
|
||||||
'*' => make_simple_token(self, TokenType::Star),
|
'*' => 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<Token> = 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]
|
#[test]
|
||||||
fn string_scan() {
|
fn string_scan() {
|
||||||
let source = "\"hello world\"";
|
let source = "\"hello world\"";
|
||||||
|
|||||||
Reference in New Issue
Block a user