diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2023-03-31 12:27:12 +0200 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2023-03-31 13:34:02 +0200 |
commit | 655b6371475767525704ce58c81cfd4c6adb97b6 (patch) | |
tree | d2ed8204618607826b80d0d1b422b0169c8136b4 /src/qml/jsruntime/qv4sequenceobject.cpp | |
parent | 6765fb3431993a29d23f5bfb6cd1a0f4b451c63f (diff) | |
download | qtdeclarative-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.cpp | 8 |
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()) { |