diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2023-01-30 16:37:37 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2023-02-24 09:42:23 +0100 |
commit | a09ea6b3d6265a98c17e190db007fecfbd76f317 (patch) | |
tree | 5886c0877aa7b3b33e7685a2c043390be73e9a23 /src/qml/jsruntime/qv4sequenceobject.cpp | |
parent | 499acf3114c973c5387331cab36a0b7038423cfd (diff) | |
download | qtdeclarative-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.cpp | 8 |
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()); |