95 lines
2.8 KiB
HTML
95 lines
2.8 KiB
HTML
<p>This tests verifies access to captured arguments via an optimized-away arguments object.
|
|
</p>
|
|
<pre id="console"></pre>
|
|
|
|
<script>
|
|
function log(s)
|
|
{
|
|
document.getElementById("console").appendChild(document.createTextNode(s + "\r\n"));
|
|
}
|
|
|
|
function shouldBe(a, aDescription, b, printSuccess)
|
|
{
|
|
if (a == b) {
|
|
if (printSuccess)
|
|
log("PASS: " + aDescription + " should be " + b + " and is.");
|
|
return;
|
|
}
|
|
log("FAIL: " + aDescription + " should be " + b + " but instead is " + a + ".");
|
|
}
|
|
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
}
|
|
|
|
// In-bounds of declared and passed arguments, no activation, before tear-off.
|
|
function f0(x) {
|
|
return arguments[0] || function() { return x; };
|
|
}
|
|
|
|
// Out-of-bounds of declared arguments, in-bounds of passed arguments, no activation, before tear-off.
|
|
function f1(x) {
|
|
return arguments[1] || function() { return x; };
|
|
}
|
|
|
|
// In-bounds of declared arguments, in-bounds of passed arguments, yes activation, before tear-off.
|
|
function f2(x) {
|
|
return function() { return x; } && arguments[0];
|
|
}
|
|
|
|
// Out-of-bounds of declared arguments, in-bounds of passed arguments, yes activation, before tear-off.
|
|
function f3(x) {
|
|
return function() { return x; } && arguments[1];
|
|
}
|
|
|
|
// In-bounds of declared and passed arguments, no activation, after tear-off.
|
|
function f4(x) {
|
|
return arguments || function() { return x; };
|
|
}
|
|
|
|
// Out-of-bounds of declared arguments, in-bounds of passed arguments, no activation, after tear-off.
|
|
function f5(x) {
|
|
return arguments || function() { return x; };
|
|
}
|
|
|
|
// In-bounds of declared arguments, in-bounds of passed arguments, yes activation, after tear-off.
|
|
function f6(x) {
|
|
return function() { return x; } && arguments;
|
|
}
|
|
|
|
// Out-of-bounds of declared arguments, in-bounds of passed arguments, yes activation, after tear-off.
|
|
function f7(x) {
|
|
return function() { return x; } && arguments;
|
|
}
|
|
|
|
function doTest(printSuccess)
|
|
{
|
|
shouldBe(f0(1), "f0(1)", 1, printSuccess);
|
|
shouldBe(f1(2, 3), "f1(2, 3)", 3, printSuccess);
|
|
shouldBe(f2(4), "f2(4)", 4, printSuccess);
|
|
shouldBe(f3(5, 6), "f3(5, 6)", 6, printSuccess);
|
|
shouldBe(f4(7)[0], "f4(7)", 7, printSuccess);
|
|
shouldBe(f5(8, 9)[1], "f5(8, 9)", 9, printSuccess);
|
|
shouldBe(f6(10)[0], "f6(10)", 10, printSuccess);
|
|
shouldBe(f7(11, 12)[1], "f7(11, 12)", 12, printSuccess);
|
|
}
|
|
|
|
if (self.testRunner) {
|
|
var functions = [f0, f1, f2, f3, f4, f5, f6, f7];
|
|
for (var i = 0; i < functions.length; ++i)
|
|
testRunner.neverInlineFunction(functions[i]);
|
|
for (;;) {
|
|
var allCompiled = true;
|
|
for (var i = 0; i < functions.length; ++i) {
|
|
if (!testRunner.numberOfDFGCompiles(functions[i]))
|
|
allCompiled = false;
|
|
}
|
|
if (allCompiled)
|
|
break;
|
|
doTest(false);
|
|
}
|
|
}
|
|
|
|
doTest(true);
|
|
</script>
|