From adb71ee040752f9348b0c9a511b2ab7e3710cb80 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Wed, 21 Jul 2021 20:35:02 +0200 Subject: Move and refactor --- src/eval/mod.rs | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'src/eval/mod.rs') diff --git a/src/eval/mod.rs b/src/eval/mod.rs index 34986ffa..5b00819b 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -43,6 +43,9 @@ pub fn eval(ctx: &mut Context, file: FileId, ast: Rc) -> Pass; + /// An evaluated module, ready for importing or execution. #[derive(Debug, Clone, PartialEq)] pub struct Module { @@ -52,20 +55,29 @@ pub struct Module { pub template: Template, } +/// Evaluate an expression. +pub trait Eval { + /// The output of evaluating the expression. + type Output; + + /// Evaluate the expression to the output value. + fn eval(&self, ctx: &mut EvalContext) -> Self::Output; +} + /// The context for evaluation. pub struct EvalContext<'a> { /// The loader from which resources (files and images) are loaded. pub loader: &'a dyn Loader, /// The cache for decoded images. pub images: &'a mut ImageCache, + /// The cache for loaded modules. + pub modules: &'a mut ModuleCache, /// The active scopes. pub scopes: Scopes<'a>, /// Evaluation diagnostics. pub diags: DiagSet, /// The stack of imported files that led to evaluation of the current file. pub route: Vec, - /// A map of loaded module. - pub modules: HashMap, } impl<'a> EvalContext<'a> { @@ -74,10 +86,10 @@ impl<'a> EvalContext<'a> { Self { loader: ctx.loader.as_ref(), images: &mut ctx.images, + modules: &mut ctx.modules, scopes: Scopes::new(Some(&ctx.std)), diags: DiagSet::new(), route: vec![file], - modules: HashMap::new(), } } @@ -184,15 +196,6 @@ impl<'a> EvalContext<'a> { } } -/// Evaluate an expression. -pub trait Eval { - /// The output of evaluating the expression. - type Output; - - /// Evaluate the expression to the output value. - fn eval(&self, ctx: &mut EvalContext) -> Self::Output; -} - impl Eval for Rc { type Output = Template; -- cgit v1.2.3