mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-23 18:21:13 +08:00
fix: Promise rejection reason 异常值通道配对修复——create_error 辗转路径归正为 create_from_text
This commit is contained in:
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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()`(转发给内层迭代器),
|
||||
|
||||
@@ -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),
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user