Skip to content

Commit 0f42d86

Browse files
Closure Teamcopybara-github
Closure Team
authored andcommitted
Fix RewriteClassMember modifying computed property in an object literal.
PiperOrigin-RevId: 615209502
1 parent 58c658b commit 0f42d86

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

src/com/google/javascript/jscomp/RewriteClassMembers.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public boolean shouldTraverse(NodeTraversal t, Node n, Node parent) {
9797
break;
9898
case COMPUTED_PROP:
9999
checkState(!classStack.isEmpty());
100-
if (NodeUtil.canBeSideEffected(n.getFirstChild())) {
100+
if (n.getParent().isClassMembers() && NodeUtil.canBeSideEffected(n.getFirstChild())) {
101101
classStack.peek().computedPropMembers.add(n);
102102
}
103103
break;

test/com/google/javascript/jscomp/RewriteClassMembersTest.java

+26
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,32 @@ public void testSideEffectsInComputedField() {
870870
"}",
871871
"Baz.x = Baz.STATIC$FIELD$5$x();",
872872
"Baz[COMPFIELD$2] = Baz.STATIC$FIELD$6();")));
873+
874+
rewriteFieldOrBlockTest(
875+
srcs(
876+
lines(
877+
"class Baz {",
878+
" z = 1;",
879+
" func(x) {",
880+
" x.a = 'y';",
881+
" return {",
882+
" [x.a]:'aa'", // computed property in an object literal remains unchanged
883+
" }",
884+
" }",
885+
"}")),
886+
expected(
887+
lines(
888+
"class Baz {",
889+
" constructor() {",
890+
" this.z = 1;",
891+
" }",
892+
" func(x) {",
893+
" x.a = 'y';",
894+
" return {",
895+
" [x.a]:'aa'",
896+
" }",
897+
" }",
898+
"}")));
873899
}
874900

875901
@Test

0 commit comments

Comments
 (0)