From f6814b7732931ab0f1bfc4028122522f53d6af0c Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 13 Aug 2021 17:44:21 +0200 Subject: Optimize memory sizes --- src/eval/mod.rs | 46 ++++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 18 deletions(-) (limited to 'src/eval') diff --git a/src/eval/mod.rs b/src/eval/mod.rs index 4e7a0e84..9e6fad8f 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -177,6 +177,33 @@ impl Eval for Expr { type Output = Value; fn eval(&self, ctx: &mut EvalContext) -> TypResult { + match self { + Self::Ident(v) => v.eval(ctx), + Self::Lit(v) => v.eval(ctx), + Self::Array(v) => v.eval(ctx).map(Value::Array), + Self::Dict(v) => v.eval(ctx).map(Value::Dict), + Self::Template(v) => v.eval(ctx).map(Value::Template), + Self::Group(v) => v.eval(ctx), + Self::Block(v) => v.eval(ctx), + Self::Call(v) => v.eval(ctx), + Self::Closure(v) => v.eval(ctx), + Self::With(v) => v.eval(ctx), + Self::Unary(v) => v.eval(ctx), + Self::Binary(v) => v.eval(ctx), + Self::Let(v) => v.eval(ctx), + Self::If(v) => v.eval(ctx), + Self::While(v) => v.eval(ctx), + Self::For(v) => v.eval(ctx), + Self::Import(v) => v.eval(ctx), + Self::Include(v) => v.eval(ctx), + } + } +} + +impl Eval for Lit { + type Output = Value; + + fn eval(&self, _: &mut EvalContext) -> TypResult { Ok(match *self { Self::None(_) => Value::None, Self::Auto(_) => Value::Auto, @@ -188,23 +215,6 @@ impl Eval for Expr { Self::Percent(_, v) => Value::Relative(Relative::new(v / 100.0)), Self::Fractional(_, v) => Value::Fractional(Fractional::new(v)), Self::Str(_, ref v) => Value::Str(v.clone()), - Self::Ident(ref v) => v.eval(ctx)?, - Self::Array(ref v) => Value::Array(v.eval(ctx)?), - Self::Dict(ref v) => Value::Dict(v.eval(ctx)?), - Self::Template(ref v) => Value::Template(v.eval(ctx)?), - Self::Group(ref v) => v.eval(ctx)?, - Self::Block(ref v) => v.eval(ctx)?, - Self::Call(ref v) => v.eval(ctx)?, - Self::Closure(ref v) => v.eval(ctx)?, - Self::With(ref v) => v.eval(ctx)?, - Self::Unary(ref v) => v.eval(ctx)?, - Self::Binary(ref v) => v.eval(ctx)?, - Self::Let(ref v) => v.eval(ctx)?, - Self::If(ref v) => v.eval(ctx)?, - Self::While(ref v) => v.eval(ctx)?, - Self::For(ref v) => v.eval(ctx)?, - Self::Import(ref v) => v.eval(ctx)?, - Self::Include(ref v) => v.eval(ctx)?, }) } } @@ -674,8 +684,8 @@ impl Walk for SyntaxTree { impl Walk for SyntaxNode { fn walk(&self, ctx: &mut EvalContext) -> TypResult<()> { match self { - Self::Text(_) => {} Self::Space => {} + Self::Text(_) => {} Self::Linebreak(_) => {} Self::Parbreak(_) => {} Self::Strong(_) => {} -- cgit v1.2.3