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

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

Issue 2350363002: Make Promise.all/Promise.race catch prediction conditional on DevTools (Closed)
Patch Set: Created 4 years, 3 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/es6/debug-promises/promise-all-uncaught.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
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 } 473 }
474 474
475 // false debugEvent so that forwarding the rejection through all does not 475 // false debugEvent so that forwarding the rejection through all does not
476 // trigger redundant ExceptionEvents 476 // trigger redundant ExceptionEvents
477 var deferred = NewPromiseCapability(this, false); 477 var deferred = NewPromiseCapability(this, false);
478 var resolutions = new InternalArray(); 478 var resolutions = new InternalArray();
479 var count; 479 var count;
480 480
481 // For catch prediction, don't treat the .then calls as handling it; 481 // For catch prediction, don't treat the .then calls as handling it;
482 // instead, recurse outwards. 482 // instead, recurse outwards.
483 SET_PRIVATE(deferred.reject, promiseForwardingHandlerSymbol, true); 483 var instrumenting = DEBUG_IS_ACTIVE;
484 if (instrumenting) {
485 SET_PRIVATE(deferred.reject, promiseForwardingHandlerSymbol, true);
486 }
484 487
485 function CreateResolveElementFunction(index, values, promiseCapability) { 488 function CreateResolveElementFunction(index, values, promiseCapability) {
486 var alreadyCalled = false; 489 var alreadyCalled = false;
487 return (x) => { 490 return (x) => {
488 if (alreadyCalled === true) return; 491 if (alreadyCalled === true) return;
489 alreadyCalled = true; 492 alreadyCalled = true;
490 values[index] = x; 493 values[index] = x;
491 if (--count === 0) { 494 if (--count === 0) {
492 var valuesArray = []; 495 var valuesArray = [];
493 %MoveArrayContents(values, valuesArray); 496 %MoveArrayContents(values, valuesArray);
494 %_Call(promiseCapability.resolve, UNDEFINED, valuesArray); 497 %_Call(promiseCapability.resolve, UNDEFINED, valuesArray);
495 } 498 }
496 }; 499 };
497 } 500 }
498 501
499 try { 502 try {
500 var i = 0; 503 var i = 0;
501 count = 1; 504 count = 1;
502 for (var value of iterable) { 505 for (var value of iterable) {
503 var nextPromise = this.resolve(value); 506 var nextPromise = this.resolve(value);
504 ++count; 507 ++count;
505 var throwawayPromise = nextPromise.then( 508 var throwawayPromise = nextPromise.then(
506 CreateResolveElementFunction(i, resolutions, deferred), 509 CreateResolveElementFunction(i, resolutions, deferred),
507 deferred.reject); 510 deferred.reject);
508 // For catch prediction, mark that rejections here are semantically 511 // For catch prediction, mark that rejections here are semantically
509 // handled by the combined Promise. 512 // handled by the combined Promise.
510 if (IsPromise(throwawayPromise)) { 513 if (instrumenting && IsPromise(throwawayPromise)) {
511 SET_PRIVATE(throwawayPromise, promiseHandledBySymbol, deferred.promise); 514 SET_PRIVATE(throwawayPromise, promiseHandledBySymbol, deferred.promise);
512 } 515 }
513 ++i; 516 ++i;
514 } 517 }
515 518
516 // 6.d 519 // 6.d
517 if (--count === 0) { 520 if (--count === 0) {
518 var valuesArray = []; 521 var valuesArray = [];
519 %MoveArrayContents(resolutions, valuesArray); 522 %MoveArrayContents(resolutions, valuesArray);
520 %_Call(deferred.resolve, UNDEFINED, valuesArray); 523 %_Call(deferred.resolve, UNDEFINED, valuesArray);
(...skipping 11 matching lines...) Expand all
532 if (!IS_RECEIVER(this)) { 535 if (!IS_RECEIVER(this)) {
533 throw %make_type_error(kCalledOnNonObject, PromiseRace); 536 throw %make_type_error(kCalledOnNonObject, PromiseRace);
534 } 537 }
535 538
536 // false debugEvent so that forwarding the rejection through race does not 539 // false debugEvent so that forwarding the rejection through race does not
537 // trigger redundant ExceptionEvents 540 // trigger redundant ExceptionEvents
538 var deferred = NewPromiseCapability(this, false); 541 var deferred = NewPromiseCapability(this, false);
539 542
540 // For catch prediction, don't treat the .then calls as handling it; 543 // For catch prediction, don't treat the .then calls as handling it;
541 // instead, recurse outwards. 544 // instead, recurse outwards.
542 SET_PRIVATE(deferred.reject, promiseForwardingHandlerSymbol, true); 545 var instrumenting = DEBUG_IS_ACTIVE;
546 if (instrumenting) {
547 SET_PRIVATE(deferred.reject, promiseForwardingHandlerSymbol, true);
548 }
543 549
544 try { 550 try {
545 for (var value of iterable) { 551 for (var value of iterable) {
546 var throwawayPromise = this.resolve(value).then(deferred.resolve, 552 var throwawayPromise = this.resolve(value).then(deferred.resolve,
547 deferred.reject); 553 deferred.reject);
548 // For catch prediction, mark that rejections here are semantically 554 // For catch prediction, mark that rejections here are semantically
549 // handled by the combined Promise. 555 // handled by the combined Promise.
550 if (IsPromise(throwawayPromise)) { 556 if (instrumenting && IsPromise(throwawayPromise)) {
551 SET_PRIVATE(throwawayPromise, promiseHandledBySymbol, deferred.promise); 557 SET_PRIVATE(throwawayPromise, promiseHandledBySymbol, deferred.promise);
552 } 558 }
553 } 559 }
554 } catch (e) { 560 } catch (e) {
555 deferred.reject(e) 561 deferred.reject(e)
556 } 562 }
557 return deferred.promise; 563 return deferred.promise;
558 } 564 }
559 565
560 566
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 to.PromiseThen = PromiseThen; 673 to.PromiseThen = PromiseThen;
668 674
669 to.GlobalPromise = GlobalPromise; 675 to.GlobalPromise = GlobalPromise;
670 to.NewPromiseCapability = NewPromiseCapability; 676 to.NewPromiseCapability = NewPromiseCapability;
671 to.PerformPromiseThen = PerformPromiseThen; 677 to.PerformPromiseThen = PerformPromiseThen;
672 to.ResolvePromise = ResolvePromise; 678 to.ResolvePromise = ResolvePromise;
673 to.RejectPromise = RejectPromise; 679 to.RejectPromise = RejectPromise;
674 }); 680 });
675 681
676 }) 682 })
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/es6/debug-promises/promise-all-uncaught.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698