diff --git a/lib/babel/transformation/transformers/es6/for-of.js b/lib/babel/transformation/transformers/es6/for-of.js index 935d1dcc19..929cef330d 100644 --- a/lib/babel/transformation/transformers/es6/for-of.js +++ b/lib/babel/transformation/transformers/es6/for-of.js @@ -65,7 +65,7 @@ var loose = function (node, parent, scope, file) { var left = node.left; var declar, id; - if (t.isIdentifier(left) || t.isPattern(left)) { + if (t.isIdentifier(left) || t.isPattern(left) || t.isMemberExpression(left)) { // for (i of test), for ({ i } of test) id = left; } else if (t.isVariableDeclaration(left)) { @@ -126,7 +126,7 @@ var spec = function (node, parent, scope, file) { var stepKey = scope.generateUidIdentifier("step"); var stepValue = t.memberExpression(stepKey, t.identifier("value")); - if (t.isIdentifier(left) || t.isPattern(left)) { + if (t.isIdentifier(left) || t.isPattern(left) || t.isMemberExpression(left)) { // for (i of test), for ({ i } of test) declar = t.expressionStatement(t.assignmentExpression("=", left, stepValue)); } else if (t.isVariableDeclaration(left)) { diff --git a/test/fixtures/transformation/es6-for-of-loose/member-expression/actual.js b/test/fixtures/transformation/es6-for-of-loose/member-expression/actual.js new file mode 100644 index 0000000000..d67e033081 --- /dev/null +++ b/test/fixtures/transformation/es6-for-of-loose/member-expression/actual.js @@ -0,0 +1,3 @@ +for (obj.prop of arr) { + +} diff --git a/test/fixtures/transformation/es6-for-of-loose/member-expression/expected.js b/test/fixtures/transformation/es6-for-of-loose/member-expression/expected.js new file mode 100644 index 0000000000..10c85b30a2 --- /dev/null +++ b/test/fixtures/transformation/es6-for-of-loose/member-expression/expected.js @@ -0,0 +1,12 @@ +"use strict"; + +for (var _iterator = arr, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { + if (_isArray) { + if (_i >= _iterator.length) break; + obj.prop = _iterator[_i++]; + } else { + _i = _iterator.next(); + if (_i.done) break; + obj.prop = _i.value; + } +} diff --git a/test/fixtures/transformation/es6-for-of/member-expression/actual.js b/test/fixtures/transformation/es6-for-of/member-expression/actual.js new file mode 100644 index 0000000000..d67e033081 --- /dev/null +++ b/test/fixtures/transformation/es6-for-of/member-expression/actual.js @@ -0,0 +1,3 @@ +for (obj.prop of arr) { + +} diff --git a/test/fixtures/transformation/es6-for-of/member-expression/expected.js b/test/fixtures/transformation/es6-for-of/member-expression/expected.js new file mode 100644 index 0000000000..ce935210fb --- /dev/null +++ b/test/fixtures/transformation/es6-for-of/member-expression/expected.js @@ -0,0 +1,5 @@ +"use strict"; + +for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { + obj.prop = _step.value; +}