mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-26 19:51:11 +08:00
feat: 挂载 Promise.allSettledKeyed 入口并放行 keyed 语料
This commit is contained in:
@@ -36,14 +36,7 @@ pub(crate) fn is_skipped(meta: &TestMeta) -> Option<String> {
|
|||||||
// 保持大范围已实现 feature tag 可运行;只排除真正未实现的子特性。
|
// 保持大范围已实现 feature tag 可运行;只排除真正未实现的子特性。
|
||||||
// 其余一切让测试实际运行,依赖运行时跳过逻辑
|
// 其余一切让测试实际运行,依赖运行时跳过逻辑
|
||||||
// ("too many registers"、"not yet implemented" 等)判定失败。
|
// ("too many registers"、"not yet implemented" 等)判定失败。
|
||||||
let excluded_features = [
|
let excluded_features = ["Proxy", "Intl", "Atomics", "cross-realm"];
|
||||||
"Proxy",
|
|
||||||
"Intl",
|
|
||||||
"Atomics",
|
|
||||||
"cross-realm",
|
|
||||||
// await-dictionary(Promise.allKeyed/allSettledKeyed)是 2025 proposal,未实现。
|
|
||||||
"await-dictionary",
|
|
||||||
];
|
|
||||||
|
|
||||||
for feat in &meta.features {
|
for feat in &meta.features {
|
||||||
if excluded_features.contains(&feat.as_str()) || feat.starts_with("Intl") {
|
if excluded_features.contains(&feat.as_str()) || feat.starts_with("Intl") {
|
||||||
|
|||||||
@@ -407,6 +407,17 @@ pub(super) fn promise_static_all_keyed(vm: &mut Vm, args: &[u8]) -> NativeResult
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Promise.allSettledKeyed(object)`:输入自身可枚举键的元素全部结算后以
|
||||||
|
/// null 原型键控结果对象完成,每元素记 `{status, value|reason}` 记录。
|
||||||
|
pub(super) fn promise_static_all_settled_keyed(vm: &mut Vm, args: &[u8]) -> NativeResult {
|
||||||
|
let ctor = vm.reg(if args.is_empty() { 0 } else { args[0] });
|
||||||
|
let promises = if args.len() > 1 { vm.reg(args[1]) } else { JsValue::undefined() };
|
||||||
|
match perform_promise_combine_keyed(vm, ctor, promises, KeyedVariant::AllSettled) {
|
||||||
|
Ok(promise) => NativeResult::Ok(promise),
|
||||||
|
Err(err) => NativeResult::Err(err),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// 聚合静态方法的共享核心:迭代可迭代输入,逐元素调 `C.resolve` 建 promise 并注册反应,
|
/// 聚合静态方法的共享核心:迭代可迭代输入,逐元素调 `C.resolve` 建 promise 并注册反应,
|
||||||
/// 按模式在全部/任一结算后交付能力 promise。
|
/// 按模式在全部/任一结算后交付能力 promise。
|
||||||
///
|
///
|
||||||
@@ -578,8 +589,6 @@ fn perform_promise_combine(
|
|||||||
#[derive(Clone, Copy, PartialEq, Eq)]
|
#[derive(Clone, Copy, PartialEq, Eq)]
|
||||||
enum KeyedVariant {
|
enum KeyedVariant {
|
||||||
All,
|
All,
|
||||||
// allSettledKeyed 入口尚未挂入构造器静态表,核心实现先行备齐。
|
|
||||||
#[expect(dead_code)]
|
|
||||||
AllSettled,
|
AllSettled,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,9 @@ use oxide_types::value::JsValue;
|
|||||||
use crate::vm::{FrameArgs, FrameContinuation, Vm};
|
use crate::vm::{FrameArgs, FrameContinuation, Vm};
|
||||||
|
|
||||||
use super::aggregate::{
|
use super::aggregate::{
|
||||||
promise_static_all, promise_static_all_keyed, promise_static_all_settled, promise_static_any, promise_static_race,
|
promise_static_all, promise_static_all_keyed, promise_static_all_settled, promise_static_all_settled_keyed,
|
||||||
promise_static_reject, promise_static_resolve, promise_static_try, promise_static_with_resolvers,
|
promise_static_any, promise_static_race, promise_static_reject, promise_static_resolve, promise_static_try,
|
||||||
|
promise_static_with_resolvers,
|
||||||
};
|
};
|
||||||
use super::reactions::{promise_catch, promise_finally, promise_then};
|
use super::reactions::{promise_catch, promise_finally, promise_then};
|
||||||
use super::{is_constructor_value, PromiseState, PromiseStateKind};
|
use super::{is_constructor_value, PromiseState, PromiseStateKind};
|
||||||
@@ -286,6 +287,7 @@ impl Vm {
|
|||||||
("race", promise_static_race as *const (), 1),
|
("race", promise_static_race as *const (), 1),
|
||||||
("allSettled", promise_static_all_settled as *const (), 1),
|
("allSettled", promise_static_all_settled as *const (), 1),
|
||||||
("allKeyed", promise_static_all_keyed as *const (), 1),
|
("allKeyed", promise_static_all_keyed as *const (), 1),
|
||||||
|
("allSettledKeyed", promise_static_all_settled_keyed as *const (), 1),
|
||||||
("any", promise_static_any as *const (), 1),
|
("any", promise_static_any as *const (), 1),
|
||||||
("withResolvers", promise_static_with_resolvers as *const (), 0),
|
("withResolvers", promise_static_with_resolvers as *const (), 0),
|
||||||
("try", promise_static_try as *const (), 1),
|
("try", promise_static_try as *const (), 1),
|
||||||
|
|||||||
Reference in New Issue
Block a user