summaryrefslogtreecommitdiff
path: root/src/qml/jsruntime/qv4sequenceobject.cpp
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2023-03-31 12:27:12 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2023-03-31 13:34:02 +0200
commit655b6371475767525704ce58c81cfd4c6adb97b6 (patch)
treed2ed8204618607826b80d0d1b422b0169c8136b4 /src/qml/jsruntime/qv4sequenceobject.cpp
parent6765fb3431993a29d23f5bfb6cd1a0f4b451c63f (diff)
downloadqtdeclarative-655b6371475767525704ce58c81cfd4c6adb97b6.tar.gz
QV4: Sequence/ListWrapper: implement virtualGetLength
Both types can provide a natural implementation for virtualGetLength, which is much more efficient than going through the base implementation in QV4::Object. Change-Id: Iefc870451e1ad54c6dbfd6f73f6a5ff9b7552871 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4sequenceobject.cpp')
-rw-r--r--src/qml/jsruntime/qv4sequenceobject.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp
index d33466a7fa..4472a5411a 100644
--- a/src/qml/jsruntime/qv4sequenceobject.cpp
+++ b/src/qml/jsruntime/qv4sequenceobject.cpp
@@ -467,6 +467,14 @@ ReturnedValue Sequence::virtualGet(const Managed *that, PropertyKey id, const Va
return Object::virtualGet(that, id, receiver, hasProperty);
}
+qint64 Sequence::virtualGetLength(const Managed *m)
+{
+ const Sequence *s = static_cast<const Sequence *>(m);
+ if (s->d()->isReference() && !s->loadReference())
+ return 0;
+ return s->size();
+}
+
bool Sequence::virtualPut(Managed *that, PropertyKey id, const Value &value, Value *receiver)
{
if (id.isArrayIndex()) {