From e1f29d6cb9437a4afb2e4fc4ee10a5b8717ab9fa Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 22 Feb 2022 14:31:09 +0100 Subject: Rework the core context --- src/eval/mod.rs | 360 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 182 insertions(+), 178 deletions(-) (limited to 'src/eval/mod.rs') diff --git a/src/eval/mod.rs b/src/eval/mod.rs index a67a21d4..bc6c8fc8 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -13,6 +13,7 @@ mod class; mod collapse; mod func; mod layout; +mod module; mod ops; mod scope; mod show; @@ -25,15 +26,13 @@ pub use collapse::*; pub use dict::*; pub use func::*; pub use layout::*; +pub use module::*; pub use scope::*; pub use show::*; pub use styles::*; pub use template::*; pub use value::*; -use std::io; -use std::mem; - use unicode_segmentation::UnicodeSegmentation; use crate::diag::{At, Error, StrResult, Trace, Tracepoint, TypResult}; @@ -42,17 +41,7 @@ use crate::library; use crate::syntax::ast::*; use crate::syntax::{Span, Spanned}; use crate::util::EcoString; -use crate::Vm; - -/// An evaluated module, ready for importing or conversion to a root layout -/// tree. -#[derive(Debug, Clone)] -pub struct Module { - /// The top-level definitions that were bound in this module. - pub scope: Scope, - /// The module's layoutable contents. - pub template: Template, -} +use crate::Context; /// Evaluate an expression. pub trait Eval { @@ -60,20 +49,21 @@ pub trait Eval { type Output; /// Evaluate the expression to the output value. - fn eval(&self, vm: &mut Vm) -> TypResult; + fn eval(&self, ctx: &mut Context, scp: &mut Scopes) -> TypResult; } impl Eval for Markup { type Output = Template; - fn eval(&self, vm: &mut Vm) -> TypResult { - eval_markup(vm, &mut self.nodes()) + fn eval(&self, ctx: &mut Context, scp: &mut Scopes) -> TypResult { + eval_markup(ctx, scp, &mut self.nodes()) } } /// Evaluate a stream of markup nodes. fn eval_markup( - vm: &mut Vm, + ctx: &mut Context, + scp: &mut Scopes, nodes: &mut impl Iterator, ) -> TypResult