feat: less clone on symbol
This commit is contained in:
@@ -1,14 +1,13 @@
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
|
||||
use crate::ty::common::Symbol;
|
||||
use crate::ty::internal::{_Thunk, Const, PrimOp, RecAttrSet, Thunk, Value};
|
||||
use crate::vm::Env;
|
||||
use crate::vm::{Env, VM};
|
||||
|
||||
pub fn env<'vm>() -> Rc<Env<'vm>> {
|
||||
pub fn env<'vm>(vm: &'vm VM) -> Rc<Env<'vm>> {
|
||||
let env = Rc::new(Env::empty());
|
||||
env.insert(Symbol::from("true"), Value::Const(Const::Bool(true)));
|
||||
env.insert(Symbol::from("false"), Value::Const(Const::Bool(false)));
|
||||
env.insert(vm.new_sym("true"), Value::Const(Const::Bool(true)));
|
||||
env.insert(vm.new_sym("false"), Value::Const(Const::Bool(false)));
|
||||
|
||||
let primops = [
|
||||
PrimOp::new("add", 2, |_, args| {
|
||||
@@ -47,17 +46,17 @@ pub fn env<'vm>() -> Rc<Env<'vm>> {
|
||||
let map = builtins_env.clone().new_rec();
|
||||
for primop in primops {
|
||||
env.insert(
|
||||
Symbol::from(format!("__{}", primop.name)),
|
||||
vm.new_sym(format!("__{}", primop.name)),
|
||||
Value::PrimOp(primop.clone()),
|
||||
);
|
||||
map.insert(Symbol::from(primop.name), Value::PrimOp(primop));
|
||||
map.insert(vm.new_sym(primop.name), Value::PrimOp(primop));
|
||||
}
|
||||
let builtins = Value::RecAttrSet(RecAttrSet::from_inner(map.clone()));
|
||||
let thunk = Thunk {
|
||||
thunk: Rc::new(RefCell::new(_Thunk::Value(Box::new(builtins.clone())))),
|
||||
};
|
||||
map.insert(Symbol::from("builtins"), Value::Thunk(thunk));
|
||||
map.insert(vm.new_sym("builtins"), Value::Thunk(thunk));
|
||||
|
||||
env.insert(Symbol::from("builtins"), builtins);
|
||||
env.insert(vm.new_sym("builtins"), builtins);
|
||||
env
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user