| 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' | 7 import 'package:compiler/src/types/types.dart' |
| 8 show MapTypeMask, TypeMask; | 8 show MapTypeMask, TypeMask; |
| 9 | 9 |
| 10 import 'compiler_helper.dart'; | 10 import 'compiler_helper.dart'; |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 } | 210 } |
| 211 | 211 |
| 212 void doTest(String allocation, [String keyElement, | 212 void doTest(String allocation, [String keyElement, |
| 213 String valueElement]) { | 213 String valueElement]) { |
| 214 Uri uri = new Uri(scheme: 'source'); | 214 Uri uri = new Uri(scheme: 'source'); |
| 215 var compiler = compilerFor(generateTest(allocation), uri, | 215 var compiler = compilerFor(generateTest(allocation), uri, |
| 216 expectedErrors: 0, expectedWarnings: 1); | 216 expectedErrors: 0, expectedWarnings: 1); |
| 217 var classWorld = compiler.world; | 217 var classWorld = compiler.world; |
| 218 asyncTest(() => compiler.run(uri).then((_) { | 218 asyncTest(() => compiler.run(uri).then((_) { |
| 219 var keyType, valueType; | 219 var keyType, valueType; |
| 220 var typesTask = compiler.typesTask; | 220 var commonMasks = compiler.commonMasks; |
| 221 var typesInferrer = typesTask.typesInferrer; | 221 var typesInferrer = compiler.globalInference.typesInferrer; |
| 222 var emptyType = new TypeMask.nonNullEmpty(); | 222 var emptyType = new TypeMask.nonNullEmpty(); |
| 223 var aKeyType = | 223 var aKeyType = |
| 224 typesInferrer.getTypeOfElement(findElement(compiler, 'aKey')); | 224 typesInferrer.getTypeOfElement(findElement(compiler, 'aKey')); |
| 225 if (keyElement != null) { | 225 if (keyElement != null) { |
| 226 keyType = | 226 keyType = |
| 227 typesInferrer.getTypeOfElement(findElement(compiler, keyElement)); | 227 typesInferrer.getTypeOfElement(findElement(compiler, keyElement)); |
| 228 } | 228 } |
| 229 if (valueElement != null) { | 229 if (valueElement != null) { |
| 230 valueType = | 230 valueType = |
| 231 typesInferrer.getTypeOfElement(findElement(compiler, valueElement)); | 231 typesInferrer.getTypeOfElement(findElement(compiler, valueElement)); |
| 232 } | 232 } |
| 233 if (keyType == null) keyType = emptyType; | 233 if (keyType == null) keyType = emptyType; |
| 234 if (valueType == null) valueType = emptyType; | 234 if (valueType == null) valueType = emptyType; |
| 235 | 235 |
| 236 checkType(String name, keyType, valueType) { | 236 checkType(String name, keyType, valueType) { |
| 237 var element = findElement(compiler, name); | 237 var element = findElement(compiler, name); |
| 238 MapTypeMask mask = typesInferrer.getTypeOfElement(element); | 238 MapTypeMask mask = typesInferrer.getTypeOfElement(element); |
| 239 Expect.equals(keyType, simplify(mask.keyType, compiler), name); | 239 Expect.equals(keyType, simplify(mask.keyType, compiler), name); |
| 240 Expect.equals(valueType, simplify(mask.valueType, compiler), name); | 240 Expect.equals(valueType, simplify(mask.valueType, compiler), name); |
| 241 } | 241 } |
| 242 | 242 |
| 243 K(TypeMask other) => simplify(keyType.union(other, classWorld), compiler); | 243 K(TypeMask other) => simplify(keyType.union(other, classWorld), compiler); |
| 244 V(TypeMask other) => | 244 V(TypeMask other) => |
| 245 simplify(valueType.union(other, classWorld), compiler).nullable(); | 245 simplify(valueType.union(other, classWorld), compiler).nullable(); |
| 246 | 246 |
| 247 checkType('mapInField', K(aKeyType), V(typesTask.numType)); | 247 checkType('mapInField', K(aKeyType), V(commonMasks.numType)); |
| 248 checkType('mapPassedToMethod', K(aKeyType), V(typesTask.numType)); | 248 checkType('mapPassedToMethod', K(aKeyType), V(commonMasks.numType)); |
| 249 checkType('mapReturnedFromMethod', K(aKeyType), V(typesTask.numType)); | 249 checkType('mapReturnedFromMethod', K(aKeyType), V(commonMasks.numType)); |
| 250 checkType('mapUsedWithCascade', K(aKeyType), V(typesTask.numType)); | 250 checkType('mapUsedWithCascade', K(aKeyType), V(commonMasks.numType)); |
| 251 checkType('mapUsedInClosure', K(aKeyType), V(typesTask.numType)); | 251 checkType('mapUsedInClosure', K(aKeyType), V(commonMasks.numType)); |
| 252 checkType('mapPassedToSelector', K(aKeyType), V(typesTask.numType)); | 252 checkType('mapPassedToSelector', K(aKeyType), V(commonMasks.numType)); |
| 253 checkType('mapReturnedFromSelector', K(aKeyType), V(typesTask.numType)); | 253 checkType('mapReturnedFromSelector', K(aKeyType), V(commonMasks.numType)); |
| 254 checkType('mapUsedWithConstraint', K(aKeyType), V(typesTask.uint31Type)); | 254 checkType('mapUsedWithConstraint', K(aKeyType), V(commonMasks.uint31Type)); |
| 255 checkType('mapEscapingFromSetter', K(aKeyType), V(typesTask.numType)); | 255 checkType('mapEscapingFromSetter', K(aKeyType), V(commonMasks.numType)); |
| 256 checkType('mapUsedInLocal', K(aKeyType), V(typesTask.numType)); | 256 checkType('mapUsedInLocal', K(aKeyType), V(commonMasks.numType)); |
| 257 checkType('mapEscapingInSetterValue', K(aKeyType), V(typesTask.numType)); | 257 checkType('mapEscapingInSetterValue', K(aKeyType), V(commonMasks.numType)); |
| 258 checkType('mapEscapingInIndex', K(aKeyType), V(typesTask.numType)); | 258 checkType('mapEscapingInIndex', K(aKeyType), V(commonMasks.numType)); |
| 259 checkType('mapEscapingInIndexSet', K(aKeyType), V(typesTask.uint31Type)); | 259 checkType('mapEscapingInIndexSet', K(aKeyType), V(commonMasks.uint31Type)); |
| 260 checkType('mapEscapingTwiceInIndexSet', K(aKeyType), V(typesTask.numType)); | 260 checkType('mapEscapingTwiceInIndexSet', |
| 261 checkType('mapSetInNonFinalField', K(aKeyType), V(typesTask.numType)); | 261 K(aKeyType), V(commonMasks.numType)); |
| 262 checkType('mapSetInNonFinalField', K(aKeyType), V(commonMasks.numType)); |
| 262 | 263 |
| 263 checkType('mapPassedToClosure', K(typesTask.dynamicType), | 264 checkType('mapPassedToClosure', K(commonMasks.dynamicType), |
| 264 V(typesTask.dynamicType)); | 265 V(commonMasks.dynamicType)); |
| 265 checkType('mapReturnedFromClosure', K(typesTask.dynamicType), | 266 checkType('mapReturnedFromClosure', K(commonMasks.dynamicType), |
| 266 V(typesTask.dynamicType)); | 267 V(commonMasks.dynamicType)); |
| 267 checkType('mapUsedWithNonOkSelector', K(typesTask.dynamicType), | 268 checkType('mapUsedWithNonOkSelector', K(commonMasks.dynamicType), |
| 268 V(typesTask.dynamicType)); | 269 V(commonMasks.dynamicType)); |
| 269 checkType('mapPassedAsOptionalParameter', K(aKeyType), | 270 checkType('mapPassedAsOptionalParameter', K(aKeyType), |
| 270 V(typesTask.numType)); | 271 V(commonMasks.numType)); |
| 271 checkType('mapPassedAsNamedParameter', K(aKeyType), | 272 checkType('mapPassedAsNamedParameter', K(aKeyType), |
| 272 V(typesTask.numType)); | 273 V(commonMasks.numType)); |
| 273 checkType('mapStoredInList', K(aKeyType), | 274 checkType('mapStoredInList', K(aKeyType), |
| 274 V(typesTask.uint31Type)); | 275 V(commonMasks.uint31Type)); |
| 275 checkType('mapStoredInListButEscapes', K(typesTask.dynamicType), | 276 checkType('mapStoredInListButEscapes', K(commonMasks.dynamicType), |
| 276 V(typesTask.dynamicType)); | 277 V(commonMasks.dynamicType)); |
| 277 checkType('mapStoredInMap', K(aKeyType), V(typesTask.uint31Type)); | 278 checkType('mapStoredInMap', K(aKeyType), V(commonMasks.uint31Type)); |
| 278 checkType('mapStoredInMapButEscapes', K(typesTask.dynamicType), | 279 checkType('mapStoredInMapButEscapes', K(commonMasks.dynamicType), |
| 279 V(typesTask.dynamicType)); | 280 V(commonMasks.dynamicType)); |
| 280 | 281 |
| 281 checkType('mapUnset', K(emptyType), V(emptyType)); | 282 checkType('mapUnset', K(emptyType), V(emptyType)); |
| 282 checkType('mapOnlySetWithConstraint', K(aKeyType), V(emptyType)); | 283 checkType('mapOnlySetWithConstraint', K(aKeyType), V(emptyType)); |
| 283 })); | 284 })); |
| 284 } | 285 } |
| OLD | NEW |