Chromium Code Reviews| 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); |
| -} |