Skip to content

Commit 34cf6ee

Browse files
committed
add a test for setter assignment return value
Signed-off-by: Kubilay Kahveci <kahvecikubilay@gmail.com>
1 parent 5dcb20f commit 34cf6ee

File tree

6 files changed

+113
-2
lines changed

6 files changed

+113
-2
lines changed

tests/baselines/reference/privateNameAccessors.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || func
2020
if (!instances.has(receiver)) {
2121
throw new TypeError("attempted to set private accessor on non-instance");
2222
}
23-
return fn.call(receiver, value);
23+
fn.call(receiver, value);
24+
return value;
2425
};
2526
var __classPrivateReadonly = (this && this.__classPrivateReadonly) || function () {
2627
throw new TypeError("private element is not writable");
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//// [privateNameSetterExprReturnValue.ts]
2+
class C {
3+
set #foo(a: number) {}
4+
bar() {
5+
let x = (this.#foo = 42 * 2);
6+
console.log(x); // 84
7+
}
8+
}
9+
10+
new C().bar();
11+
12+
13+
//// [privateNameSetterExprReturnValue.js]
14+
var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || function (receiver, instances, fn, value) {
15+
if (!instances.has(receiver)) {
16+
throw new TypeError("attempted to set private accessor on non-instance");
17+
}
18+
fn.call(receiver, value);
19+
return value;
20+
};
21+
var _C_foo_set, _C_instances;
22+
class C {
23+
constructor() {
24+
_C_instances.add(this);
25+
}
26+
bar() {
27+
let x = (__classPrivateAccessorSet(this, _C_instances, _C_foo_set, 42 * 2));
28+
console.log(x); // 84
29+
}
30+
}
31+
_C_instances = new WeakSet(), _C_foo_set = function _C_foo_set(a) { };
32+
new C().bar();
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
=== tests/cases/conformance/classes/members/privateNames/privateNameSetterExprReturnValue.ts ===
2+
class C {
3+
>C : Symbol(C, Decl(privateNameSetterExprReturnValue.ts, 0, 0))
4+
5+
set #foo(a: number) {}
6+
>#foo : Symbol(C.#foo, Decl(privateNameSetterExprReturnValue.ts, 0, 9))
7+
>a : Symbol(a, Decl(privateNameSetterExprReturnValue.ts, 1, 13))
8+
9+
bar() {
10+
>bar : Symbol(C.bar, Decl(privateNameSetterExprReturnValue.ts, 1, 26))
11+
12+
let x = (this.#foo = 42 * 2);
13+
>x : Symbol(x, Decl(privateNameSetterExprReturnValue.ts, 3, 11))
14+
>this.#foo : Symbol(C.#foo, Decl(privateNameSetterExprReturnValue.ts, 0, 9))
15+
>this : Symbol(C, Decl(privateNameSetterExprReturnValue.ts, 0, 0))
16+
17+
console.log(x); // 84
18+
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
19+
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
20+
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
21+
>x : Symbol(x, Decl(privateNameSetterExprReturnValue.ts, 3, 11))
22+
}
23+
}
24+
25+
new C().bar();
26+
>new C().bar : Symbol(C.bar, Decl(privateNameSetterExprReturnValue.ts, 1, 26))
27+
>C : Symbol(C, Decl(privateNameSetterExprReturnValue.ts, 0, 0))
28+
>bar : Symbol(C.bar, Decl(privateNameSetterExprReturnValue.ts, 1, 26))
29+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=== tests/cases/conformance/classes/members/privateNames/privateNameSetterExprReturnValue.ts ===
2+
class C {
3+
>C : C
4+
5+
set #foo(a: number) {}
6+
>#foo : number
7+
>a : number
8+
9+
bar() {
10+
>bar : () => void
11+
12+
let x = (this.#foo = 42 * 2);
13+
>x : number
14+
>(this.#foo = 42 * 2) : number
15+
>this.#foo = 42 * 2 : number
16+
>this.#foo : number
17+
>this : this
18+
>42 * 2 : number
19+
>42 : 42
20+
>2 : 2
21+
22+
console.log(x); // 84
23+
>console.log(x) : void
24+
>console.log : (...data: any[]) => void
25+
>console : Console
26+
>log : (...data: any[]) => void
27+
>x : number
28+
}
29+
}
30+
31+
new C().bar();
32+
>new C().bar() : void
33+
>new C().bar : () => void
34+
>new C() : C
35+
>C : typeof C
36+
>bar : () => void
37+

tests/baselines/reference/privateNameSetterNoGetter.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ var __classPrivateAccessorSet = (this && this.__classPrivateAccessorSet) || func
1717
if (!instances.has(receiver)) {
1818
throw new TypeError("attempted to set private accessor on non-instance");
1919
}
20-
return fn.call(receiver, value);
20+
fn.call(receiver, value);
21+
return value;
2122
};
2223
var _C_x_set, _C_instances, _a;
2324
const C = (_a = class {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// @target: es2019
2+
3+
class C {
4+
set #foo(a: number) {}
5+
bar() {
6+
let x = (this.#foo = 42 * 2);
7+
console.log(x); // 84
8+
}
9+
}
10+
11+
new C().bar();

0 commit comments

Comments
 (0)