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 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
379 return promiseCapability.promise; | 379 return promiseCapability.promise; |
380 } | 380 } |
381 } | 381 } |
382 | 382 |
383 // Shortcut Promise.reject and Promise.resolve() implementations, used by | 383 // Shortcut Promise.reject and Promise.resolve() implementations, used by |
384 // Async Functions implementation. | 384 // Async Functions implementation. |
385 function PromiseCreateRejected(r) { | 385 function PromiseCreateRejected(r) { |
386 return %_Call(PromiseReject, GlobalPromise, r); | 386 return %_Call(PromiseReject, GlobalPromise, r); |
387 } | 387 } |
388 | 388 |
389 function PromiseCreateResolved(x) { | 389 function PromiseCreateResolved(value) { |
390 return %_Call(PromiseResolve, GlobalPromise, x); | 390 if (IsPromise(value)) { |
391 return value; | |
caitp
2016/08/05 00:43:43
looks great. Should we do something similar for Pr
Dan Ehrenberg
2016/08/05 01:22:36
I don't think we need to optimize for the reject c
| |
392 } else { | |
393 var promise = PromiseInit(new GlobalPromise(promiseRawSymbol)); | |
394 var resolveResult = ResolvePromise(promise, value); | |
395 return promise; | |
396 } | |
391 } | 397 } |
392 | 398 |
393 function PerformPromiseThen(promise, onResolve, onReject, resultCapability) { | 399 function PerformPromiseThen(promise, onResolve, onReject, resultCapability) { |
394 if (!IS_CALLABLE(onResolve)) onResolve = PromiseIdResolveHandler; | 400 if (!IS_CALLABLE(onResolve)) onResolve = PromiseIdResolveHandler; |
395 if (!IS_CALLABLE(onReject)) onReject = PromiseIdRejectHandler; | 401 if (!IS_CALLABLE(onReject)) onReject = PromiseIdRejectHandler; |
396 | 402 |
397 var status = GET_PRIVATE(promise, promiseStateSymbol); | 403 var status = GET_PRIVATE(promise, promiseStateSymbol); |
398 switch (status) { | 404 switch (status) { |
399 case kPending: | 405 case kPending: |
400 PromiseAttachCallbacks(promise, resultCapability, onResolve, onReject); | 406 PromiseAttachCallbacks(promise, resultCapability, onResolve, onReject); |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
622 "createPromise", PromiseCreate, | 628 "createPromise", PromiseCreate, |
623 "resolvePromise", ResolvePromise, | 629 "resolvePromise", ResolvePromise, |
624 "rejectPromise", RejectPromise | 630 "rejectPromise", RejectPromise |
625 ]); | 631 ]); |
626 | 632 |
627 // TODO(v8:4567): Allow experimental natives to remove function prototype | 633 // TODO(v8:4567): Allow experimental natives to remove function prototype |
628 [PromiseChain, PromiseDefer, PromiseAccept].forEach( | 634 [PromiseChain, PromiseDefer, PromiseAccept].forEach( |
629 fn => %FunctionRemovePrototype(fn)); | 635 fn => %FunctionRemovePrototype(fn)); |
630 | 636 |
631 utils.Export(function(to) { | 637 utils.Export(function(to) { |
632 to.IsPromise = IsPromise; | |
633 | |
634 to.PromiseChain = PromiseChain; | 638 to.PromiseChain = PromiseChain; |
635 to.PromiseDefer = PromiseDefer; | 639 to.PromiseDefer = PromiseDefer; |
636 to.PromiseAccept = PromiseAccept; | 640 to.PromiseAccept = PromiseAccept; |
637 | 641 |
638 to.PromiseCreateRejected = PromiseCreateRejected; | 642 to.PromiseCreateRejected = PromiseCreateRejected; |
639 to.PromiseCreateResolved = PromiseCreateResolved; | 643 to.PromiseCreateResolved = PromiseCreateResolved; |
640 to.PromiseThen = PromiseThen; | 644 to.PromiseThen = PromiseThen; |
641 | 645 |
642 to.GlobalPromise = GlobalPromise; | 646 to.GlobalPromise = GlobalPromise; |
643 to.NewPromiseCapability = NewPromiseCapability; | 647 to.NewPromiseCapability = NewPromiseCapability; |
644 to.PerformPromiseThen = PerformPromiseThen; | 648 to.PerformPromiseThen = PerformPromiseThen; |
645 }); | 649 }); |
646 | 650 |
647 }) | 651 }) |
OLD | NEW |