summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/expressions/short-circuit-compound-assignment-tdz.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/src/tests/non262/expressions/short-circuit-compound-assignment-tdz.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/js/src/tests/non262/expressions/short-circuit-compound-assignment-tdz.js b/js/src/tests/non262/expressions/short-circuit-compound-assignment-tdz.js
new file mode 100644
index 0000000000..b4fcbe8043
--- /dev/null
+++ b/js/src/tests/non262/expressions/short-circuit-compound-assignment-tdz.js
@@ -0,0 +1,56 @@
+// Test TDZ for short-circuit 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);
+}
+
+// TDZ for lexical |let| bindings with conditional assignment.
+{
+ assertThrowsInstanceOf(() => {
+ const False = false;
+ False &&= b;
+ b = 2;
+ let b;
+ }, ReferenceError);
+
+ assertThrowsInstanceOf(() => {
+ const True = true;
+ True ||= b;
+ b = 2;
+ let b;
+ }, ReferenceError);
+
+ assertThrowsInstanceOf(() => {
+ const NonNull = {};
+ NonNull ??= b;
+ b = 2;
+ let b;
+ }, ReferenceError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);