infinite-loop-that-uses-captured-variables-but-they-do-not-escape.js   [plain text]


var count = 0;

function bar(f) {
    if (++count < 10) {
        var result = f();
        if (result != i + 1)
            throw "Error: bad result insie closure for i = " + i + ": " + result;
        return;
    }
    count = 0;
    throw "done";
}

noInline(bar);

function foo(a) {
    var x = a + 1;
    for (;;) {
        bar(function() { return x; });
    }
}

noInline(foo);

for (var i = 0; i < 10000; ++i) {
    try {
        foo(i);
    } catch (done) {
        if (done != "done")
            throw "Error: bad exception: " + done;
    }
}