lepu-test-platform-web/node_modules/fibers/test/stack-overflow2.js

46 lines
916 B
JavaScript
Executable File

var Fiber = require('fibers');
// Calculate how far we can go recurse without hitting the JS stack limit
function calculateStackSpace() {
var max = 0;
function testRecursion(ii) {
++max;
testRecursion(ii + 1);
}
try {
testRecursion();
} catch (err) {}
return max;
}
// Invoke a RepExp operation that eats a lot of stack space
function pathologicRegExp(preStack) {
function fn() {
var foo = '';
for (var ii = 0; ii < 1024; ++ii) {
foo += 'a';
}
new RegExp(foo, 'g');
}
// Recurse to the limit and then invoke a stack-heavy C++ operation
function wasteStack(ii) {
ii ? wasteStack(ii - 1) : fn();
}
wasteStack(preStack);
}
Fiber(function() {
// Ensure that this doesn't ruin everything while in a fiber
var max = calculateStackSpace();
for (var stack = max; stack > 0; --stack) {
try {
pathologicRegExp(stack);
break;
} catch (err) {}
}
}).run();
console.log('pass');