| Index: pkg/compiler/lib/src/ssa/kernel_impact.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/kernel_impact.dart b/pkg/compiler/lib/src/ssa/kernel_impact.dart
|
| index 15efe23e8b2da8e019c868e3dae9b1b49672008c..f03bd1f61372d7b4ae273ad2d6e43e6eb6ff3e92 100644
|
| --- a/pkg/compiler/lib/src/ssa/kernel_impact.dart
|
| +++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart
|
| @@ -5,6 +5,7 @@
|
| import 'package:kernel/ast.dart' as ir;
|
|
|
| import '../common.dart';
|
| +import '../common/names.dart';
|
| import '../compiler.dart';
|
| import '../constants/expressions.dart';
|
| import '../dart_types.dart';
|
| @@ -243,10 +244,17 @@ class KernelImpactBuilder extends ir.Visitor {
|
|
|
| @override
|
| void visitMethodInvocation(ir.MethodInvocation invocation) {
|
| - invocation.receiver.accept(this);
|
| + var receiver = invocation.receiver;
|
| + if (receiver is ir.VariableGet &&
|
| + receiver.variable.isFinal &&
|
| + receiver.variable.parent is ir.FunctionDeclaration) {
|
| + // Invocation of a local function. No need for dynamic use.
|
| + } else {
|
| + invocation.receiver.accept(this);
|
| + impactBuilder.registerDynamicUse(
|
| + new DynamicUse(astAdapter.getSelector(invocation), null));
|
| + }
|
| _visitArguments(invocation.arguments);
|
| - impactBuilder.registerDynamicUse(
|
| - new DynamicUse(astAdapter.getSelector(invocation), null));
|
| }
|
|
|
| @override
|
| @@ -265,11 +273,6 @@ class KernelImpactBuilder extends ir.Visitor {
|
| }
|
|
|
| @override
|
| - void visitNot(ir.Not not) {
|
| - not.operand.accept(this);
|
| - }
|
| -
|
| - @override
|
| void visitAssertStatement(ir.AssertStatement node) {
|
| impactBuilder.registerFeature(
|
| node.message != null ? Feature.ASSERT_WITH_MESSAGE : Feature.ASSERT);
|
| @@ -277,5 +280,19 @@ class KernelImpactBuilder extends ir.Visitor {
|
| }
|
|
|
| @override
|
| + void visitStringConcatenation(ir.StringConcatenation node) {
|
| + impactBuilder.registerFeature(Feature.STRING_INTERPOLATION);
|
| + impactBuilder.registerFeature(Feature.STRING_JUXTAPOSITION);
|
| + node.visitChildren(this);
|
| + }
|
| +
|
| + @override
|
| + void visitFunctionDeclaration(ir.FunctionDeclaration node) {
|
| + impactBuilder
|
| + .registerStaticUse(new StaticUse.closure(astAdapter.getElement(node)));
|
| + node.visitChildren(this);
|
| + }
|
| +
|
| + @override
|
| void defaultNode(ir.Node node) => node.visitChildren(this);
|
| }
|
|
|