[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / stress / eval-func-decl-block-with-var-and-remove.js
1 var assert = function (result, expected, message) {
2     if (result !== expected) {
3         throw new Error('Error in assert. Expected "' + expected + '" but was "' + result + '":' + message );
4     }
5 };
6
7 var assertThrow = function (cb, expected) {
8     let error = null;
9     try {
10         cb();
11     } catch(e) {
12         error = e;  
13     }
14     if (error === null) {
15         throw new Error('Error is expected. Expected "' + expected + '" but error was not thrown."');
16     }
17     if (error.toString() !== expected) {
18         throw new Error('Error is expected. Expected "' + expected + '" but error was "' + error + '"');
19     }
20 };
21
22 function foo() {
23     {   
24         assertThrow(() => f, "ReferenceError: Can't find variable: f");
25         eval('eval(" { function f() { }; } ")');
26         assert(typeof f, "function");
27     }
28     assert(typeof f, "function", "#1");
29     delete f;
30     assertThrow(() => f, "ReferenceError: Can't find variable: f", "#1");
31 }
32
33 for (var i = 0; i < 10000; i++) {
34     foo();
35     assertThrow(() => f, "ReferenceError: Can't find variable: f");
36 }
37
38 function boo() {
39     {
40         assert(typeof l, "undefined", "#5");
41         eval('{ var l = 15; eval(" { function l() { }; } ")}');
42         assert(typeof l, "function", "#3");
43     }
44     assert(typeof l, 'function', "#4");
45     delete l;
46     assertThrow(() => f, "ReferenceError: Can't find variable: f");
47 }
48
49 for (var i = 0; i < 10000; i++){
50     boo();
51     assertThrow(() => f, "ReferenceError: Can't find variable: f");
52 }
53
54 function joo() {
55     {
56         assert(typeof h, "undefined" );
57         eval('eval(" if (true){ function h() { }; } ")');
58         assert(typeof h, "function" );
59     }
60     assert(typeof h, "function", "#10");
61     delete h;
62     assertThrow(() => h, "ReferenceError: Can't find variable: h");
63 }
64
65 for (var i = 0; i < 10000; i++){
66     joo();
67     assertThrow(() => h, "ReferenceError: Can't find variable: h");
68 }
69
70 function koo() {
71     {
72         var k = 20;
73         eval('var k = 15; eval(" if (true){ function k() { }; } ")');
74         assert(typeof k, "function" );
75     }
76     assert(typeof k, "function", "#12");
77     delete k;
78     assert(typeof k, "function", "#12");
79 }
80
81 for (var i = 0; i < 10000; i++){
82     koo();
83     assertThrow(() => k, "ReferenceError: Can't find variable: k");
84 }