summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/class/checkreturn-while.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/class/checkreturn-while.js')
-rw-r--r--js/src/jit-test/tests/class/checkreturn-while.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/class/checkreturn-while.js b/js/src/jit-test/tests/class/checkreturn-while.js
new file mode 100644
index 0000000000..426e7effdc
--- /dev/null
+++ b/js/src/jit-test/tests/class/checkreturn-while.js
@@ -0,0 +1,68 @@
+load(libdir + "asserts.js");
+
+function testReturn() {
+ class C extends class {} {
+ constructor() {
+ while (true) {
+ return;
+ }
+ assertEq(true, false, "unreachable");
+ }
+ }
+
+ for (var i = 0; i < 100; ++i) {
+ assertThrowsInstanceOf(() => new C(), ReferenceError);
+ }
+}
+testReturn();
+
+function testReturnSuper() {
+ class C extends class {} {
+ constructor() {
+ super();
+ while (true) {
+ return;
+ }
+ assertEq(true, false, "unreachable");
+ }
+ }
+
+ for (var i = 0; i < 100; ++i) {
+ // No error.
+ new C();
+ }
+}
+testReturnSuper();
+
+function testReturnPrimitive() {
+ class C extends class {} {
+ constructor() {
+ while (true) {
+ return 0;
+ }
+ assertEq(true, false, "unreachable");
+ }
+ }
+
+ for (var i = 0; i < 100; ++i) {
+ assertThrowsInstanceOf(() => new C(), TypeError);
+ }
+}
+testReturnPrimitive();
+
+function testReturnPrimitiveSuper() {
+ class C extends class {} {
+ constructor() {
+ super();
+ while (true) {
+ return 0;
+ }
+ assertEq(true, false, "unreachable");
+ }
+ }
+
+ for (var i = 0; i < 100; ++i) {
+ assertThrowsInstanceOf(() => new C(), TypeError);
+ }
+}
+testReturnPrimitiveSuper();