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 |
11 // ------------------------------------------------------------------- | 11 // ------------------------------------------------------------------- |
12 // Imports | 12 // Imports |
13 | 13 |
14 var InternalArray = utils.InternalArray; | 14 var InternalArray = utils.InternalArray; |
15 var MakeTypeError; | 15 var MakeTypeError; |
16 var promiseCombinedDeferredSymbol = | 16 var promiseCombinedDeferredSymbol = |
17 utils.ImportNow("promise_combined_deferred_symbol"); | 17 utils.ImportNow("promise_combined_deferred_symbol"); |
18 var promiseHasHandlerSymbol = | 18 var promiseHasHandlerSymbol = |
19 utils.ImportNow("promise_has_handler_symbol"); | 19 utils.ImportNow("promise_has_handler_symbol"); |
20 var promiseOnRejectSymbol = utils.ImportNow("promise_on_reject_symbol"); | 20 var promiseOnRejectSymbol = utils.ImportNow("promise_on_reject_symbol"); |
21 var promiseOnResolveSymbol = | 21 var promiseOnResolveSymbol = |
22 utils.ImportNow("promise_on_resolve_symbol"); | 22 utils.ImportNow("promise_on_resolve_symbol"); |
23 var promiseRawSymbol = utils.ImportNow("promise_raw_symbol"); | 23 var promiseRawSymbol = utils.ImportNow("promise_raw_symbol"); |
24 var promiseStatusSymbol = utils.ImportNow("promise_status_symbol"); | 24 var promiseStatusSymbol = utils.ImportNow("promise_status_symbol"); |
25 var promiseValueSymbol = utils.ImportNow("promise_value_symbol"); | 25 var promiseValueSymbol = utils.ImportNow("promise_value_symbol"); |
26 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); | 26 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); |
27 const kPromiseChain = 17; | |
28 const kPromiseAccept = 18; | |
29 const kPromiseDefer = 19; | |
adamk
2016/01/05 19:10:09
Same for theses consts. I can imagine doing a clea
Dan Ehrenberg
2016/01/06 03:20:55
I don't like macros! But this patch isn't the foru
| |
27 | 30 |
28 utils.Import(function(from) { | 31 utils.Import(function(from) { |
29 MakeTypeError = from.MakeTypeError; | 32 MakeTypeError = from.MakeTypeError; |
30 }); | 33 }); |
31 | 34 |
32 // ------------------------------------------------------------------- | 35 // ------------------------------------------------------------------- |
33 | 36 |
34 // Status values: 0 = pending, +1 = resolved, -1 = rejected | 37 // Status values: 0 = pending, +1 = resolved, -1 = rejected |
35 var lastMicrotaskId = 0; | 38 var lastMicrotaskId = 0; |
36 | 39 |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
231 var result = {promise: UNDEFINED, resolve: UNDEFINED, reject: UNDEFINED }; | 234 var result = {promise: UNDEFINED, resolve: UNDEFINED, reject: UNDEFINED }; |
232 result.promise = new C(function(resolve, reject) { | 235 result.promise = new C(function(resolve, reject) { |
233 // TODO(littledan): Check for resolve and reject being not undefined | 236 // TODO(littledan): Check for resolve and reject being not undefined |
234 result.resolve = resolve; | 237 result.resolve = resolve; |
235 result.reject = reject; | 238 result.reject = reject; |
236 }); | 239 }); |
237 return result; | 240 return result; |
238 } | 241 } |
239 } | 242 } |
240 | 243 |
241 function PromiseDeferred() { | 244 function PromiseDeferred() { |
adamk
2016/01/05 19:10:09
Could this be renamed "PromiseDefer" for clarity?
Dan Ehrenberg
2016/01/06 03:20:55
Agreed that this is confusing. I plan to do this a
| |
245 %IncrementUseCounter(kPromiseDefer); | |
242 return NewPromiseCapability(this); | 246 return NewPromiseCapability(this); |
243 } | 247 } |
244 | 248 |
245 function PromiseResolved(x) { | 249 function PromiseResolved(x) { |
adamk
2016/01/05 19:10:09
Same here, clarity. The two lines where this funct
Dan Ehrenberg
2016/01/06 03:20:55
Ditto.
| |
250 %IncrementUseCounter(kPromiseAccept); | |
246 return %_Call(PromiseCast, this, x); | 251 return %_Call(PromiseCast, this, x); |
247 } | 252 } |
248 | 253 |
249 function PromiseRejected(r) { | 254 function PromiseRejected(r) { |
250 if (!IS_RECEIVER(this)) { | 255 if (!IS_RECEIVER(this)) { |
251 throw MakeTypeError(kCalledOnNonObject, PromiseRejected); | 256 throw MakeTypeError(kCalledOnNonObject, PromiseRejected); |
252 } | 257 } |
253 var promise; | 258 var promise; |
254 if (this === GlobalPromise) { | 259 if (this === GlobalPromise) { |
255 // Optimized case, avoid extra closure. | 260 // Optimized case, avoid extra closure. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
299 // Mark this promise as having handler. | 304 // Mark this promise as having handler. |
300 SET_PRIVATE(this, promiseHasHandlerSymbol, true); | 305 SET_PRIVATE(this, promiseHasHandlerSymbol, true); |
301 if (DEBUG_IS_ACTIVE) { | 306 if (DEBUG_IS_ACTIVE) { |
302 %DebugPromiseEvent({ promise: deferred.promise, parentPromise: this }); | 307 %DebugPromiseEvent({ promise: deferred.promise, parentPromise: this }); |
303 } | 308 } |
304 return deferred.promise; | 309 return deferred.promise; |
305 } | 310 } |
306 | 311 |
307 // Chain is left around for now as an alias for then | 312 // Chain is left around for now as an alias for then |
308 function PromiseChain(onResolve, onReject) { | 313 function PromiseChain(onResolve, onReject) { |
314 %IncrementUseCounter(kPromiseChain); | |
309 return %_Call(PromiseThen, this, onResolve, onReject); | 315 return %_Call(PromiseThen, this, onResolve, onReject); |
310 } | 316 } |
311 | 317 |
312 function PromiseCatch(onReject) { | 318 function PromiseCatch(onReject) { |
313 return this.then(UNDEFINED, onReject); | 319 return this.then(UNDEFINED, onReject); |
314 } | 320 } |
315 | 321 |
316 // Combinators. | 322 // Combinators. |
317 | 323 |
318 function PromiseCast(x) { | 324 function PromiseCast(x) { |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
443 [PromiseChain, PromiseDeferred, PromiseResolved].forEach( | 449 [PromiseChain, PromiseDeferred, PromiseResolved].forEach( |
444 fn => %FunctionRemovePrototype(fn)); | 450 fn => %FunctionRemovePrototype(fn)); |
445 | 451 |
446 utils.Export(function(to) { | 452 utils.Export(function(to) { |
447 to.PromiseChain = PromiseChain; | 453 to.PromiseChain = PromiseChain; |
448 to.PromiseDeferred = PromiseDeferred; | 454 to.PromiseDeferred = PromiseDeferred; |
449 to.PromiseResolved = PromiseResolved; | 455 to.PromiseResolved = PromiseResolved; |
450 }); | 456 }); |
451 | 457 |
452 }) | 458 }) |
OLD | NEW |