diff options
author | Lars Knoll <lars.knoll@theqtcompany.com> | 2014-11-01 21:44:57 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-11-07 02:00:05 +0100 |
commit | b340caa0d3ebf7f76c0445b2cdd4032d8e3bf8d5 (patch) | |
tree | e475eae0dc4a6c68ca3ee41132b573fc76d2dc10 /src/qml/jsruntime/qv4object_p.h | |
parent | e22fc141c3fc5362f9b906c43a1b7c0dbc1f85a3 (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.h | 24 |
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) |