| Index: tests/compiler/dart2js/simple_inferrer_test.dart
|
| ===================================================================
|
| --- tests/compiler/dart2js/simple_inferrer_test.dart (revision 19455)
|
| +++ tests/compiler/dart2js/simple_inferrer_test.dart (working copy)
|
| @@ -3,6 +3,7 @@
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| import 'compiler_helper.dart';
|
| +import 'parser_helper.dart';
|
|
|
| const String TEST = """
|
| returnNum1(a) {
|
| @@ -15,7 +16,7 @@
|
| else return 2;
|
| }
|
|
|
| -returnInt(a) {
|
| +returnInt1(a) {
|
| if (a) return 1;
|
| else return 2;
|
| }
|
| @@ -30,12 +31,70 @@
|
| else return 'foo';
|
| }
|
|
|
| +returnInt2() {
|
| + var a = 42;
|
| + return a++;
|
| +}
|
| +
|
| +returnNum3() {
|
| + var a = 42;
|
| + return ++a;
|
| +}
|
| +
|
| +returnNum4() {
|
| + var a = 42;
|
| + a++;
|
| + return a;
|
| +}
|
| +
|
| +class A {
|
| + get myField => 42;
|
| + set myField(a) {}
|
| + returnNum1() => ++myField;
|
| + returnNum2() => ++this.myField;
|
| + returnNum3() => this.myField += 42;
|
| + returnNum4() => myField += 42;
|
| + operator[](index) => 42;
|
| + operator[]= (index, value) {}
|
| + returnNum5() => ++this[0];
|
| + returnNum6() => this[0] += 1;
|
| +}
|
| +
|
| +class B extends A {
|
| + returnNum1() => ++new A().myField;
|
| + returnNum2() => new A().myField += 4;
|
| + returnNum3() => ++new A()[0];
|
| + returnNum4() => new A()[0] += 42;
|
| + returnNum5() => ++super.myField;
|
| + returnNum6() => super.myField += 4;
|
| + returnNum7() => ++super[0];
|
| + returnNum8() => super[0] += 54;
|
| +}
|
| +
|
| main() {
|
| returnNum1(true);
|
| returnNum2(true);
|
| - returnInt(true);
|
| + returnInt1(true);
|
| + returnInt2(true);
|
| returnDouble(true);
|
| returnGiveUp(true);
|
| + returnNum3();
|
| + returnNum4();
|
| + new A()..returnNum1()
|
| + ..returnNum2()
|
| + ..returnNum3()
|
| + ..returnNum4()
|
| + ..returnNum5()
|
| + ..returnNum6();
|
| +
|
| + new B()..returnNum1()
|
| + ..returnNum2()
|
| + ..returnNum3()
|
| + ..returnNum4()
|
| + ..returnNum5()
|
| + ..returnNum6()
|
| + ..returnNum7()
|
| + ..returnNum8();
|
| }
|
| """;
|
|
|
| @@ -45,18 +104,38 @@
|
| compiler.runCompiler(uri);
|
| var typesInferrer = compiler.typesTask.typesInferrer;
|
|
|
| - var element = findElement(compiler, 'returnNum1');
|
| - Expect.equals(compiler.numClass, typesInferrer.returnTypeOf[element]);
|
| + checkReturn(String name, type) {
|
| + var element = findElement(compiler, name);
|
| + Expect.equals(type, typesInferrer.returnTypeOf[element]);
|
| + }
|
| + checkReturn('returnNum1', compiler.numClass);
|
| + checkReturn('returnNum2', compiler.numClass);
|
| + checkReturn('returnInt1', compiler.intClass);
|
| + checkReturn('returnInt2', compiler.intClass);
|
| + checkReturn('returnDouble', compiler.doubleClass);
|
| + checkReturn('returnGiveUp', typesInferrer.giveUpType);
|
| + checkReturn('returnNum3', compiler.numClass);
|
| + checkReturn('returnNum4', compiler.numClass);
|
|
|
| - element = findElement(compiler, 'returnNum2');
|
| - Expect.equals(compiler.numClass, typesInferrer.returnTypeOf[element]);
|
| + checkReturnInClass(String className, String methodName, type) {
|
| + var cls = findElement(compiler, className);
|
| + var element = cls.lookupLocalMember(buildSourceString(methodName));
|
| + Expect.equals(type, typesInferrer.returnTypeOf[element]);
|
| + }
|
|
|
| - element = findElement(compiler, 'returnInt');
|
| - Expect.equals(compiler.intClass, typesInferrer.returnTypeOf[element]);
|
| + checkReturnInClass('A', 'returnNum1', compiler.numClass);
|
| + checkReturnInClass('A', 'returnNum2', compiler.numClass);
|
| + checkReturnInClass('A', 'returnNum3', compiler.numClass);
|
| + checkReturnInClass('A', 'returnNum4', compiler.numClass);
|
| + checkReturnInClass('A', 'returnNum5', compiler.numClass);
|
| + checkReturnInClass('A', 'returnNum6', compiler.numClass);
|
|
|
| - element = findElement(compiler, 'returnDouble');
|
| - Expect.equals(compiler.doubleClass, typesInferrer.returnTypeOf[element]);
|
| -
|
| - element = findElement(compiler, 'returnGiveUp');
|
| - Expect.equals(typesInferrer.giveUpType, typesInferrer.returnTypeOf[element]);
|
| + checkReturnInClass('B', 'returnNum1', compiler.numClass);
|
| + checkReturnInClass('B', 'returnNum2', compiler.numClass);
|
| + checkReturnInClass('B', 'returnNum3', compiler.numClass);
|
| + checkReturnInClass('B', 'returnNum4', compiler.numClass);
|
| + checkReturnInClass('B', 'returnNum5', compiler.numClass);
|
| + checkReturnInClass('B', 'returnNum6', compiler.numClass);
|
| + checkReturnInClass('B', 'returnNum7', compiler.numClass);
|
| + checkReturnInClass('B', 'returnNum8', compiler.numClass);
|
| }
|
|
|