tricky-indirectly-inferred-infinite-loop-that-uses-captured-variables-and-creates-the-activation-outside-the-loop.js   [plain text]


var count = 0;

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

noInline(bar);

function fuzz(a) {
    return a != true;
}

function foo(a) {
    var x = a + 1;
    var y = a + 2;
    var f = (function() { return x; });
    while (fuzz(y)) {
        bar(f);
    }
}

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;
    }
}