Make reduced ast call handler be a separate method
This commit is contained in:
parent
71386be80e
commit
bc01a5ded8
@ -149,10 +149,7 @@ impl Expression {
|
|||||||
},
|
},
|
||||||
_ => Expr::Val(name.clone()),
|
_ => Expr::Val(name.clone()),
|
||||||
},
|
},
|
||||||
Call { f, arguments } => Expr::Call {
|
Call { f, arguments } => reduce_call_expression(f, arguments, symbol_table),
|
||||||
f: Box::new(f.node().reduce(symbol_table)),
|
|
||||||
args: arguments.iter().map(|arg| arg.node().reduce(symbol_table)).collect(),
|
|
||||||
},
|
|
||||||
TupleLiteral(exprs) => Expr::Tuple(exprs.iter().map(|e| e.node().reduce(symbol_table)).collect()),
|
TupleLiteral(exprs) => Expr::Tuple(exprs.iter().map(|e| e.node().reduce(symbol_table)).collect()),
|
||||||
IfExpression { discriminator, body } => reduce_if_expression(discriminator, body, symbol_table),
|
IfExpression { discriminator, body } => reduce_if_expression(discriminator, body, symbol_table),
|
||||||
Lambda { params, body, .. } => reduce_lambda(params, body, symbol_table),
|
Lambda { params, body, .. } => reduce_lambda(params, body, symbol_table),
|
||||||
@ -173,6 +170,13 @@ fn reduce_lambda(params: &Vec<FormalParam>, body: &Block, symbol_table: &SymbolT
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn reduce_call_expression(func: &Meta<Expression>, arguments: &Vec<Meta<InvocationArgument>>, symbol_table: &SymbolTable) -> Expr {
|
||||||
|
Expr::Call {
|
||||||
|
f: Box::new(func.node().reduce(symbol_table)),
|
||||||
|
args: arguments.iter().map(|arg| arg.node().reduce(symbol_table)).collect(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn reduce_if_expression(discriminator: &Discriminator, body: &IfExpressionBody, symbol_table: &SymbolTable) -> Expr {
|
fn reduce_if_expression(discriminator: &Discriminator, body: &IfExpressionBody, symbol_table: &SymbolTable) -> Expr {
|
||||||
let cond = Box::new(match *discriminator {
|
let cond = Box::new(match *discriminator {
|
||||||
Discriminator::Simple(ref expr) => expr.reduce(symbol_table),
|
Discriminator::Simple(ref expr) => expr.reduce(symbol_table),
|
||||||
|
Loading…
Reference in New Issue
Block a user