if (JS_IsException(result_promise))
return result_promise;
obj = JS_NewObject(ctx);
- if (JS_IsException(obj)) {
- JS_FreeValue(ctx, resolving_funcs[0]);
- JS_FreeValue(ctx, resolving_funcs[1]);
- JS_FreeValue(ctx, result_promise);
- return JS_EXCEPTION;
+ if (JS_IsException(obj))
+ goto exception;
+ if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_promise, result_promise,
+ JS_PROP_C_W_E) < 0) {
+ goto exception;
+ }
+ result_promise = JS_UNDEFINED;
+ if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_resolve, resolving_funcs[0],
+ JS_PROP_C_W_E) < 0) {
+ goto exception;
+ }
+ resolving_funcs[0] = JS_UNDEFINED;
+ if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_reject, resolving_funcs[1],
+ JS_PROP_C_W_E) < 0) {
+ goto exception;
}
- JS_DefinePropertyValue(ctx, obj, JS_ATOM_promise, result_promise, JS_PROP_C_W_E);
- JS_DefinePropertyValue(ctx, obj, JS_ATOM_resolve, resolving_funcs[0], JS_PROP_C_W_E);
- JS_DefinePropertyValue(ctx, obj, JS_ATOM_reject, resolving_funcs[1], JS_PROP_C_W_E);
return obj;
+exception:
+ JS_FreeValue(ctx, resolving_funcs[0]);
+ JS_FreeValue(ctx, resolving_funcs[1]);
+ JS_FreeValue(ctx, result_promise);
+ JS_FreeValue(ctx, obj);
+ return JS_EXCEPTION;
}
static JSValue js_promise_try(JSContext *ctx, JSValueConst this_val,