| 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 |