From ec8f1f68d623ae68cc7d79e19067884532e3db6f Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Sat, 1 Nov 2014 23:04:20 +0100 Subject: 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 --- src/qml/jsruntime/qv4managed_p.h | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'src/qml/jsruntime/qv4managed_p.h') 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(Managed::data); } \ Data *d() { return &static_cast(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 \ + QV4::Returned<_T> *asReturned() { return QV4::Returned<_T>::create(this); } \ + V4_MANAGED_SIZE_TEST \ + const QV4::Heap::Data *d() const { return &static_cast(Managed::data); } \ + QV4::Heap::Data *d() { return &static_cast(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, -- cgit v1.2.3