Chromium Code Reviews| Index: src/js/promise.js |
| diff --git a/src/js/promise.js b/src/js/promise.js |
| index 93758caf9513b4bb3db8889ef6cf44cd0d750ca8..394c95ddeef20357adfca04f8b08407292e757e3 100644 |
| --- a/src/js/promise.js |
| +++ b/src/js/promise.js |
| @@ -44,9 +44,10 @@ utils.Import(function(from) { |
| // ------------------------------------------------------------------- |
| // [[PromiseState]] values: |
| +// These values should be kept in sync with PromiseStatus in globals.h |
| const kPending = 0; |
| const kFulfilled = +1; |
| -const kRejected = -1; |
| +const kRejected = +2; |
| // ES#sec-createresolvingfunctions |
| // CreateResolvingFunctions ( promise ) |
| @@ -66,7 +67,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 +159,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 +246,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 +283,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 +306,17 @@ 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) |
| +// Only used by async-await.js |
| +function RejectPromise(promise, reason) { |
| + %PromiseReject(promise, reason, false); |
| 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; |
|
adamk
2016/10/27 08:02:34
No need for this empty return
gsathya
2016/10/27 11:27:48
Done.
|
| } |
| // ES#sec-newpromisecapability |