Skip writes to |f.arguments| if |f| cannot have an argsobj (bug 592927, r=brendan).

--HG--
extra : rebase_source : 8e53abcec2739585d5b3ee2fd0c80f5532a685e0
This commit is contained in:
David Anderson 2010-09-29 18:05:54 -07:00
Родитель a56f5b66ac
Коммит 398734ce25
2 изменённых файлов: 30 добавлений и 1 удалений

Просмотреть файл

@ -576,7 +576,9 @@ ArgSetter(JSContext *cx, JSObject *obj, jsid id, Value *vp)
if (arg < obj->getArgsInitialLength()) {
JSStackFrame *fp = (JSStackFrame *) obj->getPrivate();
if (fp) {
fp->canonicalActualArg(arg) = *vp;
JSScript *script = fp->functionScript();
if (script->usesArguments)
fp->canonicalActualArg(arg) = *vp;
return true;
}
}

Просмотреть файл

@ -0,0 +1,27 @@
// vim: set ts=4 sw=4 tw=99 et:
function f(x, y) {
x(f);
assertEq(y, "hello");
}
function g(x) {
assertEq(x.arguments[1], "hello");
x.arguments[1] = "bye";
assertEq(x.arguments[1], "hello");
}
function f2(x, y) {
arguments;
x(f2);
assertEq(y, "bye");
}
function g2(x) {
assertEq(x.arguments[1], "hello");
x.arguments[1] = "bye";
assertEq(x.arguments[1], "bye");
}
f(g, "hello");
f2(g2, "hello");