Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(949)

Unified Diff: src/js/promise.js

Issue 2459283004: [promises] Move CreateResolvingFunctions to c++ (Closed)
Patch Set: address comments Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/js/async-await.js ('k') | src/v8.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/js/promise.js
diff --git a/src/js/promise.js b/src/js/promise.js
index 75ec6e1c57683f56c9107e5f8754590b532c46d3..232317bb2ecfde45b857cbfc26206728bddf7347 100644
--- a/src/js/promise.js
+++ b/src/js/promise.js
@@ -49,35 +49,8 @@ const kPending = 0;
const kFulfilled = +1;
const kRejected = +2;
-// ES#sec-createresolvingfunctions
-// CreateResolvingFunctions ( promise )
-function CreateResolvingFunctions(promise, debugEvent) {
- var alreadyResolved = false;
-
- // ES#sec-promise-resolve-functions
- // Promise Resolve Functions
- var resolve = value => {
- if (alreadyResolved === true) return;
- alreadyResolved = true;
- ResolvePromise(promise, value);
- };
-
- // ES#sec-promise-reject-functions
- // Promise Reject Functions
- var reject = reason => {
- if (alreadyResolved === true) return;
- alreadyResolved = true;
- %PromiseReject(promise, reason, debugEvent);
- PromiseSet(promise, kRejected, reason);
- };
-
- return {
- __proto__: null,
- resolve: resolve,
- reject: reject
- };
-}
-
+const kResolveCallback = 0;
+const kRejectCallback = 1;
// ES#sec-promise-executor
// Promise ( executor )
@@ -92,13 +65,15 @@ var GlobalPromise = function Promise(executor) {
var promise = PromiseInit(%_NewObject(GlobalPromise, new.target));
// Calling the reject function would be a new exception, so debugEvent = true
- var callbacks = CreateResolvingFunctions(promise, true);
+ // TODO(gsathya): Remove container for callbacks when this is moved
+ // to CPP/TF.
+ var callbacks = %create_resolving_functions(promise, true);
var debug_is_active = DEBUG_IS_ACTIVE;
try {
if (debug_is_active) %DebugPushPromise(promise);
- executor(callbacks.resolve, callbacks.reject);
+ executor(callbacks[kResolveCallback], callbacks[kRejectCallback]);
} %catch (e) { // Natives syntax to mark this catch block.
- %_Call(callbacks.reject, UNDEFINED, e);
+ %_Call(callbacks[kRejectCallback], UNDEFINED, e);
} finally {
if (debug_is_active) %DebugPopPromise();
}
@@ -291,13 +266,16 @@ function ResolvePromise(promise, resolution) {
}
if (IS_CALLABLE(then)) {
- var callbacks = CreateResolvingFunctions(promise, false);
+ // TODO(gsathya): Remove container for callbacks when this is
+ // moved to CPP/TF.
+ var callbacks = %create_resolving_functions(promise, false);
if (DEBUG_IS_ACTIVE && IsPromise(resolution)) {
// Mark the dependency of the new promise on the resolution
SET_PRIVATE(resolution, promiseHandledBySymbol, promise);
}
%EnqueuePromiseResolveThenableJob(
- resolution, then, callbacks.resolve, callbacks.reject);
+ resolution, then, callbacks[kResolveCallback],
+ callbacks[kRejectCallback]);
return;
}
}
@@ -307,8 +285,8 @@ function ResolvePromise(promise, resolution) {
}
// Only used by async-await.js
-function RejectPromise(promise, reason) {
- %PromiseReject(promise, reason, false);
+function RejectPromise(promise, reason, debugEvent) {
+ %PromiseReject(promise, reason, debugEvent);
PromiseSet(promise, kRejected, reason);
}
@@ -324,11 +302,13 @@ function NewPromiseCapability(C, debugEvent) {
if (C === GlobalPromise) {
// Optimized case, avoid extra closure.
var promise = PromiseCreate();
- var callbacks = CreateResolvingFunctions(promise, debugEvent);
+ // TODO(gsathya): Remove container for callbacks when this is
+ // moved to CPP/TF.
+ var callbacks = %create_resolving_functions(promise, debugEvent);
return {
promise: promise,
- resolve: callbacks.resolve,
- reject: callbacks.reject
+ resolve: callbacks[kResolveCallback],
+ reject: callbacks[kRejectCallback]
};
}
@@ -643,6 +623,8 @@ utils.InstallFunctions(GlobalPromise.prototype, DONT_ENUM, [
"promise_create", PromiseCreate,
"promise_has_user_defined_reject_handler", PromiseHasUserDefinedRejectHandler,
"promise_reject", DoRejectPromise,
+ // TODO(gsathya): Remove this once we update the promise builtin.
+ "promise_internal_reject", RejectPromise,
"promise_resolve", ResolvePromise,
"promise_then", PromiseThen,
"promise_handle", PromiseHandle,
« no previous file with comments | « src/js/async-await.js ('k') | src/v8.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698