summaryrefslogtreecommitdiff
path: root/src/eval/value.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-01-31 17:57:20 +0100
committerLaurenz <laurmaedje@gmail.com>2022-02-01 12:26:13 +0100
commit6a6753cb69f7c29e857fd465eecf66a02ff76aa3 (patch)
treee157752f30f5c493ee045d98039cfd3a94cdff22 /src/eval/value.rs
parent20b1a38414101f842a6d9201133a5aaaa45a7cec (diff)
Better function representation
Diffstat (limited to 'src/eval/value.rs')
-rw-r--r--src/eval/value.rs17
1 files changed, 5 insertions, 12 deletions
diff --git a/src/eval/value.rs b/src/eval/value.rs
index 7d65d5af..c19794df 100644
--- a/src/eval/value.rs
+++ b/src/eval/value.rs
@@ -4,7 +4,7 @@ use std::fmt::{self, Debug, Formatter};
use std::hash::Hash;
use std::sync::Arc;
-use super::{ops, Args, Array, Class, Dict, Function, Node};
+use super::{ops, Args, Array, Class, Dict, Func, Node};
use crate::diag::StrResult;
use crate::geom::{Angle, Color, Fractional, Length, Linear, Relative, RgbaColor};
use crate::layout::Layout;
@@ -45,7 +45,7 @@ pub enum Value {
/// A node value: `[*Hi* there]`.
Node(Node),
/// An executable function.
- Func(Function),
+ Func(Func),
/// Captured arguments to a function.
Args(Args),
/// A class of nodes.
@@ -89,7 +89,7 @@ impl Value {
Self::Array(_) => Array::TYPE_NAME,
Self::Dict(_) => Dict::TYPE_NAME,
Self::Node(_) => Node::TYPE_NAME,
- Self::Func(_) => Function::TYPE_NAME,
+ Self::Func(_) => Func::TYPE_NAME,
Self::Args(_) => Args::TYPE_NAME,
Self::Class(_) => Class::TYPE_NAME,
Self::Dyn(v) => v.type_name(),
@@ -401,13 +401,7 @@ primitive! { EcoString: "string", Str }
primitive! { Array: "array", Array }
primitive! { Dict: "dictionary", Dict }
primitive! { Node: "template", Node }
-primitive! { Function: "function",
- Func,
- Class(v) => Function::new(
- Some(v.name().clone()),
- move |ctx, args| v.construct(ctx, args).map(Value::Node)
- )
-}
+primitive! { Func: "function", Func, Class(v) => v.constructor() }
primitive! { Args: "arguments", Args }
primitive! { Class: "class", Class }
@@ -554,9 +548,8 @@ mod tests {
test(dict!["two" => false, "one" => 1], "(one: 1, two: false)");
// Functions.
- test(Function::new(None, |_, _| Ok(Value::None)), "<function>");
test(
- Function::new(Some("nil".into()), |_, _| Ok(Value::None)),
+ Func::native("nil", |_, _| Ok(Value::None)),
"<function nil>",
);