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); |
+} |
+ |
// 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; |
}); |
}) |