aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@qt.io>2019-07-04 13:49:03 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2019-07-05 16:31:09 +0200
commit4ec66f1c4aa96ef919a0b902dd460f450170ce1b (patch)
treedcc992736014232e946d4eb427ba82a2206cc77b /src/qml/qml
parentda7547080b83b4d2f2b6eb12e92afa3ff60ee295 (diff)
Clean up property type to meta-type mapping
Centralize the mapping in one place using a helper function. This eliminates the table where the first field was unused as well. Change-Id: I78b599d255e37931a02a8294b1df3d44023c9a15 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/qml')
-rw-r--r--src/qml/qml/qqmlpropertycachecreator.cpp30
-rw-r--r--src/qml/qml/qqmlpropertycachecreator_p.h35
-rw-r--r--src/qml/qml/qqmlvmemetaobject.cpp31
3 files changed, 37 insertions, 59 deletions
diff --git a/src/qml/qml/qqmlpropertycachecreator.cpp b/src/qml/qml/qqmlpropertycachecreator.cpp
index bd4f2a0612..822241d58c 100644
--- a/src/qml/qml/qqmlpropertycachecreator.cpp
+++ b/src/qml/qml/qqmlpropertycachecreator.cpp
@@ -45,6 +45,36 @@ QT_BEGIN_NAMESPACE
QAtomicInt QQmlPropertyCacheCreatorBase::classIndexCounter(0);
+
+int QQmlPropertyCacheCreatorBase::metaTypeForPropertyType(QV4::CompiledData::Property::Type type)
+{
+ switch (type) {
+ case QV4::CompiledData::Property::Var: return QMetaType::QVariant;
+ case QV4::CompiledData::Property::Variant: return QMetaType::QVariant;
+ case QV4::CompiledData::Property::Int: return QMetaType::Int;
+ case QV4::CompiledData::Property::Bool: return QMetaType::Bool;
+ case QV4::CompiledData::Property::Real: return QMetaType::Double;
+ case QV4::CompiledData::Property::String: return QMetaType::QString;
+ case QV4::CompiledData::Property::Url: return QMetaType::QUrl;
+ case QV4::CompiledData::Property::Color: return QMetaType::QColor;
+ case QV4::CompiledData::Property::Font: return QMetaType::QFont;
+ case QV4::CompiledData::Property::Time: return QMetaType::QTime;
+ case QV4::CompiledData::Property::Date: return QMetaType::QDate;
+ case QV4::CompiledData::Property::DateTime: return QMetaType::QDateTime;
+ case QV4::CompiledData::Property::Rect: return QMetaType::QRectF;
+ case QV4::CompiledData::Property::Point: return QMetaType::QPointF;
+ case QV4::CompiledData::Property::Size: return QMetaType::QSizeF;
+ case QV4::CompiledData::Property::Vector2D: return QMetaType::QVector2D;
+ case QV4::CompiledData::Property::Vector3D: return QMetaType::QVector3D;
+ case QV4::CompiledData::Property::Vector4D: return QMetaType::QVector4D;
+ case QV4::CompiledData::Property::Matrix4x4: return QMetaType::QMatrix4x4;
+ case QV4::CompiledData::Property::Quaternion: return QMetaType::QQuaternion;
+ case QV4::CompiledData::Property::Custom: break;
+ case QV4::CompiledData::Property::CustomList: break;
+ };
+ return QMetaType::UnknownType;
+}
+
QQmlBindingInstantiationContext::QQmlBindingInstantiationContext(int referencingObjectIndex, const QV4::CompiledData::Binding *instantiatingBinding,
const QString &instantiatingPropertyName, QQmlPropertyCache *referencingObjectPropertyCache)
: referencingObjectIndex(referencingObjectIndex)
diff --git a/src/qml/qml/qqmlpropertycachecreator_p.h b/src/qml/qml/qqmlpropertycachecreator_p.h
index 1dfd01c679..e227301175 100644
--- a/src/qml/qml/qqmlpropertycachecreator_p.h
+++ b/src/qml/qml/qqmlpropertycachecreator_p.h
@@ -84,6 +84,8 @@ struct QQmlPropertyCacheCreatorBase
Q_DECLARE_TR_FUNCTIONS(QQmlPropertyCacheCreatorBase)
public:
static QAtomicInt classIndexCounter;
+
+ static int metaTypeForPropertyType(QV4::CompiledData::Property::Type type);
};
template <typename ObjectContainer>
@@ -275,33 +277,6 @@ inline QQmlJS::DiagnosticMessage QQmlPropertyCacheCreator<ObjectContainer>::crea
propertyCaches->set(objectIndex, cache);
propertyCaches->setNeedsVMEMetaObject(objectIndex);
- struct TypeData {
- QV4::CompiledData::Property::Type dtype;
- int metaType;
- } builtinTypes[] = {
- { QV4::CompiledData::Property::Var, QMetaType::QVariant },
- { QV4::CompiledData::Property::Variant, QMetaType::QVariant },
- { QV4::CompiledData::Property::Int, QMetaType::Int },
- { QV4::CompiledData::Property::Bool, QMetaType::Bool },
- { QV4::CompiledData::Property::Real, QMetaType::Double },
- { QV4::CompiledData::Property::String, QMetaType::QString },
- { QV4::CompiledData::Property::Url, QMetaType::QUrl },
- { QV4::CompiledData::Property::Color, QMetaType::QColor },
- { QV4::CompiledData::Property::Font, QMetaType::QFont },
- { QV4::CompiledData::Property::Time, QMetaType::QTime },
- { QV4::CompiledData::Property::Date, QMetaType::QDate },
- { QV4::CompiledData::Property::DateTime, QMetaType::QDateTime },
- { QV4::CompiledData::Property::Rect, QMetaType::QRectF },
- { QV4::CompiledData::Property::Point, QMetaType::QPointF },
- { QV4::CompiledData::Property::Size, QMetaType::QSizeF },
- { QV4::CompiledData::Property::Vector2D, QMetaType::QVector2D },
- { QV4::CompiledData::Property::Vector3D, QMetaType::QVector3D },
- { QV4::CompiledData::Property::Vector4D, QMetaType::QVector4D },
- { QV4::CompiledData::Property::Matrix4x4, QMetaType::QMatrix4x4 },
- { QV4::CompiledData::Property::Quaternion, QMetaType::QQuaternion }
-};
- static const uint builtinTypeCount = sizeof(builtinTypes) / sizeof(TypeData);
-
QByteArray newClassName;
if (objectIndex == /*root object*/0) {
@@ -431,7 +406,7 @@ inline QQmlJS::DiagnosticMessage QQmlPropertyCacheCreator<ObjectContainer>::crea
names.append(stringAt(param->nameIndex).toUtf8());
if (param->indexIsBuiltinType) {
// built-in type
- paramTypes[i + 1] = builtinTypes[param->typeNameIndexOrBuiltinType].metaType;
+ paramTypes[i + 1] = metaTypeForPropertyType(static_cast<QV4::CompiledData::Property::Type>(int(param->typeNameIndexOrBuiltinType)));
} else {
// lazily resolved type
const QString customTypeName = stringAt(param->typeNameIndexOrBuiltinType);
@@ -505,8 +480,8 @@ inline QQmlJS::DiagnosticMessage QQmlPropertyCacheCreator<ObjectContainer>::crea
if (p->type == QV4::CompiledData::Property::Var) {
propertyType = QMetaType::QVariant;
propertyFlags.type = QQmlPropertyData::Flags::VarPropertyType;
- } else if (p->type < builtinTypeCount) {
- propertyType = builtinTypes[p->type].metaType;
+ } else if (p->type < QV4::CompiledData::Property::Custom) {
+ propertyType = metaTypeForPropertyType(static_cast<QV4::CompiledData::Property::Type>(quint32(p->type)));
if (p->type == QV4::CompiledData::Property::Variant)
propertyFlags.type = QQmlPropertyData::Flags::QVariantType;
diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp
index 2881e71805..b42e328e60 100644
--- a/src/qml/qml/qqmlvmemetaobject.cpp
+++ b/src/qml/qml/qqmlvmemetaobject.cpp
@@ -57,6 +57,7 @@
#include <private/qv4scopedvalue_p.h>
#include <private/qv4jscall_p.h>
#include <private/qv4qobjectwrapper_p.h>
+#include <private/qqmlpropertycachecreator_p.h>
QT_BEGIN_NAMESPACE
@@ -656,35 +657,7 @@ int QQmlVMEMetaObject::metaCall(QObject *o, QMetaObject::Call c, int _id, void *
}
} else {
- int fallbackMetaType = QMetaType::UnknownType;
- switch (t) {
- case QV4::CompiledData::Property::Font:
- fallbackMetaType = QMetaType::QFont;
- break;
- case QV4::CompiledData::Property::Time:
- fallbackMetaType = QMetaType::QTime;
- break;
- case QV4::CompiledData::Property::Color:
- fallbackMetaType = QMetaType::QColor;
- break;
- case QV4::CompiledData::Property::Vector2D:
- fallbackMetaType = QMetaType::QVector2D;
- break;
- case QV4::CompiledData::Property::Vector3D:
- fallbackMetaType = QMetaType::QVector3D;
- break;
- case QV4::CompiledData::Property::Vector4D:
- fallbackMetaType = QMetaType::QVector4D;
- break;
- case QV4::CompiledData::Property::Matrix4x4:
- fallbackMetaType = QMetaType::QMatrix4x4;
- break;
- case QV4::CompiledData::Property::Quaternion:
- fallbackMetaType = QMetaType::QQuaternion;
- break;
- default: break;
- }
-
+ const int fallbackMetaType = QQmlPropertyCacheCreatorBase::metaTypeForPropertyType(t);
if (c == QMetaObject::ReadProperty) {
switch (t) {