@@ -1075,24 +1075,20 @@ impl<'a> PeepholeOptimizations {
1075
1075
if self . target < ESTarget :: ES2020 {
1076
1076
return None ;
1077
1077
}
1078
-
1079
1078
let Expression :: AssignmentExpression ( assignment_expr) = & mut expr. right else {
1080
1079
return None ;
1081
1080
} ;
1082
1081
if assignment_expr. operator != AssignmentOperator :: Assign {
1083
1082
return None ;
1084
1083
}
1085
-
1086
1084
let new_op = expr. operator . to_assignment_operator ( ) ;
1087
-
1088
1085
if !Self :: has_no_side_effect_for_evaluation_same_target (
1089
1086
& assignment_expr. left ,
1090
1087
& expr. left ,
1091
1088
ctx,
1092
1089
) {
1093
1090
return None ;
1094
1091
}
1095
-
1096
1092
assignment_expr. span = expr. span ;
1097
1093
assignment_expr. operator = new_op;
1098
1094
Some ( ctx. ast . move_expression ( & mut expr. right ) )
@@ -1129,37 +1125,31 @@ impl<'a> PeepholeOptimizations {
1129
1125
///
1130
1126
/// - `a`, `a`
1131
1127
/// - `a.b`, `a.b`
1132
- /// - `a.#b `, `a.#b `
1128
+ /// - `a["b"] `, `a["b"] `
1133
1129
fn has_no_side_effect_for_evaluation_same_target (
1134
1130
assignment_target : & AssignmentTarget ,
1135
1131
expr : & Expression ,
1136
1132
ctx : & mut TraverseCtx < ' a > ,
1137
1133
) -> bool {
1138
- match ( & assignment_target, & expr) {
1139
- (
1140
- AssignmentTarget :: AssignmentTargetIdentifier ( write_id_ref) ,
1141
- Expression :: Identifier ( read_id_ref) ,
1142
- ) => write_id_ref. name == read_id_ref. name ,
1143
- (
1144
- AssignmentTarget :: StaticMemberExpression ( _) ,
1145
- Expression :: StaticMemberExpression ( _) ,
1146
- )
1147
- | (
1148
- AssignmentTarget :: PrivateFieldExpression ( _) ,
1149
- Expression :: PrivateFieldExpression ( _) ,
1150
- ) => {
1151
- let write_expr = assignment_target. to_member_expression ( ) ;
1152
- let read_expr = expr. to_member_expression ( ) ;
1153
- let Expression :: Identifier ( write_expr_object_id) = & write_expr. object ( ) else {
1154
- return false ;
1155
- } ;
1134
+ if let (
1135
+ AssignmentTarget :: AssignmentTargetIdentifier ( write_id_ref) ,
1136
+ Expression :: Identifier ( read_id_ref) ,
1137
+ ) = ( assignment_target, expr)
1138
+ {
1139
+ return write_id_ref. name == read_id_ref. name ;
1140
+ }
1141
+ if let Some ( write_expr) = assignment_target. as_member_expression ( ) {
1142
+ let Expression :: Identifier ( write_expr_object_id) = & write_expr. object ( ) else {
1143
+ return false ;
1144
+ } ;
1145
+ if let Some ( read_expr) = expr. as_member_expression ( ) {
1156
1146
// It should also return false when the reference might refer to a reference value created by a with statement
1157
1147
// when the minifier supports with statements
1158
- !Ctx ( ctx) . is_global_reference ( write_expr_object_id)
1159
- && write_expr. content_eq ( read_expr)
1148
+ return !Ctx ( ctx) . is_global_reference ( write_expr_object_id)
1149
+ && write_expr. content_eq ( read_expr) ;
1160
1150
}
1161
- _ => false ,
1162
1151
}
1152
+ false
1163
1153
}
1164
1154
1165
1155
/// Compress `a = a + b` to `a += b`
0 commit comments