| var objs; |
| |
| function init() |
| { |
| objs = new Object(); |
| var x = new Object(); |
| objs.root = x; |
| x.a = new Object(); |
| x.b = new Object(); |
| |
| /* |
| * Clears out the arena lists. Otherwise all the objects above |
| * would be considered to be created during the incremental GC. |
| */ |
| gc(); |
| } |
| |
| /* |
| * Use eval here so that the interpreter frames end up higher on the |
| * stack, which avoids them being seen later on by the conservative |
| * scanner. |
| */ |
| eval("init()"); |
| |
| gcslice(0); // Start IGC, but don't mark anything. |
| selectforgc(objs.root); |
| gcslice(1); |
| delete objs.root.b; |
| delete objs.root.a; |
| gcslice(); |