Skip to content

Commit a74282a

Browse files
committed
fix: logical expression transformation
1 parent 34c9b00 commit a74282a

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

crates/jsshaker/src/nodes/expr/assignment_expression.rs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -94,19 +94,22 @@ impl<'a> Transformer<'a> {
9494
let transformed_right = self.transform_expression(right, need_val || !left_is_empty);
9595

9696
match (transformed_left, transformed_right) {
97-
(Some(left), right) => Some(self.ast.expression_assignment(
98-
*span,
99-
if operator.is_logical() {
100-
let (_, maybe_left, _) =
101-
self.get_conditional_result(AstKind2::LogicalAssignmentExpressionLeft(node), false);
97+
(Some(left), right) => {
98+
debug_assert!(!left_is_empty);
99+
Some(self.ast.expression_assignment(
100+
*span,
101+
if operator.is_logical() {
102+
let (_, maybe_left, _) =
103+
self.get_conditional_result(AstKind2::LogicalAssignmentExpressionLeft(node), false);
102104

103-
if maybe_left { *operator } else { AssignmentOperator::Assign }
104-
} else {
105-
*operator
106-
},
107-
left,
108-
right.unwrap(),
109-
)),
105+
if maybe_left { *operator } else { AssignmentOperator::Assign }
106+
} else {
107+
*operator
108+
},
109+
left,
110+
right.unwrap(),
111+
))
112+
}
110113
(None, Some(right)) => {
111114
if need_val && *operator != AssignmentOperator::Assign {
112115
if operator.is_logical() {

crates/jsshaker/src/nodes/expr/logical_expression.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ impl<'a> Transformer<'a> {
8585
} else {
8686
Some(left)
8787
}
88+
} else if need_val && left.is_none() && right.is_none() {
89+
Some(self.build_unused_expression(*span))
8890
} else {
8991
build_effect!(self.ast, *span, left, right)
9092
}

crates/jsshaker/src/nodes/expr/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,10 @@ impl<'a> Transformer<'a> {
205205
Some(literal)
206206
}
207207
} else {
208+
if need_val {
209+
debug_assert!(inner.is_some(), "Expr: {:#?}", node);
210+
}
211+
208212
inner
209213
}
210214
}

0 commit comments

Comments
 (0)