Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: src/js/promise.js

Issue 1577223002: Add @@species/better subclassing support to Promises (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | test/mjsunit/harmony/promise-species.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 SpeciesConstructor;
26 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); 27 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol");
27 28
28 utils.Import(function(from) { 29 utils.Import(function(from) {
29 MakeTypeError = from.MakeTypeError; 30 MakeTypeError = from.MakeTypeError;
31 SpeciesConstructor = from.SpeciesConstructor;
30 }); 32 });
31 33
32 // ------------------------------------------------------------------- 34 // -------------------------------------------------------------------
33 35
34 // Status values: 0 = pending, +1 = resolved, -1 = rejected 36 // Status values: 0 = pending, +1 = resolved, -1 = rejected
35 var lastMicrotaskId = 0; 37 var lastMicrotaskId = 0;
36 38
37 function CreateResolvingFunctions(promise) { 39 function CreateResolvingFunctions(promise) {
38 var alreadyResolved = false; 40 var alreadyResolved = false;
39 41
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 } 276 }
275 277
276 // Multi-unwrapped chaining with thenable coercion. 278 // Multi-unwrapped chaining with thenable coercion.
277 279
278 function PromiseThen(onResolve, onReject) { 280 function PromiseThen(onResolve, onReject) {
279 var status = GET_PRIVATE(this, promiseStatusSymbol); 281 var status = GET_PRIVATE(this, promiseStatusSymbol);
280 if (IS_UNDEFINED(status)) { 282 if (IS_UNDEFINED(status)) {
281 throw MakeTypeError(kNotAPromise, this); 283 throw MakeTypeError(kNotAPromise, this);
282 } 284 }
283 285
284 var constructor = this.constructor; 286 var constructor = SpeciesConstructor(this, GlobalPromise);
285 onResolve = IS_CALLABLE(onResolve) ? onResolve : PromiseIdResolveHandler; 287 onResolve = IS_CALLABLE(onResolve) ? onResolve : PromiseIdResolveHandler;
286 onReject = IS_CALLABLE(onReject) ? onReject : PromiseIdRejectHandler; 288 onReject = IS_CALLABLE(onReject) ? onReject : PromiseIdRejectHandler;
287 var deferred = NewPromiseCapability(constructor); 289 var deferred = NewPromiseCapability(constructor);
288 switch (status) { 290 switch (status) {
289 case 0: // Pending 291 case 0: // Pending
290 GET_PRIVATE(this, promiseOnResolveSymbol).push(onResolve, deferred); 292 GET_PRIVATE(this, promiseOnResolveSymbol).push(onResolve, deferred);
291 GET_PRIVATE(this, promiseOnRejectSymbol).push(onReject, deferred); 293 GET_PRIVATE(this, promiseOnRejectSymbol).push(onReject, deferred);
292 break; 294 break;
293 case +1: // Resolved 295 case +1: // Resolved
294 PromiseEnqueue(GET_PRIVATE(this, promiseValueSymbol), 296 PromiseEnqueue(GET_PRIVATE(this, promiseValueSymbol),
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 [PromiseChain, PromiseDeferred, PromiseResolved].forEach( 477 [PromiseChain, PromiseDeferred, PromiseResolved].forEach(
476 fn => %FunctionRemovePrototype(fn)); 478 fn => %FunctionRemovePrototype(fn));
477 479
478 utils.Export(function(to) { 480 utils.Export(function(to) {
479 to.PromiseChain = PromiseChain; 481 to.PromiseChain = PromiseChain;
480 to.PromiseDeferred = PromiseDeferred; 482 to.PromiseDeferred = PromiseDeferred;
481 to.PromiseResolved = PromiseResolved; 483 to.PromiseResolved = PromiseResolved;
482 }); 484 });
483 485
484 }) 486 })
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/harmony/promise-species.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698