Skip to content

Commit a3b078a

Browse files
committed
fix(minifier): fix crash with []['concat'](1) (#8750)
1 parent 0fcff20 commit a3b078a

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

crates/oxc_minifier/src/peephole/replace_known_methods.rs

+8-3
Original file line numberDiff line numberDiff line change
@@ -539,8 +539,12 @@ impl<'a> PeepholeOptimizations {
539539
}
540540
}
541541

542-
let Expression::StaticMemberExpression(member) = callee else { unreachable!() };
543-
let Expression::ArrayExpression(array_expr) = &mut member.object else { return None };
542+
let object = match callee {
543+
Expression::StaticMemberExpression(member) => &mut member.object,
544+
Expression::ComputedMemberExpression(member) => &mut member.object,
545+
_ => unreachable!(),
546+
};
547+
let Expression::ArrayExpression(array_expr) = object else { return None };
544548

545549
let can_merge_until = args
546550
.iter()
@@ -574,7 +578,7 @@ impl<'a> PeepholeOptimizations {
574578
}
575579

576580
if args.is_empty() {
577-
Some(ctx.ast.move_expression(&mut member.object))
581+
Some(ctx.ast.move_expression(object))
578582
} else if can_merge_until.is_some() {
579583
Some(ctx.ast.expression_call(
580584
span,
@@ -1438,6 +1442,7 @@ mod test {
14381442
test("var x; ''.concat(x.a).concat(x)", "var x; ''.concat(x.a, x)"); // x.a might have a getter that updates x, but that side effect is preserved correctly
14391443

14401444
// other
1445+
test("x = []['concat'](1)", "x = [1]");
14411446
test_same("obj.concat([1,2]).concat(1)");
14421447
}
14431448

0 commit comments

Comments
 (0)