Chromium Code Reviews| 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 |