From 02efc70ce2dda09fa5c2db47593ec30b632b1f97 Mon Sep 17 00:00:00 2001 From: Jason Orendorff Date: Thu, 11 Aug 2011 15:50:04 -0500 Subject: [PATCH] Fix Frame.arguments bug noticed by luke in bug 672829 comment 69. --- .../tests/debug/Frame-arguments-07.js | 23 +++++++++++++++++++ js/src/vm/Debugger.cpp | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 js/src/jit-test/tests/debug/Frame-arguments-07.js diff --git a/js/src/jit-test/tests/debug/Frame-arguments-07.js b/js/src/jit-test/tests/debug/Frame-arguments-07.js new file mode 100644 index 00000000000..3e7e902deb1 --- /dev/null +++ b/js/src/jit-test/tests/debug/Frame-arguments-07.js @@ -0,0 +1,23 @@ +// When argument[x] is assigned, where x > callee.length, frame.arguments reflects the change. + +var g = newGlobal('new-compartment'); +g.eval("function f(a, b) {\n" + + " for (var i = 0; i < arguments.length; i++)\n" + + " arguments[i] = i;\n" + + " debugger;\n" + + "}\n"); + +var dbg = Debugger(g); +var hits = 0; +dbg.onDebuggerStatement = function (frame) { + var argc = frame.eval("arguments.length").return; + var args = frame.arguments; + assertEq(args.length, argc); + for (var i = 0; i < argc; i++) + assertEq(args[i], i); + hits++; +} + +g.f(9); +g.f(9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9); +assertEq(hits, 2); diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp index 0599ebad0c1..4774cb4011d 100644 --- a/js/src/vm/Debugger.cpp +++ b/js/src/vm/Debugger.cpp @@ -2506,7 +2506,7 @@ DebuggerArguments_getArg(JSContext *cx, uintN argc, Value *vp) */ JS_ASSERT(i >= 0); if (uintN(i) < fp->numActualArgs()) - *vp = fp->actualArgs()[i]; + *vp = fp->canonicalActualArg(i); else vp->setUndefined(); return Debugger::fromChildJSObject(thisobj)->wrapDebuggeeValue(cx, vp);