fix: Error 家族构造器可构造标志 + 数组回调异常透传原始对象

This commit is contained in:
爱特每羊队
2026-08-08 00:19:05 +08:00
parent a206d0ef82
commit d36949aa00
2 changed files with 7 additions and 1 deletions
+4 -1
View File
@@ -153,7 +153,10 @@ fn invoke_native_callback<H: VmHost>(
}
match vm.call_function_sync(callback_val, this_val, cb_args) {
Ok(value) => NativeResult::Ok(value),
Err(err) => NativeResult::Err(callback_error_from_text(vm, &err)),
Err(err) => match vm.take_uncaught_value() {
Some(original) => NativeResult::Err(original),
None => NativeResult::Err(callback_error_from_text(vm, &err)),
},
}
}
@@ -16,6 +16,8 @@ fn bind_error_subtype_constructor(
let mut ctor = Box::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(function_proto_ptr)));
ctor.set_function(true);
// Error 子类型须标记可构造:new TypeError(...) 走 NEW_EXPRESSION 校验。
ctor.type_tag = JsObject::OBJ_TYPE_CONSTRUCTOR;
// SAFETY: ctor_fn 是调用方转成 *const () 的 NativeFn 函数项指针。
ctor.set_native_fn(Some(unsafe { NativeFnPtr::from_raw(ctor_fn) }));
ctor.set_native_arg_count(1);
@@ -121,6 +123,7 @@ pub fn bind_error(core: &Arc<KernelCore>, session: &KernelSession, global: &mut
{
let err_ctor_ptr = session.builtin_world().error_constructor.as_ptr() as *mut JsObject;
let err_ctor = unsafe { &mut *err_ctor_ptr };
err_ctor.type_tag = JsObject::OBJ_TYPE_CONSTRUCTOR;
// SAFETY: error_constructor 是 NativeFn 函数项。
err_ctor.set_native_fn(Some(unsafe {
NativeFnPtr::from_raw(oxide_builtins::error::error_constructor::<crate::vm::Vm> as *const ())