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

Unified Diff: src/promise.js

Issue 607913002: Report promise reject with no handler (behind a flag). (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: more comments Created 6 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
« no previous file with comments | « src/objects-printer.cc ('k') | src/runtime/runtime.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/promise.js
diff --git a/src/promise.js b/src/promise.js
index 37c10ec08eb298d5543738531168fe0315ca7854..ca9bc25f279ee45c48ce00f39af736de1b4d15c5 100644
--- a/src/promise.js
+++ b/src/promise.js
@@ -30,7 +30,7 @@ var promiseValue = GLOBAL_PRIVATE("Promise#value");
var promiseOnResolve = GLOBAL_PRIVATE("Promise#onResolve");
var promiseOnReject = GLOBAL_PRIVATE("Promise#onReject");
var promiseRaw = GLOBAL_PRIVATE("Promise#raw");
-var promiseDebug = GLOBAL_PRIVATE("Promise#debug");
+var promiseHasReject = GLOBAL_PRIVATE("Promise#hasReject");
var lastMicrotaskId = 0;
(function() {
@@ -159,11 +159,8 @@ var lastMicrotaskId = 0;
PromiseReject = function PromiseReject(promise, r) {
// Check promise status to confirm that this reject has an effect.
- // Check promiseDebug property to avoid duplicate event.
- if (DEBUG_IS_ACTIVE &&
- GET_PRIVATE(promise, promiseStatus) == 0 &&
- !HAS_DEFINED_PRIVATE(promise, promiseDebug)) {
- %DebugPromiseRejectEvent(promise, r);
+ if (GET_PRIVATE(promise, promiseStatus) == 0) {
+ %PromiseRejectEvent(promise, r);
}
PromiseDone(promise, -1, r, promiseOnReject)
}
@@ -213,6 +210,10 @@ var lastMicrotaskId = 0;
// flatMap
onResolve = IS_UNDEFINED(onResolve) ? PromiseIdResolveHandler : onResolve;
onReject = IS_UNDEFINED(onReject) ? PromiseIdRejectHandler : onReject;
+ if (onReject != PromiseIdRejectHandler) {
+ // Mark this promise as having reject handler.
+ SET_PRIVATE(this, promiseHasReject, true);
+ }
var deferred = %_CallFunction(this.constructor, PromiseDeferred);
switch (GET_PRIVATE(this, promiseStatus)) {
case UNDEFINED:
@@ -326,20 +327,18 @@ var lastMicrotaskId = 0;
// Utility for debugger
function PromiseHasRejectHandlerRecursive(promise) {
+ if (GET_PRIVATE(promise, promiseHasReject)) return true;
var queue = GET_PRIVATE(promise, promiseOnReject);
if (IS_UNDEFINED(queue)) return false;
- // Do a depth first search for a reject handler that's not
- // the default PromiseIdRejectHandler.
+ // Do a depth first search for a promise that has been marked as having
+ // a reject handler.
for (var i = 0; i < queue.length; i += 2) {
- if (queue[i] != PromiseIdRejectHandler) return true;
if (PromiseHasRejectHandlerRecursive(queue[i + 1].promise)) return true;
}
return false;
}
PromiseHasRejectHandler = function PromiseHasRejectHandler() {
- // Mark promise as already having triggered a reject event.
- SET_PRIVATE(this, promiseDebug, true);
return PromiseHasRejectHandlerRecursive(this);
};
« no previous file with comments | « src/objects-printer.cc ('k') | src/runtime/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698