Evaluate object and initializer when setting a private method (#12707)

* fix: evaluate initializer when a private method is set as a field

* make legacy node happy

* add accessor test cases

* fix: evaluate object before RHS

* fix: evaluate object before throwing writeOnlyError
This commit is contained in:
Huáng Jùnliàng
2021-03-01 17:49:59 -05:00
committed by GitHub
parent 78d1950aed
commit 82e089c7dd
20 changed files with 254 additions and 17 deletions

View File

@@ -232,8 +232,11 @@ const privateNameHandlerSpec = {
if (isAccessor) {
if (!getId && setId) {
if (file.availableHelper("writeOnlyError")) {
return t.callExpression(file.addHelper("writeOnlyError"), [
t.stringLiteral(`#${name}`),
return t.sequenceExpression([
this.receiver(member),
t.callExpression(file.addHelper("writeOnlyError"), [
t.stringLiteral(`#${name}`),
]),
]);
}
console.warn(
@@ -299,8 +302,12 @@ const privateNameHandlerSpec = {
value,
]);
}
return t.callExpression(file.addHelper("readOnlyError"), [
t.stringLiteral(`#${name}`),
return t.sequenceExpression([
this.receiver(member),
value,
t.callExpression(file.addHelper("readOnlyError"), [
t.stringLiteral(`#${name}`),
]),
]);
}
return t.callExpression(file.addHelper("classPrivateFieldSet"), [