aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4sequenceobject.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2025-08-27 14:30:50 +0200
committerUlf Hermann <ulf.hermann@qt.io>2025-09-01 19:25:21 +0200
commit609a06be462088044cb84999d86eb5fd2fbb0e81 (patch)
treed2363441d86a7250ebe25b3fa940a614e85c7e64 /src/qml/jsruntime/qv4sequenceobject.cpp
parent64d64968956410990f4ef702a92f820a31f68a29 (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.cpp51
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(