From a31d22cd3fb3edb8436263d65a777a706ab19938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=E7=89=B9=E6=AF=8F=E7=BE=8A=E9=98=9F?= Date: Sun, 14 Jun 2026 17:11:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A1=A5=E5=85=85=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=B8=8D=E6=94=AF=E6=8C=81=E7=89=B9=E6=80=A7=E4=BB=A5=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E8=AF=A6=E7=BB=86=E6=8A=A5=E9=94=99=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_compiler/src/compiler.rs | 33 +++++++++++++++++++++++++++ crates/oxide_vm/src/builtins/mod.rs | 1 + crates/oxide_vm/src/builtins/stubs.rs | 20 ++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 crates/oxide_vm/src/builtins/stubs.rs diff --git a/crates/oxide_compiler/src/compiler.rs b/crates/oxide_compiler/src/compiler.rs index 0c09b3e..f272696 100644 --- a/crates/oxide_compiler/src/compiler.rs +++ b/crates/oxide_compiler/src/compiler.rs @@ -302,6 +302,39 @@ impl CompileCtx { "parseFloat", "isNaN", "isFinite", + // Out-of-scope constructors: bound as TypeError-throwing stubs + "Proxy", + "WeakMap", + "WeakSet", + "WeakRef", + "FinalizationRegistry", + "Atomics", + "SharedArrayBuffer", + "ArrayBuffer", + "DataView", + "Iterator", + "BigInt", + // TypedArray family stubs + "Int8Array", + "Uint8Array", + "Uint8ClampedArray", + "Int16Array", + "Uint16Array", + "Int32Array", + "Uint32Array", + "Float32Array", + "Float64Array", + "BigInt64Array", + "BigUint64Array", + // Reflect namespace object + "Reflect", + // URI utility functions + "escape", + "unescape", + "encodeURI", + "decodeURI", + "encodeURIComponent", + "decodeURIComponent", ]; for name in &builtins { let reg = self.alloc_reg(); diff --git a/crates/oxide_vm/src/builtins/mod.rs b/crates/oxide_vm/src/builtins/mod.rs index 36d4e3c..e581bbc 100644 --- a/crates/oxide_vm/src/builtins/mod.rs +++ b/crates/oxide_vm/src/builtins/mod.rs @@ -12,4 +12,5 @@ pub mod object; pub mod regexp; pub mod set; pub mod string; +pub mod stubs; pub mod symbol; diff --git a/crates/oxide_vm/src/builtins/stubs.rs b/crates/oxide_vm/src/builtins/stubs.rs new file mode 100644 index 0000000..28bd46b --- /dev/null +++ b/crates/oxide_vm/src/builtins/stubs.rs @@ -0,0 +1,20 @@ +use oxide_types::value::JsValue; + +use crate::native::NativeResult; +use crate::vm::Vm; + +fn stub_error(vm: &mut Vm, name: &str) -> NativeResult { + let msg = format!("TypeError: {} is not implemented", name); + let si = vm.kernel_core().string_forge().intern(&msg).0; + NativeResult::Err(JsValue::string(si, 0)) +} + +// Architecturally deferred — see 13.5-CONTEXT.md for rationale +pub fn proxy_stub(vm: &mut Vm, _args: &[u8]) -> NativeResult { stub_error(vm, "Proxy") } +pub fn bigint_stub(vm: &mut Vm, _args: &[u8]) -> NativeResult { stub_error(vm, "BigInt") } +pub fn weakmap_stub(vm: &mut Vm, _args: &[u8]) -> NativeResult { stub_error(vm, "WeakMap") } +pub fn weakset_stub(vm: &mut Vm, _args: &[u8]) -> NativeResult { stub_error(vm, "WeakSet") } +pub fn weakref_stub(vm: &mut Vm, _args: &[u8]) -> NativeResult { stub_error(vm, "WeakRef") } +pub fn finalization_registry_stub(vm: &mut Vm, _args: &[u8]) -> NativeResult { stub_error(vm, "FinalizationRegistry") } +pub fn shared_array_buffer_stub(vm: &mut Vm, _args: &[u8]) -> NativeResult { stub_error(vm, "SharedArrayBuffer") } +pub fn atomics_stub(vm: &mut Vm, _args: &[u8]) -> NativeResult { stub_error(vm, "Atomics") }