| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 (function(global, utils, extrasUtils) { | 5 (function(global, utils, extrasUtils) { |
| 6 | 6 |
| 7 "use strict"; | 7 "use strict"; |
| 8 | 8 |
| 9 %CheckIsBootstrapping(); | 9 %CheckIsBootstrapping(); |
| 10 | 10 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 return promise; | 61 return promise; |
| 62 } else { | 62 } else { |
| 63 var promiseCapability = %new_promise_capability(this, true); | 63 var promiseCapability = %new_promise_capability(this, true); |
| 64 %_Call(promiseCapability.reject, UNDEFINED, r); | 64 %_Call(promiseCapability.reject, UNDEFINED, r); |
| 65 return promiseCapability.promise; | 65 return promiseCapability.promise; |
| 66 } | 66 } |
| 67 } | 67 } |
| 68 | 68 |
| 69 // Combinators. | 69 // Combinators. |
| 70 | 70 |
| 71 // ES#sec-promise.resolve | |
| 72 // Promise.resolve ( x ) | |
| 73 function PromiseResolve(x) { | |
| 74 if (!IS_RECEIVER(this)) { | |
| 75 throw %make_type_error(kCalledOnNonObject, PromiseResolve); | |
| 76 } | |
| 77 if (%is_promise(x) && x.constructor === this) return x; | |
| 78 | |
| 79 // Avoid creating resolving functions. | |
| 80 if (this === GlobalPromise) { | |
| 81 var promise = %promise_internal_constructor(UNDEFINED); | |
| 82 %promise_resolve(promise, x); | |
| 83 return promise; | |
| 84 } | |
| 85 | |
| 86 // debugEvent is not so meaningful here as it will be resolved | |
| 87 var promiseCapability = %new_promise_capability(this, true); | |
| 88 %_Call(promiseCapability.resolve, UNDEFINED, x); | |
| 89 return promiseCapability.promise; | |
| 90 } | |
| 91 | |
| 92 // ES#sec-promise.all | 71 // ES#sec-promise.all |
| 93 // Promise.all ( iterable ) | 72 // Promise.all ( iterable ) |
| 94 function PromiseAll(iterable) { | 73 function PromiseAll(iterable) { |
| 95 if (!IS_RECEIVER(this)) { | 74 if (!IS_RECEIVER(this)) { |
| 96 throw %make_type_error(kCalledOnNonObject, "Promise.all"); | 75 throw %make_type_error(kCalledOnNonObject, "Promise.all"); |
| 97 } | 76 } |
| 98 | 77 |
| 99 // false debugEvent so that forwarding the rejection through all does not | 78 // false debugEvent so that forwarding the rejection through all does not |
| 100 // trigger redundant ExceptionEvents | 79 // trigger redundant ExceptionEvents |
| 101 var deferred = %new_promise_capability(this, false); | 80 var deferred = %new_promise_capability(this, false); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 %PromiseMarkAsHandled(promise); | 170 %PromiseMarkAsHandled(promise); |
| 192 } | 171 } |
| 193 | 172 |
| 194 // ------------------------------------------------------------------- | 173 // ------------------------------------------------------------------- |
| 195 // Install exported functions. | 174 // Install exported functions. |
| 196 | 175 |
| 197 utils.InstallFunctions(GlobalPromise, DONT_ENUM, [ | 176 utils.InstallFunctions(GlobalPromise, DONT_ENUM, [ |
| 198 "reject", PromiseReject, | 177 "reject", PromiseReject, |
| 199 "all", PromiseAll, | 178 "all", PromiseAll, |
| 200 "race", PromiseRace, | 179 "race", PromiseRace, |
| 201 "resolve", PromiseResolve | |
| 202 ]); | 180 ]); |
| 203 | 181 |
| 204 %InstallToContext([ | 182 %InstallToContext([ |
| 205 "promise_create", PromiseCreate, | 183 "promise_create", PromiseCreate, |
| 206 "promise_reject", DoRejectPromise, | 184 "promise_reject", DoRejectPromise, |
| 207 // TODO(gsathya): Remove this once we update the promise builtin. | 185 // TODO(gsathya): Remove this once we update the promise builtin. |
| 208 "promise_internal_reject", RejectPromise, | 186 "promise_internal_reject", RejectPromise, |
| 209 "promise_id_resolve_handler", PromiseIdResolveHandler, | 187 "promise_id_resolve_handler", PromiseIdResolveHandler, |
| 210 "promise_id_reject_handler", PromiseIdRejectHandler | 188 "promise_id_reject_handler", PromiseIdRejectHandler |
| 211 ]); | 189 ]); |
| 212 | 190 |
| 213 // This allows extras to create promises quickly without building extra | 191 // This allows extras to create promises quickly without building extra |
| 214 // resolve/reject closures, and allows them to later resolve and reject any | 192 // resolve/reject closures, and allows them to later resolve and reject any |
| 215 // promise without having to hold on to those closures forever. | 193 // promise without having to hold on to those closures forever. |
| 216 utils.InstallFunctions(extrasUtils, 0, [ | 194 utils.InstallFunctions(extrasUtils, 0, [ |
| 217 "createPromise", PromiseCreate, | 195 "createPromise", PromiseCreate, |
| 218 "rejectPromise", DoRejectPromise, | 196 "rejectPromise", DoRejectPromise, |
| 219 "markPromiseAsHandled", MarkPromiseAsHandled | 197 "markPromiseAsHandled", MarkPromiseAsHandled |
| 220 ]); | 198 ]); |
| 221 | 199 |
| 222 utils.Export(function(to) { | 200 utils.Export(function(to) { |
| 223 to.PromiseCreate = PromiseCreate; | 201 to.PromiseCreate = PromiseCreate; |
| 224 to.RejectPromise = RejectPromise; | 202 to.RejectPromise = RejectPromise; |
| 225 }); | 203 }); |
| 226 | 204 |
| 227 }) | 205 }) |
| OLD | NEW |