From a0bb8bfc931cf530e2997d89933db1c165f70976 Mon Sep 17 00:00:00 2001 From: Parbez Date: Fri, 12 Jul 2024 17:51:34 +0000 Subject: [PATCH 01/11] fix: large numeric literals --- crates/swc_ecma_codegen/src/lib.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/swc_ecma_codegen/src/lib.rs b/crates/swc_ecma_codegen/src/lib.rs index 3f6036138e4c..b0c5934d6122 100644 --- a/crates/swc_ecma_codegen/src/lib.rs +++ b/crates/swc_ecma_codegen/src/lib.rs @@ -702,16 +702,6 @@ where self.emit_leading_comments_of_span(num.span(), false)?; - // Handle infinity - if num.value.is_infinite() { - if num.value.is_sign_negative() { - self.wr.write_str_lit(num.span, "-")?; - } - self.wr.write_str_lit(num.span, "Infinity")?; - - return Ok(false); - } - let mut striped_raw = None; let mut value = String::default(); @@ -753,6 +743,16 @@ where } } } + + // Handle infinity + if num.value.is_infinite() { + if num.value.is_sign_negative() { + self.wr.write_str_lit(num.span, "-")?; + } + self.wr.write_str_lit(num.span, "Infinity")?; + + return Ok(false); + } // fast return if !detect_dot { From 90d7e625919c1a5559d65e857972852dbb079caa Mon Sep 17 00:00:00 2001 From: parbez Date: Sat, 13 Jul 2024 00:44:12 +0530 Subject: [PATCH 02/11] fix: +ve part --- crates/swc_ecma_codegen/src/lib.rs | 20 +++++++++---------- .../src/simplify/expr/tests.rs | 6 ++++++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/crates/swc_ecma_codegen/src/lib.rs b/crates/swc_ecma_codegen/src/lib.rs index b0c5934d6122..43bb46df21e6 100644 --- a/crates/swc_ecma_codegen/src/lib.rs +++ b/crates/swc_ecma_codegen/src/lib.rs @@ -702,6 +702,16 @@ where self.emit_leading_comments_of_span(num.span(), false)?; + // Handle infinity + if num.value.is_infinite() && num.raw.is_none() { + if num.value.is_sign_negative() { + self.wr.write_str_lit(num.span, "-")?; + } + self.wr.write_str_lit(num.span, "Infinity")?; + + return Ok(false); + } + let mut striped_raw = None; let mut value = String::default(); @@ -743,16 +753,6 @@ where } } } - - // Handle infinity - if num.value.is_infinite() { - if num.value.is_sign_negative() { - self.wr.write_str_lit(num.span, "-")?; - } - self.wr.write_str_lit(num.span, "Infinity")?; - - return Ok(false); - } // fast return if !detect_dot { diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/expr/tests.rs b/crates/swc_ecma_transforms_optimization/src/simplify/expr/tests.rs index ba3ad6f30150..b1ca354f5ecd 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/expr/tests.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/expr/tests.rs @@ -843,6 +843,12 @@ fn test_fold_arithmetic_infinity() { fold("x = Infinity ** -2", "x = 0"); } +#[test] +fn test_fold_arithmetic_large_number() { + fold("x = -1e999", "x = -1e999"); + fold("x = 1e999", "x = 1e999"); +} + #[test] fn test_fold_arithmetic_string_comp() { fold("x = 10 - 20", "x = -10"); From c826ab6b2b9f077f488ed657eb7e41090356147d Mon Sep 17 00:00:00 2001 From: parbez Date: Sat, 13 Jul 2024 13:04:39 +0530 Subject: [PATCH 03/11] test: use fixture --- .../8935/input/src/button.swc-stderr | 2 +- .../fixture/issues-9xxx/9223/input/.swcrc | 19 +++++++++++++++++++ .../issues-9xxx/9223/input/large-number.js | 2 ++ .../issues-9xxx/9223/output/large-number.js | 2 ++ .../src/simplify/expr/tests.rs | 6 ------ 5 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 crates/swc/tests/fixture/issues-9xxx/9223/input/.swcrc create mode 100644 crates/swc/tests/fixture/issues-9xxx/9223/input/large-number.js create mode 100644 crates/swc/tests/fixture/issues-9xxx/9223/output/large-number.js diff --git a/crates/swc/tests/fixture/issues-8xxx/8935/input/src/button.swc-stderr b/crates/swc/tests/fixture/issues-8xxx/8935/input/src/button.swc-stderr index 93f382c11901..32f20a98c344 100644 --- a/crates/swc/tests/fixture/issues-8xxx/8935/input/src/button.swc-stderr +++ b/crates/swc/tests/fixture/issues-8xxx/8935/input/src/button.swc-stderr @@ -7,5 +7,5 @@ 3 | }export function Button(props) { : ^^^|^^ : `-- `Button` redefined here - 4 | return