[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / stress / class-expression-generates-environment.js
1 function shouldBe(actual, expected) {
2     if (actual !== expected)
3         throw new Error('bad value: ' + actual);
4 }
5
6 function shouldThrow(func, errorMessage) {
7     var errorThrown = false;
8     var error = null;
9     try {
10         func();
11     } catch (e) {
12         errorThrown = true;
13         error = e;
14     }
15     if (!errorThrown)
16         throw new Error('not thrown');
17     if (String(error) !== errorMessage)
18         throw new Error(`bad error: ${String(error)}`);
19 }
20
21 (function () {
22     class A {
23         method() {
24             shouldBe(typeof A, 'function');
25         }
26
27         static staticMethod() {
28             shouldBe(typeof A, 'function');
29         }
30     }
31
32     let originalA = A;
33
34     originalA.staticMethod();
35     (new originalA()).method();
36     A = undefined;
37     originalA.staticMethod();
38     (new originalA()).method();
39 }());
40
41
42 (function () {
43     class A {
44         method() {
45             shouldThrow(() => {
46                 A = 42;
47             }, `TypeError: Attempted to assign to readonly property.`);
48         }
49
50         static staticMethod() {
51             shouldThrow(() => {
52                 A = 42;
53             }, `TypeError: Attempted to assign to readonly property.`);
54         }
55     }
56
57     let originalA = A;
58
59     originalA.staticMethod();
60     (new originalA()).method();
61     A = undefined;
62     originalA.staticMethod();
63     (new originalA()).method();
64 }());