tricky-infinite-loop-that-uses-captured-variables.js   [plain text]


var count = 0;

function bar(f) {
    if (++count < 10)
        return;
    count = 0;
    throw f;
}

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 (f) {
        var result = f();
        if (result != i + 1)
            throw "Error: bad result for i = " + i + ": " + result;
    }
}