From 14f093bfee3d0871d9796a0dcaf1648b76010930 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sun, 23 May 2021 22:59:25 +0200 Subject: A few predefined colors for testing --- src/eval/scope.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/eval/scope.rs') 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>; @@ -100,6 +100,23 @@ impl Scope { self.values.insert(var.into(), Rc::new(cell)); } + /// Define a constant function. + pub fn def_func(&mut self, name: impl Into, 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(&mut self, var: impl Into, 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, value: impl Into) { self.values.insert(var.into(), Rc::new(RefCell::new(value.into()))); -- cgit v1.2.3