compose_eval/expression/
array.rs1use crate::{Eval, Evaluated, Machine, ValueEvaluatedExtensions};
2use compose_library::diag::SourceResult;
3use compose_library::{ArrayValue, IntoValue, Value, Vm};
4use compose_syntax::ast;
5
6impl<'a> Eval for ast::Array<'a> {
7 fn eval(self, vm: &mut Machine) -> SourceResult<Evaluated> {
8 let elements = self.elements();
9
10 let inner = elements
11 .map(|e| e.eval(vm).map(|v| v.value))
12 .collect::<SourceResult<Vec<Value>>>()?;
13
14 Ok(ArrayValue::from(vm.heap_mut(), inner)
15 .into_value()
16 .mutable())
17 }
18}