Skip to content

STALE: transform private-named instance methods #19

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
220 changes: 177 additions & 43 deletions src/compiler/transformers/classProperties.ts

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
//// [classConstructorParametersCommentPlacement.ts]
// some comment
class A {
#a = "private hello";
#b = "another private name";
a = "public property";
constructor(private b = "something") { }
}


//// [classConstructorParametersCommentPlacement.js]
var _classPrivateFieldSet = function (receiver, privateMap, value) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to set private field on non-instance"); } privateMap.set(receiver, value); return value; };
var _aWeakMap_1, _bWeakMap_1;
// some comment
var A = /** @class */ (function () {
function A(b) {
if (b === void 0) { b = "something"; }
// some comment
_aWeakMap_1.set(this, void 0);
// some comment
_bWeakMap_1.set(this, void 0);
this.b = b;
_classPrivateFieldSet(this, _aWeakMap_1, "private hello");
_classPrivateFieldSet(this, _bWeakMap_1, "another private name");
this.a = "public property";
}
return A;
}());
_aWeakMap_1 = new WeakMap(), _bWeakMap_1 = new WeakMap();
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
=== tests/cases/conformance/classes/constructorDeclarations/classConstructorParametersCommentPlacement.ts ===
// some comment
class A {
>A : Symbol(A, Decl(classConstructorParametersCommentPlacement.ts, 0, 0))

#a = "private hello";
>#a : Symbol(A.#a, Decl(classConstructorParametersCommentPlacement.ts, 1, 9))

#b = "another private name";
>#b : Symbol(A.#b, Decl(classConstructorParametersCommentPlacement.ts, 2, 25))

a = "public property";
>a : Symbol(A.a, Decl(classConstructorParametersCommentPlacement.ts, 3, 32))

constructor(private b = "something") { }
>b : Symbol(A.b, Decl(classConstructorParametersCommentPlacement.ts, 5, 16))
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
=== tests/cases/conformance/classes/constructorDeclarations/classConstructorParametersCommentPlacement.ts ===
// some comment
class A {
>A : A

#a = "private hello";
>#a : string
>"private hello" : "private hello"

#b = "another private name";
>#b : string
>"another private name" : "another private name"

a = "public property";
>a : string
>"public property" : "public property"

constructor(private b = "something") { }
>b : string
>"something" : "something"
}

4 changes: 3 additions & 1 deletion tests/baselines/reference/privateNameConstructorReserved.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ class A {

//// [privateNameConstructorReserved.js]
// @target es6
var _constructor_1, _constructorWeakSet_1;
var A = /** @class */ (function () {
function A() {
_constructorWeakSet_1.add(this);
}
A.prototype.#constructor = function () { }; // Error: `#constructor` is a reserved word.
return A;
}());
_constructorWeakSet_1 = new WeakSet(), _constructor_1 = function _constructor_1() { };
6 changes: 3 additions & 3 deletions tests/baselines/reference/privateNameDeclaration.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ class A {


//// [privateNameDeclaration.js]
var _name;
var _nameWeakMap_1;
var A = /** @class */ (function () {
function A() {
_name.set(this, void 0);
_nameWeakMap_1.set(this, void 0);
}
return A;
}());
_name = new WeakMap();
_nameWeakMap_1 = new WeakMap();
8 changes: 4 additions & 4 deletions tests/baselines/reference/privateNameDuplicateField.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ class A {

//// [privateNameDuplicateField.js]
// @target es6
var _foo, _foo_1;
var _fooWeakMap_1, _fooWeakMap_2;
"use strict";
var A = /** @class */ (function () {
function A() {
_foo_1.set(this, "foo");
_foo_1.set(this, "foo");
_fooWeakMap_2.set(this, "foo");
_fooWeakMap_2.set(this, "foo");
}
return A;
}());
_foo = new WeakMap(), _foo_1 = new WeakMap();
_fooWeakMap_1 = new WeakMap(), _fooWeakMap_2 = new WeakMap();
8 changes: 4 additions & 4 deletions tests/baselines/reference/privateNameField.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ class A {
//// [privateNameField.js]
// @target es6
var _classPrivateFieldSet = function (receiver, privateMap, value) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to set private field on non-instance"); } privateMap.set(receiver, value); return value; };
var _name;
var _nameWeakMap_1;
"use strict";
var A = /** @class */ (function () {
function A(name) {
_name.set(this, void 0);
_classPrivateFieldSet(this, _name, name);
_nameWeakMap_1.set(this, void 0);
_classPrivateFieldSet(this, _nameWeakMap_1, name);
}
return A;
}());
_name = new WeakMap();
_nameWeakMap_1 = new WeakMap();
8 changes: 4 additions & 4 deletions tests/baselines/reference/privateNameFieldAccess.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ class A {

//// [privateNameFieldAccess.js]
var _classPrivateFieldGet = function (receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return privateMap.get(receiver); };
var _myField;
var _myFieldWeakMap_1;
var A = /** @class */ (function () {
function A() {
_myField.set(this, "hello world");
console.log(_classPrivateFieldGet(this, _myField));
_myFieldWeakMap_1.set(this, "hello world");
console.log(_classPrivateFieldGet(this, _myFieldWeakMap_1));
}
return A;
}());
_myField = new WeakMap();
_myFieldWeakMap_1 = new WeakMap();
58 changes: 29 additions & 29 deletions tests/baselines/reference/privateNameFieldAssignment.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,41 +38,41 @@ class A {
//// [privateNameFieldAssignment.js]
var _classPrivateFieldSet = function (receiver, privateMap, value) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to set private field on non-instance"); } privateMap.set(receiver, value); return value; };
var _classPrivateFieldGet = function (receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return privateMap.get(receiver); };
var _field;
var _fieldWeakMap_1;
var A = /** @class */ (function () {
function A() {
_field.set(this, 0);
_fieldWeakMap_1.set(this, 0);
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
_classPrivateFieldSet(this, _field, 1);
_classPrivateFieldSet(this, _field, _classPrivateFieldGet(this, _field) + 2);
_classPrivateFieldSet(this, _field, _classPrivateFieldGet(this, _field) - 3);
_classPrivateFieldSet(this, _field, _classPrivateFieldGet(this, _field) / 4);
_classPrivateFieldSet(this, _field, _classPrivateFieldGet(this, _field) * 5);
_classPrivateFieldSet(this, _field, Math.pow(_classPrivateFieldGet(this, _field), 6));
_classPrivateFieldSet(this, _field, _classPrivateFieldGet(this, _field) % 7);
_classPrivateFieldSet(this, _field, _classPrivateFieldGet(this, _field) << 8);
_classPrivateFieldSet(this, _field, _classPrivateFieldGet(this, _field) >> 9);
_classPrivateFieldSet(this, _field, _classPrivateFieldGet(this, _field) >>> 10);
_classPrivateFieldSet(this, _field, _classPrivateFieldGet(this, _field) & 11);
_classPrivateFieldSet(this, _field, _classPrivateFieldGet(this, _field) | 12);
_classPrivateFieldSet(this, _field, _classPrivateFieldGet(this, _field) ^ 13);
_classPrivateFieldSet(A.getInstance(), _field, 1);
_classPrivateFieldSet(_a = A.getInstance(), _field, _classPrivateFieldGet(_a, _field) + 2);
_classPrivateFieldSet(_b = A.getInstance(), _field, _classPrivateFieldGet(_b, _field) - 3);
_classPrivateFieldSet(_c = A.getInstance(), _field, _classPrivateFieldGet(_c, _field) / 4);
_classPrivateFieldSet(_d = A.getInstance(), _field, _classPrivateFieldGet(_d, _field) * 5);
_classPrivateFieldSet(_e = A.getInstance(), _field, Math.pow(_classPrivateFieldGet(_e, _field), 6));
_classPrivateFieldSet(_f = A.getInstance(), _field, _classPrivateFieldGet(_f, _field) % 7);
_classPrivateFieldSet(_g = A.getInstance(), _field, _classPrivateFieldGet(_g, _field) << 8);
_classPrivateFieldSet(_h = A.getInstance(), _field, _classPrivateFieldGet(_h, _field) >> 9);
_classPrivateFieldSet(_j = A.getInstance(), _field, _classPrivateFieldGet(_j, _field) >>> 10);
_classPrivateFieldSet(_k = A.getInstance(), _field, _classPrivateFieldGet(_k, _field) & 11);
_classPrivateFieldSet(_l = A.getInstance(), _field, _classPrivateFieldGet(_l, _field) | 12);
_classPrivateFieldSet(_m = A.getInstance(), _field, _classPrivateFieldGet(_m, _field) ^ 13);
_classPrivateFieldSet(this, _fieldWeakMap_1, 1);
_classPrivateFieldSet(this, _fieldWeakMap_1, _classPrivateFieldGet(this, _fieldWeakMap_1) + 2);
_classPrivateFieldSet(this, _fieldWeakMap_1, _classPrivateFieldGet(this, _fieldWeakMap_1) - 3);
_classPrivateFieldSet(this, _fieldWeakMap_1, _classPrivateFieldGet(this, _fieldWeakMap_1) / 4);
_classPrivateFieldSet(this, _fieldWeakMap_1, _classPrivateFieldGet(this, _fieldWeakMap_1) * 5);
_classPrivateFieldSet(this, _fieldWeakMap_1, Math.pow(_classPrivateFieldGet(this, _fieldWeakMap_1), 6));
_classPrivateFieldSet(this, _fieldWeakMap_1, _classPrivateFieldGet(this, _fieldWeakMap_1) % 7);
_classPrivateFieldSet(this, _fieldWeakMap_1, _classPrivateFieldGet(this, _fieldWeakMap_1) << 8);
_classPrivateFieldSet(this, _fieldWeakMap_1, _classPrivateFieldGet(this, _fieldWeakMap_1) >> 9);
_classPrivateFieldSet(this, _fieldWeakMap_1, _classPrivateFieldGet(this, _fieldWeakMap_1) >>> 10);
_classPrivateFieldSet(this, _fieldWeakMap_1, _classPrivateFieldGet(this, _fieldWeakMap_1) & 11);
_classPrivateFieldSet(this, _fieldWeakMap_1, _classPrivateFieldGet(this, _fieldWeakMap_1) | 12);
_classPrivateFieldSet(this, _fieldWeakMap_1, _classPrivateFieldGet(this, _fieldWeakMap_1) ^ 13);
_classPrivateFieldSet(A.getInstance(), _fieldWeakMap_1, 1);
_classPrivateFieldSet(_a = A.getInstance(), _fieldWeakMap_1, _classPrivateFieldGet(_a, _fieldWeakMap_1) + 2);
_classPrivateFieldSet(_b = A.getInstance(), _fieldWeakMap_1, _classPrivateFieldGet(_b, _fieldWeakMap_1) - 3);
_classPrivateFieldSet(_c = A.getInstance(), _fieldWeakMap_1, _classPrivateFieldGet(_c, _fieldWeakMap_1) / 4);
_classPrivateFieldSet(_d = A.getInstance(), _fieldWeakMap_1, _classPrivateFieldGet(_d, _fieldWeakMap_1) * 5);
_classPrivateFieldSet(_e = A.getInstance(), _fieldWeakMap_1, Math.pow(_classPrivateFieldGet(_e, _fieldWeakMap_1), 6));
_classPrivateFieldSet(_f = A.getInstance(), _fieldWeakMap_1, _classPrivateFieldGet(_f, _fieldWeakMap_1) % 7);
_classPrivateFieldSet(_g = A.getInstance(), _fieldWeakMap_1, _classPrivateFieldGet(_g, _fieldWeakMap_1) << 8);
_classPrivateFieldSet(_h = A.getInstance(), _fieldWeakMap_1, _classPrivateFieldGet(_h, _fieldWeakMap_1) >> 9);
_classPrivateFieldSet(_j = A.getInstance(), _fieldWeakMap_1, _classPrivateFieldGet(_j, _fieldWeakMap_1) >>> 10);
_classPrivateFieldSet(_k = A.getInstance(), _fieldWeakMap_1, _classPrivateFieldGet(_k, _fieldWeakMap_1) & 11);
_classPrivateFieldSet(_l = A.getInstance(), _fieldWeakMap_1, _classPrivateFieldGet(_l, _fieldWeakMap_1) | 12);
_classPrivateFieldSet(_m = A.getInstance(), _fieldWeakMap_1, _classPrivateFieldGet(_m, _fieldWeakMap_1) ^ 13);
}
A.getInstance = function () {
return new A();
};
return A;
}());
_field = new WeakMap();
_fieldWeakMap_1 = new WeakMap();
10 changes: 5 additions & 5 deletions tests/baselines/reference/privateNameFieldCallExpression.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,18 @@ class A {

//// [privateNameFieldCallExpression.js]
var _classPrivateFieldGet = function (receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return privateMap.get(receiver); };
var _fieldFunc;
var _fieldFuncWeakMap_1;
var A = /** @class */ (function () {
function A() {
var _this = this;
_fieldFunc.set(this, function () { return _this.x = 10; });
_fieldFuncWeakMap_1.set(this, function () { return _this.x = 10; });
this.x = 1;
}
A.prototype.test = function () {
_classPrivateFieldGet(this, _fieldFunc).call(this);
var func = _classPrivateFieldGet(this, _fieldFunc);
_classPrivateFieldGet(this, _fieldFuncWeakMap_1).call(this);
var func = _classPrivateFieldGet(this, _fieldFuncWeakMap_1);
func();
};
return A;
}());
_fieldFunc = new WeakMap();
_fieldFuncWeakMap_1 = new WeakMap();
15 changes: 15 additions & 0 deletions tests/baselines/reference/privateNameFieldDeclaration.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//// [privateNameFieldDeclaration.ts]
class A {
#name: string;
}


//// [privateNameFieldDeclaration.js]
var _nameWeakMap_1;
var A = /** @class */ (function () {
function A() {
_nameWeakMap_1.set(this, void 0);
}
return A;
}());
_nameWeakMap_1 = new WeakMap();
8 changes: 8 additions & 0 deletions tests/baselines/reference/privateNameFieldDeclaration.symbols
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
=== tests/cases/conformance/classes/members/privateNames/privateNameFieldDeclaration.ts ===
class A {
>A : Symbol(A, Decl(privateNameFieldDeclaration.ts, 0, 0))

#name: string;
>#name : Symbol(A.#name, Decl(privateNameFieldDeclaration.ts, 0, 9))
}

8 changes: 8 additions & 0 deletions tests/baselines/reference/privateNameFieldDeclaration.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
=== tests/cases/conformance/classes/members/privateNames/privateNameFieldDeclaration.ts ===
class A {
>A : A

#name: string;
>#name : string
}

10 changes: 5 additions & 5 deletions tests/baselines/reference/privateNameFieldDestructuredBinding.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ class A {

//// [privateNameFieldDestructuredBinding.js]
var _classPrivateFieldSet = function (receiver, privateMap, value) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to set private field on non-instance"); } privateMap.set(receiver, value); return value; };
var _field;
var _fieldWeakMap_1;
var A = /** @class */ (function () {
function A() {
var _a, _b;
_field.set(this, 1);
_fieldWeakMap_1.set(this, 1);
var y;
(_a = this.testObject(), { set value(x) { _classPrivateFieldSet(this, _field, x); } }.value = _a.x, y = _a.y);
(_b = this.testArray(), { set value(x) { _classPrivateFieldSet(this, _field, x); } }.value = _b[0], y = _b[1]);
(_a = this.testObject(), { set value(x) { _classPrivateFieldSet(this, _fieldWeakMap_1, x); } }.value = _a.x, y = _a.y);
(_b = this.testArray(), { set value(x) { _classPrivateFieldSet(this, _fieldWeakMap_1, x); } }.value = _b[0], y = _b[1]);
}
A.prototype.testObject = function () {
return { x: 10, y: 6 };
Expand All @@ -34,4 +34,4 @@ var A = /** @class */ (function () {
};
return A;
}());
_field = new WeakMap();
_fieldWeakMap_1 = new WeakMap();
8 changes: 4 additions & 4 deletions tests/baselines/reference/privateNameFieldInitializer.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ class A {


//// [privateNameFieldInitializer.js]
var _field, _uninitialized;
var _fieldWeakMap_1, _uninitializedWeakMap_1;
var A = /** @class */ (function () {
function A() {
_field.set(this, 10);
_uninitialized.set(this, void 0);
_fieldWeakMap_1.set(this, 10);
_uninitializedWeakMap_1.set(this, void 0);
}
return A;
}());
_field = new WeakMap(), _uninitialized = new WeakMap();
_fieldWeakMap_1 = new WeakMap(), _uninitializedWeakMap_1 = new WeakMap();
22 changes: 11 additions & 11 deletions tests/baselines/reference/privateNameFieldUnaryMutation.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,24 @@ class C {
//// [privateNameFieldUnaryMutation.js]
var _classPrivateFieldGet = function (receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return privateMap.get(receiver); };
var _classPrivateFieldSet = function (receiver, privateMap, value) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to set private field on non-instance"); } privateMap.set(receiver, value); return value; };
var _test;
var _testWeakMap_1;
var C = /** @class */ (function () {
function C() {
_test.set(this, 24);
_testWeakMap_1.set(this, 24);
var _a, _b;
_a = _classPrivateFieldGet(this, _test), _classPrivateFieldSet(this, _test, _a + 1), _a;
_b = _classPrivateFieldGet(this, _test), _classPrivateFieldSet(this, _test, _b - 1), _b;
_classPrivateFieldSet(this, _test, _classPrivateFieldGet(this, _test) + 1);
_classPrivateFieldSet(this, _test, _classPrivateFieldGet(this, _test) - 1);
_a = _classPrivateFieldGet(this, _testWeakMap_1), _classPrivateFieldSet(this, _testWeakMap_1, _a + 1), _a;
_b = _classPrivateFieldGet(this, _testWeakMap_1), _classPrivateFieldSet(this, _testWeakMap_1, _b - 1), _b;
_classPrivateFieldSet(this, _testWeakMap_1, _classPrivateFieldGet(this, _testWeakMap_1) + 1);
_classPrivateFieldSet(this, _testWeakMap_1, _classPrivateFieldGet(this, _testWeakMap_1) - 1);
}
C.prototype.test = function () {
var _a, _b, _c, _d, _e, _f;
_a = this.getInstance(), _b = _classPrivateFieldGet(_a, _test), _classPrivateFieldSet(_a, _test, _b + 1), _b;
_c = this.getInstance(), _d = _classPrivateFieldGet(_c, _test), _classPrivateFieldSet(_c, _test, _d - 1), _d;
_classPrivateFieldSet(_e = this.getInstance(), _test, _classPrivateFieldGet(_e, _test) + 1);
_classPrivateFieldSet(_f = this.getInstance(), _test, _classPrivateFieldGet(_f, _test) - 1);
_a = this.getInstance(), _b = _classPrivateFieldGet(_a, _testWeakMap_1), _classPrivateFieldSet(_a, _testWeakMap_1, _b + 1), _b;
_c = this.getInstance(), _d = _classPrivateFieldGet(_c, _testWeakMap_1), _classPrivateFieldSet(_c, _testWeakMap_1, _d - 1), _d;
_classPrivateFieldSet(_e = this.getInstance(), _testWeakMap_1, _classPrivateFieldGet(_e, _testWeakMap_1) + 1);
_classPrivateFieldSet(_f = this.getInstance(), _testWeakMap_1, _classPrivateFieldGet(_f, _testWeakMap_1) - 1);
};
C.prototype.getInstance = function () { return new C(); };
return C;
}());
_test = new WeakMap();
_testWeakMap_1 = new WeakMap();
5 changes: 1 addition & 4 deletions tests/baselines/reference/privateNameInObjectLiteral-2.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,4 @@ const obj = {


//// [privateNameInObjectLiteral-2.js]
var obj = {
#foo: function () {
}
};
var obj = {};
12 changes: 6 additions & 6 deletions tests/baselines/reference/privateNameNestedClassNameConflict.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,19 @@ class A {


//// [privateNameNestedClassNameConflict.js]
var _foo;
var _fooWeakMap_1;
var A = /** @class */ (function () {
function A() {
_foo.set(this, void 0);
var _foo_1;
_fooWeakMap_1.set(this, void 0);
var _fooWeakMap_2;
var A = /** @class */ (function () {
function A() {
_foo_1.set(this, void 0);
_fooWeakMap_2.set(this, void 0);
}
return A;
}());
_foo_1 = new WeakMap();
_fooWeakMap_2 = new WeakMap();
}
return A;
}());
_foo = new WeakMap();
_fooWeakMap_1 = new WeakMap();
Loading