diff options
| author | Ulf Hermann <ulf.hermann@qt.io> | 2025-08-27 14:30:50 +0200 |
|---|---|---|
| committer | Ulf Hermann <ulf.hermann@qt.io> | 2025-09-01 19:25:21 +0200 |
| commit | 609a06be462088044cb84999d86eb5fd2fbb0e81 (patch) | |
| tree | d2363441d86a7250ebe25b3fa940a614e85c7e64 /src/qml/jsruntime/qv4sequenceobject.cpp | |
| parent | 64d64968956410990f4ef702a92f820a31f68a29 (diff) | |
QtQml: Inline Sequence's shiftInline into its ownly user
It gets in the way if kept seperate.
Pick-to: 6.10 6.9 6.8
Task-number: QTBUG-129972
Task-number: QTBUG-139025
Change-Id: I105ee78e89ce561ec27e8badc27aa94a717ace39
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4sequenceobject.cpp')
| -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 1bc4e1fdff..e61fc47ce4 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( |
