diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-11-27 13:48:11 +0100 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-12-03 10:38:43 +0100 |
commit | 77c02343e2c86bd80994882d709fe12f745705ba (patch) | |
tree | 214ae179c7d62f4328aaf75b6447e08c5a5c7d32 /src/qml/jsruntime | |
parent | 76aa1d578d0eb0e819bac34292f2788853dc5199 (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.cpp | 11 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4qobjectwrapper.cpp | 15 |
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 |