Index: src/js/promise.js |
diff --git a/src/js/promise.js b/src/js/promise.js |
index fe945b535d49efa3380060be9b566a1235d52cf8..f0c33b5e5fbb19c51fe8320700daa77e31492602 100644 |
--- a/src/js/promise.js |
+++ b/src/js/promise.js |
@@ -118,56 +118,7 @@ function PromiseCreate() { |
// ES#sec-promise-resolve-functions |
// Promise Resolve Functions, steps 6-13 |
function ResolvePromise(promise, resolution) { |
- if (resolution === promise) { |
- var exception = %make_type_error(kPromiseCyclic, resolution); |
- %PromiseReject(promise, exception, true); |
- return; |
- } |
- if (IS_RECEIVER(resolution)) { |
- // 25.4.1.3.2 steps 8-12 |
- try { |
- var then = resolution.then; |
- } catch (e) { |
- %PromiseReject(promise, e, true); |
- return; |
- } |
- |
- // Resolution is a native promise and if it's already resolved or |
- // rejected, shortcircuit the resolution procedure by directly |
- // reusing the value from the promise. |
- if (%is_promise(resolution) && then === PromiseThen) { |
- var thenableState = %PromiseStatus(resolution); |
- if (thenableState === kFulfilled) { |
- // This goes inside the if-else to save one symbol lookup in |
- // the slow path. |
- var thenableValue = %PromiseResult(resolution); |
- %PromiseFulfill(promise, kFulfilled, thenableValue); |
- SET_PRIVATE(promise, promiseHasHandlerSymbol, true); |
- return; |
- } else if (thenableState === kRejected) { |
- var thenableValue = %PromiseResult(resolution); |
- if (!HAS_DEFINED_PRIVATE(resolution, promiseHasHandlerSymbol)) { |
- // Promise has already been rejected, but had no handler. |
- // Revoke previously triggered reject event. |
- %PromiseRevokeReject(resolution); |
- } |
- // Don't cause a debug event as this case is forwarding a rejection |
- %PromiseReject(promise, thenableValue, false); |
- SET_PRIVATE(resolution, promiseHasHandlerSymbol, true); |
- return; |
- } |
- } |
- |
- if (IS_CALLABLE(then)) { |
- if (DEBUG_IS_ACTIVE && %is_promise(resolution)) { |
- // Mark the dependency of the new promise on the resolution |
- SET_PRIVATE(resolution, promiseHandledBySymbol, promise); |
- } |
- %EnqueuePromiseResolveThenableJob(promise, resolution, then); |
- return; |
- } |
- } |
- %PromiseFulfill(promise, kFulfilled, resolution); |
+ %resolve_promise(promise, resolution); |
jgruber
2016/12/05 09:25:17
Can we replace calls to ResolvePromise by %resolve
gsathya
2016/12/05 16:03:05
Nope. We use this in async-await and v8-extras
caitp
2016/12/05 16:22:51
Couldn't we just export %resolve_promise from the
|
} |
// Only used by async-await.js |
@@ -451,9 +402,7 @@ utils.InstallFunctions(GlobalPromise, DONT_ENUM, [ |
utils.InstallGetter(GlobalPromise, speciesSymbol, PromiseSpecies); |
-utils.InstallFunctions(GlobalPromise.prototype, DONT_ENUM, [ |
- "catch", PromiseCatch |
-]); |
+%SetCode(GlobalPromise.prototype.catch, PromiseCatch); |
jgruber
2016/12/05 09:25:17
This and below + corresponding changes in bootstra
gsathya
2016/12/05 16:03:05
I need to install an empty .catch in bootstrapper
jgruber
2016/12/07 12:59:38
Acknowledged.
|
%InstallToContext([ |
"promise_catch", PromiseCatch, |
@@ -463,7 +412,6 @@ utils.InstallFunctions(GlobalPromise.prototype, DONT_ENUM, [ |
// TODO(gsathya): Remove this once we update the promise builtin. |
"promise_internal_reject", RejectPromise, |
"promise_resolve", ResolvePromise, |
- "promise_then", PromiseThen, |
"promise_handle", PromiseHandle, |
"promise_debug_get_info", PromiseDebugGetInfo, |
"new_promise_capability", NewPromiseCapability, |