From 176a1ab5a3b06488d253adb2e30c8c8891d9cc63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 15 Nov 2021 11:45:44 -0500 Subject: [PATCH] fix: use private name in toAssignable --- packages/babel-parser/src/parser/expression.js | 1 - packages/babel-parser/src/parser/lval.js | 9 +++++++-- .../invalid-object-method/output.json | 3 +-- .../invalid-object-property/output.json | 3 +-- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index b02190d19579..62a7c07c6764 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -2245,7 +2245,6 @@ export default class ExpressionParser extends LValParser { if (refExpressionErrors.privateKey === -1) { refExpressionErrors.privateKey = privateKeyPos; } - this.classScope.usePrivateName(value, privateKeyPos); } else { this.raise(privateKeyPos, Errors.UnexpectedPrivateField); } diff --git a/packages/babel-parser/src/parser/lval.js b/packages/babel-parser/src/parser/lval.js index 200012247f54..9aeae0b4a888 100644 --- a/packages/babel-parser/src/parser/lval.js +++ b/packages/babel-parser/src/parser/lval.js @@ -143,9 +143,14 @@ export default class LValParser extends NodeUtils { } break; - case "ObjectProperty": - this.toAssignable(node.value, isLHS); + case "ObjectProperty": { + const { key, value } = node; + if (this.isPrivateName(key)) { + this.classScope.usePrivateName(this.getPrivateNameSV(key), key.start); + } + this.toAssignable(value, isLHS); break; + } case "SpreadElement": { this.checkToRestConversion(node); diff --git a/packages/babel-parser/test/fixtures/es2022/class-private-properties/invalid-object-method/output.json b/packages/babel-parser/test/fixtures/es2022/class-private-properties/invalid-object-method/output.json index c652c2c767db..7b0a93594846 100644 --- a/packages/babel-parser/test/fixtures/es2022/class-private-properties/invalid-object-method/output.json +++ b/packages/babel-parser/test/fixtures/es2022/class-private-properties/invalid-object-method/output.json @@ -2,8 +2,7 @@ "type": "File", "start":0,"end":33,"loc":{"start":{"line":1,"column":0},"end":{"line":3,"column":1}}, "errors": [ - "SyntaxError: Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\n or a property of member expression (i.e. this.#p). (2:10)", - "SyntaxError: Private name #x is not defined. (2:10)" + "SyntaxError: Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\n or a property of member expression (i.e. this.#p). (2:10)" ], "program": { "type": "Program", diff --git a/packages/babel-parser/test/fixtures/es2022/class-private-properties/invalid-object-property/output.json b/packages/babel-parser/test/fixtures/es2022/class-private-properties/invalid-object-property/output.json index f9bedeefa247..d7360fbbf53b 100644 --- a/packages/babel-parser/test/fixtures/es2022/class-private-properties/invalid-object-property/output.json +++ b/packages/babel-parser/test/fixtures/es2022/class-private-properties/invalid-object-property/output.json @@ -2,8 +2,7 @@ "type": "File", "start":0,"end":32,"loc":{"start":{"line":1,"column":0},"end":{"line":3,"column":1}}, "errors": [ - "SyntaxError: Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\n or a property of member expression (i.e. this.#p). (2:10)", - "SyntaxError: Private name #x is not defined. (2:10)" + "SyntaxError: Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\n or a property of member expression (i.e. this.#p). (2:10)" ], "program": { "type": "Program",