[rlox] Handle incomplete expression

This commit is contained in:
ctsk
2023-10-08 12:44:32 +02:00
parent 45014fbe77
commit 957463bf2f

View File

@@ -329,31 +329,34 @@ impl<'src> Parser<'src> {
} }
fn _expression(&mut self, chunk: &mut Chunk, min_prec: Precedence) { fn _expression(&mut self, chunk: &mut Chunk, min_prec: Precedence) {
match self.scanner.next().unwrap() { match self.scanner.next() {
Token { None => panic!("Expected further tokens"),
ttype: TokenType::Minus, Some(token) => match token {
span: _, Token {
} => { ttype: TokenType::Minus,
self._expression(chunk, Precedence::Unary); span: _,
chunk.add_op(Op::Negate, 0); } => {
self._expression(chunk, Precedence::Unary);
chunk.add_op(Op::Negate, 0);
}
Token {
ttype: TokenType::Number,
span,
} => {
match span.parse::<f64>() {
Ok(c) => chunk.add_constant(c.into(), 0),
_ => panic!("Could not parse number"),
};
}
Token {
ttype: TokenType::LeftParen,
span: _,
} => {
self._expression(chunk, Precedence::None);
assert_eq!(self.scanner.next().unwrap().ttype, TokenType::RightParen)
}
_ => panic!("Expected '-' or number"),
} }
Token {
ttype: TokenType::Number,
span,
} => {
match span.parse::<f64>() {
Ok(c) => chunk.add_constant(c.into(), 0),
_ => panic!("Could not parse number"),
};
}
Token {
ttype: TokenType::LeftParen,
span: _,
} => {
self._expression(chunk, Precedence::None);
assert_eq!(self.scanner.next().unwrap().ttype, TokenType::RightParen)
}
_ => panic!("Expected '-' or number"),
}; };
while let Some(op) = self.scanner.next_if(|token| { while let Some(op) = self.scanner.next_if(|token| {