michael@0: // Frame.prototype.arguments with primitive values michael@0: michael@0: var g = newGlobal(); michael@0: g.args = null; michael@0: var dbg = new Debugger(g); michael@0: var hits; michael@0: var v; michael@0: dbg.onDebuggerStatement = function (frame) { michael@0: hits++; michael@0: var args = frame.arguments; michael@0: assertEq(args instanceof Array, true); michael@0: assertEq(Array.isArray(args), false); michael@0: assertEq(args, frame.arguments); michael@0: assertEq(args.length, g.args.length); michael@0: for (var i = 0; i < args.length; i++) michael@0: assertEq(args[i], g.args[i]); michael@0: }; michael@0: michael@0: // no formal parameters michael@0: g.eval("function f() { debugger; }"); michael@0: michael@0: hits = 0; michael@0: g.eval("args = []; f();"); michael@0: g.eval("this.f();"); michael@0: g.eval("args = ['hello', 3.14, true, false, null, undefined]; f.apply(undefined, args);"); michael@0: g.eval("f('hello', 3.14, true, false, null, undefined);"); michael@0: g.eval("args = [-0, NaN, -1/0]; this.f(-0, NaN, -1/0);"); michael@0: assertEq(hits, 5); michael@0: michael@0: // with formal parameters michael@0: g.eval("function f(a, b) { debugger; }"); michael@0: michael@0: hits = 0; michael@0: g.eval("args = []; f();"); michael@0: g.eval("this.f();"); michael@0: g.eval("args = ['a', 'b']; f('a', 'b');"); michael@0: g.eval("this.f('a', 'b');"); michael@0: g.eval("f.bind(null, 'a')('b');"); michael@0: assertEq(hits, 5);