| Index: pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart | 
| diff --git a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart | 
| index e77c6d1d215a6fef607912af5681b086c61afad2..4d099016877866c16075ff44b462ac30f2380b8a 100644 | 
| --- a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart | 
| +++ b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart | 
| @@ -850,7 +850,10 @@ class SimpleTypeInferrerVisitor<T> | 
| isCallOnThis = true; | 
| } | 
| } else { | 
| -      receiverType = visit(node.receiver); | 
| +      if (node.receiver != null && elements[node.receiver] is! PrefixElement) { | 
| +        // TODO(johnniwinther): Avoid blindly recursing on the receiver. | 
| +        receiverType = visit(node.receiver); | 
| +      } | 
| isCallOnThis = isThisOrSuper(node.receiver); | 
| } | 
|  | 
| @@ -1357,20 +1360,6 @@ class SimpleTypeInferrerVisitor<T> | 
| node, selector, mask, element, null); | 
| } | 
|  | 
| -  /// Handle super constructor invocation. | 
| -  @override | 
| -  T handleSuperConstructorInvoke(ast.Send node) { | 
| -    Element element = elements[node]; | 
| -    ArgumentsTypes arguments = analyzeArguments(node.arguments); | 
| -    assert(visitingInitializers); | 
| -    seenSuperConstructorCall = true; | 
| -    analyzeSuperConstructorCall(element, arguments); | 
| -    Selector selector = elements.getSelector(node); | 
| -    TypeMask mask = elements.getTypeMask(node); | 
| -    return handleStaticSend( | 
| -        node, selector, mask, element, arguments); | 
| -  } | 
| - | 
| @override | 
| T visitUnresolvedSuperIndex( | 
| ast.Send node, | 
| @@ -1481,6 +1470,16 @@ class SimpleTypeInferrerVisitor<T> | 
| } | 
|  | 
| @override | 
| +  T visitSuperSetterInvoke( | 
| +      ast.Send node, | 
| +      FunctionElement setter, | 
| +      ast.NodeList arguments, | 
| +      CallStructure callStructure, | 
| +      _) { | 
| +    return handleErroneousSuperSend(node); | 
| +  } | 
| + | 
| +  @override | 
| T visitSuperIndex( | 
| ast.Send node, | 
| MethodElement method, | 
| @@ -1663,7 +1662,8 @@ class SimpleTypeInferrerVisitor<T> | 
| } | 
| } | 
|  | 
| -  T handleNewExpression(ast.NewExpression node) { | 
| +  @override | 
| +  T bulkHandleNew(ast.NewExpression node, _) { | 
| Element element = elements[node.send]; | 
| return handleConstructorSend(node.send, element); | 
| } | 
| @@ -1845,15 +1845,6 @@ class SimpleTypeInferrerVisitor<T> | 
| return new ArgumentsTypes<T>(positional, named); | 
| } | 
|  | 
| -  T visitGetterSend(ast.Send node) { | 
| -    if (elements[node] is! PrefixElement) { | 
| -      // TODO(johnniwinther): Remove this when no longer called from | 
| -      // [handleSendSet]. | 
| -      internalError(node, "Unexpected visitGetterSend"); | 
| -    } | 
| -    return null; | 
| -  } | 
| - | 
| /// Read a local variable, function or parameter. | 
| T handleLocalGet(ast.Send node, LocalElement local) { | 
| assert(locals.use(local) != null); | 
|  |