Skip to content

Commit

Permalink
fix: Transform scoping for for X in loop (#16384)
Browse files Browse the repository at this point in the history
* fix

* review
  • Loading branch information
liuxingbaoyu committed Mar 27, 2024
1 parent b8eb831 commit a0b1653
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 7 deletions.
10 changes: 3 additions & 7 deletions packages/babel-plugin-transform-block-scoping/src/loop.ts
Expand Up @@ -239,17 +239,13 @@ export function wrapLoopBody(
varNames.push(...Object.keys(t.getBindingIdentifiers(decl.id)));
if (decl.init) {
assign.push(t.assignmentExpression("=", decl.id, decl.init));
} else if (t.isForXStatement(varPath.parent, { left: varPath.node })) {
assign.push(decl.id as t.Identifier);
}
}
if (assign.length > 0) {
let replacement: t.Node =
const replacement: t.Node =
assign.length === 1 ? assign[0] : t.sequenceExpression(assign);
if (
!t.isForStatement(varPath.parent, { init: varPath.node }) &&
!t.isForXStatement(varPath.parent, { left: varPath.node })
) {
replacement = t.expressionStatement(replacement);
}
varPath.replaceWith(replacement);
} else {
varPath.remove();
Expand Down
@@ -0,0 +1,17 @@
function w() {
for (let i = 0; i < y; i++) {
let outer = {}
for (var key in someObj) {
let x = () => outer;
}
}
}

function w2() {
for (let i = 0; i < y; i++) {
let outer = {}
for (var key of someObj) {
let x = () => outer;
}
}
}
@@ -0,0 +1,28 @@
function w() {
var _loop = function () {
var outer = {};
for (key in someObj) {
var x = function () {
return outer;
};
}
},
key;
for (var i = 0; i < y; i++) {
_loop();
}
}
function w2() {
var _loop2 = function () {
var outer = {};
for (key of someObj) {
var x = function () {
return outer;
};
}
},
key;
for (var i = 0; i < y; i++) {
_loop2();
}
}
@@ -0,0 +1,8 @@
function w() {
for (let key in someObj) {
let outer = {}
for (var i = 0; i < y; i++) {
let x = () => outer;
}
}
}
@@ -0,0 +1,14 @@
function w() {
var _loop = function () {
var outer = {};
for (i = 0; i < y; i++) {
var x = function () {
return outer;
};
}
},
i;
for (var key in someObj) {
_loop();
}
}

0 comments on commit a0b1653

Please sign in to comment.