Skip to content

Commit

Permalink
fix(es/typescript): Fix computation of enum bits (#7219)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7218.
  • Loading branch information
magic-akari committed Apr 6, 2023
1 parent 352aa7a commit 29bf176
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 7 deletions.
9 changes: 9 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7218/input/index.ts
@@ -0,0 +1,9 @@
export enum Test {
A = 1 << 30, // 1073741824
B = 1 << 31, // -2147483648
C = (1 << 30) | (1 << 31), // -1073741824
}

const a = 1 << 30; // 1073741824
const b = 1 << 31; // -2147483648
const c = (1 << 30) | (1 << 31); // -1073741824
9 changes: 9 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7218/output/index.ts
@@ -0,0 +1,9 @@
export var Test;
(function(Test) {
Test[Test["A"] = 1073741824] = "A";
Test[Test["B"] = -2147483648] = "B";
Test[Test["C"] = -1073741824] = "C";
})(Test || (Test = {}));
var a = 1 << 30; // 1073741824
var b = 1 << 31; // -2147483648
var c = 1 << 30 | 1 << 31; // -1073741824
16 changes: 9 additions & 7 deletions crates/swc_ecma_transforms_typescript/src/strip.rs
Expand Up @@ -541,14 +541,16 @@ where
op!("/") => l / r,

// TODO
op!("&") => ((l.round() as i64) & (r.round() as i64)) as _,
op!("|") => ((l.round() as i64) | (r.round() as i64)) as _,
op!("^") => ((l.round() as i64) ^ (r.round() as i64)) as _,

op!("<<") => ((l.round() as i64) << (r.round() as i64)) as _,
op!(">>") => ((l.round() as i64) >> (r.round() as i64)) as _,
op!("&") => ((l.trunc() as i32) & (r.trunc() as i32)) as _,
op!("|") => ((l.trunc() as i32) | (r.trunc() as i32)) as _,
op!("^") => ((l.trunc() as i32) ^ (r.trunc() as i32)) as _,
op!("<<") => (l.trunc() as i32).wrapping_shl(r.trunc() as u32) as _,
op!(">>") => (l.trunc() as i32).wrapping_shr(r.trunc() as u32) as _,
// TODO: Verify this
op!(">>>") => ((l.round() as u64) >> (r.round() as u64)) as _,
op!(">>>") => {
(l.trunc() as u32).wrapping_shr(r.trunc() as u32) as _
}

_ => return Err(()),
},
raw: None,
Expand Down

1 comment on commit 29bf176

