Index: pkg/compiler/lib/src/cps_ir/mutable_ssa.dart |
diff --git a/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart b/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart |
index abf85cd611c1bec8c1aaf9436bd15871af01e08a..690172b8ff8a915846590a9b4d6c771041c199c2 100644 |
--- a/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart |
+++ b/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart |
@@ -155,15 +155,17 @@ class MutableVariableEliminator implements Pass { |
// Remove the mutable variable binding. |
node.value.unlink(); |
removeNode(node); |
- } else if (node is SetMutableVariable && |
- shouldRewrite(node.variable.definition)) { |
- // As above, update the environment, preserve variables and remove |
- // the mutable variable assignment. |
- MutableVariable variable = node.variable.definition; |
- environment[variable] = node.value.definition; |
- mergeHints(variable, node.value.definition); |
- node.value.unlink(); |
- removeNode(node); |
+ } else if (node is LetPrim && node.primitive is SetMutableVariable) { |
+ SetMutableVariable setter = node.primitive; |
+ MutableVariable variable = setter.variable.definition; |
+ if (shouldRewrite(variable)) { |
+ // As above, update the environment, preserve variables and remove |
+ // the mutable variable assignment. |
+ environment[variable] = setter.value.definition; |
+ mergeHints(variable, setter.value.definition); |
+ setter.value.unlink(); |
+ removeNode(node); |
+ } |
} else if (node is LetPrim && node.primitive is GetMutableVariable) { |
GetMutableVariable getter = node.primitive; |
MutableVariable variable = getter.variable.definition; |