compose_eval/expression/
array.rs

1use 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}