compose_eval/expression/
field_access.rs

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