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

Unified Diff: src/js/promise.js

Issue 2451163003: [promises] Move PromiseReject to c++ (Closed)
Patch Set: fix handle Created 4 years, 2 months 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
Index: src/js/promise.js
diff --git a/src/js/promise.js b/src/js/promise.js
index 93758caf9513b4bb3db8889ef6cf44cd0d750ca8..ddfccf82daacddbe83453cd25ef477b54468a1bb 100644
--- a/src/js/promise.js
+++ b/src/js/promise.js
@@ -46,7 +46,7 @@ utils.Import(function(from) {
// [[PromiseState]] values:
const kPending = 0;
const kFulfilled = +1;
-const kRejected = -1;
+const kRejected = +2;
// ES#sec-createresolvingfunctions
// CreateResolvingFunctions ( promise )
@@ -66,7 +66,8 @@ function CreateResolvingFunctions(promise, debugEvent) {
var reject = reason => {
if (alreadyResolved === true) return;
alreadyResolved = true;
- RejectPromise(promise, reason, debugEvent);
+ %PromiseReject(promise, reason, debugEvent);
+ PromiseSet(promise, kRejected, reason);
};
return {
@@ -157,7 +158,8 @@ function PromiseHandle(value, handler, deferred) {
if (IS_UNDEFINED(deferred.reject)) {
// Pass false for debugEvent so .then chaining does not trigger
// redundant ExceptionEvents.
- RejectPromise(deferred.promise, exception, false);
+ %PromiseReject(deferred.promise, exception, false);
+ PromiseSet(deferred.promise, kRejected, exception);
} else {
%_Call(deferred.reject, UNDEFINED, exception);
}
@@ -243,16 +245,19 @@ function PromiseCreate() {
// Promise Resolve Functions, steps 6-13
function ResolvePromise(promise, resolution) {
if (resolution === promise) {
- return RejectPromise(promise,
- %make_type_error(kPromiseCyclic, resolution),
- true);
+ var exception = %make_type_error(kPromiseCyclic, resolution);
+ %PromiseReject(promise, exception, true);
+ PromiseSet(promise, kRejected, exception);
+ return;
}
if (IS_RECEIVER(resolution)) {
// 25.4.1.3.2 steps 8-12
try {
var then = resolution.then;
} catch (e) {
- return RejectPromise(promise, e, true);
+ %PromiseReject(promise, e, true);
+ PromiseSet(promise, kRejected, e);
+ return;
}
// Resolution is a native promise and if it's already resolved or
@@ -277,7 +282,8 @@ function ResolvePromise(promise, resolution) {
%PromiseRevokeReject(resolution);
}
// Don't cause a debug event as this case is forwarding a rejection
- RejectPromise(promise, thenableValue, false);
+ %PromiseReject(promise, thenableValue, false);
+ PromiseSet(promise, kRejected, thenableValue);
SET_PRIVATE(resolution, promiseHasHandlerSymbol, true);
return;
}
@@ -299,26 +305,11 @@ function ResolvePromise(promise, resolution) {
PromiseSet(promise, kFulfilled, resolution);
}
-// ES#sec-rejectpromise
-// RejectPromise ( promise, reason )
-function RejectPromise(promise, reason, debugEvent) {
- // Call runtime for callbacks to the debugger or for unhandled reject.
- // The debugEvent parameter sets whether a debug ExceptionEvent should
- // be triggered. It should be set to false when forwarding a rejection
- // rather than creating a new one.
- // This check is redundant with checks in the runtime, but it may help
- // avoid unnecessary runtime calls.
- if ((debugEvent && DEBUG_IS_ACTIVE) ||
- !HAS_DEFINED_PRIVATE(promise, promiseHasHandlerSymbol)) {
- %PromiseRejectEvent(promise, reason, debugEvent);
- }
- %PromiseFulfill(promise, kRejected, reason, promiseRejectReactionsSymbol)
- PromiseSet(promise, kRejected, reason);
-}
-
// Export to bindings
function DoRejectPromise(promise, reason) {
- return RejectPromise(promise, reason, true);
+ %PromiseReject(promise, reason, true);
+ PromiseSet(promise, kRejected, reason);
+ return;
}
// ES#sec-newpromisecapability
@@ -665,12 +656,14 @@ utils.Export(function(to) {
to.IsPromise = IsPromise;
to.PromiseCreate = PromiseCreate;
to.PromiseThen = PromiseThen;
+ to.PromiseSet = PromiseSet;
to.GlobalPromise = GlobalPromise;
to.NewPromiseCapability = NewPromiseCapability;
to.PerformPromiseThen = PerformPromiseThen;
to.ResolvePromise = ResolvePromise;
- to.RejectPromise = RejectPromise;
+
+ to.kPromiseRejected = kRejected;
});
})
« no previous file with comments | « src/js/async-await.js ('k') | src/runtime/runtime.h » ('j') | src/runtime/runtime-internal.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698