aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4arraydata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime/qv4arraydata.cpp')
-rw-r--r--src/qml/jsruntime/qv4arraydata.cpp35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/qml/jsruntime/qv4arraydata.cpp b/src/qml/jsruntime/qv4arraydata.cpp
index 360aa8be99..933449b96e 100644
--- a/src/qml/jsruntime/qv4arraydata.cpp
+++ b/src/qml/jsruntime/qv4arraydata.cpp
@@ -47,7 +47,8 @@ using namespace QV4;
const ArrayVTable SimpleArrayData::static_vtbl =
{
SimpleArrayData::Simple,
- SimpleArrayData::freeData,
+ SimpleArrayData::destroy,
+ SimpleArrayData::markObjects,
SimpleArrayData::reserve,
SimpleArrayData::get,
SimpleArrayData::put,
@@ -64,7 +65,8 @@ const ArrayVTable SimpleArrayData::static_vtbl =
const ArrayVTable SparseArrayData::static_vtbl =
{
ArrayData::Sparse,
- SparseArrayData::freeData,
+ SparseArrayData::destroy,
+ SparseArrayData::markObjects,
SparseArrayData::reserve,
SparseArrayData::get,
SparseArrayData::put,
@@ -139,7 +141,7 @@ void ArrayData::ensureAttributes()
}
-void SimpleArrayData::freeData(ArrayData *d)
+void SimpleArrayData::destroy(ArrayData *d)
{
SimpleArrayData *dd = static_cast<SimpleArrayData *>(d);
delete [] (dd->data - dd->offset);
@@ -148,6 +150,13 @@ void SimpleArrayData::freeData(ArrayData *d)
delete dd;
}
+void SimpleArrayData::markObjects(ArrayData *d, ExecutionEngine *e)
+{
+ uint l = static_cast<SimpleArrayData *>(d)->len;
+ for (uint i = 0; i < l; ++i)
+ d->data[i].mark(e);
+}
+
ReturnedValue SimpleArrayData::get(const ArrayData *d, uint index)
{
const SimpleArrayData *dd = static_cast<const SimpleArrayData *>(d);
@@ -289,7 +298,7 @@ void SparseArrayData::free(ArrayData *d, uint idx)
}
-void SparseArrayData::freeData(ArrayData *d)
+void SparseArrayData::destroy(ArrayData *d)
{
delete static_cast<SparseArrayData *>(d)->sparse;
delete [] d->data;
@@ -298,6 +307,13 @@ void SparseArrayData::freeData(ArrayData *d)
delete d;
}
+void SparseArrayData::markObjects(ArrayData *d, ExecutionEngine *e)
+{
+ uint l = d->alloc;
+ for (uint i = 0; i < l; ++i)
+ d->data[i].mark(e);
+}
+
void SparseArrayData::reserve(ArrayData *d, uint n)
{
if (n < 8)
@@ -453,7 +469,7 @@ ReturnedValue SparseArrayData::pop_front(ArrayData *d)
ReturnedValue v;
if (idx != UINT_MAX) {
v = d->data[idx].asReturnedValue();
- SparseArrayData::free(d, idx);
+ free(d, idx);
} else {
v = Encode::undefined();
}
@@ -563,13 +579,6 @@ Property *ArrayData::insert(Object *o, uint index, bool isAccessor)
return reinterpret_cast<Property *>(o->arrayData->data + n->value);
}
-void ArrayData::markObjects(ExecutionEngine *e)
-{
- uint l = (type == Simple) ? static_cast<SimpleArrayData *>(this)->len : alloc;
- for (uint i = 0; i < l; ++i)
- data[i].mark(e);
-}
-
void ArrayData::sort(ExecutionContext *context, ObjectRef thisObject, const ValueRef comparefn, uint len)
{
if (!len)
@@ -637,7 +646,7 @@ void ArrayData::sort(ExecutionContext *context, ObjectRef thisObject, const Valu
}
- sparse->ArrayData::free();
+ sparse->ArrayData::destroy();
} else {
SimpleArrayData *d = static_cast<SimpleArrayData *>(thisObject->arrayData);
if (len > d->len)