feat(jit): fib!
This commit is contained in:
@@ -3,12 +3,12 @@ use std::rc::Rc;
|
||||
|
||||
use crate::ty::common::Const;
|
||||
use crate::ty::internal::{AttrSet, PrimOp, Value};
|
||||
use crate::vm::{Env, VM};
|
||||
use crate::vm::{LetEnv, VM};
|
||||
|
||||
pub fn env<'jit, 'vm>(vm: &'vm VM<'jit>) -> Env<'jit, 'vm> {
|
||||
let mut env = Env::empty();
|
||||
env.insert(vm.new_sym("true"), Value::Const(Const::Bool(true)));
|
||||
env.insert(vm.new_sym("false"), Value::Const(Const::Bool(false)));
|
||||
pub fn env<'jit, 'vm>(vm: &'vm VM<'jit>) -> LetEnv<'jit, 'vm> {
|
||||
let mut env_map = HashMap::new();
|
||||
env_map.insert(vm.new_sym("true"), Value::Const(Const::Bool(true)));
|
||||
env_map.insert(vm.new_sym("false"), Value::Const(Const::Bool(false)));
|
||||
|
||||
let primops = [
|
||||
PrimOp::new("add", 2, |_, args| {
|
||||
@@ -46,18 +46,19 @@ pub fn env<'jit, 'vm>(vm: &'vm VM<'jit>) -> Env<'jit, 'vm> {
|
||||
let mut map = HashMap::new();
|
||||
for primop in primops {
|
||||
let primop = Rc::new(primop);
|
||||
env.insert(
|
||||
env_map.insert(
|
||||
vm.new_sym(format!("__{}", primop.name)),
|
||||
Value::PrimOp(primop.clone()),
|
||||
);
|
||||
map.insert(vm.new_sym(primop.name), Value::PrimOp(primop));
|
||||
}
|
||||
let sym = vm.new_sym("builtins");
|
||||
let attrs = Rc::new_cyclic(|weak| {
|
||||
map.insert(vm.new_sym("builtins"), Value::Builtins(weak.clone()));
|
||||
map.insert(sym, Value::Builtins(weak.clone()));
|
||||
AttrSet::from_inner(map)
|
||||
});
|
||||
let builtins = Value::AttrSet(attrs);
|
||||
|
||||
env.insert(vm.new_sym("builtins"), builtins);
|
||||
env
|
||||
env_map.insert(sym, builtins);
|
||||
LetEnv::new(env_map.into())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user