Chromium Code Reviews| Index: sdk/lib/_internal/compiler/implementation/ssa/codegen.dart |
| =================================================================== |
| --- sdk/lib/_internal/compiler/implementation/ssa/codegen.dart (revision 18306) |
| +++ sdk/lib/_internal/compiler/implementation/ssa/codegen.dart (working copy) |
| @@ -1567,9 +1567,19 @@ |
| int receiverIndex = node.isInterceptorCall ? 1 : 0; |
| HType receiverHType = types[node.inputs[receiverIndex]]; |
| DartType receiverType = receiverHType.computeType(compiler); |
| - if (receiverType != null && |
| - !identical(receiverType.kind, TypeKind.MALFORMED_TYPE)) { |
| - return new TypedSelector(receiverType, defaultSelector); |
| + if (receiverType != null && !receiverType.isMalformed) { |
| + TypedSelector optimizedSelector; |
| + if (receiverHType.isExact()) { |
| + optimizedSelector = new TypedSelector.exact( |
|
kasperl
2013/02/11 13:11:50
How about just returning it here and get rid of th
ngeoffray
2013/02/11 14:20:29
Done.
|
| + receiverType, defaultSelector); |
| + } else if (receiverHType.isInterfaceType()) { |
| + optimizedSelector = new TypedSelector.subtype( |
| + receiverType, defaultSelector); |
| + } else { |
| + optimizedSelector = new TypedSelector.subclass( |
| + receiverType, defaultSelector); |
| + } |
| + return optimizedSelector; |
| } else { |
| return defaultSelector; |
| } |