| 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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 function PromiseIdRejectHandler(r) { %_ReThrow(r); } | 69 function PromiseIdRejectHandler(r) { %_ReThrow(r); } |
| 70 SET_PRIVATE(PromiseIdRejectHandler, promiseForwardingHandlerSymbol, true); | 70 SET_PRIVATE(PromiseIdRejectHandler, promiseForwardingHandlerSymbol, true); |
| 71 | 71 |
| 72 // ------------------------------------------------------------------- | 72 // ------------------------------------------------------------------- |
| 73 // Define exported functions. | 73 // Define exported functions. |
| 74 | 74 |
| 75 // For bootstrapper. | 75 // For bootstrapper. |
| 76 | 76 |
| 77 // This is used by utils and v8-extras. | 77 // This is used by utils and v8-extras. |
| 78 function PromiseCreate() { | 78 function PromiseCreate() { |
| 79 return %promise_internal_constructor(); | 79 return %promise_internal_constructor(UNDEFINED); |
| 80 } | 80 } |
| 81 | 81 |
| 82 // Only used by async-await.js | 82 // Only used by async-await.js |
| 83 function RejectPromise(promise, reason, debugEvent) { | 83 function RejectPromise(promise, reason, debugEvent) { |
| 84 %PromiseReject(promise, reason, debugEvent); | 84 %PromiseReject(promise, reason, debugEvent); |
| 85 } | 85 } |
| 86 | 86 |
| 87 // Export to bindings | 87 // Export to bindings |
| 88 function DoRejectPromise(promise, reason) { | 88 function DoRejectPromise(promise, reason) { |
| 89 %PromiseReject(promise, reason, true); | 89 %PromiseReject(promise, reason, true); |
| 90 } | 90 } |
| 91 | 91 |
| 92 // The resultCapability.promise is only ever fulfilled internally, | 92 // The resultCapability.promise is only ever fulfilled internally, |
| 93 // so we don't need the closures to protect against accidentally | 93 // so we don't need the closures to protect against accidentally |
| 94 // calling them multiple times. | 94 // calling them multiple times. |
| 95 function CreateInternalPromiseCapability() { | 95 function CreateInternalPromiseCapability(parent) { |
| 96 return { | 96 return { |
| 97 promise: %promise_internal_constructor(), | 97 promise: %promise_internal_constructor(parent), |
| 98 resolve: UNDEFINED, | 98 resolve: UNDEFINED, |
| 99 reject: UNDEFINED | 99 reject: UNDEFINED |
| 100 }; | 100 }; |
| 101 } | 101 } |
| 102 | 102 |
| 103 // ES#sec-newpromisecapability | 103 // ES#sec-newpromisecapability |
| 104 // NewPromiseCapability ( C ) | 104 // NewPromiseCapability ( C ) |
| 105 function NewPromiseCapability(C, debugEvent) { | 105 function NewPromiseCapability(C, debugEvent) { |
| 106 if (C === GlobalPromise) { | 106 if (C === GlobalPromise) { |
| 107 // Optimized case, avoid extra closure. | 107 // Optimized case, avoid extra closure. |
| 108 var promise = %promise_internal_constructor(); | 108 var promise = %promise_internal_constructor(UNDEFINED); |
| 109 // TODO(gsathya): Remove container for callbacks when this is | 109 // TODO(gsathya): Remove container for callbacks when this is |
| 110 // moved to CPP/TF. | 110 // moved to CPP/TF. |
| 111 var callbacks = %create_resolving_functions(promise, debugEvent); | 111 var callbacks = %create_resolving_functions(promise, debugEvent); |
| 112 return { | 112 return { |
| 113 promise: promise, | 113 promise: promise, |
| 114 resolve: callbacks[kResolveCallback], | 114 resolve: callbacks[kResolveCallback], |
| 115 reject: callbacks[kRejectCallback] | 115 reject: callbacks[kRejectCallback] |
| 116 }; | 116 }; |
| 117 } | 117 } |
| 118 | 118 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 // ES#sec-promise.resolve | 161 // ES#sec-promise.resolve |
| 162 // Promise.resolve ( x ) | 162 // Promise.resolve ( x ) |
| 163 function PromiseResolve(x) { | 163 function PromiseResolve(x) { |
| 164 if (!IS_RECEIVER(this)) { | 164 if (!IS_RECEIVER(this)) { |
| 165 throw %make_type_error(kCalledOnNonObject, PromiseResolve); | 165 throw %make_type_error(kCalledOnNonObject, PromiseResolve); |
| 166 } | 166 } |
| 167 if (%is_promise(x) && x.constructor === this) return x; | 167 if (%is_promise(x) && x.constructor === this) return x; |
| 168 | 168 |
| 169 // Avoid creating resolving functions. | 169 // Avoid creating resolving functions. |
| 170 if (this === GlobalPromise) { | 170 if (this === GlobalPromise) { |
| 171 var promise = %promise_internal_constructor(); | 171 var promise = %promise_internal_constructor(UNDEFINED); |
| 172 %promise_resolve(promise, x); | 172 %promise_resolve(promise, x); |
| 173 return promise; | 173 return promise; |
| 174 } | 174 } |
| 175 | 175 |
| 176 // debugEvent is not so meaningful here as it will be resolved | 176 // debugEvent is not so meaningful here as it will be resolved |
| 177 var promiseCapability = NewPromiseCapability(this, true); | 177 var promiseCapability = NewPromiseCapability(this, true); |
| 178 %_Call(promiseCapability.resolve, UNDEFINED, x); | 178 %_Call(promiseCapability.resolve, UNDEFINED, x); |
| 179 return promiseCapability.promise; | 179 return promiseCapability.promise; |
| 180 } | 180 } |
| 181 | 181 |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 | 387 |
| 388 utils.Export(function(to) { | 388 utils.Export(function(to) { |
| 389 to.PromiseCreate = PromiseCreate; | 389 to.PromiseCreate = PromiseCreate; |
| 390 to.PromiseThen = PromiseThen; | 390 to.PromiseThen = PromiseThen; |
| 391 | 391 |
| 392 to.CreateInternalPromiseCapability = CreateInternalPromiseCapability; | 392 to.CreateInternalPromiseCapability = CreateInternalPromiseCapability; |
| 393 to.RejectPromise = RejectPromise; | 393 to.RejectPromise = RejectPromise; |
| 394 }); | 394 }); |
| 395 | 395 |
| 396 }) | 396 }) |
| OLD | NEW |