Example #1
0
/*
 * Retrieve a JSFunction* from a JSDValue*. This differs from
 * JS_ValueToFunction by fully unwrapping the object first.
 */
JSFunction*
jsd_GetValueFunction(JSDContext* jsdc, JSDValue* jsdval)
{
    JSObject *obj;
    JSFunction *fun;

    JSCompartment* oldCompartment = NULL;
    if (JSVAL_IS_PRIMITIVE(jsdval->val))
        return NULL;

    obj = JS_UnwrapObject(JSVAL_TO_OBJECT(jsdval->val));
    oldCompartment = JS_EnterCompartment(jsdc->dumbContext, obj);
    fun = JS_ValueToFunction(jsdc->dumbContext, OBJECT_TO_JSVAL(obj));
    JS_LeaveCompartment(jsdc->dumbContext, oldCompartment);

    return fun;
}
Example #2
0
/*
 * Retrieve a JSFunction* from a JSDValue*. This differs from
 * JS_ValueToFunction by fully unwrapping the object first.
 */
JSFunction*
jsd_GetValueFunction(JSDContext* jsdc, JSDValue* jsdval)
{
    JSObject *obj;
    JSFunction *fun;
    JSCrossCompartmentCall *call = NULL;
    if (!JSVAL_IS_OBJECT(jsdval->val))
        return NULL;
    if(!(obj = JSVAL_TO_OBJECT(jsdval->val)))
        return NULL;
    obj = JS_UnwrapObject(obj);

    call = JS_EnterCrossCompartmentCall(jsdc->dumbContext, obj);
    if (!call)
        return NULL;
    fun = JS_ValueToFunction(jsdc->dumbContext, OBJECT_TO_JSVAL(obj));
    JS_LeaveCrossCompartmentCall(call);

    return fun;
}