From: Lars Knoll Date: Thu, 10 Apr 2014 16:25:45 +0000 (+0200) Subject: First step unifying data structures X-Git-Tag: v5.3.99+beta1~321 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9c6eb820939034b55f86d2fc7e67a4dfaedfc543;p=platform%2Fupstream%2Fqtdeclarative.git First step unifying data structures Make Object::Data inherit from Managed::Data. To keep this working in the current allocation scheme, we need a dummy ObjectData in Object for now. Change-Id: I39036c0bf0431f1c2cf32dadc17a3742ff8d6831 Reviewed-by: Simon Hausmann --- diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h index 99ba0a0..e6fdeee 100644 --- a/src/qml/jsruntime/qv4managed_p.h +++ b/src/qml/jsruntime/qv4managed_p.h @@ -78,6 +78,12 @@ inline void qYouForgotTheQ_MANAGED_Macro(T1, T2) {} template \ QV4::Returned *asReturned() { return QV4::Returned::create(this); } \ +#define V4_OBJECT_NEW \ + V4_OBJECT \ + void __dataTest() { Q_STATIC_ASSERT(sizeof(*this) == sizeof(Data)); } \ + const Data *d() const { return &static_cast(Managed::data); } \ + Data *d() { return &static_cast(Managed::data); } + #define Q_MANAGED_TYPE(type) \ public: \ enum { MyType = Type_##type }; diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h index 1910737..775b15f 100644 --- a/src/qml/jsruntime/qv4object_p.h +++ b/src/qml/jsruntime/qv4object_p.h @@ -103,26 +103,26 @@ struct URIErrorPrototype; struct Q_QML_EXPORT Object: Managed { - V4_OBJECT - Q_MANAGED_TYPE(Object) - enum { - IsObject = true - }; - - struct Data { + struct Data : Managed::Data { Members memberData; ArrayData *arrayData; }; - Data data; + struct { + Members memberData; + ArrayData *arrayData; + } __data; + V4_OBJECT_NEW + Q_MANAGED_TYPE(Object) - const Data *objectData() const { return &data; } - Data *objectData() { return &data; } + enum { + IsObject = true + }; - Members &memberData() { return objectData()->memberData; } - 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; } + Members &memberData() { return d()->memberData; } + Members memberData() const { return d()->memberData; } + const ArrayData *arrayData() const { return d()->arrayData; } + ArrayData *arrayData() { return d()->arrayData; } + void setArrayData(ArrayData *a) { d()->arrayData = a; } Property *propertyAt(uint index) const { return reinterpret_cast(memberData().data() + index); }