<p></p>

<pre id="console"></pre>

<script>
function $(id)
{
    return document.getElementById(id);
}

function log(s)
{
    $("console").appendChild(document.createTextNode(s + "\n"));
}

function shouldBeNoEval(aDescription, a, b)
{
    if (a === b) {
        log("PASS: " + aDescription + " should be " + b + " and is.");
        return;
    }
    
    log("FAIL: " + aDescription + " should be " + b + " but instead is " + a + ".");
}

if (window.layoutTestController)
    layoutTestController.dumpAsText();

// eval should lazily create 'arguments'.
function f1() {
    if (false)
        return arguments;
    return eval("arguments");
}
shouldBeNoEval("f1(1)[0]", f1(1)[0], 1);

// 'arguments' created by eval should be live.
function f2(x) {
    var a = eval("arguments");
    x = 0;
    return a;
}
shouldBeNoEval("f2(1)[0]", f2(1)[0], 0);

// overwriting 'arguments' after lazily creating it should succeed.
function f3() {
    var x = arguments;
    var arguments = [0];
    return arguments;
}
shouldBeNoEval("f3(1)[0]", f3(1)[0], 0);

// overwriting 'arguments' before lazily creating it should succeed.
function f4() {
    var arguments = [0];
    var x = arguments;
    return arguments;
}
shouldBeNoEval("f4(1)[0]", f4(1)[0], 0);

// eval should access local, shared 'arguments'.
function f5() {
    eval("arguments.x = 1");
    return eval("arguments");
}
shouldBeNoEval("f5().x", f5().x, 1);

// accessing another function's .arguments should not accidentally overwrite your own(!).
function f6() {
    return g6(1);
}
function g6() {
    f6.arguments;
    return g6.arguments;
}
shouldBeNoEval("f6()[0]", f6()[0], 1);

// access to another function's .arguments should not produce a shared object.
function f7() {
    return g7();
}
function g7() {
    return f7.arguments === f7.arguments;
}
shouldBeNoEval("f7()", f7(), false);

// ...unless the other function uses 'arguments'.
function f8() {
    arguments;
    return g8();
}
function g8() {
    return f7.arguments === f7.arguments;
}
shouldBeNoEval("f8()", f8(), true);
</script>
