use sim_kernel::{Result, Symbol, Value};
use sim_lib_binding::{BindingCell, LexicalEnv};
#[derive(Clone, Debug, Default)]
pub struct LuaEnv {
lexical: LexicalEnv,
}
impl LuaEnv {
pub fn new() -> Self {
Self::default()
}
pub fn child(&self) -> Self {
Self {
lexical: self.lexical.child(),
}
}
pub fn define(&mut self, name: Symbol, value: Value) -> Result<()> {
self.lexical.define(name, value)
}
pub fn contains(&self, name: &Symbol) -> bool {
self.lexical.lookup(name).is_ok()
}
pub fn assign(&mut self, name: &Symbol, value: Value) -> Result<Value> {
self.capture(name)?.set(value.clone())?;
Ok(value)
}
pub fn get(&self, name: &Symbol) -> Result<Value> {
self.lexical.lookup(name)
}
pub fn capture(&self, name: &Symbol) -> Result<BindingCell> {
self.lexical.capture_cell(name)
}
}