capture-escape-and-throw.js   [plain text]


var f;

function foo(s) {
    var x = 1;
    f = function() { return x; };
    x = 2;
    new Array(s);
    x = 3;
}

noInline(foo);

for (var i = 0; i < 10000; ++i)
    foo(1);

var didThrow = false;
try {
    foo(-1);
} catch (e) {
    didThrow = e;
}

if (("" + didThrow).indexOf("RangeError") != 0)
    throw "Error: did not throw right exception: " + didThrow;

var result = f();
if (result != 2)
    throw "Error: bad result from f(): " + result;