diff options
Diffstat (limited to 'src/qml/jsruntime/qv4arraydata.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4arraydata.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/qml/jsruntime/qv4arraydata.cpp b/src/qml/jsruntime/qv4arraydata.cpp index bfeb3d4699..d8a7de5466 100644 --- a/src/qml/jsruntime/qv4arraydata.cpp +++ b/src/qml/jsruntime/qv4arraydata.cpp @@ -237,8 +237,14 @@ void ArrayData::ensureAttributes(Object *o) void SimpleArrayData::markObjects(Heap::Base *d, ExecutionEngine *e) { Heap::SimpleArrayData *dd = static_cast<Heap::SimpleArrayData *>(d); - for (uint i = 0; i < dd->len; ++i) - dd->arrayData[dd->mappedIndex(i)].mark(e); + uint end = dd->offset + dd->len; + if (end > dd->alloc) { + for (uint i = 0; i < end - dd->alloc; ++i) + dd->arrayData[i].mark(e); + end = dd->alloc; + } + for (uint i = dd->offset; i < end; ++i) + dd->arrayData[i].mark(e); } ReturnedValue SimpleArrayData::get(const Heap::ArrayData *d, uint index) |