Skip to main content

microcad_lang/eval/
source_file.rs

1// Copyright © 2025-2026 The µcad authors <info@microcad.xyz>
2// SPDX-License-Identifier: AGPL-3.0-or-later
3
4use microcad_lang_base::SrcReferrer;
5
6use crate::{eval::*, model::*, symbol::SymbolMap, syntax::*};
7
8impl Eval for std::rc::Rc<SourceFile> {
9    fn eval(&self, context: &mut EvalContext) -> EvalResult<Value> {
10        context.scope(
11            StackFrame::Source(self.id(), SymbolMap::default()),
12            |context| self.statements.eval(context),
13        )
14    }
15}
16
17impl Eval<Model> for std::rc::Rc<SourceFile> {
18    fn eval(&self, context: &mut EvalContext) -> EvalResult<Model> {
19        context.scope(
20            StackFrame::Source(self.id(), SymbolMap::default()),
21            |context| {
22                let model = ModelBuilder::new(Element::Group, self.src_ref())
23                    .add_children(self.statements.eval(context)?)?
24                    .attributes(self.statements.eval(context)?)
25                    .build();
26                Ok(model)
27            },
28        )
29    }
30}