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); |