feat: generalize env

This commit is contained in:
2025-05-21 09:33:43 +08:00
parent 36f29a9cac
commit 177acfabcf
8 changed files with 77 additions and 70 deletions

View File

@@ -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)]