michael@0: // The arguments can escape from a function via a debugging hook. michael@0: michael@0: var g = newGlobal(); michael@0: var dbg = new Debugger(g); michael@0: michael@0: // capture arguments object and test function michael@0: var args, testfn; michael@0: dbg.onDebuggerStatement = function (frame) { michael@0: args = frame.eval("arguments").return; michael@0: testfn = frame.eval("test").return; michael@0: }; michael@0: g.eval("function f() { debugger; }"); michael@0: g.eval("var test = " + function test(args) { michael@0: assertEq(args.length, 3); michael@0: assertEq(args[0], this); michael@0: assertEq(args[1], f); michael@0: assertEq(args[2].toString(), "[object Object]"); michael@0: return 42; michael@0: } + ";"); michael@0: g.eval("f(this, f, {});"); michael@0: michael@0: var cv = testfn.apply(null, [args]); michael@0: assertEq(cv.return, 42);