Chromium Code Reviews| Index: sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart |
| =================================================================== |
| --- sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart (revision 29362) |
| +++ sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart (working copy) |
| @@ -781,21 +781,23 @@ |
| T visitSuperSend(Send node) { |
| Element element = elements[node]; |
| - if (Elements.isUnresolved(element)) { |
| - return types.dynamicType; |
| - } |
| Selector selector = elements.getSelector(node); |
| // TODO(ngeoffray): We could do better here if we knew what we |
| // are calling does not expose this. |
| isThisExposed = true; |
| - if (node.isPropertyAccess) { |
| - return handleStaticSend(node, selector, element, null); |
| - } else if (element.isFunction() || element.isGenerativeConstructor()) { |
| - if (!selector.applies(element, compiler)) return types.dynamicType; |
| - ArgumentsTypes arguments = analyzeArguments(node.arguments); |
| + ArgumentsTypes arguments = node.isPropertyAccess |
| + ? null |
| + : analyzeArguments(node.arguments); |
| + if (Elements.isUnresolved(element) |
| + || !selector.applies(element, compiler)) { |
| + // Ensure we create a node, to make explicit the call to the |
| + // `noSuchMethod` handler. |
| + return handleDynamicSend(node, selector, superType, arguments); |
| + } if (node.isPropertyAccess |
|
kasperl
2013/10/29 08:35:27
if -> else if
ngeoffray
2013/10/29 09:19:28
Done.
|
| + || element.isFunction() |
| + || element.isGenerativeConstructor()) { |
| return handleStaticSend(node, selector, element, arguments); |
| } else { |
| - ArgumentsTypes arguments = analyzeArguments(node.arguments); |
| return inferrer.registerCalledClosure( |
| node, selector, inferrer.typeOfElement(element), |
| outermostElement, arguments, sideEffects, inLoop); |