Skip to content

Commit

Permalink
fix(es/codegen): Fix codegen of a negative number (#5980)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #5912.
  • Loading branch information
kdy1 committed Sep 28, 2022
1 parent a3d8e4c commit bc2c0f4
Show file tree
Hide file tree
Showing 6 changed files with 632 additions and 1 deletion.
6 changes: 5 additions & 1 deletion crates/swc_ecma_codegen/src/lib.rs
Expand Up @@ -3652,7 +3652,11 @@ fn minify_number(num: f64) -> String {
let mut original = printed.clone();

if num.fract() == 0.0 && (i64::MIN as f64) <= num && num <= (i64::MAX as f64) {
let hex = format!("{:#x}", num as i64);
let hex = format!(
"{}{:#x}",
if num.is_sign_negative() { "-" } else { "" },
num as i64
);

if hex.len() < printed.len() {
printed = hex;
Expand Down
1 change: 1 addition & 0 deletions crates/swc_ecma_codegen/tests/fixture/issue-5912/input.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 31 additions & 0 deletions crates/swc_ecma_codegen/tests/fixture/issue-5912/output.js
@@ -0,0 +1,31 @@
function te(a) {
var b, c, d, e, f;
if (isNaN(a)) {
return Qe(), Pe;
}
if (a < -9223372036854775808) {
return Qe(), Ne;
}
if (a >= 9223372036854775807) {
return Qe(), Me;
}
e = false;
if (a < 0) {
e = true;
a = -a;
}
d = 0;
if (a >= 17592186044416) {
d = Bc(a / 17592186044416);
a -= d * 17592186044416;
}
c = 0;
if (a >= 4194304) {
c = Bc(a / 4194304);
a -= c * 4194304;
}
b = Bc(a);
f = de(b, c, d);
e && je(f);
return f;
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 comment on commit bc2c0f4

@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: bc2c0f4 Previous: 8c4873f Ratio
es/full/minify/libraries/antd 1945108277 ns/iter (± 77596071) 2007905531 ns/iter (± 88971870) 0.97
es/full/minify/libraries/d3 399667406 ns/iter (± 36032602) 398013102 ns/iter (± 13676957) 1.00
es/full/minify/libraries/echarts 1488803960 ns/iter (± 105592948) 1529119784 ns/iter (± 95134532) 0.97
es/full/minify/libraries/jquery 106138828 ns/iter (± 11083716) 103195793 ns/iter (± 2600636) 1.03
es/full/minify/libraries/lodash 128465371 ns/iter (± 8481592) 127528041 ns/iter (± 7207304) 1.01
es/full/minify/libraries/moment 58846561 ns/iter (± 7277334) 60300957 ns/iter (± 4586704) 0.98
es/full/minify/libraries/react 21436699 ns/iter (± 453679) 24044049 ns/iter (± 2262615) 0.89
es/full/minify/libraries/terser 305184672 ns/iter (± 2841832) 311509964 ns/iter (± 19845208) 0.98
es/full/minify/libraries/three 511730917 ns/iter (± 5439184) 518887216 ns/iter (± 56305694) 0.99
es/full/minify/libraries/typescript 3335138806 ns/iter (± 114989875) 3384522103 ns/iter (± 512581745) 0.99
es/full/minify/libraries/victory 782149711 ns/iter (± 49890128) 783701250 ns/iter (± 57080243) 1.00
es/full/minify/libraries/vue 152016958 ns/iter (± 3637866) 160310806 ns/iter (± 26361830) 0.95
es/full/codegen/es3 34808 ns/iter (± 3348) 34322 ns/iter (± 614) 1.01
es/full/codegen/es5 34676 ns/iter (± 3616) 34437 ns/iter (± 1010) 1.01
es/full/codegen/es2015 34698 ns/iter (± 1771) 34786 ns/iter (± 2772) 1.00
es/full/codegen/es2016 34538 ns/iter (± 3101) 34787 ns/iter (± 2104) 0.99
es/full/codegen/es2017 34900 ns/iter (± 3083) 34395 ns/iter (± 751) 1.01
es/full/codegen/es2018 34700 ns/iter (± 3412) 34495 ns/iter (± 2165) 1.01
es/full/codegen/es2019 36605 ns/iter (± 5831) 34316 ns/iter (± 2948) 1.07
es/full/codegen/es2020 34823 ns/iter (± 1876) 34360 ns/iter (± 2148) 1.01
es/full/all/es3 217252743 ns/iter (± 20851949) 195462334 ns/iter (± 20792479) 1.11
es/full/all/es5 196535919 ns/iter (± 23426926) 210167802 ns/iter (± 26599376) 0.94
es/full/all/es2015 153366324 ns/iter (± 13527765) 154312499 ns/iter (± 22325741) 0.99
es/full/all/es2016 148125665 ns/iter (± 10242162) 148706601 ns/iter (± 13489313) 1.00
es/full/all/es2017 163945974 ns/iter (± 14146921) 155748651 ns/iter (± 14776652) 1.05
es/full/all/es2018 161949574 ns/iter (± 12333155) 152840579 ns/iter (± 18292527) 1.06
es/full/all/es2019 144131574 ns/iter (± 15397045) 142309851 ns/iter (± 9770928) 1.01
es/full/all/es2020 139611264 ns/iter (± 13375170) 140043893 ns/iter (± 8299070) 1.00
es/full/parser 729479 ns/iter (± 42186) 729707 ns/iter (± 25234) 1.00
es/full/base/fixer 25553 ns/iter (± 745) 25989 ns/iter (± 928) 0.98
es/full/base/resolver_and_hygiene 93273 ns/iter (± 4962) 95245 ns/iter (± 6563) 0.98
serialization of ast node 211 ns/iter (± 4) 217 ns/iter (± 4) 0.97
serialization of serde 226 ns/iter (± 7) 224 ns/iter (± 2) 1.01

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

Please sign in to comment.