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

Unified Diff: src/js/promise.js

Issue 2317383002: Async/await Promise dependency graph (Closed)
Patch Set: Only if debug is active Created 4 years, 3 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 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;

Powered by Google App Engine
This is Rietveld 408576698