240 lines
5.9 KiB
JavaScript
240 lines
5.9 KiB
JavaScript
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 labelTest()
|
|
{
|
|
label:
|
|
function f()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return f();
|
|
}
|
|
|
|
shouldBeTrue("labelTest()");
|
|
|
|
|
|
function deepNesting () {
|
|
var y = '';
|
|
{
|
|
function foo() { return 'abc'; }
|
|
}
|
|
if (true) {
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
let x = 'abc';
|
|
y = x;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return foo();
|
|
};
|
|
|
|
shouldBe("deepNesting()", "'abc'");
|
|
|
|
function deepNestingForFunctionDeclaration () {
|
|
var y = '';
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
function foo() { return 'abc'; }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (true) {
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
let x = 'abc';
|
|
y = x;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return foo();
|
|
};
|
|
|
|
shouldBe("deepNestingForFunctionDeclaration()", "'abc'");
|
|
|
|
eval(`function deepNestingInEval () {
|
|
var y = '';
|
|
{
|
|
function foo() { return 'abc'; }
|
|
}
|
|
if (true) {
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
let x = 'abc';
|
|
y = x;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return foo();
|
|
};`);
|
|
|
|
|
|
shouldBe("deepNestingInEval()", "'abc'");
|
|
|
|
eval(`function deepNestingForFunctionDeclarationInEval () {
|
|
var y = '';
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
function foo() { return 'abc'; }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (true) {
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
let x = 'abc';
|
|
y = x;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return foo();
|
|
};`);
|
|
|
|
shouldBe("deepNestingForFunctionDeclarationInEval()", "'abc'");
|