diff --git a/Cargo.lock b/Cargo.lock index cc54a953..9e8c1774 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1160,7 +1160,7 @@ dependencies = [ [[package]] name = "oxide_builtins" -version = "0.8.77" +version = "0.8.78" dependencies = [ "chrono", "fast-float", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "oxide_bytecode" -version = "0.8.77" +version = "0.8.78" dependencies = [ "num-bigint", "oxide_log", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "oxide_cfg" -version = "0.8.77" +version = "0.8.78" dependencies = [ "oxide_bytecode", "oxide_emit", @@ -1204,7 +1204,7 @@ dependencies = [ [[package]] name = "oxide_cli" -version = "0.8.77" +version = "0.8.78" dependencies = [ "ansi_term", "bumpalo", @@ -1226,7 +1226,7 @@ dependencies = [ [[package]] name = "oxide_code_cache" -version = "0.8.77" +version = "0.8.78" dependencies = [ "lru", "oxide_bytecode", @@ -1235,7 +1235,7 @@ dependencies = [ [[package]] name = "oxide_compiler" -version = "0.8.77" +version = "0.8.78" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1255,7 +1255,7 @@ dependencies = [ [[package]] name = "oxide_dce" -version = "0.8.77" +version = "0.8.78" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1269,7 +1269,7 @@ dependencies = [ [[package]] name = "oxide_emit" -version = "0.8.77" +version = "0.8.78" dependencies = [ "num-bigint", "oxc_allocator", @@ -1284,7 +1284,7 @@ dependencies = [ [[package]] name = "oxide_engine" -version = "0.8.77" +version = "0.8.78" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1296,7 +1296,7 @@ dependencies = [ [[package]] name = "oxide_ir" -version = "0.8.77" +version = "0.8.78" dependencies = [ "oxide_bytecode", "oxide_log", @@ -1305,7 +1305,7 @@ dependencies = [ [[package]] name = "oxide_kernel" -version = "0.8.77" +version = "0.8.78" dependencies = [ "bumpalo", "dashmap", @@ -1319,7 +1319,7 @@ dependencies = [ [[package]] name = "oxide_liveness" -version = "0.8.77" +version = "0.8.78" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1331,7 +1331,7 @@ dependencies = [ [[package]] name = "oxide_log" -version = "0.8.77" +version = "0.8.78" dependencies = [ "tracing", "tracing-appender", @@ -1340,7 +1340,7 @@ dependencies = [ [[package]] name = "oxide_parser" -version = "0.8.77" +version = "0.8.78" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1355,7 +1355,7 @@ dependencies = [ [[package]] name = "oxide_regalloc" -version = "0.8.77" +version = "0.8.78" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1371,12 +1371,11 @@ dependencies = [ [[package]] name = "oxide_runtime_api" -version = "0.8.77" +version = "0.8.78" dependencies = [ "num-bigint", "num-traits", "oxide_bytecode", - "oxide_kernel", "oxide_log", "oxide_types", "ryu", @@ -1384,7 +1383,7 @@ dependencies = [ [[package]] name = "oxide_test262" -version = "0.8.77" +version = "0.8.78" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1402,7 +1401,7 @@ dependencies = [ [[package]] name = "oxide_types" -version = "0.8.77" +version = "0.8.78" dependencies = [ "bumpalo", "dashmap", @@ -1415,7 +1414,7 @@ dependencies = [ [[package]] name = "oxide_vm" -version = "0.8.77" +version = "0.8.78" dependencies = [ "bumpalo", "chrono", diff --git a/Cargo.toml b/Cargo.toml index b1e8d60d..bdab62e4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ members = [ ] [workspace.package] -version = "0.8.77" +version = "0.8.78" edition = "2021" license = "MIT" rust-version = "1.80" diff --git a/crates/oxide_runtime_api/Cargo.toml b/crates/oxide_runtime_api/Cargo.toml index 7dec0389..954b60e7 100644 --- a/crates/oxide_runtime_api/Cargo.toml +++ b/crates/oxide_runtime_api/Cargo.toml @@ -11,6 +11,5 @@ oxide_bytecode = { path = "../oxide_bytecode" } oxide_types = { path = "../oxide_types" } num-bigint = "0.4" num-traits = "0.2" -oxide_kernel = { path = "../oxide_kernel" } oxide_log = { path = "../oxide_log" } ryu.workspace = true diff --git a/crates/oxide_runtime_api/src/coercion.rs b/crates/oxide_runtime_api/src/coercion.rs index 4e1a2087..fdb0c579 100644 --- a/crates/oxide_runtime_api/src/coercion.rs +++ b/crates/oxide_runtime_api/src/coercion.rs @@ -7,13 +7,12 @@ use std::cmp::Ordering; use num_traits::{ToPrimitive, Zero}; -use oxide_types::mem::P; use oxide_types::object::{JsObject, PropAttributes}; use oxide_types::private_key::make_int_key; use oxide_types::shape::EMPTY_SHAPE_ID; use oxide_types::value::{JsType, JsValue}; -use crate::host::VmHost; +use crate::host::{ProtoKind, VmHost}; /// 拼接 JS 错误消息,格式为 `"{name}: {msg}"`;任一段为空时只取非空段。 pub fn format_error_message(name: &str, msg: &str) -> String { @@ -774,17 +773,14 @@ pub fn materialize_string_box(host: &mut H, obj: &mut JsObject, str_v let len = units.len(); obj.set_boxed_value(str_val); for (i, &unit) in units.iter().enumerate() { - let shape_id = host - .kernel_core() - .shape_forge() - .make_shape(obj.shape_id(), make_int_key(i as u32)); + let shape_id = host.make_shape(obj.shape_id(), make_int_key(i as u32)); obj.set_shape_id(shape_id); let ch = host.single_unit(unit).unwrap_or_else(|| host.new_string_units(&[unit])); obj.push_prop(ch); obj.set_data_meta(i as u32, PropAttributes::new(false, true, false)); } - let length_si = host.kernel_core().perm_interner().intern("length").0; - let shape_id = host.kernel_core().shape_forge().make_shape(obj.shape_id(), length_si); + let length_si = host.perm_intern("length"); + let shape_id = host.make_shape(obj.shape_id(), length_si); obj.set_shape_id(shape_id); obj.push_prop(JsValue::int(len as i32)); obj.set_data_meta(len as u32, PropAttributes::new(false, false, false)); @@ -803,22 +799,18 @@ pub fn to_object(val: JsValue, host: &mut H) -> Result &num_bigint::BigInt; - // 内核访问器 - fn kernel_core(&self) -> &Arc; - /// 只读访问当前 session(builtin world 与 global object)。 - /// - /// 返回 `Ref` 守卫(session 入 `RefCell` 后无法再给稳定 `&`):调用方 - /// 在单表达式内消费,不跨 `borrow_mut` 长存。 - fn session(&self) -> std::cell::Ref<'_, KernelSession>; - // 内核能力面(perm interner / shape forge / builtin world / global object) /// intern 字符串键,返回其 si(perm interner,零分配共享键空间)。 fn perm_intern(&self, s: &str) -> u32; diff --git a/crates/oxide_runtime_api/src/lib.rs b/crates/oxide_runtime_api/src/lib.rs index 6ef5b59a..6c633274 100644 --- a/crates/oxide_runtime_api/src/lib.rs +++ b/crates/oxide_runtime_api/src/lib.rs @@ -5,7 +5,7 @@ //! 实现 `VmHost`。这打破了 builtins crate 与 `oxide_vm` 之间本会形成的 //! 循环依赖: //! -//! `oxide_types ← oxide_kernel ← oxide_runtime_api ← oxide_builtins ← oxide_vm` +//! `oxide_types ← oxide_runtime_api ← oxide_builtins ← oxide_vm` //! //! trait 面向泛型而非对象安全:单态化 `H = Vm` 使每个 `host.*()` 调用内联, //! 相对 builtins 直接位于 `oxide_vm` 内部没有运行时开销。 diff --git a/crates/oxide_vm/src/vm/vmhost.rs b/crates/oxide_vm/src/vm/vmhost.rs index 801bb05c..864421ea 100644 --- a/crates/oxide_vm/src/vm/vmhost.rs +++ b/crates/oxide_vm/src/vm/vmhost.rs @@ -3,7 +3,6 @@ use std::ffi::c_void; use std::sync::Arc; -use oxide_kernel::kernel::{KernelCore, KernelSession}; use oxide_runtime_api::{ProtoKind, ShapeNode}; use oxide_types::mem::P; use oxide_types::object::{Cell, JsObject, PropAttributes}; @@ -45,12 +44,6 @@ impl oxide_runtime_api::VmHost for Vm { fn bigint_value(&mut self, val: JsValue) -> &num_bigint::BigInt { Vm::bigint_value(self, val) } - fn kernel_core(&self) -> &Arc { - self.kernel_core() - } - fn session(&self) -> std::cell::Ref<'_, KernelSession> { - self.session() - } fn perm_intern(&self, s: &str) -> u32 { self.kernel_core.perm_interner().intern(s).0 }