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