compose_eval/expression/
index_access.rs1use crate::vm::Tracked;
2use crate::{Eval, Evaluated, Machine};
3use compose_library::diag::SourceResult;
4use compose_library::{IntoValue, Vm};
5use compose_syntax::ast;
6use compose_syntax::ast::AstNode;
7
8impl Eval for ast::IndexAccess<'_> {
9 fn eval(self, vm: &mut Machine) -> SourceResult<Evaluated> {
10 let target = self.target().eval(vm)?.track_tmp_root(vm);
11 let index = self.index().eval(vm)?.track_tmp_root(vm).value;
12
13 let value =
14 target
15 .value
16 .index(index, self.target().span(), self.index().span(), vm.heap())?;
17
18 Ok(Evaluated::new(value.into_value(), target.mutable))
19 }
20}