diff options
Diffstat (limited to 'Source/JavaScriptCore/API/JSCallbackFunction.cpp')
-rw-r--r-- | Source/JavaScriptCore/API/JSCallbackFunction.cpp | 38 |
1 files changed, 5 insertions, 33 deletions
diff --git a/Source/JavaScriptCore/API/JSCallbackFunction.cpp b/Source/JavaScriptCore/API/JSCallbackFunction.cpp index 3fbc00470..d287ab778 100644 --- a/Source/JavaScriptCore/API/JSCallbackFunction.cpp +++ b/Source/JavaScriptCore/API/JSCallbackFunction.cpp @@ -30,7 +30,6 @@ #include "APICast.h" #include "CodeBlock.h" #include "ExceptionHelpers.h" -#include "JSCallbackObject.h" #include "JSFunction.h" #include "FunctionPrototype.h" #include <runtime/JSGlobalObject.h> @@ -71,11 +70,15 @@ EncodedJSValue JSCallbackFunction::call(ExecState* exec) JSValueRef result; { APICallbackShim callbackShim(exec); - result = static_cast<JSCallbackFunction*>(toJS(functionRef))->m_callback(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), &exception); + result = jsCast<JSCallbackFunction*>(toJS(functionRef))->m_callback(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), &exception); } if (exception) throwError(exec, toJS(exec, exception)); + // result must be a valid JSValue. + if (!result) + return JSValue::encode(jsUndefined()); + return JSValue::encode(toJS(exec, result)); } @@ -85,35 +88,4 @@ CallType JSCallbackFunction::getCallData(JSCell*, CallData& callData) return CallTypeHost; } -JSValueRef JSCallbackFunction::toStringCallback(JSContextRef ctx, JSObjectRef, JSObjectRef thisObject, size_t, const JSValueRef[], JSValueRef* exception) -{ - JSObject* object = toJS(thisObject); - if (object->inherits(&JSCallbackObject<JSNonFinalObject>::s_info)) { - for (JSClassRef jsClass = jsCast<JSCallbackObject<JSNonFinalObject>*>(object)->classRef(); jsClass; jsClass = jsClass->parentClass) - if (jsClass->convertToType) - return jsClass->convertToType(ctx, thisObject, kJSTypeString, exception); - } else if (object->inherits(&JSCallbackObject<JSGlobalObject>::s_info)) { - for (JSClassRef jsClass = jsCast<JSCallbackObject<JSGlobalObject>*>(object)->classRef(); jsClass; jsClass = jsClass->parentClass) - if (jsClass->convertToType) - return jsClass->convertToType(ctx, thisObject, kJSTypeString, exception); - } - return 0; -} - -JSValueRef JSCallbackFunction::valueOfCallback(JSContextRef ctx, JSObjectRef, JSObjectRef thisObject, size_t, const JSValueRef[], JSValueRef* exception) -{ - JSObject* object = toJS(thisObject); - if (object->inherits(&JSCallbackObject<JSNonFinalObject>::s_info)) { - for (JSClassRef jsClass = jsCast<JSCallbackObject<JSNonFinalObject>*>(object)->classRef(); jsClass; jsClass = jsClass->parentClass) - if (jsClass->convertToType) - return jsClass->convertToType(ctx, thisObject, kJSTypeNumber, exception); - } else if (object->inherits(&JSCallbackObject<JSGlobalObject>::s_info)) { - for (JSClassRef jsClass = jsCast<JSCallbackObject<JSGlobalObject>*>(object)->classRef(); jsClass; jsClass = jsClass->parentClass) - if (jsClass->convertToType) - return jsClass->convertToType(ctx, thisObject, kJSTypeNumber, exception); - } - return 0; -} - - } // namespace JSC |