1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
// Test TDZ for short-circutir compound assignments.
// TDZ for lexical |let| bindings.
{
assertThrowsInstanceOf(() => { let a = (a &&= 0); }, ReferenceError);
assertThrowsInstanceOf(() => { let a = (a ||= 0); }, ReferenceError);
assertThrowsInstanceOf(() => { let a = (a ??= 0); }, ReferenceError);
}
// TDZ for lexical |const| bindings.
{
assertThrowsInstanceOf(() => { const a = (a &&= 0); }, ReferenceError);
assertThrowsInstanceOf(() => { const a = (a ||= 0); }, ReferenceError);
assertThrowsInstanceOf(() => { const a = (a ??= 0); }, ReferenceError);
}
// TDZ for parameter expressions.
{
assertThrowsInstanceOf((a = (b &&= 0), b) => {}, ReferenceError);
assertThrowsInstanceOf((a = (b ||= 0), b) => {}, ReferenceError);
assertThrowsInstanceOf((a = (b ??= 0), b) => {}, ReferenceError);
}
// TDZ for |class| bindings.
{
assertThrowsInstanceOf(() => { class a extends (a &&= 0) {} }, ReferenceError);
assertThrowsInstanceOf(() => { class a extends (a ||= 0) {} }, ReferenceError);
assertThrowsInstanceOf(() => { class a extends (a ??= 0) {} }, ReferenceError);
}
if (typeof reportCompare === "function")
reportCompare(0, 0);
|