[rlox] Handle incomplete expression
This commit is contained in:
@@ -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| {
|
||||||
|
|||||||
Reference in New Issue
Block a user