blob: e2b07f5de188bb9c93dce8949efe50d2e0938a2a [file] [log] [blame]
<p>This page tests function.caller and function.arguments in interesting nested scopes.
</p>
<p>If the test passes, you'll see a series of PASS messages below.
</p>
<pre id="console"></pre>
<script>
function log(s)
{
document.getElementById("console").appendChild(document.createTextNode(s + "\n"));
}
if (window.testRunner)
testRunner.dumpAsText();
function f() { return this.eval('f.arguments instanceof Object ? "PASS" : "FAIL"'); }
var resultArray = [
// ----- arguments -----
// function scope inside global eval scope, uncalled function
(function g() { return this.eval('f.arguments instanceof Object ? "FAIL" : "PASS"'); })(),
// function scope inside local eval scope, uncalled function
(function g() { return eval('f.arguments instanceof Object ? "FAIL" : "PASS"'); })(),
// global eval scope, called function
f(),
// local eval scope, called function
(function f() { return eval('f.arguments instanceof Object ? "PASS" : "FAIL"'); })(),
// eval scope, uncalled function
eval('(function () { }).arguments instanceof Object ? "FAIL" : "PASS"'),
// re-entrant function scope, outer called function
(function f() {
return String({ toString: function g() { return f.arguments instanceof Object ? "PASS" : "FAIL"; } });
})(),
// re-entrant function scope, inner called function
(function f() {
return String({ toString: function g() { return g.arguments instanceof Object ? "PASS" : "FAIL"; } });
})(),
// function scope, outer called function
(function f() {
return (function g() {
return f.arguments instanceof Object ? "PASS" : "FAIL";
})();
})(),
// function scope, inner called function
(function f() {
return (function g() {
return g.arguments instanceof Object ? "PASS" : "FAIL";
})();
})(),
// function scope, uncalled function
(function f() {
return (function g() { }).arguments instanceof Object ? "FAIL" : "PASS";
})(),
// global scope, uncalled function
(function () { }).arguments instanceof Object ? "FAIL" : "PASS",
// ----- caller -----
(function f() {
return (function g() {
return g.caller instanceof Object ? "PASS" : "FAIL";
})();
})(),
(function f() { return f.caller instanceof Object ? "FAIL" : "PASS"; })(),
(function () { }).caller instanceof Object ? "FAIL" : "PASS",
eval('(function f() { return f.caller instanceof Object ? "FAIL" : "PASS"; })()'),
(function f() {
return String({ toString: function g() { return g.caller instanceof Object ? "FAIL" : "PASS"; } });
})(),
(function f() {
function g() { return h.apply(this); }
function h() { return k(); }
function k() { return k.caller instanceof Object ? "PASS" : "FAIL"; }
return g();
})()
];
log(resultArray);
</script>