diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-08-13 17:44:21 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-08-13 18:17:24 +0200 |
| commit | f6814b7732931ab0f1bfc4028122522f53d6af0c (patch) | |
| tree | 7be18b17ebb8e61bd2590d544fa8deb8e5315274 /src/eval/mod.rs | |
| parent | 6a3385e4e77ce7672bcc80941bf02c8218f344a2 (diff) | |
Optimize memory sizes
Diffstat (limited to 'src/eval/mod.rs')
| -rw-r--r-- | src/eval/mod.rs | 46 |
1 files changed, 28 insertions, 18 deletions
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<Self::Output> { + 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<Self::Output> { 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(_) => {} |
