| 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 import 'dart:async'; | 5 import 'dart:async'; |
| 6 import "package:expect/expect.dart"; | 6 import "package:expect/expect.dart"; |
| 7 import "package:async_helper/async_helper.dart"; | 7 import "package:async_helper/async_helper.dart"; |
| 8 import "package:compiler/src/dart2jslib.dart"; | 8 import "package:compiler/src/dart2jslib.dart"; |
| 9 import "package:compiler/src/elements/elements.dart"; | 9 import "package:compiler/src/elements/elements.dart"; |
| 10 import "package:compiler/src/tree/tree.dart"; | 10 import "package:compiler/src/tree/tree.dart"; |
| 11 import "package:compiler/src/types/types.dart"; | |
| 12 import "mock_compiler.dart"; | 11 import "mock_compiler.dart"; |
| 13 import "mock_libraries.dart"; | 12 import "mock_libraries.dart"; |
| 14 import 'package:compiler/src/elements/modelx.dart'; | 13 import 'package:compiler/src/elements/modelx.dart'; |
| 15 | 14 |
| 16 Future<Compiler> applyPatch(String script, String patch, | 15 Future<Compiler> applyPatch(String script, String patch, |
| 17 {bool analyzeAll: false, | 16 {bool analyzeAll: false, |
| 18 bool analyzeOnly: false, | 17 bool analyzeOnly: false, |
| 19 bool runCompiler: false, | 18 bool runCompiler: false, |
| 20 String main: "", | 19 String main: "", |
| 21 String patchVersion}) { | 20 String patchVersion}) { |
| (...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 checkHasBody: true, expectIsRegular: true); | 861 checkHasBody: true, expectIsRegular: true); |
| 863 | 862 |
| 864 ensure(compiler, "clear", cls.lookupLocalMember, | 863 ensure(compiler, "clear", cls.lookupLocalMember, |
| 865 checkHasBody: true, expectIsPatched: true); | 864 checkHasBody: true, expectIsPatched: true); |
| 866 | 865 |
| 867 compiler.phase = Compiler.PHASE_DONE_RESOLVING; | 866 compiler.phase = Compiler.PHASE_DONE_RESOLVING; |
| 868 | 867 |
| 869 // Check that a method just in the patch class is a target for a | 868 // Check that a method just in the patch class is a target for a |
| 870 // typed selector. | 869 // typed selector. |
| 871 Selector selector = new Selector.call('method', compiler.coreLibrary, 0); | 870 Selector selector = new Selector.call('method', compiler.coreLibrary, 0); |
| 872 TypeMask typeMask = new TypeMask.exact(cls, world); | 871 TypedSelector typedSelector = new TypedSelector.exact(cls, selector, world); |
| 873 FunctionElement method = cls.implementation.lookupLocalMember('method'); | 872 FunctionElement method = cls.implementation.lookupLocalMember('method'); |
| 874 method.computeType(compiler); | 873 method.computeSignature(compiler); |
| 875 Expect.isTrue(selector.applies(method, world)); | 874 Expect.isTrue(selector.applies(method, world)); |
| 876 Expect.isTrue(typeMask.canHit(method, selector, world)); | 875 Expect.isTrue(typedSelector.applies(method, world)); |
| 877 | 876 |
| 878 // Check that the declaration method in the declaration class is a target | 877 // Check that the declaration method in the declaration class is a target |
| 879 // for a typed selector. | 878 // for a typed selector. |
| 880 selector = new Selector.call('clear', compiler.coreLibrary, 0); | 879 selector = new Selector.call('clear', compiler.coreLibrary, 0); |
| 881 typeMask = new TypeMask.exact(cls, world); | 880 typedSelector = new TypedSelector.exact(cls, selector, world); |
| 882 method = cls.lookupLocalMember('clear'); | 881 method = cls.lookupLocalMember('clear'); |
| 883 method.computeType(compiler); | 882 method.computeSignature(compiler); |
| 884 Expect.isTrue(selector.applies(method, world)); | 883 Expect.isTrue(selector.applies(method, world)); |
| 885 Expect.isTrue(typeMask.canHit(method, selector, world)); | 884 Expect.isTrue(typedSelector.applies(method, world)); |
| 886 | 885 |
| 887 // Check that the declaration method in the declaration class is a target | 886 // Check that the declaration method in the declaration class is a target |
| 888 // for a typed selector on a subclass. | 887 // for a typed selector on a subclass. |
| 889 cls = ensure(compiler, "B", compiler.coreLibrary.find); | 888 cls = ensure(compiler, "B", compiler.coreLibrary.find); |
| 890 cls.ensureResolved(compiler); | 889 cls.ensureResolved(compiler); |
| 891 typeMask = new TypeMask.exact(cls, world); | 890 typedSelector = new TypedSelector.exact(cls, selector, world); |
| 892 Expect.isTrue(selector.applies(method, world)); | 891 Expect.isTrue(selector.applies(method, world)); |
| 893 Expect.isTrue(typeMask.canHit(method, selector, world)); | 892 Expect.isTrue(typedSelector.applies(method, world)); |
| 894 })); | 893 })); |
| 895 } | 894 } |
| 896 | 895 |
| 897 void testAnalyzeAllInjectedMembers() { | 896 void testAnalyzeAllInjectedMembers() { |
| 898 void expect(String patchText, [expectedWarnings]) { | 897 void expect(String patchText, [expectedWarnings]) { |
| 899 if (expectedWarnings == null) expectedWarnings = []; | 898 if (expectedWarnings == null) expectedWarnings = []; |
| 900 if (expectedWarnings is! List) { | 899 if (expectedWarnings is! List) { |
| 901 expectedWarnings = <MessageKind>[expectedWarnings]; | 900 expectedWarnings = <MessageKind>[expectedWarnings]; |
| 902 } | 901 } |
| 903 | 902 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 947 B.patchTarget() : super(); | 946 B.patchTarget() : super(); |
| 948 factory B.reflectBack() = B.originTarget; | 947 factory B.reflectBack() = B.originTarget; |
| 949 } | 948 } |
| 950 """; | 949 """; |
| 951 | 950 |
| 952 asyncTest(() => applyPatch(origin, patch, analyzeAll: true, | 951 asyncTest(() => applyPatch(origin, patch, analyzeAll: true, |
| 953 analyzeOnly: true, runCompiler: true).then((compiler) { | 952 analyzeOnly: true, runCompiler: true).then((compiler) { |
| 954 ClassElement clsA = compiler.coreLibrary.find("A"); | 953 ClassElement clsA = compiler.coreLibrary.find("A"); |
| 955 ClassElement clsB = compiler.coreLibrary.find("B"); | 954 ClassElement clsB = compiler.coreLibrary.find("B"); |
| 956 | 955 |
| 957 ConstructorElement forward = clsA.lookupConstructor("forward"); | 956 Selector forwardCall = new Selector.callConstructor("forward", |
| 957 compiler.coreLibrary); |
| 958 ConstructorElement forward = clsA.lookupConstructor(forwardCall); |
| 958 ConstructorElement target = forward.effectiveTarget; | 959 ConstructorElement target = forward.effectiveTarget; |
| 959 Expect.isTrue(target.isPatch); | 960 Expect.isTrue(target.isPatch); |
| 960 Expect.equals("patchTarget", target.name); | 961 Expect.equals("patchTarget", target.name); |
| 961 | 962 |
| 962 ConstructorElement forwardTwo = clsA.lookupConstructor("forwardTwo"); | 963 Selector forwardTwoCall = new Selector.callConstructor("forwardTwo", |
| 964 compiler.coreLibrary); |
| 965 ConstructorElement forwardTwo = clsA.lookupConstructor(forwardTwoCall); |
| 963 target = forwardTwo.effectiveTarget; | 966 target = forwardTwo.effectiveTarget; |
| 964 Expect.isFalse(forwardTwo.isErroneous); | 967 Expect.isFalse(forwardTwo.isErroneous); |
| 965 Expect.isFalse(target.isPatch); | 968 Expect.isFalse(target.isPatch); |
| 966 Expect.equals("originTarget", target.name); | 969 Expect.equals("originTarget", target.name); |
| 967 })); | 970 })); |
| 968 } | 971 } |
| 969 | 972 |
| 970 void testTypecheckPatchedMembers() { | 973 void testTypecheckPatchedMembers() { |
| 971 String originText = "external void method();"; | 974 String originText = "external void method();"; |
| 972 String patchText = """ | 975 String patchText = """ |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1015 testPatchNoSetter(); | 1018 testPatchNoSetter(); |
| 1016 testPatchNonFunction(); | 1019 testPatchNonFunction(); |
| 1017 | 1020 |
| 1018 testPatchAndSelector(); | 1021 testPatchAndSelector(); |
| 1019 | 1022 |
| 1020 testEffectiveTarget(); /// bug: ok | 1023 testEffectiveTarget(); /// bug: ok |
| 1021 | 1024 |
| 1022 testAnalyzeAllInjectedMembers(); | 1025 testAnalyzeAllInjectedMembers(); |
| 1023 testTypecheckPatchedMembers(); | 1026 testTypecheckPatchedMembers(); |
| 1024 } | 1027 } |
| OLD | NEW |