aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4arraydata.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2014-01-22 15:25:50 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-24 14:32:33 +0100
commitc53fef423a8f607e1443b1d409712864f8cac9d5 (patch)
tree87d1efbdcf64ecb14fa6980a70fb20ffc994831d /src/qml/jsruntime/qv4arraydata.cpp
parent6ae57f01bb1495a74b23a81c590672ce788d5400 (diff)
Change virtual methods in ArrayData to take Object pointer
Pass a pointer to the underlying object instead of the ArrayData to virtual methods that modify the arrayData. This prepares for allocating the ArrayData together with the array itself. Change-Id: I66fe187f8b1e4d382ab243a518dbde5f18a1d16d Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4arraydata.cpp')
-rw-r--r--src/qml/jsruntime/qv4arraydata.cpp102
1 files changed, 52 insertions, 50 deletions
diff --git a/src/qml/jsruntime/qv4arraydata.cpp b/src/qml/jsruntime/qv4arraydata.cpp
index a71aa12310..7626a33106 100644
--- a/src/qml/jsruntime/qv4arraydata.cpp
+++ b/src/qml/jsruntime/qv4arraydata.cpp
@@ -163,9 +163,9 @@ ReturnedValue SimpleArrayData::get(const ArrayData *d, uint index)
return dd->data[index].asReturnedValue();
}
-bool SimpleArrayData::put(ArrayData *d, uint index, ValueRef value)
+bool SimpleArrayData::put(Object *o, uint index, ValueRef value)
{
- SimpleArrayData *dd = static_cast<SimpleArrayData *>(d);
+ SimpleArrayData *dd = static_cast<SimpleArrayData *>(o->arrayData);
Q_ASSERT(index >= dd->len || !dd->attrs || !dd->attrs[index].isAccessor());
// ### honour attributes
dd->data[index] = value;
@@ -177,9 +177,9 @@ bool SimpleArrayData::put(ArrayData *d, uint index, ValueRef value)
return true;
}
-bool SimpleArrayData::del(ArrayData *d, uint index)
+bool SimpleArrayData::del(Object *o, uint index)
{
- SimpleArrayData *dd = static_cast<SimpleArrayData *>(d);
+ SimpleArrayData *dd = static_cast<SimpleArrayData *>(o->arrayData);
if (index >= dd->len)
return true;
@@ -194,9 +194,9 @@ bool SimpleArrayData::del(ArrayData *d, uint index)
return false;
}
-void SimpleArrayData::setAttribute(ArrayData *d, uint index, PropertyAttributes attrs)
+void SimpleArrayData::setAttribute(Object *o, uint index, PropertyAttributes attrs)
{
- d->attrs[index] = attrs;
+ o->arrayData->attrs[index] = attrs;
}
PropertyAttributes SimpleArrayData::attribute(const ArrayData *d, uint index)
@@ -204,9 +204,9 @@ PropertyAttributes SimpleArrayData::attribute(const ArrayData *d, uint index)
return d->attrs[index];
}
-void SimpleArrayData::push_front(ArrayData *d, SafeValue *values, uint n)
+void SimpleArrayData::push_front(Object *o, SafeValue *values, uint n)
{
- SimpleArrayData *dd = static_cast<SimpleArrayData *>(d);
+ SimpleArrayData *dd = static_cast<SimpleArrayData *>(o->arrayData);
Q_ASSERT(!dd->attrs);
for (int i = n - 1; i >= 0; --i) {
if (!dd->offset)
@@ -221,9 +221,9 @@ void SimpleArrayData::push_front(ArrayData *d, SafeValue *values, uint n)
}
-ReturnedValue SimpleArrayData::pop_front(ArrayData *d)
+ReturnedValue SimpleArrayData::pop_front(Object *o)
{
- SimpleArrayData *dd = static_cast<SimpleArrayData *>(d);
+ SimpleArrayData *dd = static_cast<SimpleArrayData *>(o->arrayData);
Q_ASSERT(!dd->attrs);
if (!dd->len)
return Encode::undefined();
@@ -236,9 +236,9 @@ ReturnedValue SimpleArrayData::pop_front(ArrayData *d)
return v;
}
-uint SimpleArrayData::truncate(ArrayData *d, uint newLen)
+uint SimpleArrayData::truncate(Object *o, uint newLen)
{
- SimpleArrayData *dd = static_cast<SimpleArrayData *>(d);
+ SimpleArrayData *dd = static_cast<SimpleArrayData *>(o->arrayData);
if (dd->len < newLen)
return newLen;
@@ -262,9 +262,9 @@ uint SimpleArrayData::length(const ArrayData *d)
return static_cast<const SimpleArrayData *>(d)->len;
}
-bool SimpleArrayData::putArray(ArrayData *d, uint index, SafeValue *values, uint n)
+bool SimpleArrayData::putArray(Object *o, uint index, SafeValue *values, uint n)
{
- SimpleArrayData *dd = static_cast<SimpleArrayData *>(d);
+ SimpleArrayData *dd = static_cast<SimpleArrayData *>(o->arrayData);
if (index + n > dd->alloc)
reserve(dd, index + n + 1);
for (uint i = dd->len; i < index; ++i)
@@ -380,24 +380,24 @@ ReturnedValue SparseArrayData::get(const ArrayData *d, uint index)
return d->data[n->value].asReturnedValue();
}
-bool SparseArrayData::put(ArrayData *d, uint index, ValueRef value)
+bool SparseArrayData::put(Object *o, uint index, ValueRef value)
{
if (value->isEmpty())
return true;
- SparseArrayNode *n = static_cast<SparseArrayData *>(d)->sparse->insert(index);
- Q_ASSERT(n->value == UINT_MAX || !d->attrs || !d->attrs[n->value].isAccessor());
+ SparseArrayNode *n = static_cast<SparseArrayData *>(o->arrayData)->sparse->insert(index);
+ Q_ASSERT(n->value == UINT_MAX || !o->arrayData->attrs || !o->arrayData->attrs[n->value].isAccessor());
if (n->value == UINT_MAX)
- n->value = allocate(d);
- d->data[n->value] = value;
- if (d->attrs)
- d->attrs[n->value] = Attr_Data;
+ n->value = allocate(o->arrayData);
+ o->arrayData->data[n->value] = value;
+ if (o->arrayData->attrs)
+ o->arrayData->attrs[n->value] = Attr_Data;
return true;
}
-bool SparseArrayData::del(ArrayData *d, uint index)
+bool SparseArrayData::del(Object *o, uint index)
{
- SparseArrayData *dd = static_cast<SparseArrayData *>(d);
+ SparseArrayData *dd = static_cast<SparseArrayData *>(o->arrayData);
SparseArrayNode *n = dd->sparse->findNode(index);
if (!n)
return true;
@@ -416,23 +416,24 @@ bool SparseArrayData::del(ArrayData *d, uint index)
if (isAccessor) {
// free up both indices
- d->data[pidx + 1].tag = Value::Undefined_Type;
- d->data[pidx + 1].uint_32 = static_cast<SparseArrayData *>(d)->freeList;
- d->data[pidx].tag = Value::Undefined_Type;
- d->data[pidx].uint_32 = pidx + 1;
+ dd->data[pidx + 1].tag = Value::Undefined_Type;
+ dd->data[pidx + 1].uint_32 = static_cast<SparseArrayData *>(dd)->freeList;
+ dd->data[pidx].tag = Value::Undefined_Type;
+ dd->data[pidx].uint_32 = pidx + 1;
} else {
- d->data[pidx].tag = Value::Undefined_Type;
- d->data[pidx].uint_32 = static_cast<SparseArrayData *>(d)->freeList;
+ dd->data[pidx].tag = Value::Undefined_Type;
+ dd->data[pidx].uint_32 = static_cast<SparseArrayData *>(dd)->freeList;
}
- static_cast<SparseArrayData *>(d)->freeList = pidx;
- static_cast<SparseArrayData *>(d)->sparse->erase(n);
+ dd->freeList = pidx;
+ dd->sparse->erase(n);
return true;
}
-void SparseArrayData::setAttribute(ArrayData *d, uint index, PropertyAttributes attrs)
+void SparseArrayData::setAttribute(Object *o, uint index, PropertyAttributes attrs)
{
- SparseArrayNode *n = static_cast<SparseArrayData *>(d)->sparse->insert(index);
+ SparseArrayData *d = static_cast<SparseArrayData *>(o->arrayData);
+ SparseArrayNode *n = d->sparse->insert(index);
if (n->value == UINT_MAX)
n->value = allocate(d, attrs.isAccessor());
else if (attrs.isAccessor() != d->attrs[n->value].isAccessor()) {
@@ -451,35 +452,36 @@ PropertyAttributes SparseArrayData::attribute(const ArrayData *d, uint index)
return d->attrs[n->value];
}
-void SparseArrayData::push_front(ArrayData *d, SafeValue *values, uint n)
+void SparseArrayData::push_front(Object *o, SafeValue *values, uint n)
{
- Q_ASSERT(!d->attrs);
+ Q_ASSERT(!o->arrayData->attrs);
for (int i = n - 1; i >= 0; --i) {
- uint idx = allocate(d);
- d->data[idx] = values[i];
- static_cast<SparseArrayData *>(d)->sparse->push_front(idx);
+ uint idx = allocate(o->arrayData);
+ o->arrayData->data[idx] = values[i];
+ static_cast<SparseArrayData *>(o->arrayData)->sparse->push_front(idx);
}
}
-ReturnedValue SparseArrayData::pop_front(ArrayData *d)
+ReturnedValue SparseArrayData::pop_front(Object *o)
{
- Q_ASSERT(!d->attrs);
- uint idx = static_cast<SparseArrayData *>(d)->sparse->pop_front();
+ Q_ASSERT(!o->arrayData->attrs);
+ uint idx = static_cast<SparseArrayData *>(o->arrayData)->sparse->pop_front();
ReturnedValue v;
if (idx != UINT_MAX) {
- v = d->data[idx].asReturnedValue();
- free(d, idx);
+ v = o->arrayData->data[idx].asReturnedValue();
+ free(o->arrayData, idx);
} else {
v = Encode::undefined();
}
return v;
}
-uint SparseArrayData::truncate(ArrayData *d, uint newLen)
+uint SparseArrayData::truncate(Object *o, uint newLen)
{
- SparseArrayNode *begin = static_cast<SparseArrayData *>(d)->sparse->lowerBound(newLen);
- if (begin != static_cast<SparseArrayData *>(d)->sparse->end()) {
- SparseArrayNode *it = static_cast<SparseArrayData *>(d)->sparse->end()->previousNode();
+ SparseArrayData *d = static_cast<SparseArrayData *>(o->arrayData);
+ SparseArrayNode *begin = d->sparse->lowerBound(newLen);
+ if (begin != d->sparse->end()) {
+ SparseArrayNode *it = d->sparse->end()->previousNode();
while (1) {
if (d->attrs) {
if (!d->attrs[it->value].isConfigurable()) {
@@ -509,10 +511,10 @@ uint SparseArrayData::length(const ArrayData *d)
return n ? n->key() + 1 : 0;
}
-bool SparseArrayData::putArray(ArrayData *d, uint index, SafeValue *values, uint n)
+bool SparseArrayData::putArray(Object *o, uint index, SafeValue *values, uint n)
{
for (uint i = 0; i < n; ++i)
- put(d, index + i, values[i]);
+ put(o, index + i, values[i]);
return true;
}
@@ -546,7 +548,7 @@ uint ArrayData::append(Object *obj, const ArrayObject *otherObj, uint n)
obj->arraySet(oldSize + it->key(), other->data[it->value]);
}
} else {
- obj->arrayData->put(oldSize, other->data, n);
+ obj->arrayPut(oldSize, other->data, n);
}
return oldSize + n;