fix: 修复 VM 原型链未继承 Object 原型链问题
This commit is contained in:
@@ -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(),
|
||||||
|
|||||||
@@ -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"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user