aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4object_p.h
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2014-04-05 20:47:36 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2014-07-22 13:48:54 +0200
commit393c92a82170260fc322f7fc389a5594d71a8876 (patch)
treedaa493130b95a53313f830b657f24859f8b5bfa5 /src/qml/jsruntime/qv4object_p.h
parent6452f7a57452dc35c414d7e3c13c79115dd145ed (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.h47
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);