Skip to content

Commit 7fa6021

Browse files
rishipalcopybara-github
authored andcommitted
Fix a bug in calculating liveness for OPTCHAIN_CALL nodes
PiperOrigin-RevId: 321882231
1 parent 4f21a1d commit 7fa6021

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ private void computeGenKill(Node n, BitSet gen, BitSet kill, boolean conditional
309309
computeGenKill(n.getFirstChild(), gen, kill, conditional);
310310
// Unlike OPTCHAIN_GETPROP and OPTCHAIN_GETELEM, the OPTCHAIN_CALLs can have multiple
311311
// children on rhs which get executed conditionally
312-
for (Node c = n.getFirstChild(); c != null; c = c.getNext()) {
312+
for (Node c = n.getSecondChild(); c != null; c = c.getNext()) {
313313
computeGenKill(c, gen, kill, true);
314314
}
315315
return;

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@ public void optionalChainingGetProp() {
138138
public void optionalChainingCall() {
139139
// conditionally accessing var keeps it live
140140
assertLiveBeforeX("var a,b; X:if(b?.(a)){}", "a");
141+
142+
// unconditionally overwriting a var kills it
143+
assertNotLiveAfterX("var a,b; X:a(); if((a=b)?.b()){} a()", "a");
144+
141145
// conditionally overwriting var does not kill it
142146
assertLiveBeforeX("var a,b; X:if(b?.(a=c)){} a();", "a");
143147

@@ -152,6 +156,10 @@ public void optionalChainingCall() {
152156
public void optionalChainingGetElem() {
153157
// conditionally accessing var keeps it live
154158
assertLiveBeforeX("var a,b; X:if(b?.[a]) {}", "a");
159+
160+
// unconditionally overwriting a var kills it
161+
assertNotLiveAfterX("var a,b; X:a(); if((a=b)?.[b]){} a()", "a");
162+
155163
// conditionally overwriting var does not kill it
156164
assertLiveBeforeX("var a,b; X:if(b?.[a=c]) {} a();", "a");
157165

0 commit comments

Comments
 (0)