summaryrefslogtreecommitdiff
path: root/src/eval/value.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-08-13 16:39:52 +0200
committerLaurenz <laurmaedje@gmail.com>2021-08-13 16:55:45 +0200
commit6a3385e4e77ce7672bcc80941bf02c8218f344a2 (patch)
tree7ae5d668cf7d734f81f1e9d604bbe46fa0775ed8 /src/eval/value.rs
parent144f20882136ef81b79d77bd8a68f42b76c66676 (diff)
Argument collection and spreading
Diffstat (limited to 'src/eval/value.rs')
-rw-r--r--src/eval/value.rs6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/eval/value.rs b/src/eval/value.rs
index 9bab067c..958077da 100644
--- a/src/eval/value.rs
+++ b/src/eval/value.rs
@@ -3,7 +3,7 @@ use std::cmp::Ordering;
use std::fmt::{self, Debug, Display, Formatter};
use std::rc::Rc;
-use super::{ops, Array, Dict, Function, Template, TemplateFunc};
+use super::{ops, Array, Dict, FuncArgs, Function, Template, TemplateFunc};
use crate::color::{Color, RgbaColor};
use crate::diag::StrResult;
use crate::exec::ExecContext;
@@ -48,6 +48,8 @@ pub enum Value {
Func(Function),
/// A dynamic value.
Dyn(Dynamic),
+ /// Captured arguments to a function.
+ Args(Rc<FuncArgs>),
}
impl Value {
@@ -78,6 +80,7 @@ impl Value {
Self::Dict(_) => Dict::TYPE_NAME,
Self::Template(_) => Template::TYPE_NAME,
Self::Func(_) => Function::TYPE_NAME,
+ Self::Args(_) => Rc::<FuncArgs>::TYPE_NAME,
Self::Dyn(v) => v.type_name(),
}
}
@@ -387,4 +390,5 @@ primitive! { Array: "array", Array }
primitive! { Dict: "dictionary", Dict }
primitive! { Template: "template", Template }
primitive! { Function: "function", Func }
+primitive! { Rc<FuncArgs>: "arguments", Args }
primitive! { f64: "float", Float, Int(v) => v as f64 }