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

Side by Side Diff: sdk/lib/async/zone.dart

Issue 1099233002: Don't rely on Function being callable in static analysis. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « sdk/lib/async/async_error.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.async; 5 part of dart.async;
6 6
7 typedef dynamic ZoneCallback(); 7 typedef dynamic ZoneCallback();
8 typedef dynamic ZoneUnaryCallback(arg); 8 typedef dynamic ZoneUnaryCallback(arg);
9 typedef dynamic ZoneBinaryCallback(arg1, arg2); 9 typedef dynamic ZoneBinaryCallback(arg1, arg2);
10 10
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 } 484 }
485 485
486 class _ZoneDelegate implements ZoneDelegate { 486 class _ZoneDelegate implements ZoneDelegate {
487 final _Zone _delegationTarget; 487 final _Zone _delegationTarget;
488 488
489 _ZoneDelegate(this._delegationTarget); 489 _ZoneDelegate(this._delegationTarget);
490 490
491 dynamic handleUncaughtError(Zone zone, error, StackTrace stackTrace) { 491 dynamic handleUncaughtError(Zone zone, error, StackTrace stackTrace) {
492 _ZoneFunction implementation = _delegationTarget._handleUncaughtError; 492 _ZoneFunction implementation = _delegationTarget._handleUncaughtError;
493 _Zone implZone = implementation.zone; 493 _Zone implZone = implementation.zone;
494 return (implementation.function)( 494 HandleUncaughtErrorHandler handler = implementation.function;
495 return handler(
495 implZone, _parentDelegate(implZone), zone, error, stackTrace); 496 implZone, _parentDelegate(implZone), zone, error, stackTrace);
496 } 497 }
497 498
498 dynamic run(Zone zone, f()) { 499 dynamic run(Zone zone, f()) {
499 _ZoneFunction implementation = _delegationTarget._run; 500 _ZoneFunction implementation = _delegationTarget._run;
500 _Zone implZone = implementation.zone; 501 _Zone implZone = implementation.zone;
501 return (implementation.function)( 502 RunHandler handler = implementation.function;
502 implZone, _parentDelegate(implZone), zone, f); 503 return handler(implZone, _parentDelegate(implZone), zone, f);
503 } 504 }
504 505
505 dynamic runUnary(Zone zone, f(arg), arg) { 506 dynamic runUnary(Zone zone, f(arg), arg) {
506 _ZoneFunction implementation = _delegationTarget._runUnary; 507 _ZoneFunction implementation = _delegationTarget._runUnary;
507 _Zone implZone = implementation.zone; 508 _Zone implZone = implementation.zone;
508 return (implementation.function)( 509 RunUnaryHandler handler = implementation.function;
510 return handler(
509 implZone, _parentDelegate(implZone), zone, f, arg); 511 implZone, _parentDelegate(implZone), zone, f, arg);
510 } 512 }
511 513
512 dynamic runBinary(Zone zone, f(arg1, arg2), arg1, arg2) { 514 dynamic runBinary(Zone zone, f(arg1, arg2), arg1, arg2) {
513 _ZoneFunction implementation = _delegationTarget._runBinary; 515 _ZoneFunction implementation = _delegationTarget._runBinary;
514 _Zone implZone = implementation.zone; 516 _Zone implZone = implementation.zone;
515 return (implementation.function)( 517 RunBinaryHandler handler = implementation.function;
518 return handler(
516 implZone, _parentDelegate(implZone), zone, f, arg1, arg2); 519 implZone, _parentDelegate(implZone), zone, f, arg1, arg2);
517 } 520 }
518 521
519 ZoneCallback registerCallback(Zone zone, f()) { 522 ZoneCallback registerCallback(Zone zone, f()) {
520 _ZoneFunction implementation = _delegationTarget._registerCallback; 523 _ZoneFunction implementation = _delegationTarget._registerCallback;
521 _Zone implZone = implementation.zone; 524 _Zone implZone = implementation.zone;
522 return (implementation.function)( 525 RegisterCallbackHandler handler = implementation.function;
523 implZone, _parentDelegate(implZone), zone, f); 526 return handler(implZone, _parentDelegate(implZone), zone, f);
524 } 527 }
525 528
526 ZoneUnaryCallback registerUnaryCallback(Zone zone, f(arg)) { 529 ZoneUnaryCallback registerUnaryCallback(Zone zone, f(arg)) {
527 _ZoneFunction implementation = _delegationTarget._registerUnaryCallback; 530 _ZoneFunction implementation = _delegationTarget._registerUnaryCallback;
528 _Zone implZone = implementation.zone; 531 _Zone implZone = implementation.zone;
529 return (implementation.function)( 532 RegisterUnaryCallbackHandler handler = implementation.function;
530 implZone, _parentDelegate(implZone), zone, f); 533 return handler(implZone, _parentDelegate(implZone), zone, f);
531 } 534 }
532 535
533 ZoneBinaryCallback registerBinaryCallback(Zone zone, f(arg1, arg2)) { 536 ZoneBinaryCallback registerBinaryCallback(Zone zone, f(arg1, arg2)) {
534 _ZoneFunction implementation = _delegationTarget._registerBinaryCallback; 537 _ZoneFunction implementation = _delegationTarget._registerBinaryCallback;
535 _Zone implZone = implementation.zone; 538 _Zone implZone = implementation.zone;
536 return (implementation.function)( 539 RegisterBinaryCallbackHandler handler = implementation.function;
537 implZone, _parentDelegate(implZone), zone, f); 540 return handler(implZone, _parentDelegate(implZone), zone, f);
538 } 541 }
539 542
540 AsyncError errorCallback(Zone zone, Object error, StackTrace stackTrace) { 543 AsyncError errorCallback(Zone zone, Object error, StackTrace stackTrace) {
541 _ZoneFunction implementation = _delegationTarget._errorCallback; 544 _ZoneFunction implementation = _delegationTarget._errorCallback;
542 _Zone implZone = implementation.zone; 545 _Zone implZone = implementation.zone;
543 if (identical(implZone, _ROOT_ZONE)) return null; 546 if (identical(implZone, _ROOT_ZONE)) return null;
544 return (implementation.function)(implZone, _parentDelegate(implZone), zone, 547 ErrorCallbackHandler handler = implementation.function;
545 error, stackTrace); 548 return handler(implZone, _parentDelegate(implZone), zone,
549 error, stackTrace);
546 } 550 }
547 551
548 void scheduleMicrotask(Zone zone, f()) { 552 void scheduleMicrotask(Zone zone, f()) {
549 _ZoneFunction implementation = _delegationTarget._scheduleMicrotask; 553 _ZoneFunction implementation = _delegationTarget._scheduleMicrotask;
550 _Zone implZone = implementation.zone; 554 _Zone implZone = implementation.zone;
551 (implementation.function)( 555 ScheduleMicrotaskHandler handler = implementation.function;
552 implZone, _parentDelegate(implZone), zone, f); 556 handler(implZone, _parentDelegate(implZone), zone, f);
553 } 557 }
554 558
555 Timer createTimer(Zone zone, Duration duration, void f()) { 559 Timer createTimer(Zone zone, Duration duration, void f()) {
556 _ZoneFunction implementation = _delegationTarget._createTimer; 560 _ZoneFunction implementation = _delegationTarget._createTimer;
557 _Zone implZone = implementation.zone; 561 _Zone implZone = implementation.zone;
558 return (implementation.function)( 562 CreateTimerHandler handler = implementation.function;
559 implZone, _parentDelegate(implZone), zone, duration, f); 563 return handler(implZone, _parentDelegate(implZone), zone, duration, f);
560 } 564 }
561 565
562 Timer createPeriodicTimer(Zone zone, Duration period, void f(Timer timer)) { 566 Timer createPeriodicTimer(Zone zone, Duration period, void f(Timer timer)) {
563 _ZoneFunction implementation = _delegationTarget._createPeriodicTimer; 567 _ZoneFunction implementation = _delegationTarget._createPeriodicTimer;
564 _Zone implZone = implementation.zone; 568 _Zone implZone = implementation.zone;
565 return (implementation.function)( 569 CreatePeriodicTimerHandler handler = implementation.function;
566 implZone, _parentDelegate(implZone), zone, period, f); 570 return handler(implZone, _parentDelegate(implZone), zone, period, f);
567 } 571 }
568 572
569 void print(Zone zone, String line) { 573 void print(Zone zone, String line) {
570 _ZoneFunction implementation = _delegationTarget._print; 574 _ZoneFunction implementation = _delegationTarget._print;
571 _Zone implZone = implementation.zone; 575 _Zone implZone = implementation.zone;
572 (implementation.function)( 576 PrintHandler handler = implementation.function;
573 implZone, _parentDelegate(implZone), zone, line); 577 handler(implZone, _parentDelegate(implZone), zone, line);
574 } 578 }
575 579
576 Zone fork(Zone zone, ZoneSpecification specification, 580 Zone fork(Zone zone, ZoneSpecification specification,
577 Map zoneValues) { 581 Map zoneValues) {
578 _ZoneFunction implementation = _delegationTarget._fork; 582 _ZoneFunction implementation = _delegationTarget._fork;
579 _Zone implZone = implementation.zone; 583 _Zone implZone = implementation.zone;
580 return (implementation.function)( 584 ForkHandler handler = implementation.function;
585 return handler(
581 implZone, _parentDelegate(implZone), zone, specification, zoneValues); 586 implZone, _parentDelegate(implZone), zone, specification, zoneValues);
582 } 587 }
583 } 588 }
584 589
585 590
586 /** 591 /**
587 * Base class for Zone implementations. 592 * Base class for Zone implementations.
588 */ 593 */
589 abstract class _Zone implements Zone { 594 abstract class _Zone implements Zone {
590 const _Zone(); 595 const _Zone();
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 assert(this == _ROOT_ZONE); 774 assert(this == _ROOT_ZONE);
770 return null; 775 return null;
771 } 776 }
772 777
773 // Methods that can be customized by the zone specification. 778 // Methods that can be customized by the zone specification.
774 779
775 dynamic handleUncaughtError(error, StackTrace stackTrace) { 780 dynamic handleUncaughtError(error, StackTrace stackTrace) {
776 _ZoneFunction implementation = this._handleUncaughtError; 781 _ZoneFunction implementation = this._handleUncaughtError;
777 assert(implementation != null); 782 assert(implementation != null);
778 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 783 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
779 return (implementation.function)( 784 HandleUncaughtErrorHandler handler = implementation.function;
785 return handler(
780 implementation.zone, parentDelegate, this, error, stackTrace); 786 implementation.zone, parentDelegate, this, error, stackTrace);
781 } 787 }
782 788
783 Zone fork({ZoneSpecification specification, Map zoneValues}) { 789 Zone fork({ZoneSpecification specification, Map zoneValues}) {
784 _ZoneFunction implementation = this._fork; 790 _ZoneFunction implementation = this._fork;
785 assert(implementation != null); 791 assert(implementation != null);
786 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 792 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
787 return (implementation.function)( 793 ForkHandler handler = implementation.function;
788 implementation.zone, parentDelegate, this, 794 return handler(implementation.zone, parentDelegate, this,
789 specification, zoneValues); 795 specification, zoneValues);
790 } 796 }
791 797
792 dynamic run(f()) { 798 dynamic run(f()) {
793 _ZoneFunction implementation = this._run; 799 _ZoneFunction implementation = this._run;
794 assert(implementation != null); 800 assert(implementation != null);
795 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 801 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
796 return (implementation.function)( 802 RunHandler handler = implementation.function;
797 implementation.zone, parentDelegate, this, f); 803 return handler(implementation.zone, parentDelegate, this, f);
798 } 804 }
799 805
800 dynamic runUnary(f(arg), arg) { 806 dynamic runUnary(f(arg), arg) {
801 _ZoneFunction implementation = this._runUnary; 807 _ZoneFunction implementation = this._runUnary;
802 assert(implementation != null); 808 assert(implementation != null);
803 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 809 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
804 return (implementation.function)( 810 RunUnaryHandler handler = implementation.function;
805 implementation.zone, parentDelegate, this, f, arg); 811 return handler(implementation.zone, parentDelegate, this, f, arg);
806 } 812 }
807 813
808 dynamic runBinary(f(arg1, arg2), arg1, arg2) { 814 dynamic runBinary(f(arg1, arg2), arg1, arg2) {
809 _ZoneFunction implementation = this._runBinary; 815 _ZoneFunction implementation = this._runBinary;
810 assert(implementation != null); 816 assert(implementation != null);
811 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 817 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
812 return (implementation.function)( 818 RunBinaryHandler handler = implementation.function;
819 return handler(
813 implementation.zone, parentDelegate, this, f, arg1, arg2); 820 implementation.zone, parentDelegate, this, f, arg1, arg2);
814 } 821 }
815 822
816 ZoneCallback registerCallback(f()) { 823 ZoneCallback registerCallback(f()) {
817 _ZoneFunction implementation = this._registerCallback; 824 _ZoneFunction implementation = this._registerCallback;
818 assert(implementation != null); 825 assert(implementation != null);
819 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 826 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
820 return (implementation.function)( 827 RegisterCallbackHandler handler = implementation.function;
821 implementation.zone, parentDelegate, this, f); 828 return handler(implementation.zone, parentDelegate, this, f);
822 } 829 }
823 830
824 ZoneUnaryCallback registerUnaryCallback(f(arg)) { 831 ZoneUnaryCallback registerUnaryCallback(f(arg)) {
825 _ZoneFunction implementation = this._registerUnaryCallback; 832 _ZoneFunction implementation = this._registerUnaryCallback;
826 assert(implementation != null); 833 assert(implementation != null);
827 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 834 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
828 return (implementation.function)( 835 RegisterUnaryCallbackHandler handler = implementation.function;
829 implementation.zone, parentDelegate, this, f); 836 return handler(implementation.zone, parentDelegate, this, f);
830 } 837 }
831 838
832 ZoneBinaryCallback registerBinaryCallback(f(arg1, arg2)) { 839 ZoneBinaryCallback registerBinaryCallback(f(arg1, arg2)) {
833 _ZoneFunction implementation = this._registerBinaryCallback; 840 _ZoneFunction implementation = this._registerBinaryCallback;
834 assert(implementation != null); 841 assert(implementation != null);
835 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 842 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
836 return (implementation.function)( 843 RegisterBinaryCallbackHandler handler = implementation.function;
837 implementation.zone, parentDelegate, this, f); 844 return handler(implementation.zone, parentDelegate, this, f);
838 } 845 }
839 846
840 AsyncError errorCallback(Object error, StackTrace stackTrace) { 847 AsyncError errorCallback(Object error, StackTrace stackTrace) {
841 final _ZoneFunction implementation = this._errorCallback; 848 final _ZoneFunction implementation = this._errorCallback;
842 assert(implementation != null); 849 assert(implementation != null);
843 final Zone implementationZone = implementation.zone; 850 final Zone implementationZone = implementation.zone;
844 if (identical(implementationZone, _ROOT_ZONE)) return null; 851 if (identical(implementationZone, _ROOT_ZONE)) return null;
845 final ZoneDelegate parentDelegate = _parentDelegate(implementationZone); 852 final ZoneDelegate parentDelegate = _parentDelegate(implementationZone);
846 return (implementation.function)( 853 ErrorCallbackHandler handler = implementation.function;
854 return handler(
847 implementationZone, parentDelegate, this, error, stackTrace); 855 implementationZone, parentDelegate, this, error, stackTrace);
848 } 856 }
849 857
850 void scheduleMicrotask(void f()) { 858 void scheduleMicrotask(void f()) {
851 _ZoneFunction implementation = this._scheduleMicrotask; 859 _ZoneFunction implementation = this._scheduleMicrotask;
852 assert(implementation != null); 860 assert(implementation != null);
853 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 861 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
854 return (implementation.function)( 862 ScheduleMicrotaskHandler handler = implementation.function;
855 implementation.zone, parentDelegate, this, f); 863 return handler(implementation.zone, parentDelegate, this, f);
856 } 864 }
857 865
858 Timer createTimer(Duration duration, void f()) { 866 Timer createTimer(Duration duration, void f()) {
859 _ZoneFunction implementation = this._createTimer; 867 _ZoneFunction implementation = this._createTimer;
860 assert(implementation != null); 868 assert(implementation != null);
861 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 869 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
862 return (implementation.function)( 870 CreateTimerHandler handler = implementation.function;
863 implementation.zone, parentDelegate, this, duration, f); 871 return handler(implementation.zone, parentDelegate, this, duration, f);
864 } 872 }
865 873
866 Timer createPeriodicTimer(Duration duration, void f(Timer timer)) { 874 Timer createPeriodicTimer(Duration duration, void f(Timer timer)) {
867 _ZoneFunction implementation = this._createPeriodicTimer; 875 _ZoneFunction implementation = this._createPeriodicTimer;
868 assert(implementation != null); 876 assert(implementation != null);
869 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 877 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
870 return (implementation.function)( 878 CreatePeriodicTimerHandler handler = implementation.function;
879 return handler(
871 implementation.zone, parentDelegate, this, duration, f); 880 implementation.zone, parentDelegate, this, duration, f);
872 } 881 }
873 882
874 void print(String line) { 883 void print(String line) {
875 _ZoneFunction implementation = this._print; 884 _ZoneFunction implementation = this._print;
876 assert(implementation != null); 885 assert(implementation != null);
877 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone); 886 ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
878 return (implementation.function)( 887 PrintHandler handler = implementation.function;
879 implementation.zone, parentDelegate, this, line); 888 return handler(implementation.zone, parentDelegate, this, line);
880 } 889 }
881 } 890 }
882 891
883 void _rootHandleUncaughtError( 892 void _rootHandleUncaughtError(
884 Zone self, ZoneDelegate parent, Zone zone, error, StackTrace stackTrace) { 893 Zone self, ZoneDelegate parent, Zone zone, error, StackTrace stackTrace) {
885 _schedulePriorityAsyncCallback(() { 894 _schedulePriorityAsyncCallback(() {
886 throw new _UncaughtAsyncError(error, stackTrace); 895 throw new _UncaughtAsyncError(error, stackTrace);
887 }); 896 });
888 } 897 }
889 898
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
1246 handleUncaughtError: errorHandler); 1255 handleUncaughtError: errorHandler);
1247 } 1256 }
1248 Zone zone = Zone.current.fork(specification: zoneSpecification, 1257 Zone zone = Zone.current.fork(specification: zoneSpecification,
1249 zoneValues: zoneValues); 1258 zoneValues: zoneValues);
1250 if (onError != null) { 1259 if (onError != null) {
1251 return zone.runGuarded(body); 1260 return zone.runGuarded(body);
1252 } else { 1261 } else {
1253 return zone.run(body); 1262 return zone.run(body);
1254 } 1263 }
1255 } 1264 }
OLDNEW
« no previous file with comments | « sdk/lib/async/async_error.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698