| Index: tests/compiler/dart2js/simple_inferrer_test.dart
|
| diff --git a/tests/compiler/dart2js/simple_inferrer_test.dart b/tests/compiler/dart2js/simple_inferrer_test.dart
|
| index 295784ad3b085645d259301a5053681883ad78a0..e7004e4c6ce59e0530eb8c480274f653301e55b9 100644
|
| --- a/tests/compiler/dart2js/simple_inferrer_test.dart
|
| +++ b/tests/compiler/dart2js/simple_inferrer_test.dart
|
| @@ -727,152 +727,161 @@ void main() {
|
| var compiler = compilerFor(TEST, uri);
|
| compiler.diagnosticHandler = createHandler(compiler, TEST);
|
| asyncTest(() => compiler.run(uri).then((_) {
|
| - var commonMasks = compiler.commonMasks;
|
| - var typesInferrer = compiler.globalInference.typesInferrer;
|
| - var world = compiler.world;
|
| -
|
| - checkReturn(String name, type) {
|
| - var element = findElement(compiler, name);
|
| - Expect.equals(
|
| - type,
|
| - simplify(typesInferrer.getReturnTypeOfElement(element), compiler),
|
| - name);
|
| - }
|
| - var interceptorType =
|
| - findTypeMask(compiler, 'Interceptor', 'nonNullSubclass');
|
| -
|
| - checkReturn('returnNum1', commonMasks.numType);
|
| - checkReturn('returnNum2', commonMasks.numType);
|
| - checkReturn('returnInt1', commonMasks.uint31Type);
|
| - checkReturn('returnInt2', commonMasks.uint31Type);
|
| - checkReturn('returnDouble', commonMasks.doubleType);
|
| - checkReturn('returnGiveUp', interceptorType);
|
| - checkReturn('returnInt5', commonMasks.uint32Type); // uint31+uint31->uint32
|
| - checkReturn('returnInt6', commonMasks.uint32Type); // uint31+uint31->uint32
|
| - checkReturn('returnIntOrNull', commonMasks.uint31Type.nullable());
|
| - checkReturn('returnInt3', commonMasks.uint31Type);
|
| - checkReturn('returnDynamic', commonMasks.dynamicType);
|
| - checkReturn('returnInt4', commonMasks.uint31Type);
|
| - checkReturn('returnInt7', commonMasks.positiveIntType);
|
| - checkReturn('returnInt8', commonMasks.positiveIntType);
|
| - checkReturn('returnEmpty1', const TypeMask.nonNullEmpty());
|
| - checkReturn('returnEmpty2', const TypeMask.nonNullEmpty());
|
| - TypeMask intType = new TypeMask.nonNullSubtype(
|
| - compiler.coreClasses.intClass, compiler.world);
|
| - checkReturn('testIsCheck1', intType);
|
| - checkReturn('testIsCheck2', intType);
|
| - checkReturn('testIsCheck3', intType.nullable());
|
| - checkReturn('testIsCheck4', intType);
|
| - checkReturn('testIsCheck5', intType);
|
| - checkReturn('testIsCheck6', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck7', intType);
|
| - checkReturn('testIsCheck8', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck9', intType);
|
| - checkReturn('testIsCheck10', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck11', intType);
|
| - checkReturn('testIsCheck12', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck13', intType);
|
| - checkReturn('testIsCheck14', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck15', intType);
|
| - checkReturn('testIsCheck16', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck17', intType);
|
| - checkReturn('testIsCheck18', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck19', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck20', interceptorType);
|
| - checkReturn('testIsCheck21', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck22', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck23', intType);
|
| - checkReturn('testIsCheck24', intType);
|
| - checkReturn('testIsCheck25', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck26', intType);
|
| - checkReturn('testIsCheck27', intType);
|
| - checkReturn('testIsCheck28', commonMasks.dynamicType);
|
| - checkReturn('testIsCheck29', commonMasks.dynamicType);
|
| - checkReturn('testIf1', commonMasks.uint31Type.nullable());
|
| - checkReturn('testIf2', commonMasks.uint31Type.nullable());
|
| - checkReturn('returnAsString', new TypeMask.subtype(
|
| - compiler.coreClasses.stringClass, compiler.world));
|
| - checkReturn('returnIntAsNum', commonMasks.uint31Type);
|
| - checkReturn('returnAsTypedef', commonMasks.functionType.nullable());
|
| - checkReturn('returnTopLevelGetter', commonMasks.uint31Type);
|
| - checkReturn('testDeadCode', commonMasks.uint31Type);
|
| - checkReturn('testLabeledIf', commonMasks.uint31Type.nullable());
|
| - checkReturn('testSwitch1', simplify(
|
| - commonMasks.intType
|
| - .union(commonMasks.doubleType, compiler.world)
|
| - .nullable(),
|
| - compiler));
|
| - checkReturn('testSwitch2', commonMasks.uint31Type);
|
| - checkReturn('testSwitch3', interceptorType.nullable());
|
| - checkReturn('testSwitch4', commonMasks.uint31Type);
|
| - checkReturn('testSwitch5', commonMasks.uint31Type);
|
| - checkReturn('testContinue1', interceptorType.nullable());
|
| - checkReturn('testBreak1', interceptorType.nullable());
|
| - checkReturn('testContinue2', interceptorType.nullable());
|
| - checkReturn('testBreak2', commonMasks.uint32Type.nullable());
|
| - checkReturn('testReturnElementOfConstList1', commonMasks.uint31Type);
|
| - checkReturn('testReturnElementOfConstList2', commonMasks.uint31Type);
|
| - checkReturn('testReturnItselfOrInt', commonMasks.uint31Type);
|
| - checkReturn('testReturnInvokeDynamicGetter', commonMasks.dynamicType);
|
| -
|
| - checkReturn('testDoWhile1', commonMasks.stringType);
|
| - checkReturn('testDoWhile2', commonMasks.nullType);
|
| - checkReturn('testDoWhile3', commonMasks.uint31Type);
|
| - checkReturn('testDoWhile4', commonMasks.numType);
|
| -
|
| - checkReturnInClass(String className, String methodName, type) {
|
| - var cls = findElement(compiler, className);
|
| - var element = cls.lookupLocalMember(methodName);
|
| - Expect.equals(type,
|
| - simplify(typesInferrer.getReturnTypeOfElement(element), compiler),
|
| - '$className:$methodName');
|
| - }
|
| -
|
| - checkReturnInClass('A', 'returnInt1', commonMasks.uint32Type);
|
| - checkReturnInClass('A', 'returnInt2', commonMasks.uint32Type);
|
| - checkReturnInClass('A', 'returnInt3', commonMasks.uint32Type);
|
| - checkReturnInClass('A', 'returnInt4', commonMasks.uint32Type);
|
| - checkReturnInClass('A', 'returnInt5', commonMasks.uint32Type);
|
| - checkReturnInClass('A', 'returnInt6', commonMasks.uint32Type);
|
| - checkReturnInClass('A', '==', interceptorType);
|
| -
|
| - checkReturnInClass('B', 'returnInt1', commonMasks.uint32Type);
|
| - checkReturnInClass('B', 'returnInt2', commonMasks.uint32Type);
|
| - checkReturnInClass('B', 'returnInt3', commonMasks.uint32Type);
|
| - checkReturnInClass('B', 'returnInt4', commonMasks.uint32Type);
|
| - checkReturnInClass('B', 'returnInt5', commonMasks.uint32Type);
|
| - checkReturnInClass('B', 'returnInt6', commonMasks.uint32Type);
|
| - checkReturnInClass('B', 'returnInt7', commonMasks.uint32Type);
|
| - checkReturnInClass('B', 'returnInt8', commonMasks.uint32Type);
|
| - checkReturnInClass('B', 'returnInt9', commonMasks.uint31Type);
|
| -
|
| - checkReturnInClass('C', 'returnInt1', commonMasks.positiveIntType);
|
| - checkReturnInClass('C', 'returnInt2', commonMasks.positiveIntType);
|
| - checkReturnInClass('C', 'returnInt3', commonMasks.positiveIntType);
|
| - checkReturnInClass('C', 'returnInt4', commonMasks.positiveIntType);
|
| - checkReturnInClass('C', 'returnInt5', commonMasks.positiveIntType);
|
| - checkReturnInClass('C', 'returnInt6', commonMasks.positiveIntType);
|
| -
|
| - checkFactoryConstructor(String className, String factoryName) {
|
| - var cls = findElement(compiler, className);
|
| - var element = cls.localLookup(factoryName);
|
| - Expect.equals(new TypeMask.nonNullExact(cls, world),
|
| - typesInferrer.getReturnTypeOfElement(element));
|
| - }
|
| - checkFactoryConstructor('A', '');
|
| -
|
| - checkReturn('testCascade1', commonMasks.growableListType);
|
| - checkReturn('testCascade2', new TypeMask.nonNullExact(
|
| - findElement(compiler, 'CascadeHelper'), world));
|
| - checkReturn('testSpecialization1', commonMasks.numType);
|
| - checkReturn('testSpecialization2', commonMasks.dynamicType);
|
| - checkReturn('testSpecialization3', commonMasks.uint31Type.nullable());
|
| - checkReturn('testReturnNull1', commonMasks.nullType);
|
| - checkReturn('testReturnNull2', commonMasks.nullType);
|
| - checkReturn('testReturnNull3', commonMasks.dynamicType);
|
| - checkReturn('testReturnNull4', commonMasks.nullType);
|
| - checkReturn('testReturnNull5', commonMasks.nullType);
|
| - checkReturn('testReturnNull6', commonMasks.dynamicType);
|
| - checkReturn('testReturnNotEquals', commonMasks.boolType);
|
| - }));
|
| + var commonMasks = compiler.commonMasks;
|
| + var typesInferrer = compiler.globalInference.typesInferrer;
|
| + var world = compiler.world;
|
| +
|
| + checkReturn(String name, type) {
|
| + var element = findElement(compiler, name);
|
| + Expect.equals(
|
| + type,
|
| + simplify(typesInferrer.getReturnTypeOfElement(element), compiler),
|
| + name);
|
| + }
|
| + var interceptorType =
|
| + findTypeMask(compiler, 'Interceptor', 'nonNullSubclass');
|
| +
|
| + checkReturn('returnNum1', commonMasks.numType);
|
| + checkReturn('returnNum2', commonMasks.numType);
|
| + checkReturn('returnInt1', commonMasks.uint31Type);
|
| + checkReturn('returnInt2', commonMasks.uint31Type);
|
| + checkReturn('returnDouble', commonMasks.doubleType);
|
| + checkReturn('returnGiveUp', interceptorType);
|
| + checkReturn(
|
| + 'returnInt5', commonMasks.uint32Type); // uint31+uint31->uint32
|
| + checkReturn(
|
| + 'returnInt6', commonMasks.uint32Type); // uint31+uint31->uint32
|
| + checkReturn('returnIntOrNull', commonMasks.uint31Type.nullable());
|
| + checkReturn('returnInt3', commonMasks.uint31Type);
|
| + checkReturn('returnDynamic', commonMasks.dynamicType);
|
| + checkReturn('returnInt4', commonMasks.uint31Type);
|
| + checkReturn('returnInt7', commonMasks.positiveIntType);
|
| + checkReturn('returnInt8', commonMasks.positiveIntType);
|
| + checkReturn('returnEmpty1', const TypeMask.nonNullEmpty());
|
| + checkReturn('returnEmpty2', const TypeMask.nonNullEmpty());
|
| + TypeMask intType = new TypeMask.nonNullSubtype(
|
| + compiler.coreClasses.intClass, compiler.world);
|
| + checkReturn('testIsCheck1', intType);
|
| + checkReturn('testIsCheck2', intType);
|
| + checkReturn('testIsCheck3', intType.nullable());
|
| + checkReturn('testIsCheck4', intType);
|
| + checkReturn('testIsCheck5', intType);
|
| + checkReturn('testIsCheck6', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck7', intType);
|
| + checkReturn('testIsCheck8', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck9', intType);
|
| + checkReturn('testIsCheck10', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck11', intType);
|
| + checkReturn('testIsCheck12', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck13', intType);
|
| + checkReturn('testIsCheck14', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck15', intType);
|
| + checkReturn('testIsCheck16', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck17', intType);
|
| + checkReturn('testIsCheck18', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck19', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck20', interceptorType);
|
| + checkReturn('testIsCheck21', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck22', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck23', intType);
|
| + checkReturn('testIsCheck24', intType);
|
| + checkReturn('testIsCheck25', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck26', intType);
|
| + checkReturn('testIsCheck27', intType);
|
| + checkReturn('testIsCheck28', commonMasks.dynamicType);
|
| + checkReturn('testIsCheck29', commonMasks.dynamicType);
|
| + checkReturn('testIf1', commonMasks.uint31Type.nullable());
|
| + checkReturn('testIf2', commonMasks.uint31Type.nullable());
|
| + checkReturn(
|
| + 'returnAsString',
|
| + new TypeMask.subtype(
|
| + compiler.coreClasses.stringClass, compiler.world));
|
| + checkReturn('returnIntAsNum', commonMasks.uint31Type);
|
| + checkReturn('returnAsTypedef', commonMasks.functionType.nullable());
|
| + checkReturn('returnTopLevelGetter', commonMasks.uint31Type);
|
| + checkReturn('testDeadCode', commonMasks.uint31Type);
|
| + checkReturn('testLabeledIf', commonMasks.uint31Type.nullable());
|
| + checkReturn(
|
| + 'testSwitch1',
|
| + simplify(
|
| + commonMasks.intType
|
| + .union(commonMasks.doubleType, compiler.world)
|
| + .nullable(),
|
| + compiler));
|
| + checkReturn('testSwitch2', commonMasks.uint31Type);
|
| + checkReturn('testSwitch3', interceptorType.nullable());
|
| + checkReturn('testSwitch4', commonMasks.uint31Type);
|
| + checkReturn('testSwitch5', commonMasks.uint31Type);
|
| + checkReturn('testContinue1', interceptorType.nullable());
|
| + checkReturn('testBreak1', interceptorType.nullable());
|
| + checkReturn('testContinue2', interceptorType.nullable());
|
| + checkReturn('testBreak2', commonMasks.uint32Type.nullable());
|
| + checkReturn('testReturnElementOfConstList1', commonMasks.uint31Type);
|
| + checkReturn('testReturnElementOfConstList2', commonMasks.uint31Type);
|
| + checkReturn('testReturnItselfOrInt', commonMasks.uint31Type);
|
| + checkReturn('testReturnInvokeDynamicGetter', commonMasks.dynamicType);
|
| +
|
| + checkReturn('testDoWhile1', commonMasks.stringType);
|
| + checkReturn('testDoWhile2', commonMasks.nullType);
|
| + checkReturn('testDoWhile3', commonMasks.uint31Type);
|
| + checkReturn('testDoWhile4', commonMasks.numType);
|
| +
|
| + checkReturnInClass(String className, String methodName, type) {
|
| + var cls = findElement(compiler, className);
|
| + var element = cls.lookupLocalMember(methodName);
|
| + Expect.equals(
|
| + type,
|
| + simplify(typesInferrer.getReturnTypeOfElement(element), compiler),
|
| + '$className:$methodName');
|
| + }
|
| +
|
| + checkReturnInClass('A', 'returnInt1', commonMasks.uint32Type);
|
| + checkReturnInClass('A', 'returnInt2', commonMasks.uint32Type);
|
| + checkReturnInClass('A', 'returnInt3', commonMasks.uint32Type);
|
| + checkReturnInClass('A', 'returnInt4', commonMasks.uint32Type);
|
| + checkReturnInClass('A', 'returnInt5', commonMasks.uint32Type);
|
| + checkReturnInClass('A', 'returnInt6', commonMasks.uint32Type);
|
| + checkReturnInClass('A', '==', interceptorType);
|
| +
|
| + checkReturnInClass('B', 'returnInt1', commonMasks.uint32Type);
|
| + checkReturnInClass('B', 'returnInt2', commonMasks.uint32Type);
|
| + checkReturnInClass('B', 'returnInt3', commonMasks.uint32Type);
|
| + checkReturnInClass('B', 'returnInt4', commonMasks.uint32Type);
|
| + checkReturnInClass('B', 'returnInt5', commonMasks.uint32Type);
|
| + checkReturnInClass('B', 'returnInt6', commonMasks.uint32Type);
|
| + checkReturnInClass('B', 'returnInt7', commonMasks.uint32Type);
|
| + checkReturnInClass('B', 'returnInt8', commonMasks.uint32Type);
|
| + checkReturnInClass('B', 'returnInt9', commonMasks.uint31Type);
|
| +
|
| + checkReturnInClass('C', 'returnInt1', commonMasks.positiveIntType);
|
| + checkReturnInClass('C', 'returnInt2', commonMasks.positiveIntType);
|
| + checkReturnInClass('C', 'returnInt3', commonMasks.positiveIntType);
|
| + checkReturnInClass('C', 'returnInt4', commonMasks.positiveIntType);
|
| + checkReturnInClass('C', 'returnInt5', commonMasks.positiveIntType);
|
| + checkReturnInClass('C', 'returnInt6', commonMasks.positiveIntType);
|
| +
|
| + checkFactoryConstructor(String className, String factoryName) {
|
| + var cls = findElement(compiler, className);
|
| + var element = cls.localLookup(factoryName);
|
| + Expect.equals(new TypeMask.nonNullExact(cls, world),
|
| + typesInferrer.getReturnTypeOfElement(element));
|
| + }
|
| + checkFactoryConstructor('A', '');
|
| +
|
| + checkReturn('testCascade1', commonMasks.growableListType);
|
| + checkReturn(
|
| + 'testCascade2',
|
| + new TypeMask.nonNullExact(
|
| + findElement(compiler, 'CascadeHelper'), world));
|
| + checkReturn('testSpecialization1', commonMasks.numType);
|
| + checkReturn('testSpecialization2', commonMasks.dynamicType);
|
| + checkReturn('testSpecialization3', commonMasks.uint31Type.nullable());
|
| + checkReturn('testReturnNull1', commonMasks.nullType);
|
| + checkReturn('testReturnNull2', commonMasks.nullType);
|
| + checkReturn('testReturnNull3', commonMasks.dynamicType);
|
| + checkReturn('testReturnNull4', commonMasks.nullType);
|
| + checkReturn('testReturnNull5', commonMasks.nullType);
|
| + checkReturn('testReturnNull6', commonMasks.dynamicType);
|
| + checkReturn('testReturnNotEquals', commonMasks.boolType);
|
| + }));
|
| }
|
|
|