compose_eval/expression/
field_access.rs1use crate::{Eval, Evaluated, Machine};
2use compose_library::diag::{At, SourceResult};
3use compose_syntax::ast;
4use compose_syntax::ast::AstNode;
5
6impl Eval for ast::FieldAccess<'_> {
7 fn eval(self, vm: &mut Machine) -> SourceResult<Evaluated> {
8 let target = self.target().eval(vm)?;
9 let field = self.field();
10 let field_span = field.span();
11
12 target.value
13 .field(&field, field_span, vm.sink_mut())
14 .at(field_span)
15 .map(|v| target.with_value(v))
16 }
17}