| Index: pkg/compiler/lib/src/ssa/optimize.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
|
| index 4c207eae876470b17bf1d2fd405481959244a981..95207b804a022af21a9c99f4ad77b5d591b53961 100644
|
| --- a/pkg/compiler/lib/src/ssa/optimize.dart
|
| +++ b/pkg/compiler/lib/src/ssa/optimize.dart
|
| @@ -2612,14 +2612,24 @@ class MemorySet {
|
|
|
| if (instruction.sideEffects.changesInstanceProperty() ||
|
| instruction.sideEffects.changesStaticProperty()) {
|
| + List<MemberEntity> fieldsToRemove;
|
| + List<HInstruction> receiversToRemove = <HInstruction>[];
|
| fieldValues.forEach((MemberEntity element, map) {
|
| if (isFinal(element)) return;
|
| map.forEach((receiver, value) {
|
| if (escapes(receiver)) {
|
| - map[receiver] = null;
|
| + receiversToRemove.add(receiver);
|
| }
|
| });
|
| + if (receiversToRemove.length == map.length) {
|
| + // Remove them all by removing the entire map.
|
| + (fieldsToRemove ??= <MemberEntity>[]).add(element);
|
| + } else {
|
| + receiversToRemove.forEach(map.remove);
|
| + }
|
| + receiversToRemove.clear();
|
| });
|
| + fieldsToRemove?.forEach(fieldValues.remove);
|
| }
|
|
|
| if (instruction.sideEffects.changesIndex()) {
|
|
|