Version 0.5.20.4.
svn merge -c 24250 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
This fixes a type inferencing issue in dart2js.
R=ricow@google.com
Review URL: https://codereview.chromium.org//17544003
git-svn-id: http://dart.googlecode.com/svn/trunk@24275 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/sdk/lib/_internal/compiler/implementation/types/simple_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/types/simple_types_inferrer.dart
index 634a542..bcc73b3 100644
--- a/sdk/lib/_internal/compiler/implementation/types/simple_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/simple_types_inferrer.dart
@@ -791,6 +791,10 @@
ContainerTypeMask mask = selector.mask;
TypeMask elementType = mask.elementType;
return elementType == null ? dynamicType : elementType;
+ } else if (element.isGetter()) {
+ // Closure call.
+ assert(selector.isCall());
+ return dynamicType;
} else {
return returnTypeOfElement(element);
}
diff --git a/tests/compiler/dart2js/simple_inferrer_test.dart b/tests/compiler/dart2js/simple_inferrer_test.dart
index 19be754..cfd0ba8 100644
--- a/tests/compiler/dart2js/simple_inferrer_test.dart
+++ b/tests/compiler/dart2js/simple_inferrer_test.dart
@@ -351,6 +351,8 @@
return b;
}
+testReturnInvokeDynamicGetter() => new A().myFactory();
+
get topLevelGetter => 42;
returnDynamic() => topLevelGetter(42);
returnTopLevelGetter() => topLevelGetter;
@@ -370,6 +372,8 @@
operator[]= (index, value) {}
returnInt5() => ++this[0];
returnInt6() => this[0] += 1;
+
+ get myFactory => () => 42;
}
class B extends A {
@@ -455,6 +459,7 @@
..returnInt7()
..returnInt8()
..returnInt9();
+ testReturnInvokeDynamicGetter();
}
""";
@@ -527,6 +532,7 @@
checkReturn('testBreak1', interceptorType.nullable());
checkReturn('testContinue2', interceptorType.nullable());
checkReturn('testBreak2', typesInferrer.intType.nullable());
+ checkReturn('testReturnInvokeDynamicGetter', typesInferrer.dynamicType);
checkReturnInClass(String className, String methodName, type) {
var cls = findElement(compiler, className);
diff --git a/tools/VERSION b/tools/VERSION
index ae9465f..ed3d747 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
MAJOR 0
MINOR 5
BUILD 20
-PATCH 3
+PATCH 4