mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-24 18:51:13 +08:00
feat: 支持 class extends 与 super 调用
This commit is contained in:
@@ -90,8 +90,15 @@ impl Vm {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let obj = unsafe { &mut *obj_ptr };
|
||||
let prop_name_si = self.property_key_si(self.regs[b]);
|
||||
if self.kernel.string_forge().lookup(prop_name_si).as_deref() == Some("__proto__") {
|
||||
let obj = unsafe { &mut *obj_ptr };
|
||||
obj.set_proto(self.regs[a]).map_err(|e| e.to_string())?;
|
||||
self.pc += 3;
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let obj = unsafe { &mut *obj_ptr };
|
||||
let ext0 = self.bytecode[self.pc];
|
||||
let ext1 = self.bytecode[self.pc + 1];
|
||||
let ext2 = self.bytecode[self.pc + 2];
|
||||
@@ -150,6 +157,10 @@ impl Vm {
|
||||
}
|
||||
let obj = unsafe { &mut *obj_ptr };
|
||||
let prop_name_si = self.property_key_si(self.regs[b]);
|
||||
if self.kernel.string_forge().lookup(prop_name_si).as_deref() == Some("__proto__") {
|
||||
obj.set_proto(self.regs[a]).map_err(|e| e.to_string())?;
|
||||
return Ok(());
|
||||
}
|
||||
if let Some(pos) = self.kernel.shape_forge().lookup_position(obj.shape_id(), prop_name_si) {
|
||||
obj.set_prop_at(pos, self.regs[a]);
|
||||
} else {
|
||||
@@ -181,6 +192,10 @@ impl Vm {
|
||||
}
|
||||
let obj = unsafe { &mut *obj_ptr };
|
||||
let prop_name_si = self.property_key_si(self.regs[a]);
|
||||
if self.kernel.string_forge().lookup(prop_name_si).as_deref() == Some("__proto__") {
|
||||
obj.set_proto(self.regs[b]).map_err(|e| e.to_string())?;
|
||||
return Ok(());
|
||||
}
|
||||
if let Some(pos) = self.kernel.shape_forge().lookup_position(obj.shape_id(), prop_name_si) {
|
||||
obj.set_prop_at(pos, self.regs[b]);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user