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/types/types.dart'; | 8 import 'package:compiler/src/types/types.dart'; |
9 import 'package:compiler/src/inferrer/concrete_types_inferrer.dart'; | 9 import 'package:compiler/src/inferrer/concrete_types_inferrer.dart'; |
10 | 10 |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 * Checks that [: className#fieldName :]'s inferred type is the unknown | 137 * Checks that [: className#fieldName :]'s inferred type is the unknown |
138 * concrete type. | 138 * concrete type. |
139 */ | 139 */ |
140 void checkFieldHasUknownType(String className, String fieldName) { | 140 void checkFieldHasUknownType(String className, String fieldName) { |
141 Expect.isTrue( | 141 Expect.isTrue( |
142 inferrer.inferredFieldTypes[findField(className, fieldName)] | 142 inferrer.inferredFieldTypes[findField(className, fieldName)] |
143 .isUnknown()); | 143 .isUnknown()); |
144 } | 144 } |
145 | 145 |
146 /** Checks that the inferred type for [selector] is [mask]. */ | 146 /** Checks that the inferred type for [selector] is [mask]. */ |
147 void checkSelectorHasType(Selector selector, | 147 void checkSelectorHasType(Selector selector, TypeMask mask) { |
148 TypeMask mask, | 148 Expect.equals(mask, inferrer.getTypeOfSelector(selector)); |
149 TypeMask expectedMask) { | |
150 Expect.equals(expectedMask, inferrer.getTypeOfSelector(selector, mask)); | |
151 } | 149 } |
152 } | 150 } |
153 | 151 |
154 const String DYNAMIC = '"__dynamic_for_test"'; | 152 const String DYNAMIC = '"__dynamic_for_test"'; |
155 | 153 |
156 Future<AnalysisResult> analyze(String code, {int maxConcreteTypeSize: 1000}) { | 154 Future<AnalysisResult> analyze(String code, {int maxConcreteTypeSize: 1000}) { |
157 Uri uri = new Uri(scheme: 'dart', path: 'test'); | 155 Uri uri = new Uri(scheme: 'dart', path: 'test'); |
158 MockCompiler compiler = new MockCompiler.internal( | 156 MockCompiler compiler = new MockCompiler.internal( |
159 enableConcreteTypeInference: true, | 157 enableConcreteTypeInference: true, |
160 maxConcreteTypeSize: maxConcreteTypeSize); | 158 maxConcreteTypeSize: maxConcreteTypeSize); |
(...skipping 1482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1643 ClassElement c = findElement(result.compiler, 'C'); | 1641 ClassElement c = findElement(result.compiler, 'C'); |
1644 ClassElement xy = findElement(result.compiler, 'XY'); | 1642 ClassElement xy = findElement(result.compiler, 'XY'); |
1645 ClassElement x = findElement(result.compiler, 'X'); | 1643 ClassElement x = findElement(result.compiler, 'X'); |
1646 ClassElement y = findElement(result.compiler, 'Y'); | 1644 ClassElement y = findElement(result.compiler, 'Y'); |
1647 ClassElement z = findElement(result.compiler, 'Z'); | 1645 ClassElement z = findElement(result.compiler, 'Z'); |
1648 | 1646 |
1649 Selector foo = new Selector.call("foo", null, 0); | 1647 Selector foo = new Selector.call("foo", null, 0); |
1650 | 1648 |
1651 result.checkSelectorHasType( | 1649 result.checkSelectorHasType( |
1652 foo, | 1650 foo, |
1653 null, | |
1654 new TypeMask.unionOf([a, b, c] | 1651 new TypeMask.unionOf([a, b, c] |
1655 .map((cls) => new TypeMask.nonNullExact(cls, world)), | 1652 .map((cls) => new TypeMask.nonNullExact(cls, world)), |
1656 result.compiler.world)); | 1653 result.compiler.world)); |
1657 result.checkSelectorHasType( | 1654 result.checkSelectorHasType( |
1658 foo, | 1655 new TypedSelector.subclass(x, foo, world), |
1659 new TypeMask.subclass(x, world), | |
1660 new TypeMask.nonNullExact(b, world)); | 1656 new TypeMask.nonNullExact(b, world)); |
1661 result.checkSelectorHasType( | 1657 result.checkSelectorHasType( |
1662 foo, | 1658 new TypedSelector.subclass(y, foo, world), |
1663 new TypeMask.subclass(y, world), | |
1664 new TypeMask.nonNullExact(c, world)); | 1659 new TypeMask.nonNullExact(c, world)); |
1665 result.checkSelectorHasType( | 1660 result.checkSelectorHasType( |
1666 foo, | 1661 new TypedSelector.subclass(z, foo, world), |
1667 new TypeMask.subclass(z, world), | |
1668 new TypeMask.nonNullExact(a, world)); | 1662 new TypeMask.nonNullExact(a, world)); |
1669 result.checkSelectorHasType( | 1663 result.checkSelectorHasType( |
1670 foo, | 1664 new TypedSelector.subclass(xy, foo, world), |
1671 new TypeMask.subclass(xy, world), | |
1672 new TypeMask.unionOf([b, c].map((cls) => | 1665 new TypeMask.unionOf([b, c].map((cls) => |
1673 new TypeMask.nonNullExact(cls, world)), world)); | 1666 new TypeMask.nonNullExact(cls, world)), world)); |
1674 | 1667 |
1675 result.checkSelectorHasType(new Selector.call("bar", null, 0), null, null); | 1668 result.checkSelectorHasType(new Selector.call("bar", null, 0), null); |
1676 }); | 1669 }); |
1677 } | 1670 } |
1678 | 1671 |
1679 testEqualsNullSelector() { | 1672 testEqualsNullSelector() { |
1680 final String source = r""" | 1673 final String source = r""" |
1681 main() { | 1674 main() { |
1682 1 == null; | 1675 1 == null; |
1683 } | 1676 } |
1684 """; | 1677 """; |
1685 return analyze(source).then((result) { | 1678 return analyze(source).then((result) { |
1686 ClassElement bool = result.compiler.backend.boolImplementation; | 1679 ClassElement bool = result.compiler.backend.boolImplementation; |
1687 result.checkSelectorHasType(new Selector.binaryOperator('=='), | 1680 result.checkSelectorHasType(new Selector.binaryOperator('=='), |
1688 null, | |
1689 new TypeMask.nonNullExact(bool, | 1681 new TypeMask.nonNullExact(bool, |
1690 result.compiler.world)); | 1682 result.compiler.world)); |
1691 }); | 1683 }); |
1692 } | 1684 } |
1693 | 1685 |
1694 testMixins() { | 1686 testMixins() { |
1695 final String source = r""" | 1687 final String source = r""" |
1696 class A { | 1688 class A { |
1697 foo() => "abc"; | 1689 foo() => "abc"; |
1698 get x => 42; | 1690 get x => 42; |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2143 testClosures10, | 2135 testClosures10, |
2144 testClosures11, | 2136 testClosures11, |
2145 testClosures12, | 2137 testClosures12, |
2146 testRefinement, | 2138 testRefinement, |
2147 testDefaultArguments, | 2139 testDefaultArguments, |
2148 testSuperConstructorCall, | 2140 testSuperConstructorCall, |
2149 testSuperConstructorCall2, | 2141 testSuperConstructorCall2, |
2150 testSuperConstructorCall3, | 2142 testSuperConstructorCall3, |
2151 ], (f) => f())); | 2143 ], (f) => f())); |
2152 } | 2144 } |
OLD | NEW |