aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqml.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-09-03 15:22:54 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-09-07 09:28:07 +0000
commitef1c826f5ba527757c6c2827288dbdd519b537df (patch)
treeeda65963e302731bd056bacae08ff5af3939a7c5 /src/qml/qml/qqml.cpp
parentcb60409b308f57fb0e89b25062384c863822ff91 (diff)
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 <fabian.kosmale@qt.io> (cherry picked from commit fb37577559fe524f010625302cf236609918d445) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/qml/qml/qqml.cpp')
-rw-r--r--src/qml/qml/qqml.cpp15
1 files 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;