fix: Promise rejection reason 异常值通道配对修复——create_error 辗转路径归正为 create_from_text

This commit is contained in:
2026-08-21 23:34:04 +08:00
parent 355230b745
commit 95155ce450
5 changed files with 11 additions and 11 deletions
+3 -3
View File
@@ -1844,7 +1844,7 @@ pub fn array_iterator_next<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
_ => element,
};
if let Err(msg) = vm.ordinary_set(iter, index_si, JsValue::int(index + 1), this_val) {
return NativeResult::Err(crate::error::create_error(vm, &msg));
return NativeResult::Err(crate::error::create_from_text(vm, &msg));
}
return NativeResult::Ok(crate::iterator::make_iter_result(vm, value, false));
}
@@ -1853,7 +1853,7 @@ pub fn array_iterator_next<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
let length_si = vm.property_key_si(length_key);
let len_val = match vm.ordinary_get(target_obj, length_si, target) {
Ok(v) => v,
Err(err) => return NativeResult::Err(crate::error::create_error(vm, &err)),
Err(err) => return NativeResult::Err(crate::error::create_from_text(vm, &err)),
};
let len_num = vm.coerce_number_bounded(len_val).unwrap_or(0.0);
let len = if !len_num.is_finite() || len_num <= 0.0 { 0 } else { len_num as usize };
@@ -1877,7 +1877,7 @@ pub fn array_iterator_next<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
_ => element,
};
if let Err(msg) = vm.ordinary_set(iter, index_si, JsValue::int(index + 1), this_val) {
return NativeResult::Err(crate::error::create_error(vm, &msg));
return NativeResult::Err(crate::error::create_from_text(vm, &msg));
}
NativeResult::Ok(crate::iterator::make_iter_result(vm, value, false))
}
+2 -2
View File
@@ -1458,7 +1458,7 @@ fn next_array_like<H: VmHost>(
let value = match vm.ordinary_get(arr, key_si, inner) {
Ok(v) => v,
Err(err) => {
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_error(vm, &err));
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_from_text(vm, &err));
return Err(exc);
}
};
@@ -1583,7 +1583,7 @@ pub fn is_callable(value: JsValue) -> bool {
/// 无保留的 uncaught 值时回退为普通 TypeError。
pub(crate) fn engine_error<H: VmHost>(vm: &mut H, err: &str) -> JsValue {
vm.take_uncaught_value()
.unwrap_or_else(|| crate::error::create_type_error(vm, err))
.unwrap_or_else(|| crate::error::create_from_text(vm, err))
}
/// IteratorClose:异常退出时调用迭代器包装器的 `return()`(转发给内层迭代器),
+1 -1
View File
@@ -174,7 +174,7 @@ impl Vm {
// 参数初始化抛错/异常结束:恢复调用方上下文后重新抛出。
let exc = self.last_uncaught_value.take().unwrap_or_else(|| match result {
Ok(v) => {
oxide_builtins::error::create_error(self, &format!("async generator initialization failed: {v:?}"))
oxide_builtins::error::create_from_text(self, &format!("async generator initialization failed: {v:?}"))
}
Err(e) => oxide_builtins::error::create_from_text(self, &e),
});
+1 -1
View File
@@ -186,7 +186,7 @@ impl Vm {
// 参数初始化抛错/异常结束:恢复调用方上下文后重新抛出。
let exc = self.last_uncaught_value.take().unwrap_or_else(|| match result {
Ok(v) => oxide_builtins::error::create_error(self, &format!("generator initialization failed: {v:?}")),
Ok(v) => oxide_builtins::error::create_from_text(self, &format!("generator initialization failed: {v:?}")),
Err(e) => oxide_builtins::error::create_from_text(self, &e),
});
let kind = self.thrown_error_kind(exc);
+4 -4
View File
@@ -94,7 +94,7 @@ impl Vm {
let exc = self
.last_uncaught_value
.take()
.unwrap_or_else(|| oxide_builtins::error::create_error(self, "constructor call failed"));
.unwrap_or_else(|| oxide_builtins::error::create_from_text(self, "constructor call failed"));
self.exception_value = Some(exc);
self.pending_error_kind = Some(self.thrown_error_kind(exc));
self.unwind().map(|_| true)
@@ -142,7 +142,7 @@ impl Vm {
Ok(true)
} else {
let error =
oxide_builtins::error::create_error(self, "NEW_EXPRESSION: bytecode constructors not yet supported");
oxide_builtins::error::create_from_text(self, "NEW_EXPRESSION: bytecode constructors not yet supported");
self.exception_value = Some(error);
self.pending_error_kind = Some(self.thrown_error_kind(error));
self.unwind().map(|_| true)
@@ -227,7 +227,7 @@ impl Vm {
let exc = self
.last_uncaught_value
.take()
.unwrap_or_else(|| oxide_builtins::error::create_error(self, "constructor call failed"));
.unwrap_or_else(|| oxide_builtins::error::create_from_text(self, "constructor call failed"));
self.exception_value = Some(exc);
self.pending_error_kind = Some(self.thrown_error_kind(exc));
self.unwind().map(|_| true)
@@ -707,7 +707,7 @@ impl Vm {
self.iters.pop_for_of();
let exc = match self.last_uncaught_value.take() {
Some(v) => v,
None => oxide_builtins::error::create_error(self, &msg),
None => oxide_builtins::error::create_from_text(self, &msg),
};
self.exception_value = Some(exc);
self.pending_error_kind = Some(self.thrown_error_kind(exc));