Chromium Code Reviews| Index: src/js/promise.js |
| diff --git a/src/js/promise.js b/src/js/promise.js |
| index 32c6af15ce466f6f012df4d5eb1d6bb1fcc5bc81..aa2cdaf2fba8db1fc155c9561d1332339f081884 100644 |
| --- a/src/js/promise.js |
| +++ b/src/js/promise.js |
| @@ -236,7 +236,7 @@ function IsPromise(x) { |
| } |
| function PromiseCreate() { |
| - return new GlobalPromise(PromiseNopResolver) |
| + return new GlobalPromise(PromiseNopResolver); |
| } |
| // ES#sec-promise-resolve-functions |
| @@ -287,6 +287,10 @@ function ResolvePromise(promise, resolution) { |
| var id; |
| var name = "PromiseResolveThenableJob"; |
| var instrumenting = DEBUG_IS_ACTIVE; |
| + if (!IS_UNDEFINED(resolution) && DEBUG_IS_ACTIVE && IsPromise(resolution)) { |
|
gsathya
2016/09/08 21:38:58
nit: format, s/DEBUG_IS_ACTIVE/instrumenting, and
Dan Ehrenberg
2016/09/12 22:49:25
Done
|
| + // Mark the dependency of the new promise on the resolution |
| + SET_PRIVATE(resolution, promiseAwaitHandlerSymbol, promise); |
| + } |
| %EnqueueMicrotask(function() { |
| if (instrumenting) { |
| %DebugAsyncTaskEvent({ type: "willHandle", id: id, name: name }); |
| @@ -537,7 +541,10 @@ function PromiseRace(iterable) { |
| // Utility for debugger |
| function PromiseHasUserDefinedRejectHandlerCheck(handler, deferred) { |
| - if (GET_PRIVATE(handler, promiseAwaitHandlerSymbol)) return false; |
| + var outerPromise = GET_PRIVATE(handler, promiseAwaitHandlerSymbol); |
| + if (outerPromise) { |
| + return PromiseHasUserDefinedRejectHandlerRecursive(outerPromise); |
| + } |
| if (handler !== PromiseIdRejectHandler) { |
| var combinedDeferred = GET_PRIVATE(handler, promiseCombinedDeferredSymbol); |
| if (IS_UNDEFINED(combinedDeferred)) return true; |
| @@ -553,6 +560,10 @@ function PromiseHasUserDefinedRejectHandlerCheck(handler, deferred) { |
| function PromiseHasUserDefinedRejectHandlerRecursive(promise) { |
| var handledHintSymbol = GET_PRIVATE(promise, promiseHandledHintSymbol); |
| if (handledHintSymbol) return true; |
| + var outerPromise = GET_PRIVATE(promise, promiseAwaitHandlerSymbol); |
| + if (outerPromise) { |
| + return PromiseHasUserDefinedRejectHandlerRecursive(outerPromise); |
| + } |
| var queue = GET_PRIVATE(promise, promiseRejectReactionsSymbol); |
| var deferreds = GET_PRIVATE(promise, promiseDeferredReactionsSymbol); |
| if (IS_UNDEFINED(queue)) return false; |