diff options
author | Lars Knoll <[email protected]> | 2014-04-10 18:25:45 +0200 |
---|---|---|
committer | Simon Hausmann <[email protected]> | 2014-07-22 13:48:59 +0200 |
commit | 9c6eb820939034b55f86d2fc7e67a4dfaedfc543 (patch) | |
tree | 28217740f678fcacde7c5b5d42291e66df7330f2 /src | |
parent | 43df154aa1d3347d81d8c6eba09871da318c417e (diff) |
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 <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/jsruntime/qv4managed_p.h | 6 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4object_p.h | 30 |
2 files changed, 21 insertions, 15 deletions
diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h index 99ba0a09bf..e6fdeee598 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 <typename T> \ QV4::Returned<T> *asReturned() { return QV4::Returned<T>::create(this); } \ +#define V4_OBJECT_NEW \ + V4_OBJECT \ + void __dataTest() { Q_STATIC_ASSERT(sizeof(*this) == sizeof(Data)); } \ + const Data *d() const { return &static_cast<const Data &>(Managed::data); } \ + Data *d() { return &static_cast<Data &>(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 1910737973..775b15f09b 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<Property *>(memberData().data() + index); } |