Chromium Code Reviews| Index: src/js/promise.js |
| diff --git a/src/js/promise.js b/src/js/promise.js |
| index 65a8bf3f4ddf0ec598c7c0a21067dff943a5ea66..c12270996b1cf96da3aed90ba928ed49c1bfdd60 100644 |
| --- a/src/js/promise.js |
| +++ b/src/js/promise.js |
| @@ -293,6 +293,19 @@ function PromiseReject(r) { |
| } |
| } |
| +// Shortcut Promise.reject and Promise.resolve() implementations, used by |
| +// Async Functions implementation. |
| +function PromiseCreateRejected(r) { |
| + var promise = PromiseCreateAndSet(-1, r); |
| + %PromiseRejectEvent(promise, r, false); |
| + return promise; |
| +} |
| + |
| +function PromiseCreateResolved(x) { |
| + if (IsPromise(x) && x.constructor === GlobalPromise) return x; |
| + return PromiseCreateAndSet(+1, x); |
| +} |
|
Dan Ehrenberg
2016/05/04 22:52:36
This seems like a good optimization. Maybe in a se
|
| + |
| // ES#sec-promise.prototype.then |
| // Promise.prototype.then ( onFulfilled, onRejected ) |
| // Multi-unwrapped chaining with thenable coercion. |
| @@ -487,6 +500,8 @@ utils.InstallFunctions(GlobalPromise.prototype, DONT_ENUM, [ |
| "promise_reject", RejectPromise, |
| "promise_resolve", FulfillPromise, |
| "promise_then", PromiseThen, |
| + "promise_create_rejected", PromiseCreateRejected, |
| + "promise_create_resolved", PromiseCreateResolved |
| ]); |
| // This allows extras to create promises quickly without building extra |
| @@ -506,6 +521,10 @@ utils.Export(function(to) { |
| to.PromiseChain = PromiseChain; |
| to.PromiseDefer = PromiseDefer; |
| to.PromiseAccept = PromiseAccept; |
| + |
| + to.PromiseCreateRejected = PromiseCreateRejected; |
| + to.PromiseCreateResolved = PromiseCreateResolved; |
| + to.PromiseThen = PromiseThen; |
| }); |
| }) |