Skip to content

Commit

Permalink
fix(es/resolver): Correctly resolve global value (#7893)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7685
  • Loading branch information
Austaras committed Aug 31, 2023
1 parent 15d3900 commit 2db10e9
Show file tree
Hide file tree
Showing 11 changed files with 49 additions and 34 deletions.
Expand Up @@ -3,8 +3,9 @@
console.log(Infinity);
if (Infinity > 4) console.log("Infinity");
}{
let NaN1 = 3;
let NaN = 3;
console.log(NaN);
if (NaN < 4) console.log("NaN");
}{
let undefined = 3;
console.log(undefined);
Expand Down
@@ -1,14 +1,14 @@
var a = 0;
function n(n) {
function f(n) {
function f(n) {
if ((false <= NaN) & (this >> 1 >= 0)) {
a++;
var n = 0;
function a(a) {
function f(a) {
function f(a) {
if ((false <= a) & (this >> 1 >= 0)) {
n++;
}
}
var o = f(NaN, a++);
var o = f(NaN, n++);
}
var n = f(-3, -1);
var a = f(-3, -1);
}
n(false);
console.log(a);
a(false);
console.log(n);
Expand Up @@ -2,7 +2,7 @@ var n = "FAIL";
(function() {
function o() {
function o(o) {
(true << NaN) - 0 / 0 || (n = "PASS");
(true << o) - 0 / 0 || (n = "PASS");
}
o([]);
}
Expand Down
@@ -1,15 +1,15 @@
var c = "FAIL";
(function() {
function n(n, a) {
function o() {
function n(n, o) {
function a() {
switch(n){
case n:
break;
case ((c = "PASS"), NaN):
case ((c = "PASS"), o):
break;
}
}
o();
a();
}
n(0 / 0);
})();
Expand Down
@@ -1,15 +1,15 @@
var c = "FAIL";
(function() {
function n(n, a) {
function o() {
function n(n, o) {
function a() {
switch(n){
case n:
break;
case ((c = "PASS"), NaN):
case ((c = "PASS"), o):
break;
}
}
o();
a();
}
n(0 / 0);
})();
Expand Down
@@ -1,3 +1,3 @@
var Infinity, NaN1;
Infinity.toString();
(1 / 0).toString();
NaN.toString();
@@ -1,3 +1,3 @@
var t, r;
t.toString();
var t, i;
Infinity.toString();
NaN.toString();
18 changes: 11 additions & 7 deletions crates/swc_ecma_transforms_base/src/resolver/mod.rs
@@ -1,5 +1,5 @@
use rustc_hash::FxHashSet;
use swc_atoms::{js_word, JsWord};
use swc_atoms::JsWord;
use swc_common::{
collections::{AHashMap, AHashSet},
Mark, Span, SyntaxContext,
Expand Down Expand Up @@ -269,11 +269,6 @@ impl<'a> Resolver<'a> {
}

fn mark_for_ref_inner(&self, sym: &JsWord, stop_an_fn_scope: bool) -> Option<Mark> {
// NaN always points the globals
if *sym == js_word!("NaN") {
return Some(self.config.unresolved_mark);
}

if self.config.handle_types && self.in_type {
let mut mark = self.current.mark;
let mut scope = Some(&self.current);
Expand Down Expand Up @@ -307,7 +302,16 @@ impl<'a> Resolver<'a> {
if mark == Mark::root() {
return None;
}
return Some(mark);

return match &**sym {
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects#value_properties
"undefined" | "NaN" | "Infinity" | "globalThis"
if mark == self.config.top_level_mark =>
{
Some(self.config.unresolved_mark)
}
_ => Some(mark),
};
}

if cur.kind == ScopeKind::Fn && stop_an_fn_scope {
Expand Down
@@ -0,0 +1,6 @@
var NaN = 1;
{
let NaN = 1;
console.log(NaN);
}
console.log(NaN);
@@ -0,0 +1,5 @@
var NaN__2 = 1;
{
let NaN__3 = 1;
console.log(NaN__3);
}console.log(NaN);
Expand Up @@ -4569,8 +4569,7 @@ var load228 = __swcpack_require__.bind(void 0, function(module, exports) {
var $DataView = global[DATA_VIEW];
var Math1 = global.Math;
var RangeError1 = global.RangeError;
// eslint-disable-next-line no-shadow-restricted-names
var Infinity1 = global.Infinity;
global.Infinity;
var BaseBuffer = $ArrayBuffer;
var abs = Math1.abs;
var pow = Math1.pow;
Expand All @@ -4595,7 +4594,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 === Infinity1) {
if (value != value || value === Infinity) {
// eslint-disable-next-line no-self-compare
m = value != value ? 1 : 0;
e = eMax;
Expand Down Expand Up @@ -4645,7 +4644,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 ? -Infinity1 : Infinity1;
else if (e === eMax) return m ? NaN : s ? -Infinity : Infinity;
else {
m = m + pow(2, mLen);
e = e - eBias;
Expand Down

1 comment on commit 2db10e9

@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: 2db10e9 Previous: 5fbc251 Ratio
es/full/bugs-1 283912 ns/iter (± 8826) 295534 ns/iter (± 10332) 0.96
es/full/minify/libraries/antd 1387151075 ns/iter (± 43279686) 1287433065 ns/iter (± 16011923) 1.08
es/full/minify/libraries/d3 279476166 ns/iter (± 6418360) 271526459 ns/iter (± 4067750) 1.03
es/full/minify/libraries/echarts 1059269407 ns/iter (± 13395724) 1032901563 ns/iter (± 3348705) 1.03
es/full/minify/libraries/jquery 83674326 ns/iter (± 2098319) 83648079 ns/iter (± 90505) 1.00
es/full/minify/libraries/lodash 97509221 ns/iter (± 1270908) 96563634 ns/iter (± 312015) 1.01
es/full/minify/libraries/moment 50379231 ns/iter (± 615295) 49404532 ns/iter (± 54777) 1.02
es/full/minify/libraries/react 18279801 ns/iter (± 251520) 17853802 ns/iter (± 51558) 1.02
es/full/minify/libraries/terser 218638828 ns/iter (± 1072105) 216185706 ns/iter (± 635810) 1.01
es/full/minify/libraries/three 388579637 ns/iter (± 2654853) 379960294 ns/iter (± 1571916) 1.02
es/full/minify/libraries/typescript 2606384876 ns/iter (± 17265830) 2610700544 ns/iter (± 7598975) 1.00
es/full/minify/libraries/victory 566023858 ns/iter (± 8551319) 550248145 ns/iter (± 1962749) 1.03
es/full/minify/libraries/vue 119065553 ns/iter (± 1123031) 117798819 ns/iter (± 237267) 1.01
es/full/codegen/es3 34779 ns/iter (± 100) 33671 ns/iter (± 169) 1.03
es/full/codegen/es5 34799 ns/iter (± 78) 33527 ns/iter (± 64) 1.04
es/full/codegen/es2015 34666 ns/iter (± 130) 33579 ns/iter (± 69) 1.03
es/full/codegen/es2016 34805 ns/iter (± 184) 33598 ns/iter (± 70) 1.04
es/full/codegen/es2017 34799 ns/iter (± 103) 33622 ns/iter (± 96) 1.04
es/full/codegen/es2018 34742 ns/iter (± 103) 33582 ns/iter (± 112) 1.03
es/full/codegen/es2019 34750 ns/iter (± 96) 33652 ns/iter (± 130) 1.03
es/full/codegen/es2020 34702 ns/iter (± 112) 33609 ns/iter (± 103) 1.03
es/full/all/es3 170418074 ns/iter (± 1030376) 168654423 ns/iter (± 1645465) 1.01
es/full/all/es5 163186057 ns/iter (± 982212) 160793169 ns/iter (± 1749270) 1.01
es/full/all/es2015 122704269 ns/iter (± 1243922) 120402864 ns/iter (± 700880) 1.02
es/full/all/es2016 121178079 ns/iter (± 717310) 118775327 ns/iter (± 1149100) 1.02
es/full/all/es2017 121910633 ns/iter (± 1347717) 118051257 ns/iter (± 799823) 1.03
es/full/all/es2018 118839202 ns/iter (± 658475) 117049071 ns/iter (± 786136) 1.02
es/full/all/es2019 118458140 ns/iter (± 736142) 115904265 ns/iter (± 496237) 1.02
es/full/all/es2020 114094292 ns/iter (± 680680) 110990147 ns/iter (± 565794) 1.03
es/full/parser 492172 ns/iter (± 6074) 490378 ns/iter (± 5878) 1.00
es/full/base/fixer 18024 ns/iter (± 73) 17887 ns/iter (± 43) 1.01
es/full/base/resolver_and_hygiene 81678 ns/iter (± 99) 79193 ns/iter (± 130) 1.03
serialization of serde 289 ns/iter (± 4) 293 ns/iter (± 0) 0.99
css/minify/libraries/bootstrap 28619273 ns/iter (± 110070) 28778211 ns/iter (± 145085) 0.99
css/visitor/compare/clone 1630892 ns/iter (± 4099) 1620359 ns/iter (± 2372) 1.01
css/visitor/compare/visit_mut_span 1767706 ns/iter (± 27703) 1740846 ns/iter (± 4192) 1.02
css/visitor/compare/visit_mut_span_panic 1829829 ns/iter (± 3897) 1814951 ns/iter (± 3513) 1.01
css/visitor/compare/fold_span 2569404 ns/iter (± 7589) 2539796 ns/iter (± 8938) 1.01
css/visitor/compare/fold_span_panic 2771202 ns/iter (± 14626) 2735037 ns/iter (± 6445) 1.01
css/lexer/bootstrap_5_1_3 4482737 ns/iter (± 27432) 4463322 ns/iter (± 27183) 1.00
css/lexer/foundation_6_7_4 3767219 ns/iter (± 1710) 3749572 ns/iter (± 1780) 1.00
css/lexer/tailwind_3_1_1 721296 ns/iter (± 529) 711613 ns/iter (± 805) 1.01
css/parser/bootstrap_5_1_3 18916010 ns/iter (± 93385) 18759974 ns/iter (± 58896) 1.01
css/parser/foundation_6_7_4 15167360 ns/iter (± 11829) 14982478 ns/iter (± 15846) 1.01
css/parser/tailwind_3_1_1 2947867 ns/iter (± 2889) 2925712 ns/iter (± 4243) 1.01
es/codegen/colors 739718 ns/iter (± 405795) 732574 ns/iter (± 399654) 1.01
es/codegen/large 2894434 ns/iter (± 1541644) 3145990 ns/iter (± 1673982) 0.92
es/codegen/with-parser/colors 45739 ns/iter (± 369) 45524 ns/iter (± 452) 1.00
es/codegen/with-parser/large 488750 ns/iter (± 1050) 483446 ns/iter (± 811) 1.01
es/minify/libraries/antd 1189921217 ns/iter (± 24777760) 1121835368 ns/iter (± 15930869) 1.06
es/minify/libraries/d3 241690002 ns/iter (± 3973949) 236087351 ns/iter (± 304199) 1.02
es/minify/libraries/echarts 929250298 ns/iter (± 14305652) 881780668 ns/iter (± 4054764) 1.05
es/minify/libraries/jquery 74091008 ns/iter (± 679624) 72765552 ns/iter (± 181108) 1.02
es/minify/libraries/lodash 89933913 ns/iter (± 1593782) 86375360 ns/iter (± 115158) 1.04
es/minify/libraries/moment 44842757 ns/iter (± 535413) 43261510 ns/iter (± 53240) 1.04
es/minify/libraries/react 16461104 ns/iter (± 172027) 15975849 ns/iter (± 37718) 1.03
es/minify/libraries/terser 207764340 ns/iter (± 14025357) 182095544 ns/iter (± 397633) 1.14
es/minify/libraries/three 344675299 ns/iter (± 12511346) 313701193 ns/iter (± 840488) 1.10
es/minify/libraries/typescript 2415635259 ns/iter (± 97052558) 2161518137 ns/iter (± 14609210) 1.12
es/minify/libraries/victory 548764827 ns/iter (± 53824652) 464037943 ns/iter (± 1132512) 1.18
es/minify/libraries/vue 109181872 ns/iter (± 1198241) 105099313 ns/iter (± 156711) 1.04
es/visitor/compare/clone 1926332 ns/iter (± 5664) 1921050 ns/iter (± 7979) 1.00
es/visitor/compare/visit_mut_span 2279813 ns/iter (± 4642) 2267698 ns/iter (± 3669) 1.01
es/visitor/compare/visit_mut_span_panic 2323074 ns/iter (± 92057) 2303286 ns/iter (± 4166) 1.01
es/visitor/compare/fold_span 3347345 ns/iter (± 15696) 3311467 ns/iter (± 6122) 1.01
es/visitor/compare/fold_span_panic 3490840 ns/iter (± 12145) 3459298 ns/iter (± 6616) 1.01
es/lexer/colors 13439 ns/iter (± 30) 13192 ns/iter (± 68) 1.02
es/lexer/angular 6170633 ns/iter (± 9665) 6144332 ns/iter (± 5007) 1.00
es/lexer/backbone 796475 ns/iter (± 1151) 787060 ns/iter (± 951) 1.01
es/lexer/jquery 4513122 ns/iter (± 1723) 4515129 ns/iter (± 7456) 1.00
es/lexer/jquery mobile 6846380 ns/iter (± 7820) 6914362 ns/iter (± 92929) 0.99
es/lexer/mootools 3580023 ns/iter (± 2186) 3574646 ns/iter (± 16840) 1.00
es/lexer/underscore 661820 ns/iter (± 1104) 666026 ns/iter (± 2298) 0.99
es/lexer/three 21419139 ns/iter (± 16815) 21404097 ns/iter (± 24478) 1.00
es/lexer/yui 3832845 ns/iter (± 3988) 3821840 ns/iter (± 5845) 1.00
es/parser/colors 27533 ns/iter (± 60) 27962 ns/iter (± 25) 0.98
es/parser/angular 13553185 ns/iter (± 301283) 13508891 ns/iter (± 72995) 1.00
es/parser/backbone 1996511 ns/iter (± 18119) 2004527 ns/iter (± 10208) 1.00
es/parser/jquery 11439368 ns/iter (± 89947) 10944260 ns/iter (± 33683) 1.05
es/parser/jquery mobile 17734566 ns/iter (± 150576) 16802240 ns/iter (± 43343) 1.06
es/parser/mootools 8537799 ns/iter (± 32544) 8410119 ns/iter (± 17581) 1.02
es/parser/underscore 1734744 ns/iter (± 3154) 1730216 ns/iter (± 9897) 1.00
es/parser/three 47147502 ns/iter (± 436722) 46656503 ns/iter (± 137422) 1.01
es/parser/yui 8304175 ns/iter (± 39894) 8285310 ns/iter (± 35543) 1.00
es/preset-env/usage/builtin_type 137479 ns/iter (± 32450) 136133 ns/iter (± 32353) 1.01
es/preset-env/usage/property 17071 ns/iter (± 66) 16668 ns/iter (± 64) 1.02
es/resolver/typescript 91607751 ns/iter (± 1264331) 87912566 ns/iter (± 1113024) 1.04
es/fixer/typescript 64341965 ns/iter (± 2006832) 62782523 ns/iter (± 849147) 1.02
es/hygiene/typescript 130197208 ns/iter (± 1593672) 130930640 ns/iter (± 1036139) 0.99
es/resolver_with_hygiene/typescript 246113213 ns/iter (± 1312831) 244577299 ns/iter (± 3081418) 1.01
es/visitor/base-perf/module_clone 62033 ns/iter (± 467) 60293 ns/iter (± 270) 1.03
es/visitor/base-perf/fold_empty 65024 ns/iter (± 253) 64018 ns/iter (± 142) 1.02
es/visitor/base-perf/fold_noop_impl_all 65952 ns/iter (± 3399) 65133 ns/iter (± 342) 1.01
es/visitor/base-perf/fold_noop_impl_vec 65677 ns/iter (± 256) 65442 ns/iter (± 1244) 1.00
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 57 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 39 ns/iter (± 0) 1.03
es/visitor/base-perf/boxing_boxed 127 ns/iter (± 0) 108 ns/iter (± 0) 1.18
es/visitor/base-perf/boxing_unboxed 85 ns/iter (± 0) 76 ns/iter (± 0) 1.12
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2531 ns/iter (± 6) 2529 ns/iter (± 10) 1.00
es/base/parallel/resolver/typescript 3652691825 ns/iter (± 262795340) 4514136434 ns/iter (± 269342311) 0.81
es/base/parallel/hygiene/typescript 1437212626 ns/iter (± 15467285) 1435466786 ns/iter (± 19927319) 1.00
misc/visitors/time-complexity/time 5 119 ns/iter (± 0) 132 ns/iter (± 6) 0.90
misc/visitors/time-complexity/time 10 378 ns/iter (± 6) 389 ns/iter (± 6) 0.97
misc/visitors/time-complexity/time 15 676 ns/iter (± 10) 680 ns/iter (± 9) 0.99
misc/visitors/time-complexity/time 20 1058 ns/iter (± 2) 1065 ns/iter (± 14) 0.99
misc/visitors/time-complexity/time 40 3554 ns/iter (± 10) 3562 ns/iter (± 8) 1.00
misc/visitors/time-complexity/time 60 7476 ns/iter (± 131) 7334 ns/iter (± 21) 1.02
es/full-target/es2016 231147 ns/iter (± 357) 230731 ns/iter (± 704) 1.00
es/full-target/es2017 220176 ns/iter (± 436) 219821 ns/iter (± 375) 1.00
es/full-target/es2018 210729 ns/iter (± 658) 208305 ns/iter (± 360) 1.01
es2020_nullish_coalescing 70729 ns/iter (± 236) 70736 ns/iter (± 212) 1.00
es2020_optional_chaining 81236 ns/iter (± 842) 82369 ns/iter (± 391) 0.99
es2022_class_properties 116134 ns/iter (± 473) 117415 ns/iter (± 923) 0.99
es2018_object_rest_spread 74777 ns/iter (± 250) 76277 ns/iter (± 310) 0.98
es2019_optional_catch_binding 65301 ns/iter (± 166) 66597 ns/iter (± 351) 0.98
es2017_async_to_generator 65446 ns/iter (± 247) 66249 ns/iter (± 270) 0.99
es2016_exponentiation 66343 ns/iter (± 266) 67415 ns/iter (± 279) 0.98
es2015_arrow 72354 ns/iter (± 234) 73051 ns/iter (± 330) 0.99
es2015_block_scoped_fn 69092 ns/iter (± 192) 70936 ns/iter (± 261) 0.97
es2015_block_scoping 122246 ns/iter (± 527) 125584 ns/iter (± 419) 0.97

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

Please sign in to comment.