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) { | 5 (function(global, utils) { |
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 promiseHasHandlerSymbol = | 15 var promiseHasHandlerSymbol = |
16 utils.GetPrivateSymbol("promise_has_handler_symbol"); | 16 utils.ImportNow("promise_has_handler_symbol"); |
17 var promiseOnRejectSymbol = utils.GetPrivateSymbol("promise_on_reject_symbol"); | 17 var promiseOnRejectSymbol = utils.ImportNow("promise_on_reject_symbol"); |
18 var promiseOnResolveSymbol = | 18 var promiseOnResolveSymbol = |
19 utils.GetPrivateSymbol("promise_on_resolve_symbol"); | 19 utils.ImportNow("promise_on_resolve_symbol"); |
20 var promiseRawSymbol = utils.GetPrivateSymbol("promise_raw_symbol"); | 20 var promiseRawSymbol = utils.ImportNow("promise_raw_symbol"); |
21 var promiseStatusSymbol = utils.GetPrivateSymbol("promise_status_symbol"); | 21 var promiseStatusSymbol = utils.ImportNow("promise_status_symbol"); |
22 var promiseValueSymbol = utils.GetPrivateSymbol("promise_value_symbol"); | 22 var promiseValueSymbol = utils.ImportNow("promise_value_symbol"); |
| 23 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); |
23 | 24 |
24 // ------------------------------------------------------------------- | 25 // ------------------------------------------------------------------- |
25 | 26 |
26 // Status values: 0 = pending, +1 = resolved, -1 = rejected | 27 // Status values: 0 = pending, +1 = resolved, -1 = rejected |
27 var lastMicrotaskId = 0; | 28 var lastMicrotaskId = 0; |
28 | 29 |
29 var GlobalPromise = function Promise(resolver) { | 30 var GlobalPromise = function Promise(resolver) { |
30 if (resolver === promiseRawSymbol) return; | 31 if (resolver === promiseRawSymbol) return; |
31 if (!%_IsConstructCall()) throw MakeTypeError(kNotAPromise, this); | 32 if (!%_IsConstructCall()) throw MakeTypeError(kNotAPromise, this); |
32 if (!IS_SPEC_FUNCTION(resolver)) | 33 if (!IS_SPEC_FUNCTION(resolver)) |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 // handler somewhere down the promise chain. For this, we do a depth-first | 355 // handler somewhere down the promise chain. For this, we do a depth-first |
355 // search for a reject handler that's not the default PromiseIdRejectHandler. | 356 // search for a reject handler that's not the default PromiseIdRejectHandler. |
356 function PromiseHasUserDefinedRejectHandler() { | 357 function PromiseHasUserDefinedRejectHandler() { |
357 return PromiseHasUserDefinedRejectHandlerRecursive(this); | 358 return PromiseHasUserDefinedRejectHandlerRecursive(this); |
358 }; | 359 }; |
359 | 360 |
360 // ------------------------------------------------------------------- | 361 // ------------------------------------------------------------------- |
361 // Install exported functions. | 362 // Install exported functions. |
362 | 363 |
363 %AddNamedProperty(global, 'Promise', GlobalPromise, DONT_ENUM); | 364 %AddNamedProperty(global, 'Promise', GlobalPromise, DONT_ENUM); |
364 %AddNamedProperty(GlobalPromise.prototype, symbolToStringTag, "Promise", | 365 %AddNamedProperty(GlobalPromise.prototype, toStringTagSymbol, "Promise", |
365 DONT_ENUM | READ_ONLY); | 366 DONT_ENUM | READ_ONLY); |
366 | 367 |
367 utils.InstallFunctions(GlobalPromise, DONT_ENUM, [ | 368 utils.InstallFunctions(GlobalPromise, DONT_ENUM, [ |
368 "defer", PromiseDeferred, | 369 "defer", PromiseDeferred, |
369 "accept", PromiseResolved, | 370 "accept", PromiseResolved, |
370 "reject", PromiseRejected, | 371 "reject", PromiseRejected, |
371 "all", PromiseAll, | 372 "all", PromiseAll, |
372 "race", PromiseRace, | 373 "race", PromiseRace, |
373 "resolve", PromiseCast | 374 "resolve", PromiseCast |
374 ]); | 375 ]); |
375 | 376 |
376 utils.InstallFunctions(GlobalPromise.prototype, DONT_ENUM, [ | 377 utils.InstallFunctions(GlobalPromise.prototype, DONT_ENUM, [ |
377 "chain", PromiseChain, | 378 "chain", PromiseChain, |
378 "then", PromiseThen, | 379 "then", PromiseThen, |
379 "catch", PromiseCatch | 380 "catch", PromiseCatch |
380 ]); | 381 ]); |
381 | 382 |
382 %InstallToContext([ | 383 %InstallToContext([ |
383 "promise_catch", PromiseCatch, | 384 "promise_catch", PromiseCatch, |
384 "promise_chain", PromiseChain, | 385 "promise_chain", PromiseChain, |
385 "promise_create", PromiseCreate, | 386 "promise_create", PromiseCreate, |
386 "promise_has_user_defined_reject_handler", PromiseHasUserDefinedRejectHandler, | 387 "promise_has_user_defined_reject_handler", PromiseHasUserDefinedRejectHandler, |
387 "promise_reject", PromiseReject, | 388 "promise_reject", PromiseReject, |
388 "promise_resolve", PromiseResolve, | 389 "promise_resolve", PromiseResolve, |
389 "promise_then", PromiseThen, | 390 "promise_then", PromiseThen, |
390 ]); | 391 ]); |
391 | 392 |
392 }) | 393 }) |
OLD | NEW |