compose_eval/expression/
array.rs

1use crate::{Eval, Evaluated, Machine};
2use compose_library::diag::SourceResult;
3use compose_library::{ArrayValue, 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(Evaluated::mutable(Value::Array(ArrayValue::from(
15            vm.heap_mut(),
16            inner,
17        ))))
18    }
19}