@@ -406,6 +406,9 @@ impl<'a> PeepholeOptimizations {
406406 let Expression :: LogicalExpression ( left) = & e. left else {
407407 return ;
408408 } ;
409+ if left. operator != e. operator {
410+ return ;
411+ }
409412 let Some ( new_expr) = Self :: try_compress_is_object_and_not_null_for_left_and_right (
410413 & left. right ,
411414 & e. right ,
@@ -2143,6 +2146,24 @@ mod test {
21432146 "var foo, bar; v = bar !== 1 && typeof foo === 'object' && foo !== null" ,
21442147 "var foo, bar; v = bar !== 1 && typeof foo == 'object' && !!foo" ,
21452148 ) ;
2149+ test (
2150+ "var foo, bar; v = typeof foo === 'object' && foo !== null || bar !== 1" ,
2151+ "var foo, bar; v = typeof foo == 'object' && !!foo || bar !== 1" ,
2152+ ) ;
2153+ test (
2154+ "var foo, bar; v = bar !== 1 || typeof foo === 'object' && foo !== null" ,
2155+ "var foo, bar; v = bar !== 1 || typeof foo == 'object' && !!foo" ,
2156+ ) ;
2157+ test (
2158+ "var foo, bar; v = (typeof foo !== 'object' || foo === null) && bar !== 1" ,
2159+ "var foo, bar; v = (typeof foo != 'object' || !foo) && bar !== 1" ,
2160+ ) ;
2161+ test (
2162+ "var foo, bar; v = bar !== 1 && (typeof foo !== 'object' || foo === null)" ,
2163+ "var foo, bar; v = bar !== 1 && (typeof foo != 'object' || !foo)" ,
2164+ ) ;
2165+ test_same ( "var foo, bar; v = bar !== 1 && typeof foo != 'object' || foo === null" ) ;
2166+ test_same ( "var foo, bar; v = typeof foo != 'object' || foo === null && bar !== 1" ) ;
21462167 test_same ( "var foo; v = typeof foo.a == 'object' && foo.a !== null" ) ; // cannot be folded because accessing foo.a might have a side effect
21472168 test_same ( "v = foo !== null && typeof foo == 'object'" ) ; // cannot be folded because accessing foo might have a side effect
21482169 test_same ( "v = typeof foo == 'object' && foo !== null" ) ; // cannot be folded because accessing foo might have a side effect
0 commit comments