diff options
author | Lars Knoll <lars.knoll@theqtcompany.com> | 2014-11-01 23:04:20 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-11-08 16:39:07 +0100 |
commit | ec8f1f68d623ae68cc7d79e19067884532e3db6f (patch) | |
tree | ccf08fdf46e677931ba839228c444f24bcbb202e /src/qml/jsruntime/qv4managed_p.h | |
parent | 9d1cd3098a066c7b6689d4776bfd3a25621a26fc (diff) |
Begin moving the data out of Managed objects
We need to move the Data objects out of the Managed
objects, to avoid lots of trouble because inner classes
can't be forward declared in C++.
Instead move them all into a Heap namespace.
Change-Id: I736af60702b68a1759f4643aa16d64108693dea2
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 | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h index 91dc0fb034..cc7ce9d6b9 100644 --- a/src/qml/jsruntime/qv4managed_p.h +++ b/src/qml/jsruntime/qv4managed_p.h @@ -69,6 +69,18 @@ inline void qYouForgotTheQ_MANAGED_Macro(T1, T2) {} const Data *d() const { return &static_cast<const Data &>(Managed::data); } \ Data *d() { return &static_cast<Data &>(Managed::data); } +#define V4_MANAGED2(Data, superClass) \ + public: \ + Q_MANAGED_CHECK \ + typedef superClass SuperClass; \ + static const QV4::ManagedVTable static_vtbl; \ + static inline const QV4::ManagedVTable *staticVTable() { return &static_vtbl; } \ + template <typename _T> \ + QV4::Returned<_T> *asReturned() { return QV4::Returned<_T>::create(this); } \ + V4_MANAGED_SIZE_TEST \ + const QV4::Heap::Data *d() const { return &static_cast<const QV4::Heap::Data &>(Managed::data); } \ + QV4::Heap::Data *d() { return &static_cast<QV4::Heap::Data &>(Managed::data); } + #define V4_OBJECT(superClass) \ public: \ Q_MANAGED_CHECK \ @@ -110,7 +122,7 @@ struct ManagedVTable uint type : 8; const char *className; void (*destroy)(Managed *); - void (*markObjects)(HeapObject *, ExecutionEngine *e); + void (*markObjects)(Heap::Base *, ExecutionEngine *e); bool (*isEqualTo)(Managed *m, Managed *other); }; @@ -176,14 +188,8 @@ const QV4::ObjectVTable classname::static_vtbl = \ struct Q_QML_PRIVATE_EXPORT Managed { - struct Q_QML_PRIVATE_EXPORT Data : HeapObject { - Data() : HeapObject(0) {} - Data(InternalClass *internal) - : HeapObject(internal) - {} - }; - Data data; - V4_MANAGED(Managed) + Heap::Base data; + V4_MANAGED2(Base, Managed) enum { IsExecutionContext = false, IsString = false, |