aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4object_p.h
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/qv4object_p.h
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/qv4object_p.h')
-rw-r--r--src/qml/jsruntime/qv4object_p.h24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h
index f11220f55c..7347232857 100644
--- a/src/qml/jsruntime/qv4object_p.h
+++ b/src/qml/jsruntime/qv4object_p.h
@@ -49,8 +49,8 @@ struct Q_QML_EXPORT Object: Managed {
}
Data(InternalClass *internal = 0);
- Members memberData;
- ArrayData *arrayData;
+ MemberData::Data *memberData;
+ ArrayData::Data *arrayData;
};
V4_OBJECT(Object)
Q_MANAGED_TYPE(Object)
@@ -59,12 +59,14 @@ struct Q_QML_EXPORT Object: Managed {
IsObject = true
};
- Members &memberData() { return d()->memberData; }
- const Members &memberData() const { return d()->memberData; }
- ArrayData *arrayData() const { return d()->arrayData; }
- void setArrayData(ArrayData *a) { d()->arrayData = a; }
+ // ### GC
+ MemberData *memberData() { return reinterpret_cast<MemberData *>(d()->memberData); }
+ const MemberData *memberData() const { return reinterpret_cast<const MemberData *>(d()->memberData); }
+ ArrayData *arrayData() const { return reinterpret_cast<ArrayData *>(d()->arrayData); }
+ void setArrayData(ArrayData *a) { d()->arrayData = a->d(); }
- Property *propertyAt(uint index) const { return reinterpret_cast<Property *>(memberData().data() + index); }
+ const Property *propertyAt(uint index) const { return reinterpret_cast<const Property *>(memberData()->data() + index); }
+ Property *propertyAt(uint index) { return reinterpret_cast<Property *>(memberData()->data() + index); }
const ObjectVTable *vtable() const { return reinterpret_cast<const ObjectVTable *>(internalClass()->vtable); }
Object *prototype() const { return internalClass()->prototype; }
@@ -115,6 +117,10 @@ struct Q_QML_EXPORT Object: Managed {
void defineReadonlyProperty(const QString &name, ValueRef value);
void defineReadonlyProperty(String *name, ValueRef value);
+ void ensureMemberIndex(QV4::ExecutionEngine *e, uint idx) {
+ d()->memberData = MemberData::reallocate(e, d()->memberData, idx);
+ }
+
void insertMember(String *s, const ValueRef v, PropertyAttributes attributes = Attr_Data) {
Property p(*v);
insertMember(s, p, attributes);
@@ -300,7 +306,7 @@ struct ArrayObject: Object {
Data(ExecutionEngine *engine, const QStringList &list);
Data(InternalClass *ic) : Object::Data(ic) { init(); }
void init()
- { memberData[LengthPropertyIndex] = Primitive::fromInt32(0); }
+ { memberData->data[LengthPropertyIndex] = Primitive::fromInt32(0); }
};
V4_OBJECT(Object)
@@ -321,7 +327,7 @@ struct ArrayObject: Object {
inline void Object::setArrayLengthUnchecked(uint l)
{
if (isArrayObject())
- memberData()[ArrayObject::LengthPropertyIndex] = Primitive::fromUInt32(l);
+ memberData()->data()[ArrayObject::LengthPropertyIndex] = Primitive::fromUInt32(l);
}
inline void Object::push_back(const ValueRef v)