aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Knoll <[email protected]>2014-04-10 18:25:45 +0200
committerSimon Hausmann <[email protected]>2014-07-22 13:48:59 +0200
commit9c6eb820939034b55f86d2fc7e67a4dfaedfc543 (patch)
tree28217740f678fcacde7c5b5d42291e66df7330f2 /src
parent43df154aa1d3347d81d8c6eba09871da318c417e (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.h6
-rw-r--r--src/qml/jsruntime/qv4object_p.h30
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); }