From b11ec085703a0b019c8115ff505ee6e2553fd4f1 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Sat, 5 Apr 2014 20:23:20 +0200 Subject: Move Managed data into it's own subclass This prepares for moving over to a d pointer scheme, where Managed subclasses don't hold any data directly. This is required to be able to move over to a modern GC. Change-Id: I3f59633ac07a7da461bd2d4f0f9f3a8e3b0baf02 Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4managed.cpp | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) (limited to 'src/qml/jsruntime/qv4managed.cpp') diff --git a/src/qml/jsruntime/qv4managed.cpp b/src/qml/jsruntime/qv4managed.cpp index 69022df07d..1bddf69dbb 100644 --- a/src/qml/jsruntime/qv4managed.cpp +++ b/src/qml/jsruntime/qv4managed.cpp @@ -70,33 +70,15 @@ void *Managed::operator new(size_t size, MemoryManager *mm) return mm->allocManaged(size); } -void Managed::operator delete(void *ptr) -{ - if (!ptr) - return; - - Managed *m = static_cast(ptr); - m->_data = 0; - m->markBit = 0; - m->~Managed(); -} - -void Managed::operator delete(void *ptr, MemoryManager *mm) -{ - Q_UNUSED(mm); - - operator delete(ptr); -} - ExecutionEngine *Managed::engine() const { - return internalClass ? internalClass->engine : 0; + return internalClass()->engine; } QString Managed::className() const { const char *s = 0; - switch (Type(internalClass->vtable->type)) { + switch (Type(internalClass()->vtable->type)) { case Type_Invalid: case Type_String: return QString(); @@ -125,7 +107,7 @@ QString Managed::className() const s = "RegExp"; break; case Type_ErrorObject: - switch (ErrorObject::ErrorType(subtype)) { + switch (ErrorObject::ErrorType(subtype())) { case ErrorObject::Error: s = "Error"; break; @@ -178,8 +160,8 @@ QString Managed::className() const void Managed::setVTable(const ManagedVTable *vt) { - Q_ASSERT(internalClass); - internalClass = internalClass->changeVTable(vt); + Q_ASSERT(internalClass()); + managedData()->internalClass = internalClass()->changeVTable(vt); } bool Managed::isEqualTo(Managed *, Managed *) -- cgit v1.2.3