Skip to content

Commit 8bbbc51

Browse files
authored
fix corner case in unused (#5906)
fixes #5905
1 parent 76803d6 commit 8bbbc51

2 files changed

Lines changed: 33 additions & 8 deletions

File tree

lib/compress.js

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9349,17 +9349,18 @@ Compressor.prototype.compress = function(node) {
93499349
var expr = self.expression;
93509350
if (expr.may_throw_on_access(compressor)) return self;
93519351
var prop = self.property;
9352-
var optional = self.optional;
9353-
if (!optional) {
9354-
expr = expr.drop_side_effect_free(compressor, first_in_statement);
9355-
if (!expr) return prop.drop_side_effect_free(compressor, first_in_statement);
9352+
if (self.optional) {
9353+
prop = prop.drop_side_effect_free(compressor);
9354+
if (!prop) return expr.drop_side_effect_free(compressor, first_in_statement);
9355+
self = self.clone();
9356+
self.property = prop;
9357+
return self;
93569358
}
9359+
expr = expr.drop_side_effect_free(compressor, first_in_statement);
9360+
if (!expr) return prop.drop_side_effect_free(compressor, first_in_statement);
93579361
prop = prop.drop_side_effect_free(compressor);
93589362
if (!prop) return expr;
9359-
if (!optional) return make_sequence(self, [ expr, prop ]);
9360-
self = self.clone();
9361-
self.property = prop;
9362-
return self;
9363+
return make_sequence(self, [ expr, prop ]);
93639364
});
93649365
def(AST_SymbolRef, function(compressor) {
93659366
return this.is_declared(compressor) && can_drop_symbol(this, compressor) ? null : this;

test/compress/optional-chains.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,3 +669,27 @@ issue_5900: {
669669
expect_stdout: "PASS"
670670
node_version: ">=14"
671671
}
672+
673+
issue_5905: {
674+
options = {
675+
pure_getters: "strict",
676+
reduce_vars: true,
677+
toplevel: true,
678+
unused: true,
679+
}
680+
input: {
681+
var a;
682+
do {
683+
var b = a++;
684+
var c = c ?? b?.[42];
685+
} while (console.log("PASS"));
686+
}
687+
expect: {
688+
var a;
689+
do {
690+
a++;
691+
} while (console.log("PASS"));
692+
}
693+
expect_stdout: "PASS"
694+
node_version: ">=14"
695+
}

0 commit comments

Comments
 (0)