diff options
| author | Ulf Hermann <ulf.hermann@qt.io> | 2025-08-27 14:30:50 +0200 |
|---|---|---|
| committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2025-09-02 12:01:54 +0000 |
| commit | 81b71266ff66b7ebefc383b2e8595f428a579392 (patch) | |
| tree | 8eb5cfb53b8b7ced88e4c7faa4c851ef0f7d5719 | |
| parent | 500fb9107daa0ee5fed56dc42fe7d8051e10d886 (diff) | |
QtQml: Inline Sequence's shiftInline into its ownly user
It gets in the way if kept seperate.
Pick-to: 6.8
Task-number: QTBUG-129972
Task-number: QTBUG-139025
Change-Id: I105ee78e89ce561ec27e8badc27aa94a717ace39
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
(cherry picked from commit 609a06be462088044cb84999d86eb5fd2fbb0e81)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit 48ab3d5c66bd57eb1850eaaf361a8774fdb1b9ad)
| -rw-r--r-- | src/qml/jsruntime/qv4sequenceobject.cpp | 51 |
1 files changed, 21 insertions, 30 deletions
diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp index 433a203098..c8cc6a6f50 100644 --- a/src/qml/jsruntime/qv4sequenceobject.cpp +++ b/src/qml/jsruntime/qv4sequenceobject.cpp @@ -201,34 +201,6 @@ QVariant Heap::Sequence::toVariant() const return QVariant(listType(), m_container); } -static QVariant shiftInline(Heap::Sequence *p) -{ - void *storage = p->storagePointer(); - Q_ASSERT(storage); // Must readReference() before - const QMetaType v = p->valueMetaType(); - const QMetaSequence m = p->metaSequence(); - - QVariant result; - void *resultData = createVariantData(v, &result); - m.valueAtIndex(storage, 0, resultData); - - if (m.canRemoveValueAtBegin()) { - m.removeValueAtBegin(storage); - return result; - } - - QVariant t; - void *tData = createVariantData(v, &t); - for (qsizetype i = 1, end = m.size(storage); i < end; ++i) { - m.valueAtIndex(storage, i, tData); - m.setValueAtIndex(storage, i - 1, tData); - } - m.removeValueAtEnd(storage); - - return result; -} - - template<typename Action> void convertAndDo(const QVariant &item, const QMetaType v, Action action) { @@ -580,12 +552,31 @@ ReturnedValue SequencePrototype::method_shift( if (!len) RETURN_UNDEFINED(); - ScopedValue result(scope, scope.engine->fromVariant(shiftInline(p))); + void *storage = p->storagePointer(); + Q_ASSERT(storage); // Must readReference() before + const QMetaType v = p->valueMetaType(); + const QMetaSequence m = p->metaSequence(); + + QVariant shifted; + void *resultData = createVariantData(v, &shifted); + m.valueAtIndex(storage, 0, resultData); + + if (m.canRemoveValueAtBegin()) { + m.removeValueAtBegin(storage); + } else { + QVariant t; + void *tData = createVariantData(v, &t); + for (qsizetype i = 1, end = m.size(storage); i < end; ++i) { + m.valueAtIndex(storage, i, tData); + m.setValueAtIndex(storage, i - 1, tData); + } + m.removeValueAtEnd(storage); + } if (p->object()) p->storeReference(); - return result->asReturnedValue(); + return scope.engine->fromVariant(shifted); } ReturnedValue SequencePrototype::newSequence( |
