<script src="../../http/tests/inspector/inspector-test.js"></script>
<script src="../../http/tests/inspector/debugger-test.js"></script>

<script>
var closures = [];
function makeClosure() {
    var v1, v2, v3, v4, v5, v6, v7, v8, v9, v10; // Make a lot of potentially captured variables.
    return function () { 
        var x = v1; // But only capture one in optimizing compiles.
        return x;
    };
}

for (var i = 0; i < 100; ++i) {
    closures.push(makeClosure());
}

closures[0](); // Force compilation.
function testFunction() {
    closures[0](); // Force recompilation.
    
    // At this point, closures[0] captured 1 variable but thinks it captured 10.
    // If so, stopping at a breakpoint should make it crash.
}

function test() {
    InspectorTest.startDebuggerTest(step1);

    function step1()
    {
        InspectorTest.showScriptSource("debugger-activation-crash2.html", step2);
    }

    function step2(sourceFrame)
    {
        InspectorTest.addResult("Script source was shown.");
        InspectorTest.setBreakpoint(sourceFrame, 8, "", true);
        InspectorTest.runTestFunctionAndWaitUntilPaused(step3);
    }

    function step3(callFrames)
    {
        InspectorTest.captureStackTrace(callFrames, true);
        InspectorTest.completeDebuggerTest();
    }
}

window.onload = runTest;
</script>

<p>
Tests for a crash when paused at a breakpoint caused by inaccurate Activation records.
<a href="https://bugs.webkit.org/show_bug.cgi?id=57120">Bug 57120</a>
</p>
