summaryrefslogtreecommitdiff
path: root/src/qml/jsruntime/qv4sequenceobject.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2023-01-30 16:37:37 +0100
committerUlf Hermann <ulf.hermann@qt.io>2023-02-24 09:42:23 +0100
commita09ea6b3d6265a98c17e190db007fecfbd76f317 (patch)
tree5886c0877aa7b3b33e7685a2c043390be73e9a23 /src/qml/jsruntime/qv4sequenceobject.cpp
parent499acf3114c973c5387331cab36a0b7038423cfd (diff)
downloadqtdeclarative-a09ea6b3d6265a98c17e190db007fecfbd76f317.tar.gz
Avoid duplicate value type creation
We can actually produce an uninitialized but pre-allocated QVariant using QVariant::Private. Using the new in-place construction support in QMetaObject, we can minimize the amount of copying necessary for value types. Fixes: QTBUG-108789 Change-Id: I6b748794a6adbf6558e1e3086eab80fcfb3154a0 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4sequenceobject.cpp')
-rw-r--r--src/qml/jsruntime/qv4sequenceobject.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp
index 132084705c..d33466a7fa 100644
--- a/src/qml/jsruntime/qv4sequenceobject.cpp
+++ b/src/qml/jsruntime/qv4sequenceobject.cpp
@@ -714,9 +714,9 @@ QVariant SequencePrototype::toVariant(const QV4::Value &array, QMetaType typeHin
} else {
const QMetaType originalType = variant.metaType();
if (originalType != valueMetaType) {
- QVariant converted(valueMetaType);
- if (QQmlValueTypeProvider::createValueType(
- variant, valueMetaType, converted.data())) {
+ const QVariant converted = QQmlValueTypeProvider::createValueType(
+ variant, valueMetaType);
+ if (converted.isValid()) {
variant = converted;
} else if (!variant.convert(valueMetaType)) {
qWarning().noquote()
@@ -725,7 +725,7 @@ QVariant SequencePrototype::toVariant(const QV4::Value &array, QMetaType typeHin
.arg(QString::number(i),
QString::fromUtf8(originalType.name()),
QString::fromUtf8(valueMetaType.name()));
- variant = converted;
+ variant = QVariant(valueMetaType);
}
}
meta->addValueAtEnd(result.data(), variant.constData());