diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-05-23 22:59:25 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-05-23 22:59:25 +0200 |
| commit | 14f093bfee3d0871d9796a0dcaf1648b76010930 (patch) | |
| tree | 83cf2e2d56d2d25a154c76c5bf31146eb03ce3c1 /src/eval/scope.rs | |
| parent | cd25b402816b0b4db0b310e3fff179f2a4fd7751 (diff) | |
A few predefined colors for testing
Diffstat (limited to 'src/eval/scope.rs')
| -rw-r--r-- | src/eval/scope.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/eval/scope.rs b/src/eval/scope.rs index 20c18306..a3c9234b 100644 --- a/src/eval/scope.rs +++ b/src/eval/scope.rs @@ -1,10 +1,10 @@ use std::cell::RefCell; use std::collections::HashMap; -use std::fmt::{self, Debug, Formatter}; +use std::fmt::{self, Debug, Display, Formatter}; use std::iter; use std::rc::Rc; -use super::Value; +use super::{AnyValue, EvalContext, FuncArgs, FuncValue, Type, Value}; /// A slot where a variable is stored. pub type Slot = Rc<RefCell<Value>>; @@ -100,6 +100,23 @@ impl Scope { self.values.insert(var.into(), Rc::new(cell)); } + /// Define a constant function. + pub fn def_func<F>(&mut self, name: impl Into<String>, f: F) + where + F: Fn(&mut EvalContext, &mut FuncArgs) -> Value + 'static, + { + let name = name.into(); + self.def_const(name.clone(), FuncValue::new(Some(name), f)); + } + + /// Define a constant variable with a value of variant `Value::Any`. + pub fn def_any<T>(&mut self, var: impl Into<String>, any: T) + where + T: Type + Debug + Display + Clone + PartialEq + 'static, + { + self.def_const(var, AnyValue::new(any)) + } + /// Define a mutable variable with a value. pub fn def_mut(&mut self, var: impl Into<String>, value: impl Into<Value>) { self.values.insert(var.into(), Rc::new(RefCell::new(value.into()))); |
