Hook up ShadowChicken to the debugger to show tail deleted frames
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / shadow-chicken-enabled.js
1 //@ runShadowChicken
2
3 "use strict";
4
5 var verbose = false;
6
7 load("resources/shadow-chicken-support.js");
8 initialize();
9
10 (function test1() {
11     function foo() {
12         expectStack([foo, bar, baz, test1]);
13     }
14     
15     function bar() {
16         return foo();
17     }
18
19     function baz() {
20         return bar();
21     }
22     
23     baz();
24 })();
25
26 (function test2() {
27     function foo() {
28     }
29     
30     function bar() {
31         return foo();
32     }
33
34     function baz() {
35         return bar();
36     }
37     
38     baz();
39 })();
40
41 (function test3() {
42     if (verbose) {
43         print("test3:");
44         print("bob = " + describe(bob));
45         print("thingy = " + describe(thingy));
46         print("foo = " + describe(foo));
47         print("bar = " + describe(bar));
48         print("baz = " + describe(baz));
49     }
50     
51     function bob() {
52         if (verbose)
53             print("Doing bob...");
54         expectStack([bob, thingy, foo, bar, baz, test3]);
55     }
56     
57     function thingy() {
58         return bob();
59     }
60     
61     function foo() {
62         if (verbose)
63             print("Doing foo...");
64         expectStack([foo, bar, baz, test3]);
65         return thingy();
66     }
67     
68     function bar() {
69         return foo();
70     }
71
72     function baz() {
73         return bar();
74     }
75     
76     baz();
77 })();
78
79 (function test4() {
80     if (verbose) {
81         print("test4:");
82         print("bob = " + describe(bob));
83         print("thingy = " + describe(thingy));
84         print("foo = " + describe(foo));
85         print("bar = " + describe(bar));
86         print("baz = " + describe(baz));
87     }
88     
89     function bob(thingyIsTail) {
90         if (verbose)
91             print("Doing bob...");
92         expectStack([bob, thingy, foo, bar, baz, test4]);
93     }
94     
95     function thingy(isTail) {
96         bob(false);
97         return bob(isTail);
98     }
99     
100     function foo() {
101         if (verbose)
102             print("Doing foo...");
103         expectStack([foo, bar, baz, test4]);
104         thingy(false);
105         return thingy(true);
106     }
107     
108     function bar() {
109         foo();
110         return foo();
111     }
112
113     function baz() {
114         bar();
115         return bar();
116     }
117     
118     baz();
119 })();
120
121 (function test5a() {
122     if (verbose)
123         print("In test5a:");
124     var foos = 50;
125     
126     function foo(ttl) {
127         if (ttl <= 1) {
128             var array = [];
129             for (var i = 0; i < foos; ++i)
130                 array.push(foo);
131             array.push(test5a);
132             expectStack(array);
133             return;
134         }
135         return foo(ttl - 1);
136     }
137     
138     foo(foos);
139 })();
140
141 (function test5b() {
142     if (verbose)
143         print("In test5b:");
144     var foos = 100;
145     
146     function foo(ttl) {
147         if (ttl <= 1) {
148             var array = [];
149             for (var i = 0; i < foos; ++i)
150                 array.push(foo);
151             array.push(test5b);
152             expectStack(array);
153             return;
154         }
155         return foo(ttl - 1);
156     }
157     
158     foo(foos);
159 })();
160
161 (function test6() {
162     if (verbose) {
163         print("In test6");
164         print("foo = " + describe(foo));
165         print("array.push = " + describe([].push));
166     }
167     
168     var foos = 128;
169     
170     function foo(ttl) {
171         if (ttl <= 1) {
172             var array = [];
173             for (var i = 0; i < foos; ++i)
174                 array.push(foo);
175             array.push(test6);
176             expectStack(array);
177             return;
178         }
179         return foo(ttl - 1);
180     }
181     
182     foo(foos);
183     
184     if (verbose)
185         print("Done with test6.");
186 })();
187
188 (function test7() {
189     var foos = 200000;
190     
191     function foo(ttl) {
192         if (ttl <= 1) {
193             var stack = shadowChickenFunctionsOnStack();
194             var expectedStack = [];
195             expectedStack.push(shadowChickenFunctionsOnStack);
196             while (expectedStack.length < stack.length - 2)
197                 expectedStack.push(foo);
198             expectedStack.push(test7);
199             expectedStack.push(stackTop);
200             compareStacks(stack, expectedStack);
201             return;
202         }
203         return foo(ttl - 1);
204     }
205     
206     foo(foos);
207 })();
208