From ef1c826f5ba527757c6c2827288dbdd519b537df Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Fri, 3 Sep 2021 15:22:54 +0200 Subject: Allow type conversions in storeNameSloppy() That's part of the sloppiness. We have no way of retrieving the lookup metatype here. Task-number: QTBUG-96144 Change-Id: Ibd1c0d8e9bb66bfe66e59fd1368f3f8ac663d01c Reviewed-by: Fabian Kosmale (cherry picked from commit fb37577559fe524f010625302cf236609918d445) Reviewed-by: Qt Cherry-pick Bot --- src/qml/qml/qqml.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/qml/qml/qqml.cpp b/src/qml/qml/qqml.cpp index b9f31ba2d5..434e025890 100644 --- a/src/qml/qml/qqml.cpp +++ b/src/qml/qml/qqml.cpp @@ -941,8 +941,19 @@ void AOTCompiledContext::storeNameSloppy(uint nameIndex, void *value, QMetaType QV4::Lookup l; l.clear(); l.nameIndex = nameIndex; - if (initObjectLookup(this, &l, qmlScopeObject, type)) { - switch (storeObjectProperty(&l, qmlScopeObject, value)) { + if (initObjectLookup(this, &l, qmlScopeObject, QMetaType())) { + + ObjectPropertyResult storeResult; + const QMetaType propType = l.qobjectLookup.propertyData->propType(); + if (type == propType) { + storeResult = storeObjectProperty(&l, qmlScopeObject, value); + } else { + QVariant var(propType); + propType.convert(type, value, propType, var.data()); + storeResult = storeObjectProperty(&l, qmlScopeObject, var.data()); + } + + switch (storeResult) { case ObjectPropertyResult::NeedsInit: engine->handle()->throwTypeError(); break; -- cgit v1.2.3