| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 'package:expect/expect.dart'; | 5 import 'package:expect/expect.dart'; |
| 6 import "package:async_helper/async_helper.dart"; | 6 import "package:async_helper/async_helper.dart"; |
| 7 import 'package:compiler/src/types/types.dart' show MapTypeMask, TypeMask; | 7 import 'package:compiler/src/types/types.dart' show MapTypeMask, TypeMask; |
| 8 | 8 |
| 9 import 'compiler_helper.dart'; | 9 import 'compiler_helper.dart'; |
| 10 import 'type_mask_test_helper.dart'; | 10 import 'type_mask_test_helper.dart'; |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 | 200 |
| 201 void main() { | 201 void main() { |
| 202 // Test empty literal map | 202 // Test empty literal map |
| 203 doTest('{}'); | 203 doTest('{}'); |
| 204 // Test preset map of <String,uint32> | 204 // Test preset map of <String,uint32> |
| 205 doTest('{presetKey : anInt}', "presetKey", "anInt"); | 205 doTest('{presetKey : anInt}', "presetKey", "anInt"); |
| 206 // Test preset map of <Double,uint32> | 206 // Test preset map of <Double,uint32> |
| 207 doTest('{aDouble : anInt}', "aDouble", "anInt"); | 207 doTest('{aDouble : anInt}', "aDouble", "anInt"); |
| 208 } | 208 } |
| 209 | 209 |
| 210 void doTest(String allocation, [String keyElement, String valueElement]) { | 210 void doTest(String allocation, |
| 211 [String keyElementName, String valueElementName]) { |
| 211 Uri uri = new Uri(scheme: 'source'); | 212 Uri uri = new Uri(scheme: 'source'); |
| 212 var compiler = compilerFor(generateTest(allocation), uri, | 213 var compiler = compilerFor(generateTest(allocation), uri, |
| 213 expectedErrors: 0, expectedWarnings: 1); | 214 expectedErrors: 0, expectedWarnings: 1); |
| 214 asyncTest(() => compiler.run(uri).then((_) { | 215 asyncTest(() => compiler.run(uri).then((_) { |
| 215 var keyType, valueType; | 216 var keyType, valueType; |
| 216 var typesInferrer = compiler.globalInference.typesInferrerInternal; | 217 var typesInferrer = compiler.globalInference.typesInferrerInternal; |
| 217 var closedWorld = typesInferrer.closedWorld; | 218 var closedWorld = typesInferrer.closedWorld; |
| 218 var commonMasks = closedWorld.commonMasks; | 219 var commonMasks = closedWorld.commonMasks; |
| 219 var emptyType = new TypeMask.nonNullEmpty(); | 220 var emptyType = new TypeMask.nonNullEmpty(); |
| 220 var aKeyType = | 221 MemberElement aKey = findElement(compiler, 'aKey'); |
| 221 typesInferrer.getTypeOfMember(findElement(compiler, 'aKey')); | 222 var aKeyType = typesInferrer.getTypeOfMember(aKey); |
| 222 if (keyElement != null) { | 223 if (keyElementName != null) { |
| 223 keyType = | 224 MemberElement keyElement = findElement(compiler, keyElementName); |
| 224 typesInferrer.getTypeOfMember(findElement(compiler, keyElement)); | 225 keyType = typesInferrer.getTypeOfMember(keyElement); |
| 225 } | 226 } |
| 226 if (valueElement != null) { | 227 if (valueElementName != null) { |
| 227 valueType = typesInferrer | 228 MemberElement valueElement = findElement(compiler, valueElementName); |
| 228 .getTypeOfMember(findElement(compiler, valueElement)); | 229 valueType = typesInferrer.getTypeOfMember(valueElement); |
| 229 } | 230 } |
| 230 if (keyType == null) keyType = emptyType; | 231 if (keyType == null) keyType = emptyType; |
| 231 if (valueType == null) valueType = emptyType; | 232 if (valueType == null) valueType = emptyType; |
| 232 | 233 |
| 233 checkType(String name, keyType, valueType) { | 234 checkType(String name, keyType, valueType) { |
| 234 var element = findElement(compiler, name); | 235 MemberElement element = findElement(compiler, name); |
| 235 MapTypeMask mask = typesInferrer.getTypeOfMember(element); | 236 MapTypeMask mask = typesInferrer.getTypeOfMember(element); |
| 236 Expect.equals(keyType, simplify(mask.keyType, closedWorld), name); | 237 Expect.equals(keyType, simplify(mask.keyType, closedWorld), name); |
| 237 Expect.equals(valueType, simplify(mask.valueType, closedWorld), name); | 238 Expect.equals(valueType, simplify(mask.valueType, closedWorld), name); |
| 238 } | 239 } |
| 239 | 240 |
| 240 K(TypeMask other) => | 241 K(TypeMask other) => |
| 241 simplify(keyType.union(other, closedWorld), closedWorld); | 242 simplify(keyType.union(other, closedWorld), closedWorld); |
| 242 V(TypeMask other) => | 243 V(TypeMask other) => |
| 243 simplify(valueType.union(other, closedWorld), closedWorld) | 244 simplify(valueType.union(other, closedWorld), closedWorld) |
| 244 .nullable(); | 245 .nullable(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 checkType('mapStoredInListButEscapes', K(commonMasks.dynamicType), | 279 checkType('mapStoredInListButEscapes', K(commonMasks.dynamicType), |
| 279 V(commonMasks.dynamicType)); | 280 V(commonMasks.dynamicType)); |
| 280 checkType('mapStoredInMap', K(aKeyType), V(commonMasks.uint31Type)); | 281 checkType('mapStoredInMap', K(aKeyType), V(commonMasks.uint31Type)); |
| 281 checkType('mapStoredInMapButEscapes', K(commonMasks.dynamicType), | 282 checkType('mapStoredInMapButEscapes', K(commonMasks.dynamicType), |
| 282 V(commonMasks.dynamicType)); | 283 V(commonMasks.dynamicType)); |
| 283 | 284 |
| 284 checkType('mapUnset', K(emptyType), V(emptyType)); | 285 checkType('mapUnset', K(emptyType), V(emptyType)); |
| 285 checkType('mapOnlySetWithConstraint', K(aKeyType), V(emptyType)); | 286 checkType('mapOnlySetWithConstraint', K(aKeyType), V(emptyType)); |
| 286 })); | 287 })); |
| 287 } | 288 } |
| OLD | NEW |