|
1 var objs; |
|
2 |
|
3 function init() |
|
4 { |
|
5 objs = new Object(); |
|
6 var x = new Object(); |
|
7 objs.root1 = x; |
|
8 objs.root2 = new Object(); |
|
9 x.ptr = new Object(); |
|
10 x = null; |
|
11 |
|
12 /* |
|
13 * Clears out the arena lists. Otherwise all the objects above |
|
14 * would be considered to be created during the incremental GC. |
|
15 */ |
|
16 gc(); |
|
17 } |
|
18 |
|
19 /* |
|
20 * Use eval here so that the interpreter frames end up higher on the |
|
21 * stack, which avoids them being seen later on by the conservative |
|
22 * scanner. |
|
23 */ |
|
24 eval("init()"); |
|
25 |
|
26 gcslice(0); |
|
27 selectforgc(objs.root2); |
|
28 gcslice(1); |
|
29 objs.root2.ptr = objs.root1.ptr; |
|
30 objs.root1.ptr = null; |
|
31 gcslice(); |