From 18eb603e0d18eb3b5286ee23fc9d1b6324c072c6 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Sun, 5 Nov 2023 11:08:58 +0100 Subject: [PATCH] Implement Promise.withResolvers (#14) --- quickjs.c | 17 ++++++----------- test262.conf | 2 +- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/quickjs.c b/quickjs.c index 53ce7ca..b4e37d2 100644 --- a/quickjs.c +++ b/quickjs.c @@ -46905,19 +46905,15 @@ static JSValue js_promise_resolve(JSContext *ctx, JSValueConst this_val, return result_promise; } -#if 0 -static JSValue js_promise___newPromiseCapability(JSContext *ctx, - JSValueConst this_val, - int argc, JSValueConst *argv) +static JSValue js_promise_withResolvers(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) { JSValue result_promise, resolving_funcs[2], obj; - JSValueConst ctor; - ctor = argv[0]; - if (!JS_IsObject(ctor)) + if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx); - result_promise = js_new_promise_capability(ctx, resolving_funcs, ctor); + result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val); if (JS_IsException(result_promise)) - return result_promise; + return JS_EXCEPTION; obj = JS_NewObject(ctx); if (JS_IsException(obj)) { JS_FreeValue(ctx, resolving_funcs[0]); @@ -46930,7 +46926,6 @@ static JSValue js_promise___newPromiseCapability(JSContext *ctx, JS_DefinePropertyValue(ctx, obj, JS_ATOM_reject, resolving_funcs[1], JS_PROP_C_W_E); return obj; } -#endif static __exception int remainingElementsCount_add(JSContext *ctx, JSValueConst resolve_element_env, @@ -47420,7 +47415,7 @@ static const JSCFunctionListEntry js_promise_funcs[] = { JS_CFUNC_MAGIC_DEF("allSettled", 1, js_promise_all, PROMISE_MAGIC_allSettled ), JS_CFUNC_MAGIC_DEF("any", 1, js_promise_all, PROMISE_MAGIC_any ), JS_CFUNC_DEF("race", 1, js_promise_race ), - //JS_CFUNC_DEF("__newPromiseCapability", 1, js_promise___newPromiseCapability ), + JS_CFUNC_DEF("withResolvers", 0, js_promise_withResolvers ), JS_CGETSET_DEF("[Symbol.species]", js_get_this, NULL), }; diff --git a/test262.conf b/test262.conf index 6a7e9b9..b09a5d1 100644 --- a/test262.conf +++ b/test262.conf @@ -141,7 +141,7 @@ Object.is optional-catch-binding optional-chaining Promise -promise-with-resolvers=skip +promise-with-resolvers Promise.allSettled Promise.any Promise.prototype.finally