| 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 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 // which is usually simply noise. Do not trigger that debug event. | 286 // which is usually simply noise. Do not trigger that debug event. |
| 287 %PromiseRejectEvent(promise, r, false); | 287 %PromiseRejectEvent(promise, r, false); |
| 288 return promise; | 288 return promise; |
| 289 } else { | 289 } else { |
| 290 var promiseCapability = NewPromiseCapability(this); | 290 var promiseCapability = NewPromiseCapability(this); |
| 291 %_Call(promiseCapability.reject, UNDEFINED, r); | 291 %_Call(promiseCapability.reject, UNDEFINED, r); |
| 292 return promiseCapability.promise; | 292 return promiseCapability.promise; |
| 293 } | 293 } |
| 294 } | 294 } |
| 295 | 295 |
| 296 // Shortcut Promise.reject and Promise.resolve() implementations, used by |
| 297 // Async Functions implementation. |
| 298 function PromiseCreateRejected(r) { |
| 299 return %_Call(PromiseReject, GlobalPromise, r); |
| 300 } |
| 301 |
| 302 function PromiseCreateResolved(x) { |
| 303 return %_Call(PromiseResolve, GlobalPromise, x); |
| 304 } |
| 305 |
| 296 // ES#sec-promise.prototype.then | 306 // ES#sec-promise.prototype.then |
| 297 // Promise.prototype.then ( onFulfilled, onRejected ) | 307 // Promise.prototype.then ( onFulfilled, onRejected ) |
| 298 // Multi-unwrapped chaining with thenable coercion. | 308 // Multi-unwrapped chaining with thenable coercion. |
| 299 function PromiseThen(onResolve, onReject) { | 309 function PromiseThen(onResolve, onReject) { |
| 300 var status = GET_PRIVATE(this, promiseStateSymbol); | 310 var status = GET_PRIVATE(this, promiseStateSymbol); |
| 301 if (IS_UNDEFINED(status)) { | 311 if (IS_UNDEFINED(status)) { |
| 302 throw MakeTypeError(kNotAPromise, this); | 312 throw MakeTypeError(kNotAPromise, this); |
| 303 } | 313 } |
| 304 | 314 |
| 305 var constructor = SpeciesConstructor(this, GlobalPromise); | 315 var constructor = SpeciesConstructor(this, GlobalPromise); |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 480 ]); | 490 ]); |
| 481 | 491 |
| 482 %InstallToContext([ | 492 %InstallToContext([ |
| 483 "promise_catch", PromiseCatch, | 493 "promise_catch", PromiseCatch, |
| 484 "promise_chain", PromiseChain, | 494 "promise_chain", PromiseChain, |
| 485 "promise_create", PromiseCreate, | 495 "promise_create", PromiseCreate, |
| 486 "promise_has_user_defined_reject_handler", PromiseHasUserDefinedRejectHandler, | 496 "promise_has_user_defined_reject_handler", PromiseHasUserDefinedRejectHandler, |
| 487 "promise_reject", RejectPromise, | 497 "promise_reject", RejectPromise, |
| 488 "promise_resolve", FulfillPromise, | 498 "promise_resolve", FulfillPromise, |
| 489 "promise_then", PromiseThen, | 499 "promise_then", PromiseThen, |
| 500 "promise_create_rejected", PromiseCreateRejected, |
| 501 "promise_create_resolved", PromiseCreateResolved |
| 490 ]); | 502 ]); |
| 491 | 503 |
| 492 // This allows extras to create promises quickly without building extra | 504 // This allows extras to create promises quickly without building extra |
| 493 // resolve/reject closures, and allows them to later resolve and reject any | 505 // resolve/reject closures, and allows them to later resolve and reject any |
| 494 // promise without having to hold on to those closures forever. | 506 // promise without having to hold on to those closures forever. |
| 495 utils.InstallFunctions(extrasUtils, 0, [ | 507 utils.InstallFunctions(extrasUtils, 0, [ |
| 496 "createPromise", PromiseCreate, | 508 "createPromise", PromiseCreate, |
| 497 "resolvePromise", FulfillPromise, | 509 "resolvePromise", FulfillPromise, |
| 498 "rejectPromise", RejectPromise | 510 "rejectPromise", RejectPromise |
| 499 ]); | 511 ]); |
| 500 | 512 |
| 501 // TODO(v8:4567): Allow experimental natives to remove function prototype | 513 // TODO(v8:4567): Allow experimental natives to remove function prototype |
| 502 [PromiseChain, PromiseDefer, PromiseAccept].forEach( | 514 [PromiseChain, PromiseDefer, PromiseAccept].forEach( |
| 503 fn => %FunctionRemovePrototype(fn)); | 515 fn => %FunctionRemovePrototype(fn)); |
| 504 | 516 |
| 505 utils.Export(function(to) { | 517 utils.Export(function(to) { |
| 506 to.PromiseChain = PromiseChain; | 518 to.PromiseChain = PromiseChain; |
| 507 to.PromiseDefer = PromiseDefer; | 519 to.PromiseDefer = PromiseDefer; |
| 508 to.PromiseAccept = PromiseAccept; | 520 to.PromiseAccept = PromiseAccept; |
| 521 |
| 522 to.PromiseCreateRejected = PromiseCreateRejected; |
| 523 to.PromiseCreateResolved = PromiseCreateResolved; |
| 524 to.PromiseThen = PromiseThen; |
| 509 }); | 525 }); |
| 510 | 526 |
| 511 }) | 527 }) |
| OLD | NEW |