aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2020-11-27 13:48:11 +0100
committerFabian Kosmale <fabian.kosmale@qt.io>2020-12-03 10:38:43 +0100
commit77c02343e2c86bd80994882d709fe12f745705ba (patch)
tree214ae179c7d62f4328aaf75b6447e08c5a5c7d32 /src/qml/jsruntime
parent76aa1d578d0eb0e819bac34292f2788853dc5199 (diff)
Use QMetaType instead of metatype-id, take 2
This time, the ValueTypeFactory gets converted. As a consequence, many callers get touched again. Task-number: QTBUG-88766 Change-Id: I3a8b7d5cfeb7fac85daf1702febba205971d4256 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/jsruntime')
-rw-r--r--src/qml/jsruntime/qv4engine.cpp11
-rw-r--r--src/qml/jsruntime/qv4qobjectwrapper.cpp15
2 files changed, 14 insertions, 12 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp
index 2892b616b0..1085b81ab7 100644
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -1718,7 +1718,8 @@ static QVariant objectToVariant(QV4::ExecutionEngine *e, const QV4::Object *o, V
QV4::ReturnedValue QV4::ExecutionEngine::fromVariant(const QVariant &variant)
{
- int type = variant.userType();
+ const QMetaType metaType = variant.metaType();
+ int type = metaType.id();
const void *ptr = variant.constData();
if (type < QMetaType::User) {
@@ -1804,8 +1805,8 @@ QV4::ReturnedValue QV4::ExecutionEngine::fromVariant(const QVariant &variant)
break;
}
- if (const QMetaObject *vtmo = QQmlValueTypeFactory::metaObjectForMetaType(type))
- return QV4::QQmlValueTypeWrapper::create(this, variant, vtmo, type);
+ if (const QMetaObject *vtmo = QQmlValueTypeFactory::metaObjectForMetaType(metaType))
+ return QV4::QQmlValueTypeWrapper::create(this, variant, vtmo, metaType);
} else {
QV4::Scope scope(this);
if (type == qMetaTypeId<QQmlListReference>()) {
@@ -1851,8 +1852,8 @@ QV4::ReturnedValue QV4::ExecutionEngine::fromVariant(const QVariant &variant)
return sequentialIterableToJS(this, lst);
}
- if (const QMetaObject *vtmo = QQmlValueTypeFactory::metaObjectForMetaType(type))
- return QV4::QQmlValueTypeWrapper::create(this, variant, vtmo, type);
+ if (const QMetaObject *vtmo = QQmlValueTypeFactory::metaObjectForMetaType(metaType))
+ return QV4::QQmlValueTypeWrapper::create(this, variant, vtmo, metaType);
}
// XXX TODO: To be compatible, we still need to handle:
diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp
index 2e6df06c36..200ebfaffd 100644
--- a/src/qml/jsruntime/qv4qobjectwrapper.cpp
+++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp
@@ -132,7 +132,8 @@ static QV4::ReturnedValue loadProperty(QV4::ExecutionEngine *v4, QObject *object
{
Q_ASSERT(!property.isFunction());
QV4::Scope scope(v4);
- const int propType = property.propType().id();
+ const QMetaType propMetaType = property.propType();
+ const int propType = propMetaType.id();
if (property.isQObject()) {
QObject *rv = nullptr;
@@ -176,15 +177,15 @@ static QV4::ReturnedValue loadProperty(QV4::ExecutionEngine *v4, QObject *object
QVariant v;
property.readProperty(object, &v);
- if (QQmlValueTypeFactory::isValueType(v.userType())) {
- if (const QMetaObject *valueTypeMetaObject = QQmlValueTypeFactory::metaObjectForMetaType(v.userType()))
- return QV4::QQmlValueTypeWrapper::create(v4, object, property.coreIndex(), valueTypeMetaObject, v.userType()); // VariantReference value-type.
+ if (QQmlValueTypeFactory::isValueType(v.metaType())) {
+ if (const QMetaObject *valueTypeMetaObject = QQmlValueTypeFactory::metaObjectForMetaType(v.metaType()))
+ return QV4::QQmlValueTypeWrapper::create(v4, object, property.coreIndex(), valueTypeMetaObject, v.metaType()); // VariantReference value-type.
}
return scope.engine->fromVariant(v);
- } else if (QQmlValueTypeFactory::isValueType(propType)) {
- if (const QMetaObject *valueTypeMetaObject = QQmlValueTypeFactory::metaObjectForMetaType(propType))
- return QV4::QQmlValueTypeWrapper::create(v4, object, property.coreIndex(), valueTypeMetaObject, propType);
+ } else if (QQmlValueTypeFactory::isValueType(propMetaType)) {
+ if (const QMetaObject *valueTypeMetaObject = QQmlValueTypeFactory::metaObjectForMetaType(propMetaType))
+ return QV4::QQmlValueTypeWrapper::create(v4, object, property.coreIndex(), valueTypeMetaObject, propMetaType);
} else {
#if QT_CONFIG(qml_sequence_object)
// see if it's a sequence type