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