diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2021-09-03 15:22:54 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-09-07 09:28:07 +0000 |
commit | ef1c826f5ba527757c6c2827288dbdd519b537df (patch) | |
tree | eda65963e302731bd056bacae08ff5af3939a7c5 | |
parent | cb60409b308f57fb0e89b25062384c863822ff91 (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>
-rw-r--r-- | src/qml/qml/qqml.cpp | 15 |
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; |