From d4c0a5e8b75306f918cf2a2307e4f65130f9ea05 Mon Sep 17 00:00:00 2001 From: Will L Date: Wed, 10 Jun 2020 15:09:14 -0400 Subject: [PATCH 1/6] added check for forXstatement pattern --- .../babel-helper-member-expression-to-functions/src/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/babel-helper-member-expression-to-functions/src/index.js b/packages/babel-helper-member-expression-to-functions/src/index.js index 7724406d2b46..b816a8f992f2 100644 --- a/packages/babel-helper-member-expression-to-functions/src/index.js +++ b/packages/babel-helper-member-expression-to-functions/src/index.js @@ -337,6 +337,7 @@ const handle = { // [MEMBER = _VALUE] = ARR -> [_destructureSet(MEMBER) = _VALUE] = ARR // [...MEMBER] -> [..._destructureSet(MEMBER)] if ( + parentPath.isForXStatement() || // { KEY: MEMBER } = OBJ (parentPath.isObjectProperty({ value: node }) && parentPath.parentPath.isObjectPattern()) || From 71f4c245523d2b2b0a0e237b590da7208558a32e Mon Sep 17 00:00:00 2001 From: Will L Date: Wed, 10 Jun 2020 16:15:36 -0400 Subject: [PATCH 2/6] test case:check node left of for-of --- .../src/index.js | 3 ++- .../1-helpermemberexpressionfunction/input.js | 6 +++++ .../output.js | 24 +++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/input.js create mode 100644 packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/output.js diff --git a/packages/babel-helper-member-expression-to-functions/src/index.js b/packages/babel-helper-member-expression-to-functions/src/index.js index b816a8f992f2..1c8f4cfacb92 100644 --- a/packages/babel-helper-member-expression-to-functions/src/index.js +++ b/packages/babel-helper-member-expression-to-functions/src/index.js @@ -337,7 +337,8 @@ const handle = { // [MEMBER = _VALUE] = ARR -> [_destructureSet(MEMBER) = _VALUE] = ARR // [...MEMBER] -> [..._destructureSet(MEMBER)] if ( - parentPath.isForXStatement() || + (parentPath.isForXStatement() && + parentPath.parentPath.isAssignmentPattern({ left: node })) || // { KEY: MEMBER } = OBJ (parentPath.isObjectProperty({ value: node }) && parentPath.parentPath.isObjectPattern()) || diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/input.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/input.js new file mode 100644 index 000000000000..50cc554f23f4 --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/input.js @@ -0,0 +1,6 @@ +class D { + #arr; + f() { + for (const el of this.#arr); + } +} \ No newline at end of file diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/output.js new file mode 100644 index 000000000000..b4ee0d25a984 --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/output.js @@ -0,0 +1,24 @@ +var _arr = new WeakMap(); + +var D = /*#__PURE__*/function () { + "use strict"; + + function D() { + babelHelpers.classCallCheck(this, D); + + _arr.set(this, { + writable: true, + value: void 0 + }); + } + + babelHelpers.createClass(D, [{ + key: "f", + value: function f() { + for (var el of babelHelpers.classPrivateFieldGet(this, _arr)) { + ; + } + } + }]); + return D; +}(); From 79f56194bfd250d28b87255708a2613565b47122 Mon Sep 17 00:00:00 2001 From: Will L Date: Wed, 10 Jun 2020 21:11:08 -0400 Subject: [PATCH 3/6] add node check from feedback --- .../babel-helper-member-expression-to-functions/src/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/babel-helper-member-expression-to-functions/src/index.js b/packages/babel-helper-member-expression-to-functions/src/index.js index 1c8f4cfacb92..83bc67144017 100644 --- a/packages/babel-helper-member-expression-to-functions/src/index.js +++ b/packages/babel-helper-member-expression-to-functions/src/index.js @@ -337,8 +337,7 @@ const handle = { // [MEMBER = _VALUE] = ARR -> [_destructureSet(MEMBER) = _VALUE] = ARR // [...MEMBER] -> [..._destructureSet(MEMBER)] if ( - (parentPath.isForXStatement() && - parentPath.parentPath.isAssignmentPattern({ left: node })) || + parentPath.isForXStatement({ left: node }) || // { KEY: MEMBER } = OBJ (parentPath.isObjectProperty({ value: node }) && parentPath.parentPath.isObjectPattern()) || From a45c4dc4cd3e7a58dd0d4690e11c6d2c72a70aac Mon Sep 17 00:00:00 2001 From: Will L Date: Thu, 11 Jun 2020 14:49:06 -0400 Subject: [PATCH 4/6] add additional test cases & comment for-of & for-in --- .../src/index.js | 2 + .../1-helpermemberexpressionfunction/input.js | 21 ++++++ .../output.js | 75 +++++++++++++++++++ 3 files changed, 98 insertions(+) diff --git a/packages/babel-helper-member-expression-to-functions/src/index.js b/packages/babel-helper-member-expression-to-functions/src/index.js index 83bc67144017..2d7c660fa7fe 100644 --- a/packages/babel-helper-member-expression-to-functions/src/index.js +++ b/packages/babel-helper-member-expression-to-functions/src/index.js @@ -329,6 +329,7 @@ const handle = { return; } + // for ( MEMBER of ARR) && for ( MEMBER in ARR) // { KEY: MEMBER } = OBJ -> { KEY: _destructureSet(MEMBER) } = OBJ // { KEY: MEMBER = _VALUE } = OBJ -> { KEY: _destructureSet(MEMBER) = _VALUE } = OBJ // {...MEMBER} -> {..._destructureSet(MEMBER)} @@ -337,6 +338,7 @@ const handle = { // [MEMBER = _VALUE] = ARR -> [_destructureSet(MEMBER) = _VALUE] = ARR // [...MEMBER] -> [..._destructureSet(MEMBER)] if ( + // for ( MEMBER of ARR) && for ( MEMBER in ARR) parentPath.isForXStatement({ left: node }) || // { KEY: MEMBER } = OBJ (parentPath.isObjectProperty({ value: node }) && diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/input.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/input.js index 50cc554f23f4..9defd1899e15 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/input.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/input.js @@ -3,4 +3,25 @@ class D { f() { for (const el of this.#arr); } +} + +class C { + #p; + m() { + for (this.#p of []); + } +} + +class E { + #arr; + f() { + for (this.#arr of [1, 2]); + } +} + +class F { + #ar; + g() { + for (this.#ar in [1,2,3]); + } } \ No newline at end of file diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/output.js index b4ee0d25a984..c956f5663c4e 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/1-helpermemberexpressionfunction/output.js @@ -22,3 +22,78 @@ var D = /*#__PURE__*/function () { }]); return D; }(); + +var _p = new WeakMap(); + +var C = /*#__PURE__*/function () { + "use strict"; + + function C() { + babelHelpers.classCallCheck(this, C); + + _p.set(this, { + writable: true, + value: void 0 + }); + } + + babelHelpers.createClass(C, [{ + key: "m", + value: function m() { + for (babelHelpers.classPrivateFieldDestructureSet(this, _p).value of []) { + ; + } + } + }]); + return C; +}(); + +var _arr2 = new WeakMap(); + +var E = /*#__PURE__*/function () { + "use strict"; + + function E() { + babelHelpers.classCallCheck(this, E); + + _arr2.set(this, { + writable: true, + value: void 0 + }); + } + + babelHelpers.createClass(E, [{ + key: "f", + value: function f() { + for (babelHelpers.classPrivateFieldDestructureSet(this, _arr2).value of [1, 2]) { + ; + } + } + }]); + return E; +}(); + +var _ar = new WeakMap(); + +var F = /*#__PURE__*/function () { + "use strict"; + + function F() { + babelHelpers.classCallCheck(this, F); + + _ar.set(this, { + writable: true, + value: void 0 + }); + } + + babelHelpers.createClass(F, [{ + key: "g", + value: function g() { + for (babelHelpers.classPrivateFieldDestructureSet(this, _ar).value in [1, 2, 3]) { + ; + } + } + }]); + return F; +}(); From fff451b18d892cfb05e3abcf2e624fd35cde6d33 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Jun 2020 15:44:08 -0400 Subject: [PATCH 5/6] Update packages/babel-helper-member-expression-to-functions/src/index.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Huáng Jùnliàng --- .../babel-helper-member-expression-to-functions/src/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/babel-helper-member-expression-to-functions/src/index.js b/packages/babel-helper-member-expression-to-functions/src/index.js index 2d7c660fa7fe..d33ca9af8a16 100644 --- a/packages/babel-helper-member-expression-to-functions/src/index.js +++ b/packages/babel-helper-member-expression-to-functions/src/index.js @@ -329,7 +329,8 @@ const handle = { return; } - // for ( MEMBER of ARR) && for ( MEMBER in ARR) + // for (MEMBER of ARR) + // for (MEMBER in ARR) // { KEY: MEMBER } = OBJ -> { KEY: _destructureSet(MEMBER) } = OBJ // { KEY: MEMBER = _VALUE } = OBJ -> { KEY: _destructureSet(MEMBER) = _VALUE } = OBJ // {...MEMBER} -> {..._destructureSet(MEMBER)} From d07e916d6a2f05a2fcc4d3302bfeb183840005c5 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Jun 2020 15:44:18 -0400 Subject: [PATCH 6/6] Update packages/babel-helper-member-expression-to-functions/src/index.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Huáng Jùnliàng --- .../babel-helper-member-expression-to-functions/src/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/babel-helper-member-expression-to-functions/src/index.js b/packages/babel-helper-member-expression-to-functions/src/index.js index d33ca9af8a16..38c324731907 100644 --- a/packages/babel-helper-member-expression-to-functions/src/index.js +++ b/packages/babel-helper-member-expression-to-functions/src/index.js @@ -339,7 +339,8 @@ const handle = { // [MEMBER = _VALUE] = ARR -> [_destructureSet(MEMBER) = _VALUE] = ARR // [...MEMBER] -> [..._destructureSet(MEMBER)] if ( - // for ( MEMBER of ARR) && for ( MEMBER in ARR) + // for (MEMBER of ARR) + // for (MEMBER in ARR) parentPath.isForXStatement({ left: node }) || // { KEY: MEMBER } = OBJ (parentPath.isObjectProperty({ value: node }) &&