Make values smaller

Reduced from 48 bytes to 32 bytes on 64-bit architectures.
This commit is contained in:
Laurenz 2021-06-28 21:57:18 +02:00
parent d8d60207ef
commit 8ea05739af

View File

@ -229,7 +229,9 @@ impl Debug for TemplateFunc {
/// A wrapper around a reference-counted executable function.
#[derive(Clone)]
pub struct FuncValue {
name: Option<String>,
/// The string is boxed to make the whole struct fit into 24 bytes, so that
/// a [`Value`] fits into 32 bytes.
name: Option<Box<String>>,
f: Rc<dyn Fn(&mut EvalContext, &mut FuncArgs) -> Value>,
}
@ -239,12 +241,12 @@ impl FuncValue {
where
F: Fn(&mut EvalContext, &mut FuncArgs) -> Value + 'static,
{
Self { name, f: Rc::new(f) }
Self { name: name.map(Box::new), f: Rc::new(f) }
}
/// The name of the function.
pub fn name(&self) -> Option<&str> {
self.name.as_deref()
self.name.as_ref().map(|s| s.as_str())
}
}