summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2020-12-19 14:41:03 +0100
committerIvan Komissarov <abbapoh@gmail.com>2021-02-07 22:49:18 +0100
commit70bc5beca051939f81dbdec3a5082241102065fa (patch)
tree6dc711ce2ee4ec24a7993e05341ab47cc44e62ce
parentadf8ba14c3e54abc971443ca0d6e121a9d4671cb (diff)
Add createVariant function
...to work around changed QVariant's ctor signature Change-Id: I3c7d9dc7d64a2ee609fbf10ee9527a5fe0a24f9c Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/script/api/qscriptengine.cpp7
-rw-r--r--src/script/bridge/qscriptqobject.cpp11
-rw-r--r--src/script/bridge/qscriptvariant_p.h9
3 files changed, 19 insertions, 8 deletions
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index 663481d..7265254 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -83,6 +83,7 @@
#include "bridge/qscriptglobalobject_p.h"
#include "bridge/qscriptactivationobject_p.h"
#include "bridge/qscriptstaticscopeobject_p.h"
+#include "bridge/qscriptvariant_p.h"
#ifndef QT_NO_QOBJECT
#include <QtCore/qcoreapplication.h>
@@ -1069,7 +1070,7 @@ QVariant QScriptEnginePrivate::jscValueToVariant(JSC::ExecState *exec, JSC::JSVa
{
if (targetType == QMetaType::QVariant || uint(targetType) == QVariant::LastType)
return toVariant(exec, value);
- QVariant v(targetType, (void *)0);
+ QVariant v = QScript::createQVariant(targetType, nullptr);
if (convertValue(exec, value, targetType, v.data()))
return v;
if (isVariant(value)) {
@@ -1081,7 +1082,7 @@ QVariant QScriptEnginePrivate::jscValueToVariant(JSC::ExecState *exec, JSC::JSVa
QByteArray typeName = v.typeName();
if (typeName.endsWith('*')
&& (QMetaType::type(typeName.left(typeName.size()-1)) == targetType)) {
- return QVariant(targetType, *reinterpret_cast<void* *>(v.data()));
+ return QScript::createQVariant(targetType, *reinterpret_cast<void* *>(v.data()));
}
}
return QVariant();
@@ -3190,7 +3191,7 @@ JSC::JSValue QScriptEnginePrivate::create(JSC::ExecState *exec, int type, const
if (typeName.endsWith('*') && !*reinterpret_cast<void* const *>(ptr))
return JSC::jsNull();
else
- result = eng->newVariant(QVariant(type, ptr));
+ result = eng->newVariant(QScript::createQVariant(type, ptr));
}
}
}
diff --git a/src/script/bridge/qscriptqobject.cpp b/src/script/bridge/qscriptqobject.cpp
index 44568d6..7ed9612 100644
--- a/src/script/bridge/qscriptqobject.cpp
+++ b/src/script/bridge/qscriptqobject.cpp
@@ -49,6 +49,7 @@
#include "../api/qscriptcontext_p.h"
#include "qscriptfunction_p.h"
#include "qscriptactivationobject_p.h"
+#include "qscriptvariant_p.h"
#include "Error.h"
#include "PrototypeFunction.h"
@@ -551,7 +552,7 @@ static JSC::JSValue delegateQtMethod(JSC::ExecState *exec, QMetaMethod::MethodTy
if (rtype != QMetaType::Void) {
// initialize the result
- args[0] = QVariant(rtype, (void *)0);
+ args[0] = createQVariant(rtype, nullptr);
}
// try to convert arguments
@@ -567,7 +568,7 @@ static JSC::JSValue delegateQtMethod(JSC::ExecState *exec, QMetaMethod::MethodTy
int tid = -1;
QVariant v;
if (argType.isUnresolved()) {
- v = QVariant(QMetaType::QObjectStar, (void *)0);
+ v = createQVariant(QMetaType::QObjectStar, nullptr);
converted = QScriptEnginePrivate::convertToNativeQObject(
exec, actual, argType.name(), reinterpret_cast<void* *>(v.data()));
} else if (argType.isVariant()) {
@@ -579,7 +580,7 @@ static JSC::JSValue delegateQtMethod(JSC::ExecState *exec, QMetaMethod::MethodTy
}
} else {
tid = argType.typeId();
- v = QVariant(tid, (void *)0);
+ v = createQVariant(tid, nullptr);
converted = QScriptEnginePrivate::convertValue(exec, actual, tid, v.data());
if (exec->hadException())
return exec->exception();
@@ -599,7 +600,7 @@ static JSC::JSValue delegateQtMethod(JSC::ExecState *exec, QMetaMethod::MethodTy
QByteArray vvTypeName = vv.typeName();
if (vvTypeName.endsWith('*')
&& (vvTypeName.left(vvTypeName.size()-1) == argType.name())) {
- v = QVariant(tid, *reinterpret_cast<void* *>(vv.data()));
+ v = createQVariant(tid, *reinterpret_cast<void* *>(vv.data()));
converted = true;
matchDistance += 10;
}
@@ -939,7 +940,7 @@ struct QtMethodCaller
} else if (retType.typeId() != QMetaType::Void) {
result = QScriptEnginePrivate::create(exec, retType.typeId(), params[0]);
if (!result)
- result = engine->newVariant(QVariant(retType.typeId(), params[0]));
+ result = engine->newVariant(createQVariant((retType.typeId()), params[0]));
} else {
result = JSC::jsUndefined();
}
diff --git a/src/script/bridge/qscriptvariant_p.h b/src/script/bridge/qscriptvariant_p.h
index 0a99916..f19406e 100644
--- a/src/script/bridge/qscriptvariant_p.h
+++ b/src/script/bridge/qscriptvariant_p.h
@@ -84,6 +84,15 @@ public:
JSC::Structure* prototypeFunctionStructure);
};
+inline QVariant createQVariant(int type, const void *copy)
+{
+#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
+ return QVariant(QMetaType(type), copy);
+#else
+ return QVariant(type, copy);
+#endif
+}
+
} // namespace QScript
QT_END_NAMESPACE