// Any copyright is dedicated to the Public Domain.
// http://creativecommons.org/licenses/publicdomain/

function innermost() { return arguments.callee.caller; }
function nest() { return eval("innermost();"); }
function nest2() { return nest(); }

assertEq(nest2(), nest);

var innermost = function innermost() { return arguments.callee.caller.caller; };

assertEq(nest2(), nest2);

function nestTwice() { return eval("eval('innermost();');"); }
var nest = nestTwice;

assertEq(nest2(), nest2);

function innermostEval() { return eval("arguments.callee.caller"); }
var innermost = innermostEval;

assertEq(nest2(), nestTwice);

function innermostEvalTwice() { return eval('eval("arguments.callee.caller");'); }
var innermost = innermostEvalTwice;

assertEq(nest2(), nestTwice);

/******************************************************************************/

if (typeof reportCompare === "function")
  reportCompare(true, true);

print("Tests complete");