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; |