diff options
author | Lars Knoll <lars.knoll@digia.com> | 2014-04-05 20:47:36 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-07-22 13:48:54 +0200 |
commit | 393c92a82170260fc322f7fc389a5594d71a8876 (patch) | |
tree | daa493130b95a53313f830b657f24859f8b5bfa5 /src/qml/jsruntime/qv4object_p.h | |
parent | 6452f7a57452dc35c414d7e3c13c79115dd145ed (diff) |
Move object data into internal structure
Change-Id: I1fcccd535ed356e736468337bd450270cd290044
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4object_p.h')
-rw-r--r-- | src/qml/jsruntime/qv4object_p.h | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h index 9a443f0569..4fe3a776be 100644 --- a/src/qml/jsruntime/qv4object_p.h +++ b/src/qml/jsruntime/qv4object_p.h @@ -108,11 +108,22 @@ struct Q_QML_EXPORT Object: Managed { enum { IsObject = true }; - Members memberData; - ArrayData *arrayData; + struct Data { + Members memberData; + ArrayData *arrayData; + }; + Data data; + + const Data *objectData() const { return &data; } + Data *objectData() { return &data; } + + Members memberData() const { return objectData()->memberData; } + const ArrayData *arrayData() const { return objectData()->arrayData; } + ArrayData *arrayData() { return objectData()->arrayData; } + void setArrayData(ArrayData *a) { objectData()->arrayData = a; } - Property *propertyAt(uint index) const { return reinterpret_cast<Property *>(memberData.data() + index); } + Property *propertyAt(uint index) const { return reinterpret_cast<Property *>(memberData().data() + index); } Object(ExecutionEngine *engine); Object(InternalClass *internalClass); @@ -192,30 +203,30 @@ public: void arraySet(uint index, ValueRef value); bool arrayPut(uint index, ValueRef value) { - return arrayData->vtable()->put(this, index, value); + return arrayData()->vtable()->put(this, index, value); } bool arrayPut(uint index, Value *values, uint n) { - return arrayData->vtable()->putArray(this, index, values, n); + return arrayData()->vtable()->putArray(this, index, values, n); } void setArrayAttributes(uint i, PropertyAttributes a) { - Q_ASSERT(arrayData); - if (arrayData->attrs || a != Attr_Data) { + Q_ASSERT(arrayData()); + if (arrayData()->attrs || a != Attr_Data) { ArrayData::ensureAttributes(this); a.resolve(); - arrayData->vtable()->setAttribute(this, i, a); + arrayData()->vtable()->setAttribute(this, i, a); } } void push_back(const ValueRef v); ArrayData::Type arrayType() const { - return arrayData ? arrayData->type : ArrayData::Simple; + return arrayData() ? arrayData()->type : ArrayData::Simple; } // ### remove me void setArrayType(ArrayData::Type t) { Q_ASSERT(t != ArrayData::Simple && t != ArrayData::Sparse); arrayCreate(); - arrayData->type = t; + arrayData()->type = t; } inline void arrayReserve(uint n) { @@ -223,7 +234,7 @@ public: } void arrayCreate() { - if (!arrayData) + if (!arrayData()) ArrayData::realloc(this, ArrayData::Simple, 0, 0, false); #ifdef CHECK_SPARSE_ARRAYS initSparseArray(); @@ -231,15 +242,15 @@ public: } void initSparseArray(); - SparseArrayNode *sparseBegin() { return arrayType() == ArrayData::Sparse ? static_cast<SparseArrayData *>(arrayData)->sparse->begin() : 0; } - SparseArrayNode *sparseEnd() { return arrayType() == ArrayData::Sparse ? static_cast<SparseArrayData *>(arrayData)->sparse->end() : 0; } + SparseArrayNode *sparseBegin() { return arrayType() == ArrayData::Sparse ? static_cast<SparseArrayData *>(arrayData())->sparse->begin() : 0; } + SparseArrayNode *sparseEnd() { return arrayType() == ArrayData::Sparse ? static_cast<SparseArrayData *>(arrayData())->sparse->end() : 0; } inline bool protoHasArray() { Scope scope(engine()); Scoped<Object> p(scope, this); while ((p = p->prototype())) - if (p->arrayData) + if (p->arrayData()) return true; return false; @@ -358,7 +369,7 @@ struct ArrayObject: Object { inline void Object::setArrayLengthUnchecked(uint l) { if (isArrayObject()) - memberData[ArrayObject::LengthPropertyIndex] = Primitive::fromUInt32(l); + memberData()[ArrayObject::LengthPropertyIndex] = Primitive::fromUInt32(l); } inline void Object::push_back(const ValueRef v) @@ -378,10 +389,10 @@ inline void Object::arraySet(uint index, const Property &p, PropertyAttributes a if (attributes.isAccessor()) { setHasAccessorProperty(); initSparseArray(); - } else if (index > 0x1000 && index > 2*arrayData->alloc) { + } else if (index > 0x1000 && index > 2*arrayData()->alloc) { initSparseArray(); } else { - arrayData->vtable()->reallocate(this, index + 1, false); + arrayData()->vtable()->reallocate(this, index + 1, false); } setArrayAttributes(index, attributes); Property *pd = ArrayData::insert(this, index, attributes.isAccessor()); @@ -396,7 +407,7 @@ inline void Object::arraySet(uint index, const Property &p, PropertyAttributes a inline void Object::arraySet(uint index, ValueRef value) { arrayCreate(); - if (index > 0x1000 && index > 2*arrayData->alloc) { + if (index > 0x1000 && index > 2*arrayData()->alloc) { initSparseArray(); } Property *pd = ArrayData::insert(this, index); |