From 1b7f303480f6250d43b67c411cdb7738a6b869a6 Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Tue, 14 Jan 2014 21:46:44 -0500 Subject: [PATCH] Bug 959695 part 3. Make ReportIsNotFunction take a Handle. r=terrence --- js/src/jsapi.cpp | 3 ++- js/src/jsfriendapi.cpp | 2 +- js/src/jsfriendapi.h | 2 +- js/src/jsfun.cpp | 3 ++- js/src/jsproxy.cpp | 3 ++- js/src/vm/Interpreter.cpp | 15 +++++++-------- js/src/vm/Interpreter.h | 2 +- js/xpconnect/wrappers/XrayWrapper.cpp | 6 ++++-- 8 files changed, 20 insertions(+), 16 deletions(-) diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 68b6c273f1cc..732de94bf002 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -3986,7 +3986,8 @@ JS_CloneFunctionObject(JSContext *cx, JSObject *funobjArg, JSObject *parentArg) if (!funobj->is()) { AutoCompartment ac(cx, funobj); - ReportIsNotFunction(cx, ObjectValue(*funobj)); + RootedValue v(cx, ObjectValue(*funobj)); + ReportIsNotFunction(cx, v); return nullptr; } diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp index 6d022a730871..29097ce86391 100644 --- a/js/src/jsfriendapi.cpp +++ b/js/src/jsfriendapi.cpp @@ -1207,7 +1207,7 @@ js_DefineOwnProperty(JSContext *cx, JSObject *objArg, jsid idArg, } JS_FRIEND_API(bool) -js_ReportIsNotFunction(JSContext *cx, const JS::Value& v) +js_ReportIsNotFunction(JSContext *cx, JS::HandleValue v) { return ReportIsNotFunction(cx, v); } diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h index 4709b526bf55..7f5ae0882b57 100644 --- a/js/src/jsfriendapi.h +++ b/js/src/jsfriendapi.h @@ -1782,7 +1782,7 @@ js_DefineOwnProperty(JSContext *cx, JSObject *objArg, jsid idArg, JS::Handle descriptor, bool *bp); extern JS_FRIEND_API(bool) -js_ReportIsNotFunction(JSContext *cx, const JS::Value& v); +js_ReportIsNotFunction(JSContext *cx, JS::HandleValue v); #ifdef JSGC_GENERATIONAL extern JS_FRIEND_API(void) diff --git a/js/src/jsfun.cpp b/js/src/jsfun.cpp index ce9cb84bdf33..49032d0b4caf 100644 --- a/js/src/jsfun.cpp +++ b/js/src/jsfun.cpp @@ -1305,7 +1305,8 @@ js::CallOrConstructBoundFunction(JSContext *cx, unsigned argc, Value *vp) * So before anything else, if we are an arrow function, make sure we * don't even get here. You never saw me. Burn this comment. */ - return ReportIsNotFunction(cx, ObjectValue(*fun), -1, CONSTRUCT); + RootedValue v(cx, ObjectValue(*fun)); + return ReportIsNotFunction(cx, v, -1, CONSTRUCT); } /* 15.3.4.5.1 step 1, 15.3.4.5.2 step 3. */ diff --git a/js/src/jsproxy.cpp b/js/src/jsproxy.cpp index 46a246988935..5281ac9b9e53 100644 --- a/js/src/jsproxy.cpp +++ b/js/src/jsproxy.cpp @@ -290,7 +290,8 @@ BaseProxyHandler::fun_toString(JSContext *cx, HandleObject proxy, unsigned inden { if (proxy->isCallable()) return JS_NewStringCopyZ(cx, "function () {\n [native code]\n}"); - ReportIsNotFunction(cx, ObjectValue(*proxy)); + RootedValue v(cx, ObjectValue(*proxy)); + ReportIsNotFunction(cx, v); return nullptr; } diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp index 0dadcbf3878b..33f794576dd6 100644 --- a/js/src/vm/Interpreter.cpp +++ b/js/src/vm/Interpreter.cpp @@ -344,13 +344,12 @@ SetPropertyOperation(JSContext *cx, HandleScript script, jsbytecode *pc, HandleV } bool -js::ReportIsNotFunction(JSContext *cx, const Value &v, int numToSkip, MaybeConstruct construct) +js::ReportIsNotFunction(JSContext *cx, HandleValue v, int numToSkip, MaybeConstruct construct) { unsigned error = construct ? JSMSG_NOT_CONSTRUCTOR : JSMSG_NOT_FUNCTION; int spIndex = numToSkip >= 0 ? -(numToSkip + 1) : JSDVG_SEARCH_STACK; - RootedValue val(cx, v); - js_ReportValueError3(cx, error, spIndex, val, NullPtr(), nullptr, nullptr); + js_ReportValueError3(cx, error, spIndex, v, NullPtr(), nullptr, nullptr); return false; } @@ -441,7 +440,7 @@ js::Invoke(JSContext *cx, CallArgs args, MaybeConstruct construct) InitialFrameFlags initial = (InitialFrameFlags) construct; if (args.calleev().isPrimitive()) - return ReportIsNotFunction(cx, args.calleev().get(), args.length() + 1, construct); + return ReportIsNotFunction(cx, args.calleev(), args.length() + 1, construct); JSObject &callee = args.callee(); const Class *clasp = callee.getClass(); @@ -454,7 +453,7 @@ js::Invoke(JSContext *cx, CallArgs args, MaybeConstruct construct) #endif JS_ASSERT_IF(construct, !clasp->construct); if (!clasp->call) - return ReportIsNotFunction(cx, args.calleev().get(), args.length() + 1, construct); + return ReportIsNotFunction(cx, args.calleev(), args.length() + 1, construct); return CallJSNative(cx, clasp->call, args); } @@ -533,7 +532,7 @@ js::InvokeConstructor(JSContext *cx, CallArgs args) args.setThis(MagicValue(JS_IS_CONSTRUCTING)); if (!args.calleev().isObject()) - return ReportIsNotFunction(cx, args.calleev().get(), args.length() + 1, CONSTRUCT); + return ReportIsNotFunction(cx, args.calleev(), args.length() + 1, CONSTRUCT); JSObject &callee = args.callee(); if (callee.is()) { @@ -545,7 +544,7 @@ js::InvokeConstructor(JSContext *cx, CallArgs args) } if (!fun->isInterpretedConstructor()) - return ReportIsNotFunction(cx, args.calleev().get(), args.length() + 1, CONSTRUCT); + return ReportIsNotFunction(cx, args.calleev(), args.length() + 1, CONSTRUCT); if (!Invoke(cx, args, CONSTRUCT)) return false; @@ -556,7 +555,7 @@ js::InvokeConstructor(JSContext *cx, CallArgs args) const Class *clasp = callee.getClass(); if (!clasp->construct) - return ReportIsNotFunction(cx, args.calleev().get(), args.length() + 1, CONSTRUCT); + return ReportIsNotFunction(cx, args.calleev(), args.length() + 1, CONSTRUCT); return CallJSNativeConstructor(cx, clasp->construct, args); } diff --git a/js/src/vm/Interpreter.h b/js/src/vm/Interpreter.h index 304cf322ca8b..f4b237f0ec7e 100644 --- a/js/src/vm/Interpreter.h +++ b/js/src/vm/Interpreter.h @@ -108,7 +108,7 @@ enum MaybeConstruct { * before it reaches |v|. If it's -1, the decompiler will search the stack. */ extern bool -ReportIsNotFunction(JSContext *cx, const Value &v, int numToSkip = -1, +ReportIsNotFunction(JSContext *cx, HandleValue v, int numToSkip = -1, MaybeConstruct construct = NO_CONSTRUCT); /* See ReportIsNotFunction comment for the meaning of numToSkip. */ diff --git a/js/xpconnect/wrappers/XrayWrapper.cpp b/js/xpconnect/wrappers/XrayWrapper.cpp index 2610670ab612..ef0b08d27beb 100644 --- a/js/xpconnect/wrappers/XrayWrapper.cpp +++ b/js/xpconnect/wrappers/XrayWrapper.cpp @@ -1118,7 +1118,8 @@ DOMXrayTraits::call(JSContext *cx, HandleObject wrapper, // call those on the content compartment. if (clasp->flags & JSCLASS_IS_DOMIFACEANDPROTOJSCLASS) { if (!clasp->call) { - js_ReportIsNotFunction(cx, JS::ObjectValue(*wrapper)); + RootedValue v(cx, ObjectValue(*wrapper)); + js_ReportIsNotFunction(cx, v); return false; } // call it on the Xray compartment @@ -1143,7 +1144,8 @@ DOMXrayTraits::construct(JSContext *cx, HandleObject wrapper, // See comments in DOMXrayTraits::call() explaining what's going on here. if (clasp->flags & JSCLASS_IS_DOMIFACEANDPROTOJSCLASS) { if (!clasp->construct) { - js_ReportIsNotFunction(cx, JS::ObjectValue(*wrapper)); + RootedValue v(cx, ObjectValue(*wrapper)); + js_ReportIsNotFunction(cx, v); return false; } if (!clasp->construct(cx, args.length(), args.base()))