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 {
|
pub fn build(lexer: &mut Lexer<'a>) -> Self {
|
||||||
let test_expr = Box::new(Self::eat_test_expr(lexer));
|
let test_expr = Box::new(Self::eat_test_expr(lexer));
|
||||||
let then_body = BranchBody::build(lexer);
|
let then_body = BranchBody::build(lexer);
|
||||||
|
|
||||||
lexer.eat_expect(Token::Else);
|
lexer.eat_expect(Token::Else);
|
||||||
lexer.eat_expect(Token::BraceOpen);
|
let else_body = match lexer.next().unwrap() {
|
||||||
let else_body = BranchBody::build(lexer);
|
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 {
|
Self {
|
||||||
test_expr,
|
test_expr,
|
||||||
then_body,
|
then_body,
|
||||||
|
@ -674,6 +682,11 @@ mod tests {
|
||||||
parse_expr("if true { 1 } else { 0 };");
|
parse_expr("if true { 1 } else { 0 };");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn else_if_expr() {
|
||||||
|
parse_expr("if a { 1 } else if b { 2 } else { c };");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn func_call() {
|
fn func_call() {
|
||||||
parse_expr("func_call(1 + 2, 3, 4 * 5);");
|
parse_expr("func_call(1 + 2, 3, 4 * 5);");
|
||||||
|
|
Loading…
Reference in New Issue