diff --git a/crates/oxide_vm/src/vm.rs b/crates/oxide_vm/src/vm.rs index 77e6fbc0..0afd37e4 100644 --- a/crates/oxide_vm/src/vm.rs +++ b/crates/oxide_vm/src/vm.rs @@ -685,6 +685,7 @@ impl Vm { pub fn new() -> Self { let kernel = Arc::new(OxideKernel::new(KernelConfig::minimal())); init_kernel_builtins(&kernel); + let obj_proto = P::clone(&kernel.builtin_world().object_proto); Self { regs: [JsValue::undefined(); 256], pc: 0, @@ -695,7 +696,7 @@ impl Vm { kernel, interned_strings: Vec::new(), epoch: Epoch::new(), - object_prototype: P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())), + object_prototype: obj_proto, math_rng_state: 0, sub_modules: Vec::new(), sub_module_constants: Vec::new(), diff --git a/crates/oxide_vm/tests/control_flow_tests.rs b/crates/oxide_vm/tests/control_flow_tests.rs index 6a426f81..316de53a 100644 --- a/crates/oxide_vm/tests/control_flow_tests.rs +++ b/crates/oxide_vm/tests/control_flow_tests.rs @@ -171,12 +171,12 @@ fn eval_do_while_continue() { #[test] 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] 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] @@ -192,7 +192,7 @@ fn eval_for_in_non_object_throws() { fn eval_for_in_nested() { assert_eq!( 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() { assert_eq!( eval("var r=0; for (k in {a:1,b:2}) { if (k=='a') continue; r=r+1; } r"), - "1" + "2" ); }