diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/8465/input.js b/crates/swc_ecma_minifier/tests/fixture/issues/8465/input.js new file mode 100644 index 00000000000..4f5f1b5e990 --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/8465/input.js @@ -0,0 +1,4 @@ +function Infinity() { + console.log("xxx"); +} +export default Infinity; diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/8465/output.js b/crates/swc_ecma_minifier/tests/fixture/issues/8465/output.js new file mode 100644 index 00000000000..fbca6caed6c --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/8465/output.js @@ -0,0 +1,3 @@ +export default function() { + console.log("xxx"); +} diff --git a/crates/swc_ecma_minifier/tests/terser_exec.rs b/crates/swc_ecma_minifier/tests/terser_exec.rs index 1d4b4046eae..1fa1b1be0fa 100644 --- a/crates/swc_ecma_minifier/tests/terser_exec.rs +++ b/crates/swc_ecma_minifier/tests/terser_exec.rs @@ -112,12 +112,12 @@ fn terser_exec(input: PathBuf) { eprintln!("Optimizing"); let output = run(cm.clone(), &handler, &input, &config); - let output_module = match output { + let output_program = match output { Some(v) => v, None => return Err(()), }; - let actual = print(cm, &[output_module], false, false); + let actual = print(cm, &[output_program], false, false); let actual_stdout = stdout_of(&actual, Duration::from_secs(5)).unwrap(); if let Some(expected_src) = expected_src { diff --git a/crates/swc_ecma_transforms_base/src/resolver/mod.rs b/crates/swc_ecma_transforms_base/src/resolver/mod.rs index 928cee64d4f..99cc82944b8 100644 --- a/crates/swc_ecma_transforms_base/src/resolver/mod.rs +++ b/crates/swc_ecma_transforms_base/src/resolver/mod.rs @@ -148,6 +148,7 @@ pub fn resolver( current: Scope::new(ScopeKind::Fn, top_level_mark, None), ident_type: IdentType::Ref, in_type: false, + is_module: false, in_ts_module: false, decl_kind: DeclKind::Lexical, strict_mode: false, @@ -204,6 +205,7 @@ struct Resolver<'a> { current: Scope<'a>, ident_type: IdentType, in_type: bool, + is_module: bool, in_ts_module: bool, decl_kind: DeclKind, strict_mode: bool, @@ -225,6 +227,7 @@ impl<'a> Resolver<'a> { current, ident_type: IdentType::Ref, in_type: false, + is_module: false, in_ts_module: false, config, decl_kind: DeclKind::Lexical, @@ -245,6 +248,7 @@ impl<'a> Resolver<'a> { ident_type: IdentType::Ref, config: self.config, in_type: self.in_type, + is_module: self.is_module, in_ts_module: self.in_ts_module, decl_kind: self.decl_kind, strict_mode: self.strict_mode, @@ -306,7 +310,9 @@ impl<'a> Resolver<'a> { return match &**sym { // https://tc39.es/ecma262/multipage/global-object.html#sec-value-properties-of-the-global-object-infinity // non configurable global value - "undefined" | "NaN" | "Infinity" if mark == self.config.top_level_mark => { + "undefined" | "NaN" | "Infinity" + if mark == self.config.top_level_mark && !self.is_module => + { Some(self.config.unresolved_mark) } _ => Some(mark), @@ -1032,6 +1038,7 @@ impl<'a> VisitMut for Resolver<'a> { fn visit_mut_module(&mut self, module: &mut Module) { self.strict_mode = true; + self.is_module = true; module.visit_mut_children_with(self) } diff --git a/crates/swc_ecma_transforms_base/tests/resolver/issues/7685/output.js b/crates/swc_ecma_transforms_base/tests/resolver/issues/7685/output.js index a31e62c38bc..fcfeaf2b43a 100644 --- a/crates/swc_ecma_transforms_base/tests/resolver/issues/7685/output.js +++ b/crates/swc_ecma_transforms_base/tests/resolver/issues/7685/output.js @@ -2,4 +2,4 @@ var NaN__2 = 1; { let NaN__3 = 1; console.log(NaN__3); -}console.log(NaN); +}console.log(NaN__2); diff --git a/crates/swc_ecma_transforms_base/tests/resolver/minifier/10/output.js b/crates/swc_ecma_transforms_base/tests/resolver/minifier/10/output.js index ef647e6cd5a..1c7a9c4c44e 100644 --- a/crates/swc_ecma_transforms_base/tests/resolver/minifier/10/output.js +++ b/crates/swc_ecma_transforms_base/tests/resolver/minifier/10/output.js @@ -1,2 +1,2 @@ var NaN__2; -console.log(NaN.toString()); +console.log(NaN__2.toString()); diff --git a/crates/swc_ecma_transforms_base/tests/resolver/minifier/11/output.js b/crates/swc_ecma_transforms_base/tests/resolver/minifier/11/output.js index 3c827c9dcef..9e66877fa24 100644 --- a/crates/swc_ecma_transforms_base/tests/resolver/minifier/11/output.js +++ b/crates/swc_ecma_transforms_base/tests/resolver/minifier/11/output.js @@ -1,2 +1,2 @@ var NaN__2 = 5; -console.log(NaN.toString()); +console.log(NaN__2.toString()); diff --git a/crates/swc_node_bundler/tests/pass/resolve-name-fix/output/entry.js b/crates/swc_node_bundler/tests/pass/resolve-name-fix/output/entry.js index 7c9ee3755d9..8809b109bec 100644 --- a/crates/swc_node_bundler/tests/pass/resolve-name-fix/output/entry.js +++ b/crates/swc_node_bundler/tests/pass/resolve-name-fix/output/entry.js @@ -4570,7 +4570,7 @@ var load228 = __swcpack_require__.bind(void 0, function(module, exports) { var Math1 = global.Math; var RangeError1 = global.RangeError; // eslint-disable-next-line no-shadow-restricted-names - global.Infinity; + var Infinity1 = global.Infinity; var BaseBuffer = $ArrayBuffer; var abs = Math1.abs; var pow = Math1.pow; @@ -4595,7 +4595,7 @@ var load228 = __swcpack_require__.bind(void 0, function(module, exports) { var e, m, c; value = abs(value); // eslint-disable-next-line no-self-compare - if (value != value || value === Infinity) { + if (value != value || value === Infinity1) { // eslint-disable-next-line no-self-compare m = value != value ? 1 : 0; e = eMax; @@ -4645,7 +4645,7 @@ var load228 = __swcpack_require__.bind(void 0, function(module, exports) { nBits += mLen; for(; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8); if (e === 0) e = 1 - eBias; - else if (e === eMax) return m ? NaN : s ? -Infinity : Infinity; + else if (e === eMax) return m ? NaN : s ? -Infinity1 : Infinity1; else { m = m + pow(2, mLen); e = e - eBias;