Support else-if expressions (but not statements yet)
This commit is contained in:
parent
2beb493aad
commit
8c2af9ab61
17
src/parse.rs
17
src/parse.rs
|
@ -524,9 +524,17 @@ impl<'a> IfExpr<'a> {
|
|||
pub fn build(lexer: &mut Lexer<'a>) -> Self {
|
||||
let test_expr = Box::new(Self::eat_test_expr(lexer));
|
||||
let then_body = BranchBody::build(lexer);
|
||||
|
||||
lexer.eat_expect(Token::Else);
|
||||
lexer.eat_expect(Token::BraceOpen);
|
||||
let else_body = BranchBody::build(lexer);
|
||||
let else_body = match lexer.next().unwrap() {
|
||||
Token::BraceOpen => BranchBody::build(lexer),
|
||||
Token::If => BranchBody {
|
||||
statements: Vec::new(),
|
||||
tail_expr: Some(Box::new(Expr::If(IfExpr::build(lexer)))),
|
||||
},
|
||||
_ => lexer.panic_message("Expected if or opening brace"),
|
||||
};
|
||||
|
||||
Self {
|
||||
test_expr,
|
||||
then_body,
|
||||
|
@ -674,6 +682,11 @@ mod tests {
|
|||
parse_expr("if true { 1 } else { 0 };");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn else_if_expr() {
|
||||
parse_expr("if a { 1 } else if b { 2 } else { c };");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn func_call() {
|
||||
parse_expr("func_call(1 + 2, 3, 4 * 5);");
|
||||
|
|
Loading…
Reference in New Issue