var foo; function* gen() { var x = 0; foo = function() { return x++; } for (var i = 0; i < 10; ++i) yield x++; } var j = 0; for (i of gen()) assertEq(i, j++); // now mess up the stack function f1(x) { var a, b, c, d, e, f, g; return x <= 0 ? 0 : f1(x-1); } f1(10); function f2(x) { var a = x, b = x; return x <= 0 ? 0 : f2(x-1); } f2(10); // now observe gen's call object (which should have been put) gc(); assertEq(foo(), 10); gc(); assertEq(foo(), 11); gc(); assertEq(foo(), 12); reportCompare(true,true);