Index: src/promise.js |
diff --git a/src/promise.js b/src/promise.js |
index 60c836c9e6de63c087a318a45dfb181c19e7d217..da4fb4c82030e8c1138fd2fd70687b55011a3e15 100644 |
--- a/src/promise.js |
+++ b/src/promise.js |
@@ -35,11 +35,13 @@ function Promise(resolver) { |
throw MakeTypeError('resolver_not_a_function', [resolver]); |
var promise = PromiseInit(this); |
try { |
+ %DebugPromiseHandlePrologue(function() { return promise }); |
resolver(function(x) { PromiseResolve(promise, x) }, |
function(r) { PromiseReject(promise, r) }); |
} catch (e) { |
PromiseReject(promise, e); |
} |
+ %DebugPromiseHandleEpilogue(); |
rossberg
2014/04/30 12:55:17
Put his in 'finally' clause (also below).
Yang
2014/04/30 13:20:14
Done.
|
} |
function PromiseSet(promise, status, value, onResolve, onReject) { |
@@ -161,6 +163,11 @@ function PromiseEnqueue(value, tasks) { |
function PromiseHandle(value, handler, deferred) { |
try { |
+ %DebugPromiseHandlePrologue( |
+ function() { |
+ var queue = GET_PRIVATE(deferred.promise, promiseOnReject); |
+ return (queue && queue.length == 0) ? deferred.promise : UNDEFINED; |
+ }); |
var result = handler(value); |
if (result === deferred.promise) |
throw MakeTypeError('promise_cyclic', [result]); |
@@ -169,22 +176,12 @@ function PromiseHandle(value, handler, deferred) { |
else |
deferred.resolve(result); |
} catch (exception) { |
- var uncaught = false; |
- var reject_queue = GET_PRIVATE(deferred.promise, promiseOnReject); |
- if (reject_queue && reject_queue.length == 0) { |
- // The deferred promise may get a reject handler attached later. |
- // For now, we consider the exception to be (for the moment) uncaught. |
- uncaught = true; |
- } |
try { |
+ %DebugPromiseHandlePrologue(function() { return deferred.promise }); |
rossberg
2014/04/30 12:55:17
It's a bit weird that the prologue is executed twi
Yang
2014/04/30 13:20:14
Done.
|
deferred.reject(exception); |
- } catch (e) { |
- // The reject handler can only throw for a custom deferred promise. |
- // We consider the original exception to be uncaught. |
- uncaught = true; |
- } |
- if (uncaught) %DebugPendingExceptionInPromise(exception, deferred.promise); |
+ } catch (e) { } |
} |
+ %DebugPromiseHandleEpilogue(); |
} |
@@ -315,20 +312,3 @@ function SetUpPromise() { |
} |
SetUpPromise(); |
- |
-// Functions to expose promise details to the debugger. |
-function GetPromiseStatus(promise) { |
rossberg
2014/04/30 12:55:17
As discussed offline, I'd prefer to keep the acces
Yang
2014/04/30 13:20:14
Done.
|
- return GET_PRIVATE(promise, promiseStatus); |
-} |
- |
-function GetPromiseOnResolve(promise) { |
- return GET_PRIVATE(promise, promiseOnResolve); |
-} |
- |
-function GetPromiseOnReject(promise) { |
- return GET_PRIVATE(promise, promiseOnReject); |
-} |
- |
-function GetPromiseValue(promise) { |
- return GET_PRIVATE(promise, promiseValue); |
-} |