| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 library universe; | 5 library universe; |
| 6 | 6 |
| 7 import '../elements/elements.dart'; | 7 import '../elements/elements.dart'; |
| 8 import '../dart2jslib.dart'; | 8 import '../dart2jslib.dart'; |
| 9 import '../dart_types.dart'; | 9 import '../dart_types.dart'; |
| 10 import '../types/types.dart'; | 10 import '../types/types.dart'; |
| (...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 837 => new TypedSelector(new TypeMask.subclass(base, world), | 837 => new TypedSelector(new TypeMask.subclass(base, world), |
| 838 selector, world); | 838 selector, world); |
| 839 | 839 |
| 840 factory TypedSelector.subtype( | 840 factory TypedSelector.subtype( |
| 841 ClassElement base, Selector selector, World world) | 841 ClassElement base, Selector selector, World world) |
| 842 => new TypedSelector(new TypeMask.subtype(base, world), | 842 => new TypedSelector(new TypeMask.subtype(base, world), |
| 843 selector, world); | 843 selector, world); |
| 844 | 844 |
| 845 bool appliesUnnamed(Element element, World world) { | 845 bool appliesUnnamed(Element element, World world) { |
| 846 assert(sameNameHack(element, world)); | 846 assert(sameNameHack(element, world)); |
| 847 // [TypedSelector] are only used after resolution. |
| 848 if (!element.isClassMember) return false; |
| 849 |
| 850 // A closure can be called through any typed selector: |
| 851 // class A { |
| 852 // get foo => () => 42; |
| 853 // bar() => foo(); // The call to 'foo' is a typed selector. |
| 854 // } |
| 855 if (element.enclosingClass.isClosure) { |
| 856 return appliesUntyped(element, world); |
| 857 } |
| 858 |
| 847 if (!mask.canHit(element, this, world)) return false; | 859 if (!mask.canHit(element, this, world)) return false; |
| 848 return appliesUntyped(element, world); | 860 return appliesUntyped(element, world); |
| 849 } | 861 } |
| 850 | 862 |
| 851 Selector extendIfReachesAll(Compiler compiler) { | 863 Selector extendIfReachesAll(Compiler compiler) { |
| 852 bool canReachAll = compiler.enabledInvokeOn | 864 bool canReachAll = compiler.enabledInvokeOn |
| 853 && mask.needsNoSuchMethodHandling(this, compiler.world); | 865 && mask.needsNoSuchMethodHandling(this, compiler.world); |
| 854 return canReachAll | 866 return canReachAll |
| 855 ? new TypedSelector( | 867 ? new TypedSelector( |
| 856 compiler.typesTask.dynamicType, this, compiler.world) | 868 compiler.typesTask.dynamicType, this, compiler.world) |
| 857 : this; | 869 : this; |
| 858 } | 870 } |
| 859 } | 871 } |
| OLD | NEW |