microcad_lang/eval/
source_file.rs1use 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}