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 28 matching lines...) Expand all Loading... |
39 // Only used by async-await.js | 39 // Only used by async-await.js |
40 function RejectPromise(promise, reason, debugEvent) { | 40 function RejectPromise(promise, reason, debugEvent) { |
41 %PromiseReject(promise, reason, debugEvent); | 41 %PromiseReject(promise, reason, debugEvent); |
42 } | 42 } |
43 | 43 |
44 // Export to bindings | 44 // Export to bindings |
45 function DoRejectPromise(promise, reason) { | 45 function DoRejectPromise(promise, reason) { |
46 %PromiseReject(promise, reason, true); | 46 %PromiseReject(promise, reason, true); |
47 } | 47 } |
48 | 48 |
49 // ES#sec-promise.reject | |
50 // Promise.reject ( x ) | |
51 function PromiseReject(r) { | |
52 if (!IS_RECEIVER(this)) { | |
53 throw %make_type_error(kCalledOnNonObject, PromiseReject); | |
54 } | |
55 if (this === GlobalPromise) { | |
56 // Optimized case, avoid extra closure. | |
57 var promise = %promise_create_and_set(kRejected, r); | |
58 // Trigger debug events if the debugger is on, as Promise.reject is | |
59 // equivalent to throwing an exception directly. | |
60 %PromiseRejectEventFromStack(promise, r); | |
61 return promise; | |
62 } else { | |
63 var promiseCapability = %new_promise_capability(this, true); | |
64 %_Call(promiseCapability.reject, UNDEFINED, r); | |
65 return promiseCapability.promise; | |
66 } | |
67 } | |
68 | |
69 // Combinators. | 49 // Combinators. |
70 | 50 |
71 // ES#sec-promise.all | 51 // ES#sec-promise.all |
72 // Promise.all ( iterable ) | 52 // Promise.all ( iterable ) |
73 function PromiseAll(iterable) { | 53 function PromiseAll(iterable) { |
74 if (!IS_RECEIVER(this)) { | 54 if (!IS_RECEIVER(this)) { |
75 throw %make_type_error(kCalledOnNonObject, "Promise.all"); | 55 throw %make_type_error(kCalledOnNonObject, "Promise.all"); |
76 } | 56 } |
77 | 57 |
78 // false debugEvent so that forwarding the rejection through all does not | 58 // false debugEvent so that forwarding the rejection through all does not |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 } | 147 } |
168 | 148 |
169 function MarkPromiseAsHandled(promise) { | 149 function MarkPromiseAsHandled(promise) { |
170 %PromiseMarkAsHandled(promise); | 150 %PromiseMarkAsHandled(promise); |
171 } | 151 } |
172 | 152 |
173 // ------------------------------------------------------------------- | 153 // ------------------------------------------------------------------- |
174 // Install exported functions. | 154 // Install exported functions. |
175 | 155 |
176 utils.InstallFunctions(GlobalPromise, DONT_ENUM, [ | 156 utils.InstallFunctions(GlobalPromise, DONT_ENUM, [ |
177 "reject", PromiseReject, | |
178 "all", PromiseAll, | 157 "all", PromiseAll, |
179 "race", PromiseRace, | 158 "race", PromiseRace, |
180 ]); | 159 ]); |
181 | 160 |
182 %InstallToContext([ | 161 %InstallToContext([ |
183 "promise_create", PromiseCreate, | 162 "promise_create", PromiseCreate, |
184 "promise_reject", DoRejectPromise, | 163 "promise_reject", DoRejectPromise, |
185 // TODO(gsathya): Remove this once we update the promise builtin. | |
186 "promise_internal_reject", RejectPromise, | |
187 "promise_id_resolve_handler", PromiseIdResolveHandler, | 164 "promise_id_resolve_handler", PromiseIdResolveHandler, |
188 "promise_id_reject_handler", PromiseIdRejectHandler | 165 "promise_id_reject_handler", PromiseIdRejectHandler |
189 ]); | 166 ]); |
190 | 167 |
191 // This allows extras to create promises quickly without building extra | 168 // This allows extras to create promises quickly without building extra |
192 // resolve/reject closures, and allows them to later resolve and reject any | 169 // resolve/reject closures, and allows them to later resolve and reject any |
193 // promise without having to hold on to those closures forever. | 170 // promise without having to hold on to those closures forever. |
194 utils.InstallFunctions(extrasUtils, 0, [ | 171 utils.InstallFunctions(extrasUtils, 0, [ |
195 "createPromise", PromiseCreate, | 172 "createPromise", PromiseCreate, |
196 "rejectPromise", DoRejectPromise, | 173 "rejectPromise", DoRejectPromise, |
197 "markPromiseAsHandled", MarkPromiseAsHandled | 174 "markPromiseAsHandled", MarkPromiseAsHandled |
198 ]); | 175 ]); |
199 | 176 |
200 utils.Export(function(to) { | 177 utils.Export(function(to) { |
201 to.PromiseCreate = PromiseCreate; | 178 to.PromiseCreate = PromiseCreate; |
202 to.RejectPromise = RejectPromise; | 179 to.RejectPromise = RejectPromise; |
203 }); | 180 }); |
204 | 181 |
205 }) | 182 }) |
OLD | NEW |