refactor: 添加 release 兜底逻辑与类型标签检查

This commit is contained in:
2026-06-14 09:28:48 +08:00
parent c9ec24baa7
commit 1730236eb1
7 changed files with 67 additions and 53 deletions
+7
View File
@@ -21,6 +21,12 @@ fn get_regexp_ptr(vm: &Vm, args: &[u8]) -> Result<*mut JsObject, JsValue> {
if ptr.is_null() {
return Err(JsValue::string(vm.kernel().string_forge().intern("TypeError: null object").0, 0));
}
if !unsafe { &*ptr }.is_regexp_obj() {
return Err(JsValue::string(
vm.kernel().string_forge().intern("TypeError: RegExp.prototype method called on non-RegExp object").0,
0,
));
}
Ok(ptr)
}
@@ -112,6 +118,7 @@ pub fn regexp_constructor(vm: &mut Vm, args: &[u8]) -> NativeResult {
set_prop(&mut obj, "dotAll", JsValue::bool(false), vm);
set_prop(&mut obj, "sticky", JsValue::bool(false), vm);
set_prop(&mut obj, "unicode", JsValue::bool(false), vm);
obj.type_tag = JsObject::OBJ_TYPE_REGEXP;
let obj_ptr = vm.epoch().alloc(obj);
NativeResult::Ok(JsValue::from_js_object(obj_ptr))