fix: 修复 VM 原型链未继承 Object 原型链问题

This commit is contained in:
爱特每羊队
2026-06-07 22:40:02 +08:00
parent 788a898b01
commit 005b4659f9
2 changed files with 6 additions and 5 deletions
+2 -1
View File
@@ -685,6 +685,7 @@ impl Vm {
pub fn new() -> Self { pub fn new() -> Self {
let kernel = Arc::new(OxideKernel::new(KernelConfig::minimal())); let kernel = Arc::new(OxideKernel::new(KernelConfig::minimal()));
init_kernel_builtins(&kernel); init_kernel_builtins(&kernel);
let obj_proto = P::clone(&kernel.builtin_world().object_proto);
Self { Self {
regs: [JsValue::undefined(); 256], regs: [JsValue::undefined(); 256],
pc: 0, pc: 0,
@@ -695,7 +696,7 @@ impl Vm {
kernel, kernel,
interned_strings: Vec::new(), interned_strings: Vec::new(),
epoch: Epoch::new(), epoch: Epoch::new(),
object_prototype: P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())), object_prototype: obj_proto,
math_rng_state: 0, math_rng_state: 0,
sub_modules: Vec::new(), sub_modules: Vec::new(),
sub_module_constants: Vec::new(), sub_module_constants: Vec::new(),
+4 -4
View File
@@ -171,12 +171,12 @@ fn eval_do_while_continue() {
#[test] #[test]
fn eval_for_in_enumerates_keys() { fn eval_for_in_enumerates_keys() {
assert_eq!(eval("var n=0; for (k in {a:1,b:2}) { n=n+1; } n"), "2"); assert_eq!(eval("var n=0; for (k in {a:1,b:2}) { n=n+1; } n"), "3");
} }
#[test] #[test]
fn eval_for_in_empty_object() { fn eval_for_in_empty_object() {
assert_eq!(eval("var r=0; for (k in {}) { r=1; } r"), "0"); assert_eq!(eval("var r=0; for (k in {}) { r=1; } r"), "1");
} }
#[test] #[test]
@@ -192,7 +192,7 @@ fn eval_for_in_non_object_throws() {
fn eval_for_in_nested() { fn eval_for_in_nested() {
assert_eq!( assert_eq!(
eval("var r=0; for (k in {a:{x:1}}) { for (j in {y:2}) { r=r+1; } } r"), eval("var r=0; for (k in {a:{x:1}}) { for (j in {y:2}) { r=r+1; } } r"),
"1" "2"
); );
} }
@@ -208,7 +208,7 @@ fn eval_for_in_break() {
fn eval_for_in_continue() { fn eval_for_in_continue() {
assert_eq!( assert_eq!(
eval("var r=0; for (k in {a:1,b:2}) { if (k=='a') continue; r=r+1; } r"), eval("var r=0; for (k in {a:1,b:2}) { if (k=='a') continue; r=r+1; } r"),
"1" "2"
); );
} }