| 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 d47e82b0d59cc381664d695943ba0c7e2acc6745..fc38b214d2ef17c1457775df4191a0d4ab80880d 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| @@ -38,6 +38,7 @@ import '../world.dart' show World;
|
| import 'cps_fragment.dart';
|
| import 'cps_ir_nodes.dart';
|
| import 'type_mask_system.dart';
|
| +import 'effects.dart';
|
|
|
| class ConstantPropagationLattice {
|
| final TypeMaskSystem typeSystem;
|
| @@ -2060,7 +2061,19 @@ class TransformingVisitor extends DeepRecursiveVisitor {
|
| }
|
| }
|
|
|
| + visitInvokeConstructor(InvokeConstructor node) {
|
| + node.effects =
|
| + Effects.from(compiler.world.getSideEffectsOfElement(node.target));
|
| + }
|
| +
|
| visitInvokeMethodDirectly(InvokeMethodDirectly node) {
|
| + Element target = node.target;
|
| + if (target is ConstructorBodyElement) {
|
| + ConstructorBodyElement constructorBody = target;
|
| + target = constructorBody.constructor;
|
| + }
|
| + node.effects =
|
| + Effects.from(compiler.world.getSideEffectsOfElement(target));
|
| TypeMask receiverType = node.dartReceiver.type;
|
| if (node.callingConvention == CallingConvention.Intercepted &&
|
| typeSystem.areDisjoint(receiverType, typeSystem.interceptorType)) {
|
| @@ -2084,6 +2097,9 @@ class TransformingVisitor extends DeepRecursiveVisitor {
|
| TypeMask receiverType = node.dartReceiver.type;
|
| node.mask = typeSystem.intersection(node.mask, receiverType);
|
|
|
| + node.effects = Effects.from(
|
| + compiler.world.getSideEffectsOfSelector(node.selector, node.mask));
|
| +
|
| bool canBeNonThrowingCallOnNull =
|
| selectorsOnNull.contains(node.selector) &&
|
| receiverType.isNullable;
|
| @@ -2159,6 +2175,8 @@ class TransformingVisitor extends DeepRecursiveVisitor {
|
| }
|
|
|
| visitInvokeStatic(InvokeStatic node) {
|
| + node.effects = Effects.from(
|
| + compiler.world.getSideEffectsOfElement(node.target));
|
| return specializeInternalMethodCall(node);
|
| }
|
|
|
| @@ -2465,6 +2483,11 @@ class TransformingVisitor extends DeepRecursiveVisitor {
|
| return null;
|
| }
|
|
|
| + visitGetLength(GetLength node) {
|
| + node.isFinal = typeSystem.isDefinitelyFixedLengthIndexable(
|
| + node.object.definition.type, allowNull: true);
|
| + }
|
| +
|
| visitReadTypeVariable(ReadTypeVariable node) {
|
| // Pattern match on
|
| //
|
|
|