aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4managed_p.h
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@theqtcompany.com>2014-11-01 23:04:20 +0100
committerSimon Hausmann <simon.hausmann@digia.com>2014-11-08 16:39:07 +0100
commitec8f1f68d623ae68cc7d79e19067884532e3db6f (patch)
treeccf08fdf46e677931ba839228c444f24bcbb202e /src/qml/jsruntime/qv4managed_p.h
parent9d1cd3098a066c7b6689d4776bfd3a25621a26fc (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.h24
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,