[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / stress / generator-with-super.js
1 function shouldThrow(func, errorMessage) {
2     var errorThrown = false;
3     var error = null;
4     try {
5         func();
6     } catch (e) {
7         errorThrown = true;
8         error = e;
9     }
10     if (!errorThrown)
11         throw new Error('not thrown');
12     if (String(error) !== errorMessage)
13         throw new Error(`bad error: ${String(error)}`);
14 }
15
16 function shouldBe(actual, expected) {
17     if (actual !== expected)
18         throw new Error('bad value: ' + actual);
19 }
20
21 (function () {
22     function test() {
23         return eval('super');
24     }
25
26     shouldThrow(() => test(), "SyntaxError: super is not valid in this context.");
27 }());
28
29 (function () {
30     class B {
31         gen() {
32             return 42;
33         }
34     }
35
36     class A extends B {
37         *gen() {
38             return eval('super.gen()');
39         }
40     }
41
42     let a = new A();
43     shouldBe(a.gen().next().value, 42);
44 }());
45
46 (function () {
47     class B {
48         gen() {
49             return 42;
50         }
51     }
52
53     class A extends B {
54         *gen() {
55             yield super.gen();
56         }
57     }
58
59     let a = new A();
60     shouldBe(a.gen().next().value, 42);
61 }());
62
63 (function () {
64     class B {
65         gen() {
66             return 42;
67         }
68     }
69
70     class A extends B {
71         *gen() {
72             yield super.gen();
73         }
74     }
75
76     let a = new A();
77     shouldThrow(() => {
78         new a.gen();
79     }, `TypeError: function is not a constructor (evaluating 'new a.gen()')`);
80 }());