From 95155ce45076f87ac0a3cca2e3b9074ce84adc06 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Fri, 21 Aug 2026 23:34:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20Promise=20rejection=20reason=20=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=80=BC=E9=80=9A=E9=81=93=E9=85=8D=E5=AF=B9=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E2=80=94=E2=80=94create=5Ferror=20=E8=BE=97=E8=BD=AC?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E5=BD=92=E6=AD=A3=E4=B8=BA=20create=5Ffrom?= =?UTF-8?q?=5Ftext?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_builtins/src/array.rs | 6 +++--- crates/oxide_builtins/src/iterator.rs | 4 ++-- crates/oxide_vm/src/async_generator.rs | 2 +- crates/oxide_vm/src/generator.rs | 2 +- crates/oxide_vm/src/vm_dispatch_misc.rs | 8 ++++---- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/crates/oxide_builtins/src/array.rs b/crates/oxide_builtins/src/array.rs index be63f6c7..c22b09bd 100644 --- a/crates/oxide_builtins/src/array.rs +++ b/crates/oxide_builtins/src/array.rs @@ -1844,7 +1844,7 @@ pub fn array_iterator_next(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(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(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)) } diff --git a/crates/oxide_builtins/src/iterator.rs b/crates/oxide_builtins/src/iterator.rs index b6a22c70..5d02d62e 100644 --- a/crates/oxide_builtins/src/iterator.rs +++ b/crates/oxide_builtins/src/iterator.rs @@ -1458,7 +1458,7 @@ fn next_array_like( 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(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()`(转发给内层迭代器), diff --git a/crates/oxide_vm/src/async_generator.rs b/crates/oxide_vm/src/async_generator.rs index fd7e8909..e6b052c2 100644 --- a/crates/oxide_vm/src/async_generator.rs +++ b/crates/oxide_vm/src/async_generator.rs @@ -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), }); diff --git a/crates/oxide_vm/src/generator.rs b/crates/oxide_vm/src/generator.rs index 15c4b5ba..bb62ecfb 100644 --- a/crates/oxide_vm/src/generator.rs +++ b/crates/oxide_vm/src/generator.rs @@ -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); diff --git a/crates/oxide_vm/src/vm_dispatch_misc.rs b/crates/oxide_vm/src/vm_dispatch_misc.rs index 47edd115..050d5d20 100644 --- a/crates/oxide_vm/src/vm_dispatch_misc.rs +++ b/crates/oxide_vm/src/vm_dispatch_misc.rs @@ -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));