summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/script/api/qscriptengine.cpp7
-rw-r--r--src/script/bridge/qscriptqobject.cpp20
2 files changed, 20 insertions, 7 deletions
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index a8071ba..9e789bf 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -46,7 +46,6 @@
#endif
Q_DECLARE_METATYPE(QScriptValue)
-Q_DECLARE_METATYPE(QVariant)
#ifndef QT_NO_QOBJECT
Q_DECLARE_METATYPE(QObjectList)
#endif
@@ -1982,8 +1981,6 @@ QScriptValue QScriptEnginePrivate::create(int type, const void *ptr)
result = *reinterpret_cast<const QScriptValue*>(ptr);
if (!result.isValid())
result = QScriptValue(QScriptValue::UndefinedValue);
- } else if (type == qMetaTypeId<QVariant>()) {
- result = scriptValueFromVariant(*reinterpret_cast<const QVariant*>(ptr));
}
#ifndef QT_NO_QOBJECT
@@ -2000,6 +1997,8 @@ QScriptValue QScriptEnginePrivate::create(int type, const void *ptr)
else {
QByteArray typeName = QMetaType::typeName(type);
+ if (typeName == "QVariant")
+ result = scriptValueFromVariant(*reinterpret_cast<const QVariant*>(ptr));
if (typeName.endsWith('*') && !*reinterpret_cast<void* const *>(ptr))
result = QScriptValue(QScriptValue::NullValue);
else
@@ -2172,7 +2171,7 @@ bool QScriptEnginePrivate::convert(const QScriptValue &value,
return false;
*reinterpret_cast<QScriptValue*>(ptr) = value;
return true;
- } else if (type == qMetaTypeId<QVariant>()) {
+ } else if (name == "QVariant") {
*reinterpret_cast<QVariant*>(ptr) = value.toVariant();
return true;
}
diff --git a/src/script/bridge/qscriptqobject.cpp b/src/script/bridge/qscriptqobject.cpp
index da301a0..b0cfefc 100644
--- a/src/script/bridge/qscriptqobject.cpp
+++ b/src/script/bridge/qscriptqobject.cpp
@@ -1419,10 +1419,24 @@ void QObjectConnectionManager::execute(int slotIndex, void **argv)
QVector<JSC::JSValue> argsVector;
argsVector.resize(argc);
for (int i = 0; i < argc; ++i) {
- int argType = QMetaType::type(parameterTypes.at(i));
// ### optimize -- no need to convert via QScriptValue
- QScriptValue arg = engine->create(argType, argv[i + 1]);
- argsVector[i] = engine->scriptValueToJSCValue(arg);
+ QScriptValue actual;
+ void *arg = argv[i + 1];
+ QByteArray typeName = parameterTypes.at(i);
+ int argType = QMetaType::type(parameterTypes.at(i));
+ if (!argType) {
+ if (typeName == "QVariant") {
+ actual = engine->scriptValueFromVariant(*reinterpret_cast<QVariant*>(arg));
+ } else {
+ qWarning("QScriptEngine: Unable to handle unregistered datatype '%s' "
+ "when invoking handler of signal %s::%s",
+ typeName.constData(), meta->className(), method.signature());
+ actual = QScriptValue(QScriptValue::UndefinedValue);
+ }
+ } else {
+ actual = engine->create(argType, arg);
+ }
+ argsVector[i] = engine->scriptValueToJSCValue(actual);
}
JSC::ArgList jscArgs(argsVector.data(), argsVector.size());