feat: generalize env
This commit is contained in:
@@ -9,7 +9,7 @@ use inkwell::values::{BasicValueEnum, FunctionValue};
|
||||
|
||||
use crate::jit::JITValueData;
|
||||
use crate::ty::internal::{Thunk, Value};
|
||||
use crate::vm::{LetEnv, VM};
|
||||
use crate::vm::{VmEnv, VM};
|
||||
|
||||
use super::{JITValue, ValueTag};
|
||||
|
||||
@@ -210,7 +210,7 @@ extern "C" fn helper_debug(value: JITValue) {
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
extern "C" fn helper_capture_env(thunk: JITValue, env: *const LetEnv) {
|
||||
extern "C" fn helper_capture_env(thunk: JITValue, env: *const VmEnv) {
|
||||
let thunk: &Thunk = unsafe { std::mem::transmute(thunk.data.ptr.as_ref().unwrap()) };
|
||||
let env = unsafe { Rc::from_raw(env) };
|
||||
thunk.capture(env.clone());
|
||||
@@ -218,7 +218,7 @@ extern "C" fn helper_capture_env(thunk: JITValue, env: *const LetEnv) {
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
extern "C" fn helper_neg(rhs: JITValue, _env: *const LetEnv) -> JITValue {
|
||||
extern "C" fn helper_neg(rhs: JITValue, _env: *const VmEnv) -> JITValue {
|
||||
use ValueTag::*;
|
||||
match rhs.tag {
|
||||
Int => JITValue {
|
||||
@@ -238,7 +238,7 @@ extern "C" fn helper_neg(rhs: JITValue, _env: *const LetEnv) -> JITValue {
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
extern "C" fn helper_not(rhs: JITValue, _env: *const LetEnv) -> JITValue {
|
||||
extern "C" fn helper_not(rhs: JITValue, _env: *const VmEnv) -> JITValue {
|
||||
use ValueTag::*;
|
||||
match rhs.tag {
|
||||
Bool => JITValue {
|
||||
@@ -347,10 +347,10 @@ extern "C" fn helper_call<'jit>(
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
extern "C" fn helper_lookup<'jit, 'vm>(sym: usize, env: *const LetEnv<'jit, 'vm>) -> JITValue {
|
||||
extern "C" fn helper_lookup<'jit, 'vm>(sym: usize, env: *const VmEnv<'jit, 'vm>) -> JITValue {
|
||||
let env = unsafe { env.as_ref() }.unwrap();
|
||||
let val = env.lookup(sym);
|
||||
val.unwrap().into()
|
||||
let val = env.lookup(&sym);
|
||||
val.cloned().unwrap().into()
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
|
||||
Reference in New Issue
Block a user