Skip to content
Snippets Groups Projects
Verified Commit b2ca3d3b authored by Louis's avatar Louis :fire:
Browse files

Add missing boolean ops to scanner

parent 6396ba26
No related branches found
No related tags found
No related merge requests found
Pipeline #510 failed with stages
in 37 seconds
...@@ -173,9 +173,7 @@ impl<'a> Scanner<'a> { ...@@ -173,9 +173,7 @@ impl<'a> Scanner<'a> {
}); });
} }
let next_char = self.source.chars().nth(self.position.offset); let next_char = self.next();
self.position.advance(1);
self.scan_state.advance(1);
match next_char { match next_char {
Some('=') => { Some('=') => {
...@@ -205,6 +203,30 @@ impl<'a> Scanner<'a> { ...@@ -205,6 +203,30 @@ impl<'a> Scanner<'a> {
Some(';') => Ok(self.tokenise(ScriptTokenType::Semicolon)), Some(';') => Ok(self.tokenise(ScriptTokenType::Semicolon)),
Some('/') => Ok(self.tokenise(ScriptTokenType::Slash)), Some('/') => Ok(self.tokenise(ScriptTokenType::Slash)),
Some('*') => Ok(self.tokenise(ScriptTokenType::Asterisk)), Some('*') => Ok(self.tokenise(ScriptTokenType::Asterisk)),
Some('&') => {
if next_match!(self, '&') {
Ok(self.tokenise(ScriptTokenType::DoubleAmpersand))
} else {
Err(ScannerError {
kind: ScannerErrorKind::UnexpectedToken {
span: gen_token_span(self),
},
position: self.position,
})
}
}
Some('|') => {
if next_match!(self, '|') {
Ok(self.tokenise(ScriptTokenType::DoublePipe))
} else {
Err(ScannerError {
kind: ScannerErrorKind::UnexpectedToken {
span: gen_token_span(self),
},
position: self.position,
})
}
}
Some('<') => { Some('<') => {
if next_match!(self, '=') { if next_match!(self, '=') {
Ok(self.tokenise(ScriptTokenType::LessEqual)) Ok(self.tokenise(ScriptTokenType::LessEqual))
...@@ -471,8 +493,7 @@ impl<'a> Scanner<'a> { ...@@ -471,8 +493,7 @@ impl<'a> Scanner<'a> {
fn next(&mut self) -> Option<char> { fn next(&mut self) -> Option<char> {
let ch = self.source.chars().nth(self.position.offset); let ch = self.source.chars().nth(self.position.offset);
self.position.advance(1); self.increment_cursor();
self.scan_state.advance(1);
ch ch
} }
......
...@@ -22,6 +22,8 @@ use test_case::test_case; ...@@ -22,6 +22,8 @@ use test_case::test_case;
#[test_case("==", Ok(ScriptTokenType::EqualEqual) ; "Expects ScriptTokenType::EqualEqual")] #[test_case("==", Ok(ScriptTokenType::EqualEqual) ; "Expects ScriptTokenType::EqualEqual")]
#[test_case(">", Ok(ScriptTokenType::Greater) ; "Expects ScriptTokenType::Greater")] #[test_case(">", Ok(ScriptTokenType::Greater) ; "Expects ScriptTokenType::Greater")]
#[test_case(">=", Ok(ScriptTokenType::GreaterEqual) ; "Expects ScriptTokenType::GreaterEqual")] #[test_case(">=", Ok(ScriptTokenType::GreaterEqual) ; "Expects ScriptTokenType::GreaterEqual")]
#[test_case("&&", Ok(ScriptTokenType::DoubleAmpersand) ; "Expects ScriptTokenType::DoubleAmpersand")]
#[test_case("||", Ok(ScriptTokenType::DoublePipe) ; "Expects ScriptTokenType::DoublePipe")]
#[test_case("<", Ok(ScriptTokenType::Less) ; "Expects ScriptTokenType::Less")] #[test_case("<", Ok(ScriptTokenType::Less) ; "Expects ScriptTokenType::Less")]
#[test_case("<=", Ok(ScriptTokenType::LessEqual) ; "Expects ScriptTokenType::LessEqual")] #[test_case("<=", Ok(ScriptTokenType::LessEqual) ; "Expects ScriptTokenType::LessEqual")]
#[test_case("\"Foo\"", Ok(ScriptTokenType::String(String::from("Foo"))) ; "Expects ScriptTokenType::String")] #[test_case("\"Foo\"", Ok(ScriptTokenType::String(String::from("Foo"))) ; "Expects ScriptTokenType::String")]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment