Bug 959695 part 3. Make ReportIsNotFunction take a Handle. r=terrence

This commit is contained in:
Boris Zbarsky 2014-01-14 21:46:44 -05:00
parent ac150fe727
commit b332787245
8 changed files with 20 additions and 16 deletions

View File

@ -3986,7 +3986,8 @@ JS_CloneFunctionObject(JSContext *cx, JSObject *funobjArg, JSObject *parentArg)
if (!funobj->is<JSFunction>()) {
AutoCompartment ac(cx, funobj);
ReportIsNotFunction(cx, ObjectValue(*funobj));
RootedValue v(cx, ObjectValue(*funobj));
ReportIsNotFunction(cx, v);
return nullptr;
}

View File

@ -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);
}

View File

@ -1782,7 +1782,7 @@ js_DefineOwnProperty(JSContext *cx, JSObject *objArg, jsid idArg,
JS::Handle<JSPropertyDescriptor> 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)

View File

@ -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. */

View File

@ -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;
}

View File

@ -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<JSFunction>()) {
@ -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);
}

View File

@ -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. */

View File

@ -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()))