123456789101112131415161718192021222324252627 |
- var bottom = stackPointerInfo();
- var top = bottom;
- function nearNativeStackLimit() {
- function inner() {
- try {
- with ({}) { // keep things predictable -- stay in the interpreter
- top = stackPointerInfo();
- var stepsFromLimit = eval("inner()"); // Use eval to force a number of native stackframes to be created.
- }
- return stepsFromLimit + 1;
- } catch(e) {
- // It would be nice to check here that the exception is actually an
- // over-recursion here. But doing so would require toString()ing the
- // exception, which we may not have the stack space to do.
- return 1;
- }
- }
- return inner();
- }
- var nbFrames = nearNativeStackLimit();
- var frameSize = bottom - top;
- print("Max stack size:", frameSize, "bytes",
- "\nMaximum number of frames:", nbFrames,
- "\nAverage frame size:", Math.ceil(frameSize / nbFrames), "bytes");
|