mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-26 19:51:11 +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,
|
_ => element,
|
||||||
};
|
};
|
||||||
if let Err(msg) = vm.ordinary_set(iter, index_si, JsValue::int(index + 1), this_val) {
|
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));
|
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 length_si = vm.property_key_si(length_key);
|
||||||
let len_val = match vm.ordinary_get(target_obj, length_si, target) {
|
let len_val = match vm.ordinary_get(target_obj, length_si, target) {
|
||||||
Ok(v) => v,
|
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_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 };
|
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,
|
_ => element,
|
||||||
};
|
};
|
||||||
if let Err(msg) = vm.ordinary_set(iter, index_si, JsValue::int(index + 1), this_val) {
|
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))
|
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) {
|
let value = match vm.ordinary_get(arr, key_si, inner) {
|
||||||
Ok(v) => v,
|
Ok(v) => v,
|
||||||
Err(err) => {
|
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);
|
return Err(exc);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -1583,7 +1583,7 @@ pub fn is_callable(value: JsValue) -> bool {
|
|||||||
/// 无保留的 uncaught 值时回退为普通 TypeError。
|
/// 无保留的 uncaught 值时回退为普通 TypeError。
|
||||||
pub(crate) fn engine_error<H: VmHost>(vm: &mut H, err: &str) -> JsValue {
|
pub(crate) fn engine_error<H: VmHost>(vm: &mut H, err: &str) -> JsValue {
|
||||||
vm.take_uncaught_value()
|
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()`(转发给内层迭代器),
|
/// IteratorClose:异常退出时调用迭代器包装器的 `return()`(转发给内层迭代器),
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ impl Vm {
|
|||||||
// 参数初始化抛错/异常结束:恢复调用方上下文后重新抛出。
|
// 参数初始化抛错/异常结束:恢复调用方上下文后重新抛出。
|
||||||
let exc = self.last_uncaught_value.take().unwrap_or_else(|| match result {
|
let exc = self.last_uncaught_value.take().unwrap_or_else(|| match result {
|
||||||
Ok(v) => {
|
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),
|
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 {
|
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),
|
Err(e) => oxide_builtins::error::create_from_text(self, &e),
|
||||||
});
|
});
|
||||||
let kind = self.thrown_error_kind(exc);
|
let kind = self.thrown_error_kind(exc);
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ impl Vm {
|
|||||||
let exc = self
|
let exc = self
|
||||||
.last_uncaught_value
|
.last_uncaught_value
|
||||||
.take()
|
.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.exception_value = Some(exc);
|
||||||
self.pending_error_kind = Some(self.thrown_error_kind(exc));
|
self.pending_error_kind = Some(self.thrown_error_kind(exc));
|
||||||
self.unwind().map(|_| true)
|
self.unwind().map(|_| true)
|
||||||
@@ -142,7 +142,7 @@ impl Vm {
|
|||||||
Ok(true)
|
Ok(true)
|
||||||
} else {
|
} else {
|
||||||
let error =
|
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.exception_value = Some(error);
|
||||||
self.pending_error_kind = Some(self.thrown_error_kind(error));
|
self.pending_error_kind = Some(self.thrown_error_kind(error));
|
||||||
self.unwind().map(|_| true)
|
self.unwind().map(|_| true)
|
||||||
@@ -227,7 +227,7 @@ impl Vm {
|
|||||||
let exc = self
|
let exc = self
|
||||||
.last_uncaught_value
|
.last_uncaught_value
|
||||||
.take()
|
.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.exception_value = Some(exc);
|
||||||
self.pending_error_kind = Some(self.thrown_error_kind(exc));
|
self.pending_error_kind = Some(self.thrown_error_kind(exc));
|
||||||
self.unwind().map(|_| true)
|
self.unwind().map(|_| true)
|
||||||
@@ -707,7 +707,7 @@ impl Vm {
|
|||||||
self.iters.pop_for_of();
|
self.iters.pop_for_of();
|
||||||
let exc = match self.last_uncaught_value.take() {
|
let exc = match self.last_uncaught_value.take() {
|
||||||
Some(v) => v,
|
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.exception_value = Some(exc);
|
||||||
self.pending_error_kind = Some(self.thrown_error_kind(exc));
|
self.pending_error_kind = Some(self.thrown_error_kind(exc));
|
||||||
|
|||||||
Reference in New Issue
Block a user