Skip to content

Commit

Permalink
fix(es/utils): Ignore typeof Id while preserving side effects (#7763)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7750
  • Loading branch information
kdy1 committed Aug 6, 2023
1 parent 434472a commit d57ac0d
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 0 deletions.
67 changes: 67 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7750/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"jsc": {
"parser": {
"syntax": "ecmascript",
"jsx": false
},
"target": "es2022",
"loose": false,
"minify": {
"mangle": false,
"compress": {
"arguments": false,
"arrows": false,
"booleans": false,
"booleans_as_integers": false,
"collapse_vars": false,
"comparisons": false,
"computed_props": false,
"conditionals": false,
"dead_code": false,
"directives": false,
"drop_console": false,
"drop_debugger": false,
"evaluate": false,
"expression": false,
"hoist_funs": false,
"hoist_props": false,
"hoist_vars": false,
"if_return": false,
"join_vars": false,
"keep_classnames": false,
"keep_fargs": false,
"keep_fnames": false,
"keep_infinity": false,
"loops": false,
"negate_iife": false,
"properties": false,
"reduce_funcs": false,
"reduce_vars": false,
"side_effects": false,
"switches": false,
"typeofs": false,
"unsafe": false,
"unsafe_arrows": false,
"unsafe_comps": false,
"unsafe_Function": false,
"unsafe_math": false,
"unsafe_symbols": false,
"unsafe_methods": false,
"unsafe_proto": false,
"unsafe_regexp": false,
"unsafe_undefined": false,
"unused": false,
"const_to_let": false,
"pristine_globals": false
},
"format": {
"wrapFuncArgs": true
}
}
},
"module": {
"type": "es6"
},
"minify": false,
"isModule": false
}
1 change: 1 addition & 0 deletions crates/swc/tests/fixture/issues-7xxx/7750/input/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
typeof __dirname != void 0
1 change: 1 addition & 0 deletions crates/swc/tests/fixture/issues-7xxx/7750/output/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
true;
16 changes: 16 additions & 0 deletions crates/swc_ecma_utils/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2484,6 +2484,22 @@ impl ExprCtx {
//TODO: Drop values if it does not have side effects.
Expr::Cond(_) => to.push(Box::new(expr)),

Expr::Unary(UnaryExpr {
op: op!("typeof"),
arg,
..
}) => {
// We should ignore side effect of `__dirname` in
//
// typeof __dirname != void 0
//
// https://github.com/swc-project/swc/pull/7763
if arg.is_ident() {
return;
}
self.extract_side_effects_to(to, *arg)
}

Expr::Unary(UnaryExpr { arg, .. }) => self.extract_side_effects_to(to, *arg),

Expr::Bin(BinExpr { op, .. }) if op.may_short_circuit() => {
Expand Down

1 comment on commit d57ac0d

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: d57ac0d Previous: b69ae8f Ratio
es/full/bugs-1 292819 ns/iter (± 7069) 291452 ns/iter (± 8129) 1.00
es/full/minify/libraries/antd 1501445818 ns/iter (± 22283286) 1310136475 ns/iter (± 12818778) 1.15
es/full/minify/libraries/d3 289053228 ns/iter (± 13102391) 283337256 ns/iter (± 4852130) 1.02
es/full/minify/libraries/echarts 1095463377 ns/iter (± 17057022) 1062681650 ns/iter (± 7669528) 1.03
es/full/minify/libraries/jquery 85408018 ns/iter (± 241693) 84881586 ns/iter (± 200370) 1.01
es/full/minify/libraries/lodash 99168377 ns/iter (± 482224) 98815755 ns/iter (± 297775) 1.00
es/full/minify/libraries/moment 50161456 ns/iter (± 110672) 49988976 ns/iter (± 89177) 1.00
es/full/minify/libraries/react 18047385 ns/iter (± 57858) 18000209 ns/iter (± 42022) 1.00
es/full/minify/libraries/terser 222911912 ns/iter (± 1513598) 220096590 ns/iter (± 2163411) 1.01
es/full/minify/libraries/three 397898521 ns/iter (± 9995000) 388068368 ns/iter (± 1542129) 1.03
es/full/minify/libraries/typescript 2824179345 ns/iter (± 59440982) 2688971799 ns/iter (± 11255499) 1.05
es/full/minify/libraries/victory 617236204 ns/iter (± 24354540) 564446598 ns/iter (± 4384572) 1.09
es/full/minify/libraries/vue 121186976 ns/iter (± 907225) 120673841 ns/iter (± 332847) 1.00
es/full/codegen/es3 34034 ns/iter (± 161) 33913 ns/iter (± 111) 1.00
es/full/codegen/es5 34158 ns/iter (± 153) 33812 ns/iter (± 104) 1.01
es/full/codegen/es2015 34106 ns/iter (± 138) 33884 ns/iter (± 104) 1.01
es/full/codegen/es2016 34208 ns/iter (± 207) 33858 ns/iter (± 110) 1.01
es/full/codegen/es2017 34259 ns/iter (± 194) 33908 ns/iter (± 89) 1.01
es/full/codegen/es2018 34252 ns/iter (± 172) 33897 ns/iter (± 122) 1.01
es/full/codegen/es2019 34099 ns/iter (± 104) 33864 ns/iter (± 138) 1.01
es/full/codegen/es2020 34048 ns/iter (± 68) 33902 ns/iter (± 146) 1.00
es/full/all/es3 171037958 ns/iter (± 712393) 172669283 ns/iter (± 1284687) 0.99
es/full/all/es5 162939002 ns/iter (± 739435) 163572272 ns/iter (± 966224) 1.00
es/full/all/es2015 123902420 ns/iter (± 517571) 123757811 ns/iter (± 744978) 1.00
es/full/all/es2016 121726781 ns/iter (± 678741) 122415457 ns/iter (± 777498) 0.99
es/full/all/es2017 121610277 ns/iter (± 757700) 121754354 ns/iter (± 828884) 1.00
es/full/all/es2018 119391029 ns/iter (± 359703) 119469435 ns/iter (± 745330) 1.00
es/full/all/es2019 118294852 ns/iter (± 526619) 119001900 ns/iter (± 1012503) 0.99
es/full/all/es2020 114769750 ns/iter (± 639645) 113711561 ns/iter (± 906171) 1.01
es/full/parser 529548 ns/iter (± 5510) 530895 ns/iter (± 5980) 1.00
es/full/base/fixer 18058 ns/iter (± 49) 18144 ns/iter (± 190) 1.00
es/full/base/resolver_and_hygiene 82545 ns/iter (± 168) 81024 ns/iter (± 245) 1.02
serialization of serde 298 ns/iter (± 0) 300 ns/iter (± 2) 0.99
css/minify/libraries/bootstrap 28721471 ns/iter (± 80479) 28137144 ns/iter (± 155328) 1.02
css/visitor/compare/clone 1633056 ns/iter (± 1901) 1629180 ns/iter (± 2363) 1.00
css/visitor/compare/visit_mut_span 1779267 ns/iter (± 7684) 1774596 ns/iter (± 9783) 1.00
css/visitor/compare/visit_mut_span_panic 1836878 ns/iter (± 5245) 1854224 ns/iter (± 6123) 0.99
css/visitor/compare/fold_span 2583310 ns/iter (± 7549) 2609360 ns/iter (± 16198) 0.99
css/visitor/compare/fold_span_panic 2757601 ns/iter (± 12662) 2765746 ns/iter (± 17962) 1.00
css/lexer/bootstrap_5_1_3 4504593 ns/iter (± 5617) 4400582 ns/iter (± 3559) 1.02
css/lexer/foundation_6_7_4 3803147 ns/iter (± 6963) 3699952 ns/iter (± 2222) 1.03
css/lexer/tailwind_3_1_1 720169 ns/iter (± 3035) 703566 ns/iter (± 341) 1.02
css/parser/bootstrap_5_1_3 19226918 ns/iter (± 78800) 19654874 ns/iter (± 27145) 0.98
css/parser/foundation_6_7_4 15233109 ns/iter (± 81489) 15885087 ns/iter (± 22168) 0.96
css/parser/tailwind_3_1_1 2970210 ns/iter (± 16395) 3031988 ns/iter (± 5598) 0.98
es/codegen/colors 736885 ns/iter (± 402116) 739125 ns/iter (± 406214) 1.00
es/codegen/large 2890088 ns/iter (± 1525532) 2901337 ns/iter (± 1528604) 1.00
es/codegen/with-parser/colors 45460 ns/iter (± 581) 45074 ns/iter (± 181) 1.01
es/codegen/with-parser/large 493265 ns/iter (± 2791) 496948 ns/iter (± 1908) 0.99
es/minify/libraries/antd 1180000497 ns/iter (± 35146279) 1151406924 ns/iter (± 14087365) 1.02
es/minify/libraries/d3 242414890 ns/iter (± 1147662) 244792279 ns/iter (± 1664646) 0.99
es/minify/libraries/echarts 925637602 ns/iter (± 34229826) 924180348 ns/iter (± 15870465) 1.00
es/minify/libraries/jquery 74061659 ns/iter (± 385429) 74212079 ns/iter (± 176122) 1.00
es/minify/libraries/lodash 88443955 ns/iter (± 387003) 89968283 ns/iter (± 184435) 0.98
es/minify/libraries/moment 44420184 ns/iter (± 428240) 43814745 ns/iter (± 280635) 1.01
es/minify/libraries/react 16074205 ns/iter (± 71480) 16025188 ns/iter (± 17682) 1.00
es/minify/libraries/terser 189210634 ns/iter (± 1498782) 189154695 ns/iter (± 1118452) 1.00
es/minify/libraries/three 324284842 ns/iter (± 2394579) 336427364 ns/iter (± 4404057) 0.96
es/minify/libraries/typescript 2290400766 ns/iter (± 10774311) 2297939915 ns/iter (± 15860531) 1.00
es/minify/libraries/victory 477501290 ns/iter (± 4253717) 477804203 ns/iter (± 5844066) 1.00
es/minify/libraries/vue 107612576 ns/iter (± 191514) 107797097 ns/iter (± 263752) 1.00
es/visitor/compare/clone 1937119 ns/iter (± 5319) 1921777 ns/iter (± 6900) 1.01
es/visitor/compare/visit_mut_span 2265882 ns/iter (± 8649) 2262674 ns/iter (± 7858) 1.00
es/visitor/compare/visit_mut_span_panic 2309319 ns/iter (± 5021) 2300957 ns/iter (± 4725) 1.00
es/visitor/compare/fold_span 3315012 ns/iter (± 5883) 3330062 ns/iter (± 6090) 1.00
es/visitor/compare/fold_span_panic 3449150 ns/iter (± 7869) 3459331 ns/iter (± 8030) 1.00
es/lexer/colors 13064 ns/iter (± 24) 13040 ns/iter (± 41) 1.00
es/lexer/angular 6016193 ns/iter (± 27240) 6039514 ns/iter (± 2304) 1.00
es/lexer/backbone 785297 ns/iter (± 767) 778081 ns/iter (± 1327) 1.01
es/lexer/jquery 4423444 ns/iter (± 2000) 4397251 ns/iter (± 4151) 1.01
es/lexer/jquery mobile 6763689 ns/iter (± 5338) 6757569 ns/iter (± 6888) 1.00
es/lexer/mootools 3505398 ns/iter (± 1133) 3494119 ns/iter (± 3869) 1.00
es/lexer/underscore 659658 ns/iter (± 671) 650005 ns/iter (± 415) 1.01
es/lexer/three 20987329 ns/iter (± 55139) 20948970 ns/iter (± 17199) 1.00
es/lexer/yui 3771859 ns/iter (± 7314) 3777819 ns/iter (± 1694) 1.00
es/parser/colors 27492 ns/iter (± 73) 27258 ns/iter (± 70) 1.01
es/parser/angular 13719666 ns/iter (± 80039) 13630019 ns/iter (± 55096) 1.01
es/parser/backbone 2024034 ns/iter (± 10269) 2030416 ns/iter (± 8188) 1.00
es/parser/jquery 11080611 ns/iter (± 48571) 10990422 ns/iter (± 45832) 1.01
es/parser/jquery mobile 16927405 ns/iter (± 36611) 16872763 ns/iter (± 44358) 1.00
es/parser/mootools 8482532 ns/iter (± 43815) 8479248 ns/iter (± 22512) 1.00
es/parser/underscore 1754678 ns/iter (± 10777) 1747614 ns/iter (± 8997) 1.00
es/parser/three 48143071 ns/iter (± 439275) 47758185 ns/iter (± 461081) 1.01
es/parser/yui 8349432 ns/iter (± 57735) 8310818 ns/iter (± 51604) 1.00
es/preset-env/usage/builtin_type 136598 ns/iter (± 32389) 137957 ns/iter (± 32106) 0.99
es/preset-env/usage/property 17182 ns/iter (± 105) 16489 ns/iter (± 62) 1.04
es/resolver/typescript 88523171 ns/iter (± 1790151) 89002822 ns/iter (± 1138258) 0.99
es/fixer/typescript 63589166 ns/iter (± 425016) 64636956 ns/iter (± 549887) 0.98
es/hygiene/typescript 128108221 ns/iter (± 929290) 130328161 ns/iter (± 1247508) 0.98
es/resolver_with_hygiene/typescript 241018640 ns/iter (± 2243993) 243721284 ns/iter (± 1390082) 0.99
es/visitor/base-perf/module_clone 60287 ns/iter (± 349) 60220 ns/iter (± 283) 1.00
es/visitor/base-perf/fold_empty 63542 ns/iter (± 557) 63992 ns/iter (± 488) 0.99
es/visitor/base-perf/fold_noop_impl_all 62877 ns/iter (± 895) 64098 ns/iter (± 1428) 0.98
es/visitor/base-perf/fold_noop_impl_vec 63571 ns/iter (± 625) 63239 ns/iter (± 247) 1.01
es/visitor/base-perf/boxing_boxed_clone 55 ns/iter (± 0) 56 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 39 ns/iter (± 0) 1.03
es/visitor/base-perf/boxing_boxed 109 ns/iter (± 0) 106 ns/iter (± 0) 1.03
es/visitor/base-perf/boxing_unboxed 77 ns/iter (± 0) 75 ns/iter (± 0) 1.03
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2434 ns/iter (± 28) 2523 ns/iter (± 14) 0.96
es/base/parallel/resolver/typescript 3631224908 ns/iter (± 223271841) 3783977692 ns/iter (± 224010862) 0.96
es/base/parallel/hygiene/typescript 1419306981 ns/iter (± 12409937) 1451130430 ns/iter (± 10839597) 0.98
misc/visitors/time-complexity/time 5 130 ns/iter (± 0) 136 ns/iter (± 2) 0.96
misc/visitors/time-complexity/time 10 364 ns/iter (± 7) 375 ns/iter (± 5) 0.97
misc/visitors/time-complexity/time 15 652 ns/iter (± 11) 671 ns/iter (± 8) 0.97
misc/visitors/time-complexity/time 20 1080 ns/iter (± 59) 1053 ns/iter (± 21) 1.03
misc/visitors/time-complexity/time 40 3518 ns/iter (± 59) 3600 ns/iter (± 158) 0.98
misc/visitors/time-complexity/time 60 7256 ns/iter (± 192) 8233 ns/iter (± 4) 0.88
es/full-target/es2016 233002 ns/iter (± 3622) 230231 ns/iter (± 807) 1.01
es/full-target/es2017 222154 ns/iter (± 2860) 219617 ns/iter (± 812) 1.01
es/full-target/es2018 208997 ns/iter (± 3405) 209698 ns/iter (± 746) 1.00
es2020_nullish_coalescing 68261 ns/iter (± 922) 68969 ns/iter (± 352) 0.99
es2020_optional_chaining 78996 ns/iter (± 1212) 76588 ns/iter (± 169) 1.03
es2022_class_properties 114971 ns/iter (± 1303) 117553 ns/iter (± 325) 0.98
es2018_object_rest_spread 72356 ns/iter (± 1280) 72707 ns/iter (± 215) 1.00
es2019_optional_catch_binding 63493 ns/iter (± 859) 62273 ns/iter (± 228) 1.02
es2017_async_to_generator 62988 ns/iter (± 953) 62540 ns/iter (± 271) 1.01
es2016_exponentiation 66056 ns/iter (± 640) 66262 ns/iter (± 299) 1.00
es2015_arrow 69238 ns/iter (± 802) 69843 ns/iter (± 206) 0.99
es2015_block_scoped_fn 67421 ns/iter (± 992) 66947 ns/iter (± 217) 1.01
es2015_block_scoping 124125 ns/iter (± 1772) 117722 ns/iter (± 745) 1.05

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.