<!DOCTYPE html>
<html>
    <head>
        <title>Eval'ed Function losing scope</title>
    </head>
    <body>
        <script type="text/javascript" charset="utf-8">
            if (self.testRunner) {
                testRunner.dumpAsText(self.enablePixelTesting);
                testRunner.waitUntilDone();
            }
            
            var counts = [0, 0, 0];
            (function() {
                var code = [
                    "var div = document.createElement('div');",
                    "document.body.appendChild(div);",
                    "window.printFoo = function (counts) {",
                        "++counts[1];",
                        "div.innerHTML += 'foo ';",
                        "++counts[2];",
                    "};"
                ].join('\n');
                eval(code);
            })();
            
            function callPrintFoo() {
                window.printFoo(counts);
            }

            setInterval(function () {
                if (counts[0] == 200) {
                    var text;
                    if (counts[0] == counts[1] && counts[1] == counts[2])
                        text = "TEST PASSED";
                    else
                        text = "TEST FAILED: counts = " + counts;
                    var div = document.createElement('div');
                    document.body.appendChild(div);
                    div.innerHTML = text;
                    if (self.testRunner)
                        testRunner.notifyDone();
                }
                ++counts[0];
                callPrintFoo();
            }, 5);
        </script>
    </body>
</html>