@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: 29bf176 Previous: e86d598 Ratio
es/full/bugs-1 313216 ns/iter (± 19124) 317852 ns/iter (± 10340) 0.99
es/full/minify/libraries/antd 1718337751 ns/iter (± 21939043) 1675114375 ns/iter (± 21263191) 1.03
es/full/minify/libraries/d3 322602712 ns/iter (± 13295432) 311877539 ns/iter (± 7669658) 1.03
es/full/minify/libraries/echarts 1301575524 ns/iter (± 7647533) 1294078326 ns/iter (± 13324040) 1.01
es/full/minify/libraries/jquery 93505495 ns/iter (± 1963386) 91651760 ns/iter (± 628928) 1.02
es/full/minify/libraries/lodash 109557504 ns/iter (± 2040503) 108084509 ns/iter (± 1343574) 1.01
es/full/minify/libraries/moment 53737654 ns/iter (± 487012) 52845302 ns/iter (± 325572) 1.02
es/full/minify/libraries/react 19356310 ns/iter (± 269376) 19324951 ns/iter (± 190056) 1.00
es/full/minify/libraries/terser 261999112 ns/iter (± 5986185) 255844778 ns/iter (± 4009147) 1.02
es/full/minify/libraries/three 473190603 ns/iter (± 9015928) 463931308 ns/iter (± 6464712) 1.02
es/full/minify/libraries/typescript 3157048692 ns/iter (± 29360778) 3183854514 ns/iter (± 19702288) 0.99
es/full/minify/libraries/victory 710037195 ns/iter (± 10173852) 709433496 ns/iter (± 6328066) 1.00
es/full/minify/libraries/vue 135142259 ns/iter (± 2261328) 135390988 ns/iter (± 2627594) 1.00
es/full/codegen/es3 28546 ns/iter (± 108) 28406 ns/iter (± 54) 1.00
es/full/codegen/es5 28539 ns/iter (± 77) 28598 ns/iter (± 34) 1.00
es/full/codegen/es2015 28559 ns/iter (± 67) 28568 ns/iter (± 37) 1.00
es/full/codegen/es2016 28633 ns/iter (± 53) 28534 ns/iter (± 45) 1.00
es/full/codegen/es2017 28583 ns/iter (± 60) 28538 ns/iter (± 65) 1.00
es/full/codegen/es2018 28598 ns/iter (± 107) 28501 ns/iter (± 66) 1.00
es/full/codegen/es2019 28581 ns/iter (± 55) 28512 ns/iter (± 58) 1.00
es/full/codegen/es2020 28604 ns/iter (± 56) 28541 ns/iter (± 35) 1.00
es/full/all/es3 183341317 ns/iter (± 3307410) 181313831 ns/iter (± 4450676) 1.01
es/full/all/es5 170774806 ns/iter (± 3576268) 170172485 ns/iter (± 3565830) 1.00
es/full/all/es2015 135627928 ns/iter (± 2645015) 134115961 ns/iter (± 1574694) 1.01
es/full/all/es2016 134293127 ns/iter (± 1583264) 131487974 ns/iter (± 1065251) 1.02
es/full/all/es2017 131926852 ns/iter (± 2894526) 130768561 ns/iter (± 1363486) 1.01
es/full/all/es2018 127290224 ns/iter (± 2445613) 125683266 ns/iter (± 1704260) 1.01
es/full/all/es2019 124988799 ns/iter (± 1867643) 125125942 ns/iter (± 1901594) 1.00
es/full/all/es2020 118626800 ns/iter (± 1678973) 117706285 ns/iter (± 1079324) 1.01
es/full/parser 519944 ns/iter (± 8497) 519958 ns/iter (± 10713) 1.00
es/full/base/fixer 23908 ns/iter (± 44) 22298 ns/iter (± 22) 1.07
es/full/base/resolver_and_hygiene 86798 ns/iter (± 119) 83940 ns/iter (± 111) 1.03
serialization of serde 121 ns/iter (± 0) 120 ns/iter (± 0) 1.01
css/minify/libraries/bootstrap 28053072 ns/iter (± 96641) 28952111 ns/iter (± 319813) 0.97
css/visitor/compare/clone 2125911 ns/iter (± 13255) 2087764 ns/iter (± 24787) 1.02
css/visitor/compare/visit_mut_span 2328496 ns/iter (± 7794) 2323908 ns/iter (± 18626) 1.00
css/visitor/compare/visit_mut_span_panic 2375483 ns/iter (± 13318) 2386237 ns/iter (± 4995) 1.00
css/visitor/compare/fold_span 3097449 ns/iter (± 13512) 3119620 ns/iter (± 37037) 0.99
css/visitor/compare/fold_span_panic 3299278 ns/iter (± 25789) 3264578 ns/iter (± 18766) 1.01
css/lexer/bootstrap_5_1_3 5138769 ns/iter (± 13598) 5129093 ns/iter (± 12584) 1.00
css/lexer/foundation_6_7_4 4347796 ns/iter (± 1110) 4309222 ns/iter (± 966) 1.01
css/lexer/tailwind_3_1_1 829645 ns/iter (± 450) 819641 ns/iter (± 208) 1.01
css/parser/bootstrap_5_1_3 21848205 ns/iter (± 136802) 21563694 ns/iter (± 220832) 1.01
css/parser/foundation_6_7_4 17310432 ns/iter (± 96648) 16911313 ns/iter (± 131715) 1.02
css/parser/tailwind_3_1_1 3239811 ns/iter (± 2718) 3215620 ns/iter (± 5967) 1.01
es/codegen/colors 319205 ns/iter (± 179048) 318155 ns/iter (± 179460) 1.00
es/codegen/large 1254491 ns/iter (± 666075) 1283057 ns/iter (± 649573) 0.98
es/codegen/with-parser/colors 46525 ns/iter (± 86) 46439 ns/iter (± 280) 1.00
es/codegen/with-parser/large 502923 ns/iter (± 912) 501316 ns/iter (± 1459) 1.00
es/minify/libraries/antd 1492444067 ns/iter (± 15183991) 1499462843 ns/iter (± 18869320) 1.00
es/minify/libraries/d3 276374858 ns/iter (± 5129867) 272206835 ns/iter (± 5423015) 1.02
es/minify/libraries/echarts 1142937029 ns/iter (± 9012060) 1131937668 ns/iter (± 8692031) 1.01
es/minify/libraries/jquery 81547685 ns/iter (± 1028406) 81606302 ns/iter (± 709222) 1.00
es/minify/libraries/lodash 98908271 ns/iter (± 1578756) 97735476 ns/iter (± 812658) 1.01
es/minify/libraries/moment 46560353 ns/iter (± 386548) 46504598 ns/iter (± 313229) 1.00
es/minify/libraries/react 17419336 ns/iter (± 219082) 17486760 ns/iter (± 211700) 1.00
es/minify/libraries/terser 226215390 ns/iter (± 3096409) 218933570 ns/iter (± 2469430) 1.03
es/minify/libraries/three 395828764 ns/iter (± 9566426) 388974662 ns/iter (± 8133768) 1.02
es/minify/libraries/typescript 2667650481 ns/iter (± 23697600) 2691744754 ns/iter (± 24969286) 0.99
es/minify/libraries/victory 633714352 ns/iter (± 9791495) 618215111 ns/iter (± 10490581) 1.03
es/minify/libraries/vue 120631536 ns/iter (± 997190) 119110475 ns/iter (± 1793404) 1.01
es/visitor/compare/clone 2332782 ns/iter (± 7453) 2315315 ns/iter (± 10541) 1.01
es/visitor/compare/visit_mut_span 2716574 ns/iter (± 6591) 2690495 ns/iter (± 13972) 1.01
es/visitor/compare/visit_mut_span_panic 2752112 ns/iter (± 18688) 2742842 ns/iter (± 8504) 1.00
es/visitor/compare/fold_span 3875822 ns/iter (± 33370) 3817372 ns/iter (± 22478) 1.02
es/visitor/compare/fold_span_panic 3978344 ns/iter (± 29677) 3967679 ns/iter (± 18927) 1.00
es/lexer/colors 12927 ns/iter (± 65) 13114 ns/iter (± 27) 0.99
es/lexer/angular 6325567 ns/iter (± 7284) 6326871 ns/iter (± 2361) 1.00
es/lexer/backbone 779221 ns/iter (± 223) 779770 ns/iter (± 159) 1.00
es/lexer/jquery 4359274 ns/iter (± 2843) 4372241 ns/iter (± 5430) 1.00
es/lexer/jquery mobile 6801831 ns/iter (± 2043) 6830659 ns/iter (± 2971) 1.00
es/lexer/mootools 3423194 ns/iter (± 13578) 3420190 ns/iter (± 1158) 1.00
es/lexer/underscore 643450 ns/iter (± 230) 644138 ns/iter (± 210) 1.00
es/lexer/three 20742346 ns/iter (± 22761) 20764499 ns/iter (± 19395) 1.00
es/lexer/yui 3832499 ns/iter (± 1507) 3823929 ns/iter (± 1652) 1.00
es/parser/colors 28628 ns/iter (± 42) 28618 ns/iter (± 79) 1.00
es/parser/angular 15393043 ns/iter (± 179118) 15018193 ns/iter (± 178071) 1.02
es/parser/backbone 2163715 ns/iter (± 14116) 2154482 ns/iter (± 11627) 1.00
es/parser/jquery 11963110 ns/iter (± 120330) 11956270 ns/iter (± 183988) 1.00
es/parser/jquery mobile 19088144 ns/iter (± 261323) 19200386 ns/iter (± 374434) 0.99
es/parser/mootools 8878811 ns/iter (± 31614) 8954061 ns/iter (± 113105) 0.99
es/parser/underscore 1831705 ns/iter (± 11122) 1823083 ns/iter (± 10834) 1.00
es/parser/three 56312628 ns/iter (± 246064) 56028109 ns/iter (± 228365) 1.01
es/parser/yui 9102650 ns/iter (± 62468) 9103933 ns/iter (± 93037) 1.00
es/preset-env/usage/builtin_type 143185 ns/iter (± 33785) 144197 ns/iter (± 34743) 0.99
es/preset-env/usage/property 21006 ns/iter (± 85) 21208 ns/iter (± 87) 0.99
es/resolver/typescript 122063215 ns/iter (± 3675970) 122211472 ns/iter (± 3472679) 1.00
es/fixer/typescript 88314191 ns/iter (± 2125323) 90406238 ns/iter (± 550772) 0.98
es/hygiene/typescript 189908825 ns/iter (± 2398242) 191418358 ns/iter (± 1820781) 0.99
es/resolver_with_hygiene/typescript 340671684 ns/iter (± 1953378) 340430826 ns/iter (± 2394374) 1.00
es/visitor/base-perf/module_clone 80464 ns/iter (± 407) 80445 ns/iter (± 435) 1.00
es/visitor/base-perf/fold_empty 90677 ns/iter (± 428) 90170 ns/iter (± 460) 1.01
es/visitor/base-perf/fold_noop_impl_all 90806 ns/iter (± 275) 90916 ns/iter (± 349) 1.00
es/visitor/base-perf/fold_noop_impl_vec 91371 ns/iter (± 349) 91261 ns/iter (± 306) 1.00
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 61 ns/iter (± 0) 0.92
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 41 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 101 ns/iter (± 0) 107 ns/iter (± 0) 0.94
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 78 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 3373 ns/iter (± 57) 3277 ns/iter (± 63) 1.03
es/base/parallel/resolver/typescript 6599639811 ns/iter (± 654346091) 6340572070 ns/iter (± 461687158) 1.04
es/base/parallel/hygiene/typescript 2219663313 ns/iter (± 26072352) 2224581614 ns/iter (± 21861758) 1.00
misc/visitors/time-complexity/time 5 102 ns/iter (± 0) 103 ns/iter (± 5) 0.99
misc/visitors/time-complexity/time 10 342 ns/iter (± 6) 354 ns/iter (± 10) 0.97
misc/visitors/time-complexity/time 15 669 ns/iter (± 17) 679 ns/iter (± 11) 0.99
misc/visitors/time-complexity/time 20 1240 ns/iter (± 0) 1273 ns/iter (± 16) 0.97
misc/visitors/time-complexity/time 40 6925 ns/iter (± 7) 6771 ns/iter (± 56) 1.02
misc/visitors/time-complexity/time 60 17227 ns/iter (± 117) 17145 ns/iter (± 46) 1.00
es/full-target/es2016 252336 ns/iter (± 3079) 252294 ns/iter (± 601) 1.00
es/full-target/es2017 245315 ns/iter (± 326) 246247 ns/iter (± 544) 1.00
es/full-target/es2018 235095 ns/iter (± 239) 234745 ns/iter (± 321) 1.00
es2020_nullish_coalescing 95002 ns/iter (± 238) 92723 ns/iter (± 272) 1.02
es2020_optional_chaining 124228 ns/iter (± 244) 124492 ns/iter (± 615) 1.00
es2022_class_properties 148265 ns/iter (± 267) 148709 ns/iter (± 257) 1.00
es2018_object_rest_spread 96044 ns/iter (± 220) 96124 ns/iter (± 224) 1.00
es2019_optional_catch_binding 85416 ns/iter (± 148) 85666 ns/iter (± 215) 1.00
es2017_async_to_generator 85927 ns/iter (± 151) 85790 ns/iter (± 152) 1.00
es2016_exponentiation 90380 ns/iter (± 187) 90416 ns/iter (± 162) 1.00
es2015_arrow 93784 ns/iter (± 179) 93768 ns/iter (± 182) 1.00
es2015_block_scoped_fn 92013 ns/iter (± 243) 91787 ns/iter (± 172) 1.00
es2015_block_scoping 170411 ns/iter (± 196) 170075 ns/iter (± 437) 1.00

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

Please sign in to comment.