diff --git a/packages/babel-core/test/fixtures/transformation/misc/regression-1169/output.js b/packages/babel-core/test/fixtures/transformation/misc/regression-1169/output.js index b258a68cc0..910053ac4d 100644 --- a/packages/babel-core/test/fixtures/transformation/misc/regression-1169/output.js +++ b/packages/babel-core/test/fixtures/transformation/misc/regression-1169/output.js @@ -1,10 +1,9 @@ function foo() { var input = ['a', 'b', 'c']; var output = {}; - var _arr = input; - for (var _i = 0; _i < _arr.length; _i++) { - var c = _arr[_i]; + for (var _i = 0, _input = input; _i < _input.length; _i++) { + var c = _input[_i]; var name = c; output[name] = name; } diff --git a/packages/babel-plugin-transform-for-of/src/index.js b/packages/babel-plugin-transform-for-of/src/index.js index 7e2954d1cd..cd4c6e17bc 100644 --- a/packages/babel-plugin-transform-for-of/src/index.js +++ b/packages/babel-plugin-transform-for-of/src/index.js @@ -70,7 +70,7 @@ export default declare((api, options) => { : pushComputedPropsSpec; const buildForOfArray = template(` - for (var KEY = 0; KEY < ARR.length; KEY++) BODY; + for (var KEY = 0, NAME = ARR; KEY < NAME.length; KEY++) BODY; `); const buildForOfLoose = template(` @@ -119,20 +119,14 @@ export default declare((api, options) => { function _ForOfStatementArray(path) { const { node, scope } = path; - const uid = scope.generateUid("arr"); - const nodes = [ - t.variableDeclaration("var", [ - t.variableDeclarator(t.identifier(uid), node.right), - ]), - ]; - const right = t.identifier(uid); - + const right = scope.generateUidIdentifierBasedOnNode(node.right, "arr"); const iterationKey = scope.generateUidIdentifier("i"); let loop = buildForOfArray({ BODY: node.body, KEY: iterationKey, - ARR: right, + NAME: right, + ARR: node.right, }); t.inherits(loop, node); @@ -160,9 +154,7 @@ export default declare((api, options) => { loop = t.labeledStatement(path.parentPath.node.label, loop); } - nodes.push(loop); - - return nodes; + return [loop]; } function replaceWithArray(path) { diff --git a/packages/babel-plugin-transform-for-of/test/fixtures/opt/array-binding/output.js b/packages/babel-plugin-transform-for-of/test/fixtures/opt/array-binding/output.js index c5a0915931..e8f8aeb809 100644 --- a/packages/babel-plugin-transform-for-of/test/fixtures/opt/array-binding/output.js +++ b/packages/babel-plugin-transform-for-of/test/fixtures/opt/array-binding/output.js @@ -1,13 +1,11 @@ const x = []; -var _arr = x; -for (var _i = 0; _i < _arr.length; _i++) { - const y = _arr[_i]; +for (var _i = 0, _x = x; _i < _x.length; _i++) { + const y = _x[_i]; } const arr = Object.entries(x); -var _arr2 = arr; -for (var _i2 = 0; _i2 < _arr2.length; _i2++) { - const y = _arr2[_i2]; +for (var _i2 = 0, _arr = arr; _i2 < _arr.length; _i2++) { + const y = _arr[_i2]; } diff --git a/packages/babel-plugin-transform-for-of/test/fixtures/opt/built-ins/output.js b/packages/babel-plugin-transform-for-of/test/fixtures/opt/built-ins/output.js index c04a64bea6..873cadbbf7 100644 --- a/packages/babel-plugin-transform-for-of/test/fixtures/opt/built-ins/output.js +++ b/packages/babel-plugin-transform-for-of/test/fixtures/opt/built-ins/output.js @@ -1,29 +1,19 @@ -var _arr = []; - -for (var _i = 0; _i < _arr.length; _i++) { +for (var _i = 0, _arr = []; _i < _arr.length; _i++) { const y = _arr[_i]; } -var _arr2 = Array.from(x); - -for (var _i2 = 0; _i2 < _arr2.length; _i2++) { - const y = _arr2[_i2]; +for (var _i2 = 0, _Array$from = Array.from(x); _i2 < _Array$from.length; _i2++) { + const y = _Array$from[_i2]; } -var _arr3 = Object.keys(x); - -for (var _i3 = 0; _i3 < _arr3.length; _i3++) { - const y = _arr3[_i3]; +for (var _i3 = 0, _Object$keys = Object.keys(x); _i3 < _Object$keys.length; _i3++) { + const y = _Object$keys[_i3]; } -var _arr4 = Object.values(x); - -for (var _i4 = 0; _i4 < _arr4.length; _i4++) { - const y = _arr4[_i4]; +for (var _i4 = 0, _Object$values = Object.values(x); _i4 < _Object$values.length; _i4++) { + const y = _Object$values[_i4]; } -var _arr5 = Object.entries(x); - -for (var _i5 = 0; _i5 < _arr5.length; _i5++) { - const y = _arr5[_i5]; +for (var _i5 = 0, _Object$entries = Object.entries(x); _i5 < _Object$entries.length; _i5++) { + const y = _Object$entries[_i5]; } diff --git a/packages/babel-plugin-transform-for-of/test/fixtures/opt/typeannotation/output.js b/packages/babel-plugin-transform-for-of/test/fixtures/opt/typeannotation/output.js index 04108bdc79..55ebccb8d7 100644 --- a/packages/babel-plugin-transform-for-of/test/fixtures/opt/typeannotation/output.js +++ b/packages/babel-plugin-transform-for-of/test/fixtures/opt/typeannotation/output.js @@ -1,6 +1,4 @@ -var _arr = b; - -for (var _i = 0; _i < _arr.length; _i++) { +for (var _i = 0, _arr = b; _i < _arr.length; _i++) { const y = _arr[_i]; } diff --git a/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-3858/output.js b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-3858/output.js index 79a8edf0bc..0085c57dca 100644 --- a/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-3858/output.js +++ b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-3858/output.js @@ -1,7 +1,5 @@ if (true) { - var _arr = []; - - loop: for (var _i = 0; _i < _arr.length; _i++) { + loop: for (var _i = 0, _arr = []; _i < _arr.length; _i++) { let ch = _arr[_i]; } } diff --git a/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-3858/output.js b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-3858/output.js index 79a8edf0bc..0085c57dca 100644 --- a/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-3858/output.js +++ b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-3858/output.js @@ -1,7 +1,5 @@ if (true) { - var _arr = []; - - loop: for (var _i = 0; _i < _arr.length; _i++) { + loop: for (var _i = 0, _arr = []; _i < _arr.length; _i++) { let ch = _arr[_i]; } } diff --git a/packages/babel-plugin-transform-for-of/test/fixtures/regression/redeclare-array-8913/output.js b/packages/babel-plugin-transform-for-of/test/fixtures/regression/redeclare-array-8913/output.js index 841eb701dd..73b85fd6d7 100644 --- a/packages/babel-plugin-transform-for-of/test/fixtures/regression/redeclare-array-8913/output.js +++ b/packages/babel-plugin-transform-for-of/test/fixtures/regression/redeclare-array-8913/output.js @@ -1,8 +1,6 @@ function f(...t) { - var _arr = t; - - for (var _i = 0; _i < _arr.length; _i++) { - let o = _arr[_i]; + for (var _i = 0, _t = t; _i < _t.length; _i++) { + let o = _t[_i]; const t = o; } } diff --git a/packages/babel-plugin-transform-for-of/test/fixtures/regression/scope-9696/output.js b/packages/babel-plugin-transform-for-of/test/fixtures/regression/scope-9696/output.js index e98d98872e..a8bbca2639 100644 --- a/packages/babel-plugin-transform-for-of/test/fixtures/regression/scope-9696/output.js +++ b/packages/babel-plugin-transform-for-of/test/fixtures/regression/scope-9696/output.js @@ -1,7 +1,6 @@ var arr = [1, 2, 3]; -var _arr = arr; -for (var _i = 0; _i < _arr.length; _i++) { +for (var _i = 0, _arr = arr; _i < _arr.length; _i++) { let v = _arr[_i]; console.log(v); arr = null;