| // Require lots of arguments so that arity fixup will need a lot of stack, making |
| // it prone to stack overflow. |
| var script = "recursionCount, "; |
| for (var i = 0; i < 5000; ++i) |
| script += "dummy, " |
| script += "dummy"; |
| var g = new Function(script, "return recursionCount ? g(recursionCount - 1) : 0;"); // Ensure that arguments are observed. |
| |
| noInline(g); |
| |
| // Ensure that f and g get optimized. |
| for (var i = 0; i < 10000; ++i) { |
| // Recurse once to ensure profiling along all control flow paths. |
| g(1); |
| } |
| |
| try { |
| // Recurse enough times to trigger a stack overflow exception. |
| g(1000000); |
| } catch(e) { |
| if (! (e instanceof RangeError)) |
| throw "bad value for e"; |
| } |