Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(305)

Unified Diff: tests/compiler/dart2js/simple_inferrer_test.dart

Issue 12434002: Infer SendSet node correctly. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/compiler/dart2js/simple_inferrer_postfix_prefix_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
« no previous file with comments | « tests/compiler/dart2js/simple_inferrer_postfix_prefix_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698