description(
"This test checks that function declarations are treated as statements."
);

function f()
{
    return false;
}

function ifTest()
{
    if (true)
        function f()
        {
            return true;
        }

    return f();
}

shouldBeTrue("ifTest()");

function ifElseTest()
{
    if (false)
        return false;
    else
        function f()
        {
            return true;
        }

    return f();
}

shouldBeTrue("ifElseTest()");

function doWhileTest()
{
    var i = 0;
    do
        function f()
        {
            return true;
        }
    while (i++ < 10)

    return f();
}

shouldBeTrue("doWhileTest()");

function whileTest()
{
    var i = 0;
    while (i++ < 10)
        function f()
        {
            return true;
        }

    return f();
}

shouldBeTrue("whileTest()");

function forTest()
{
    var i;
    for (i = 0; i < 10; ++i)
        function f()
        {
            return true;
        }

    return f();
}

shouldBeTrue("forTest()");

function forVarTest()
{
    for (var i = 0; i < 10; ++i)
        function f()
        {
            return true;
        }

    return f();
}

shouldBeTrue("forVarTest()");

function forInTest()
{
    var a;
    for (a in { field: false })
        function f()
        {
            return true;
        }

    return f();
}

shouldBeTrue("forInTest()");

function forInVarTest()
{
    var a;
    for (var a in { field: false })
        function f()
        {
            return true;
        }

    return f();
}

shouldBeTrue("forInVarTest()");

function forInVarInitTest()
{
    var a;
    for (var a in { field: false })
        function f()
        {
            return true;
        }

    return f();
}

shouldBeTrue("forInVarInitTest()");

function withTest()
{
    with ({ })
        function f()
        {
            return true;
        }

    return f();
}

shouldBeTrue("withTest()");

function labelTest()
{
    label:
        function f()
        {
            return true;
        }

    return f();
}

shouldBeTrue("labelTest()");
