aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4memberdata.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@theqtcompany.com>2014-11-01 21:44:57 +0100
committerSimon Hausmann <simon.hausmann@digia.com>2014-11-07 02:00:05 +0100
commitb340caa0d3ebf7f76c0445b2cdd4032d8e3bf8d5 (patch)
treee475eae0dc4a6c68ca3ee41132b573fc76d2dc10 /src/qml/jsruntime/qv4memberdata.cpp
parente22fc141c3fc5362f9b906c43a1b7c0dbc1f85a3 (diff)
Get rid of Members and directly store MemberData::Data pointers
And do the same change for ArrayData. Change-Id: Ia1ae56bd0ff586c9b987e15af7a53f395a37054a Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4memberdata.cpp')
-rw-r--r--src/qml/jsruntime/qv4memberdata.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/qml/jsruntime/qv4memberdata.cpp b/src/qml/jsruntime/qv4memberdata.cpp
index de226305f1..bf07a74b96 100644
--- a/src/qml/jsruntime/qv4memberdata.cpp
+++ b/src/qml/jsruntime/qv4memberdata.cpp
@@ -45,18 +45,19 @@ void MemberData::markObjects(HeapObject *that, ExecutionEngine *e)
m->data[i].mark(e);
}
-void Members::ensureIndex(QV4::ExecutionEngine *e, uint idx)
+MemberData::Data *MemberData::reallocate(ExecutionEngine *e, Data *old, uint idx)
{
- uint s = size();
- if (idx >= s) {
- int newAlloc = qMax((uint)4, 2*idx);
- uint alloc = sizeof(MemberData::Data) + (newAlloc)*sizeof(Value);
- MemberData *newMemberData = static_cast<MemberData *>(e->memoryManager->allocManaged(alloc));
- if (d())
- memcpy(newMemberData, d(), sizeof(MemberData::Data) + s*sizeof(Value));
- else
- new (newMemberData) MemberData(e->memberDataClass);
- newMemberData->d()->size = newAlloc;
- m = &newMemberData->data;
- }
+ uint s = old ? old->size : 0;
+ if (idx < s)
+ return old;
+
+ int newAlloc = qMax((uint)4, 2*idx);
+ uint alloc = sizeof(Data) + (newAlloc)*sizeof(Value);
+ MemberData *newMemberData = static_cast<MemberData *>(e->memoryManager->allocManaged(alloc));
+ if (old)
+ memcpy(newMemberData, old, sizeof(MemberData::Data) + s*sizeof(Value));
+ else
+ new (newMemberData) MemberData(e->memberDataClass);
+ newMemberData->d()->size = newAlloc;
+ return newMemberData->d();
}