[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / stress / const-lexical-binding-shadow-existing-global-property-tdz-ftl.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 noInline(shouldThrow);
16
17 function shouldBe(actual, expected) {
18     if (actual !== expected)
19         throw new Error(`bad value: ${String(actual)}`);
20 }
21 noInline(shouldBe);
22
23 function foo() {
24     bar = 4;
25 }
26 function get() {
27     return bar;
28 }
29 for (var i = 0; i < 1e6; ++i)
30     foo();
31 for (var i = 0; i < 1e6; ++i)
32     shouldBe(get(), 4);
33
34 shouldBe(bar, 4);
35 shouldThrow(() => {
36     $.evalScript('get(); const bar = 3;');
37 }, `ReferenceError: Cannot access uninitialized variable.`);
38 shouldThrow(() => {
39     shouldBe(bar, 3);
40 }, `ReferenceError: Cannot access uninitialized variable.`);
41 shouldThrow(() => {
42     shouldBe(get(), 3);
43 }, `ReferenceError: Cannot access uninitialized variable.`);
44 shouldThrow(() => {
45     $.evalScript('bar;');
46 }, `ReferenceError: Cannot access uninitialized variable.`);
47
48 for (var i = 0; i < 1e3; ++i) {
49     shouldThrow(() => {
50         shouldBe(get(), 3);
51     }, `ReferenceError: Cannot access uninitialized variable.`);
52 }
53