git.delta.rocks / jrsonnet / refs/commits / 56fe3090ef64

difftreelog

feat(evaluator) Expr::Arr support

Лач2020-06-01parent: #8915d0b.patch.diff
in: master

1 file changed

modifiedcrates/jsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth
250}250}
251251
252pub fn evaluate(context: Context, eval_state: EvaluationState, expr: &LocExpr) -> Val {252pub fn evaluate(context: Context, eval_state: EvaluationState, expr: &LocExpr) -> Val {
253 println!("===");
254 eval_state.print_stack_trace();
255 use Expr::*;253 use Expr::*;
256 eval_state.clone().push(expr.clone(), "expr".to_owned(), || {254 eval_state.clone().push(expr.clone(), "expr".to_owned(), || {
257 let LocExpr(expr, loc) = expr;255 let LocExpr(expr, loc) = expr;
330 .into_future(future_context);328 .into_future(future_context);
331 evaluate(context, eval_state.clone(), &returned.clone())329 evaluate(context, eval_state.clone(), &returned.clone())
332 }330 }
331 Arr(items) => {
332 let mut out = Vec::with_capacity(items.len());
333 for item in items {
334 out.push(evaluate(context.clone(), eval_state.clone(), item));
335 }
336 Val::Arr(out)
337 }
333 Obj(body) => Val::Obj(evaluate_object(context, eval_state, body.clone())),338 Obj(body) => Val::Obj(evaluate_object(context, eval_state, body.clone())),
334 Apply(value, ArgsDesc(args)) => {339 Apply(value, ArgsDesc(args)) => {
335 let value = evaluate(context.clone(), eval_state.clone(), value).unwrap_if_lazy();340 let value = evaluate(context.clone(), eval_state.clone(), value).unwrap_if_lazy();