diff --git a/mozilla/js/rhino/src/org/mozilla/javascript/BaseFunction.java b/mozilla/js/rhino/src/org/mozilla/javascript/BaseFunction.java index 88b8e2f02b4..aaafefe1195 100644 --- a/mozilla/js/rhino/src/org/mozilla/javascript/BaseFunction.java +++ b/mozilla/js/rhino/src/org/mozilla/javascript/BaseFunction.java @@ -309,11 +309,11 @@ public class BaseFunction extends IdScriptableObject implements Function final Scriptable boundThis; final Object[] boundArgs; if (argc > 0) { - boundThis = ScriptRuntime.toObject(cx, scope, args[0]); + boundThis = ScriptRuntime.toObjectOrNull(cx, args[0], scope); boundArgs = new Object[argc-1]; System.arraycopy(args, 1, boundArgs, 0, argc-1); } else { - boundThis = ScriptRuntime.toObject(cx, scope, Undefined.instance); + boundThis = null; boundArgs = ScriptRuntime.emptyArgs; } return new BoundFunction(cx, scope, targetFunction, boundThis, boundArgs); diff --git a/mozilla/js/rhino/src/org/mozilla/javascript/BoundFunction.java b/mozilla/js/rhino/src/org/mozilla/javascript/BoundFunction.java index 6f26b702cc0..9705cf5c650 100644 --- a/mozilla/js/rhino/src/org/mozilla/javascript/BoundFunction.java +++ b/mozilla/js/rhino/src/org/mozilla/javascript/BoundFunction.java @@ -79,7 +79,8 @@ public class BoundFunction extends BaseFunction { @Override public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] extraArgs) { - return targetFunction.call(cx, scope, boundThis, concat(boundArgs, extraArgs)); + Scriptable callThis = boundThis != null ? boundThis : ScriptRuntime.getTopCallScope(cx); + return targetFunction.call(cx, scope, callThis, concat(boundArgs, extraArgs)); } @Override