summaryrefslogtreecommitdiff
path: root/src/eval/scope.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/scope.rs
parent20b1a38414101f842a6d9201133a5aaaa45a7cec (diff)
Better function representation
Diffstat (limited to 'src/eval/scope.rs')
-rw-r--r--src/eval/scope.rs21
1 files changed, 10 insertions, 11 deletions
diff --git a/src/eval/scope.rs b/src/eval/scope.rs
index 34da68d4..3e79afc1 100644
--- a/src/eval/scope.rs
+++ b/src/eval/scope.rs
@@ -4,7 +4,7 @@ use std::fmt::{self, Debug, Formatter};
use std::iter;
use std::sync::Arc;
-use super::{Args, Class, Construct, EvalContext, Function, Set, Value};
+use super::{Args, Class, Construct, EvalContext, Func, Set, Value};
use crate::diag::TypResult;
use crate::util::EcoString;
@@ -98,22 +98,21 @@ impl Scope {
self.values.insert(var.into(), slot);
}
- /// Define a constant function.
- pub fn def_func<F>(&mut self, name: &str, f: F)
- where
- F: Fn(&mut EvalContext, &mut Args) -> TypResult<Value> + 'static,
- {
- let name = EcoString::from(name);
- self.def_const(name.clone(), Function::new(Some(name), f));
+ /// Define a constant native function.
+ pub fn def_func(
+ &mut self,
+ name: &'static str,
+ func: fn(&mut EvalContext, &mut Args) -> TypResult<Value>,
+ ) {
+ self.def_const(name, Func::native(name, func));
}
/// Define a constant class.
- pub fn def_class<T>(&mut self, name: &str)
+ pub fn def_class<T>(&mut self, name: &'static str)
where
T: Construct + Set + 'static,
{
- let name = EcoString::from(name);
- self.def_const(name.clone(), Class::new::<T>(name));
+ self.def_const(name, Class::new::<T>(name));
}
/// Look up the value of a variable.