diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2020-12-19 14:41:03 +0100 |
---|---|---|
committer | Ivan Komissarov <abbapoh@gmail.com> | 2021-02-07 22:49:18 +0100 |
commit | 70bc5beca051939f81dbdec3a5082241102065fa (patch) | |
tree | 6dc711ce2ee4ec24a7993e05341ab47cc44e62ce | |
parent | adf8ba14c3e54abc971443ca0d6e121a9d4671cb (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.cpp | 7 | ||||
-rw-r--r-- | src/script/bridge/qscriptqobject.cpp | 11 | ||||
-rw-r--r-- | src/script/bridge/qscriptvariant_p.h | 9 |
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 |