From 69db2dbc4a799455884e94f69446152720e36de8 Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Fri, 17 Mar 2023 15:54:25 +0100 Subject: QML: Allow some more backing types for enums Task-number: QTBUG-112180 Done-with: Fabian Kosmale Change-Id: I48a2a696d3424ab1d8b9e693a92361a978ad70e9 Reviewed-by: Fabian Kosmale Reviewed-by: Shawn Rutledge Reviewed-by: Sami Shalayel --- src/qml/jsruntime/qv4engine.cpp | 5 ++--- src/qml/jsruntime/qv4qobjectwrapper.cpp | 2 +- src/qml/jsruntime/qv4variantobject.cpp | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/qml/jsruntime') diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index 41c7a90906..809892dacf 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -1850,7 +1850,7 @@ QV4::ReturnedValue ExecutionEngine::fromData( } } - } else { + } else if (!(metaType.flags() & QMetaType::IsEnumeration)) { QV4::Scope scope(this); if (metaType == QMetaType::fromType()) { typedef QQmlListReferencePrivate QDLRP; @@ -1936,9 +1936,8 @@ QV4::ReturnedValue ExecutionEngine::fromData( // + QObjectList // + QList - // Enumeration types can just be treated as integers for now if (metaType.flags() & QMetaType::IsEnumeration) - return QV4::Encode(*reinterpret_cast(ptr)); + return fromData(metaType.underlyingType(), ptr, container, property, flags); return QV4::Encode(newVariantObject(metaType, ptr)); } diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index e2ebda7d0e..865f2af699 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -131,7 +131,7 @@ static ReturnedValue loadProperty( return QmlListWrapper::create(v4, object, property.coreIndex(), propMetaType); // TODO: Check all the builtin types here. See getGadgetProperty() in qqmlvaluetypewrapper.cpp - switch (property.isEnum() ? QMetaType::Int : propMetaType.id()) { + switch (property.isEnum() ? propMetaType.underlyingType().id() : propMetaType.id()) { case QMetaType::Int: { int v = 0; property.readProperty(object, &v); diff --git a/src/qml/jsruntime/qv4variantobject.cpp b/src/qml/jsruntime/qv4variantobject.cpp index ccea9cac2a..62e21a120c 100644 --- a/src/qml/jsruntime/qv4variantobject.cpp +++ b/src/qml/jsruntime/qv4variantobject.cpp @@ -131,7 +131,8 @@ ReturnedValue VariantPrototype::method_valueOf(const FunctionObject *b, const Va return Encode(v.toBool()); default: if (QMetaType(v.metaType()).flags() & QMetaType::IsEnumeration) - return Encode(v.toInt()); + if (v.metaType().sizeOf() <= qsizetype(sizeof(int))) + return Encode(v.toInt()); if (v.canConvert()) return Encode(v.toDouble()); if (v.canConvert()) -- cgit v1.2.3