diff options
author | Lars Knoll <lars.knoll@digia.com> | 2014-05-08 14:35:30 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-07-22 13:49:14 +0200 |
commit | e8746aeaecc4b1cfe312d8ed943ad74bd53f66e2 (patch) | |
tree | f4f391707da4054502b4826eedec5cc80bfe0a1c /src/qml/jsruntime/qv4managed_p.h | |
parent | 0732e0177e62590c812f0fea9c32f7d427bd933f (diff) |
Start implement new Object creation pattern
Create objects through a static create() method that returns a pointer
to the objects Data. This will later on simplify breaking the
direct connection between Object and Object::Data.
Change-Id: Id8daa3c766429bc36f432868e1957846147c96b6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4managed_p.h')
-rw-r--r-- | src/qml/jsruntime/qv4managed_p.h | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h index c70b717b0f..729e835bb3 100644 --- a/src/qml/jsruntime/qv4managed_p.h +++ b/src/qml/jsruntime/qv4managed_p.h @@ -176,26 +176,41 @@ const QV4::ObjectVTable classname::static_vtbl = \ advanceIterator \ } +struct HeapObject { + +}; + struct Q_QML_PRIVATE_EXPORT Managed { - struct Data { + struct Data : HeapObject { + Data() {} + Data(InternalClass *internal) + : internalClass(internal) + , inUse(1) + , extensible(1) + { + // #### +// Q_ASSERT(internal && internal->vtable); + } InternalClass *internalClass; - union { - uint _data; - struct { - uchar markBit : 1; - uchar inUse : 1; - uchar extensible : 1; // used by Object - uchar _unused : 1; - uchar needsActivation : 1; // used by FunctionObject - uchar strictMode : 1; // used by FunctionObject - uchar bindingKeyFlag : 1; - uchar hasAccessorProperty : 1; - uchar _type; - mutable uchar subtype; - uchar _flags; - }; + struct { + uchar markBit : 1; + uchar inUse : 1; + uchar extensible : 1; // used by Object + uchar _unused : 1; + uchar needsActivation : 1; // used by FunctionObject + uchar strictMode : 1; // used by FunctionObject + uchar bindingKeyFlag : 1; + uchar hasAccessorProperty : 1; + uchar _type; + mutable uchar subtype; + uchar _flags; }; + + void setVTable(const ManagedVTable *vt); + + void *operator new(size_t size, ExecutionEngine *e); + void *operator new(size_t, Managed *m) { return m; } }; Data data; V4_MANAGED @@ -214,12 +229,8 @@ private: protected: Managed(InternalClass *internal) + : data(internal) { - Q_ASSERT(internal && internal->vtable); - d()->internalClass = internal; - d()->_data = 0; - d()->inUse = 1; - d()->extensible = 1; } public: |