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 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 } | 278 } |
279 }, | 279 }, |
280 onReject, | 280 onReject, |
281 PromiseChain | 281 PromiseChain |
282 ); | 282 ); |
283 } | 283 } |
284 | 284 |
285 // Combinators. | 285 // Combinators. |
286 | 286 |
287 function PromiseCast(x) { | 287 function PromiseCast(x) { |
288 // TODO(rossberg): cannot do better until we support @@create. | 288 if (IsPromise(x) && x.constructor === this) { |
289 return IsPromise(x) ? x : new this(function(resolve) { resolve(x) }); | 289 return x; |
| 290 } else { |
| 291 return new this(function(resolve) { resolve(x) }); |
| 292 } |
290 } | 293 } |
291 | 294 |
292 function PromiseAll(iterable) { | 295 function PromiseAll(iterable) { |
293 var deferred = %_CallFunction(this, PromiseDeferred); | 296 var deferred = %_CallFunction(this, PromiseDeferred); |
294 var resolutions = []; | 297 var resolutions = []; |
295 try { | 298 try { |
296 var count = 0; | 299 var count = 0; |
297 var i = 0; | 300 var i = 0; |
298 for (var value of iterable) { | 301 for (var value of iterable) { |
299 this.resolve(value).then( | 302 this.resolve(value).then( |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 // This allows extras to create promises quickly without building extra | 394 // This allows extras to create promises quickly without building extra |
392 // resolve/reject closures, and allows them to later resolve and reject any | 395 // resolve/reject closures, and allows them to later resolve and reject any |
393 // promise without having to hold on to those closures forever. | 396 // promise without having to hold on to those closures forever. |
394 utils.InstallFunctions(extrasUtils, 0, [ | 397 utils.InstallFunctions(extrasUtils, 0, [ |
395 "createPromise", PromiseCreate, | 398 "createPromise", PromiseCreate, |
396 "resolvePromise", PromiseResolve, | 399 "resolvePromise", PromiseResolve, |
397 "rejectPromise", PromiseReject | 400 "rejectPromise", PromiseReject |
398 ]); | 401 ]); |
399 | 402 |
400 }) | 403 }) |
OLD | NEW |