| Index: pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/type_propagation.dart b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| index 9ff934b597328ab01794f286e2b3424934420d5b..c200cc185b34add440c692936863bc1ba9c8ad16 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| @@ -2072,10 +2072,20 @@ class TransformingVisitor extends DeepRecursiveVisitor {
|
| /// Specialize calls to internal static methods.
|
| specializeInternalMethodCall(InvokeStatic node) {
|
| if (node.target == backend.helpers.stringInterpolationHelper) {
|
| - AbstractConstantValue value = getValue(node.arguments[0].definition);
|
| + Primitive argument = node.arguments[0].definition;
|
| + AbstractConstantValue value = getValue(argument);
|
| if (lattice.isDefinitelyString(value)) {
|
| - node.replaceUsesWith(node.arguments[0].definition);
|
| + node.replaceUsesWith(argument);
|
| return new CpsFragment();
|
| + } else if (typeSystem.isDefinitelySelfInterceptor(value.type)) {
|
| + CpsFragment cps = new CpsFragment(node.sourceInformation);
|
| + Primitive invoke = cps.invokeMethod(argument,
|
| + Selectors.toString_,
|
| + value.type,
|
| + [cps.makeZero()],
|
| + CallingConvention.DummyIntercepted);
|
| + node.replaceUsesWith(invoke);
|
| + return cps;
|
| }
|
| } else if (node.target == compiler.identicalFunction) {
|
| if (node.arguments.length == 2) {
|
|
|