[JSC] Do not use asArrayModes() with Structures because it discards TypedArray inform...
[WebKit-https.git] / JSTests / stress / class-syntax-super-in-eval.js
1 var testValue = 'test-value';
2
3 class A {
4   constructor() {
5     this.value = testValue;
6   }
7 }
8
9 class B extends A {
10   constructor(tdz) {
11     if (tdz)
12       this.id = 'id';
13     eval('super()');
14   }
15 }
16
17 var b = new B(false);
18 if (b.value !== testValue)
19    throw new Error("wrong value");
20
21 noInline(B);
22
23 let checkTDZ = function (klass, i) {
24     var exception;
25     try {
26        new klass(true);
27     } catch (e) {
28         exception = e;
29         if (!(e instanceof ReferenceError))
30             throw "Exception thrown in iteration " + i + " was not a reference error";
31     }
32     if (!exception)
33         throw "Exception not thrown for an unitialized this at iteration " + i;
34 }
35
36 for (var i = 0; i < 1e4; ++i) {
37     checkTDZ(B);
38 }
39
40 class C extends A {
41   constructor(tdz) {
42     if (tdz)
43       this.id = 'id';
44     eval("eval('super()')");
45   }
46 }
47
48 var c = new C(false);
49 if (c.value !== testValue)
50    throw new Error("wrong value");
51
52 for (var i = 0; i < 1e4; ++i) {
53    checkTDZ(C);
54 }
55
56 class D extends A {
57   constructor(tdz) {
58     if (tdz)
59       this.id = 'id';
60     eval("eval(\"eval('super()')\")");
61   }
62 }
63
64 var d = new D(false);
65 if (d.value !== testValue)
66    throw new Error("wrong value");
67
68 for (var i = 0; i < 1e4; ++i) {
69    checkTDZ(D);
70 }
71
72 var getEval = function (count) {
73   var newCount = count - 1;
74   return newCount === 0
75       ? 'super()'
76       : 'eval(getEval(' + newCount + '))';
77 };
78
79 class E extends A {
80   constructor(tdz) {
81     if (tdz)
82       this.id = 'id';
83     eval(getEval(10));
84   }
85 }
86
87 var e = new E(false);
88 if (e.value !== testValue)
89    throw new Error("wrong value");
90
91 for (var i = 0; i < 1000; ++i) {
92    checkTDZ(E);
93 }