qscriptfunction.cpp [plain text]
#include "config.h"
#include "qscriptfunction_p.h"
static void qt_NativeFunction_finalize(JSObjectRef object)
{
void* priv = JSObjectGetPrivate(object);
delete reinterpret_cast<QNativeFunctionData*>(priv);
}
static JSValueRef qt_NativeFunction_callAsFunction(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
QNativeFunctionData* data = reinterpret_cast<QNativeFunctionData*>(JSObjectGetPrivate(object));
QScriptContext* scriptContext = 0;
Q_UNUSED(context);
Q_UNUSED(thisObject);
Q_UNUSED(argumentCount);
Q_UNUSED(arguments);
Q_UNUSED(exception);
QScriptEnginePrivate* engine = data->engine;
QScriptValuePrivate* result = QScriptValuePrivate::get(data->fun(scriptContext, QScriptEnginePrivate::get(engine)));
if (!result->isValid()) {
qWarning("Invalid value returned from native function, returning undefined value instead.");
return engine->makeJSValue(QScriptValue::UndefinedValue);
}
if (!result->engine()) {
Q_ASSERT(result->isValid());
result->assignEngine(engine);
} else if (result->engine() != engine) {
qWarning("Value from different engine returned from native function, returning undefined value instead.");
return engine->makeJSValue(QScriptValue::UndefinedValue);
}
return *result;
}
JSClassDefinition qt_NativeFunctionClass = {
0, kJSClassAttributeNoAutomaticPrototype,
"", 0,
0, 0,
0, qt_NativeFunction_finalize, 0, 0, 0, 0, 0, qt_NativeFunction_callAsFunction, 0, 0, 0 };
static void qt_NativeFunctionWithArg_finalize(JSObjectRef object)
{
void* priv = JSObjectGetPrivate(object);
delete reinterpret_cast<QNativeFunctionWithArgData*>(priv);
}
static JSValueRef qt_NativeFunctionWithArg_callAsFunction(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
QNativeFunctionWithArgData* data = reinterpret_cast<QNativeFunctionWithArgData*>(JSObjectGetPrivate(object));
QScriptContext* scriptContext = 0;
Q_UNUSED(context);
Q_UNUSED(thisObject);
Q_UNUSED(argumentCount);
Q_UNUSED(arguments);
Q_UNUSED(exception);
QScriptEnginePrivate* engine = data->engine;
QScriptValuePrivate* result = QScriptValuePrivate::get(data->fun(scriptContext, QScriptEnginePrivate::get(engine), data->arg));
if (!result->isValid()) {
qWarning("Invalid value returned from native function, returning undefined value instead.");
return engine->makeJSValue(QScriptValue::UndefinedValue);
}
if (!result->engine()) {
Q_ASSERT(result->isValid());
result->assignEngine(engine);
} else if (result->engine() != engine) {
qWarning("Value from different engine returned from native function, returning undefined value instead.");
return engine->makeJSValue(QScriptValue::UndefinedValue);
}
return *result;
}
JSClassDefinition qt_NativeFunctionWithArgClass = {
0, kJSClassAttributeNoAutomaticPrototype,
"", 0,
0, 0,
0, qt_NativeFunctionWithArg_finalize, 0, 0, 0, 0, 0, qt_NativeFunctionWithArg_callAsFunction, 0, 0, 0 };