зеркало из https://github.com/mozilla/pjs.git
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:
Родитель
a56f5b66ac
Коммит
398734ce25
|
@ -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");
|
||||
|
Загрузка…
Ссылка в новой задаче