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 authored Aug 31, 2023
1 parent 15d3900 commit 2db10e9
Show file tree
Hide file tree
Showing 11 changed files with 49 additions and 34 deletions.
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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);
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
var Infinity, NaN1;
Infinity.toString();
(1 / 0).toString();
NaN.toString();
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
var NaN = 1;
{
let NaN = 1;
console.log(NaN);
}
console.log(NaN);
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
var NaN__2 = 1;
{
let NaN__3 = 1;
console.log(NaN__3);
}console.log(NaN);
Original file line number Diff line number Diff line change
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.