aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4managed_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime/qv4managed_p.h')
-rw-r--r--src/qml/jsruntime/qv4managed_p.h26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h
index 220363efff..79316ba40f 100644
--- a/src/qml/jsruntime/qv4managed_p.h
+++ b/src/qml/jsruntime/qv4managed_p.h
@@ -46,6 +46,7 @@
#include <QtCore/QDebug>
#include "qv4global_p.h"
#include "qv4value_def_p.h"
+#include "qv4internalclass_p.h"
QT_BEGIN_NAMESPACE
@@ -155,11 +156,12 @@ private:
protected:
Managed(InternalClass *internal)
- : _data(0), vtbl(&static_vtbl), internalClass(internal)
+ : _data(0), internalClass(internal)
{ inUse = 1; extensible = 1; }
public:
void *operator new(size_t size, MemoryManager *mm);
+ void *operator new(size_t, Managed *m) { return m; }
void operator delete(void *ptr);
void operator delete(void *ptr, MemoryManager *mm);
@@ -191,12 +193,12 @@ public:
template <typename T>
T *as() {
// ### FIXME:
- if (!this)
+ if (!this || !internalClass)
return 0;
#if !defined(QT_NO_QOBJECT_CHECK)
reinterpret_cast<T *>(this)->qt_check_for_QMANAGED_macro(*reinterpret_cast<T *>(this));
#endif
- return vtbl == &T::static_vtbl ? static_cast<T *>(this) : 0;
+ return internalClass->vtable == &T::static_vtbl ? static_cast<T *>(this) : 0;
}
template <typename T>
const T *as() const {
@@ -206,7 +208,7 @@ public:
#if !defined(QT_NO_QOBJECT_CHECK)
reinterpret_cast<T *>(this)->qt_check_for_QMANAGED_macro(*reinterpret_cast<T *>(const_cast<Managed *>(this)));
#endif
- return vtbl == &T::static_vtbl ? static_cast<const T *>(this) : 0;
+ return internalClass->vtable == &T::static_vtbl ? static_cast<const T *>(this) : 0;
}
String *asString() { return type == Type_String ? reinterpret_cast<String *>(this) : 0; }
@@ -237,6 +239,8 @@ public:
*reinterpret_cast<Managed **>(this) = m;
}
+ void setVTable(const ManagedVTable *vt);
+
ReturnedValue construct(CallData *d);
ReturnedValue call(CallData *d);
ReturnedValue get(const StringRef name, bool *hasProperty = 0);
@@ -245,17 +249,17 @@ public:
void putIndexed(uint index, const ValueRef value);
PropertyAttributes query(StringRef name) const;
PropertyAttributes queryIndexed(uint index) const
- { return vtbl->queryIndexed(this, index); }
+ { return internalClass->vtable->queryIndexed(this, index); }
bool deleteProperty(const StringRef name);
bool deleteIndexedProperty(uint index)
- { return vtbl->deleteIndexedProperty(this, index); }
+ { return internalClass->vtable->deleteIndexedProperty(this, index); }
ReturnedValue getLookup(Lookup *l)
- { return vtbl->getLookup(this, l); }
+ { return internalClass->vtable->getLookup(this, l); }
void setLookup(Lookup *l, const ValueRef v);
bool isEqualTo(Managed *other)
- { return vtbl->isEqualTo(this, other); }
+ { return internalClass->vtable->isEqualTo(this, other); }
Property *advanceIterator(ObjectIterator *it, StringRef name, uint *index, PropertyAttributes *attributes);
static void destroy(Managed *that) { that->_data = 0; }
@@ -292,8 +296,6 @@ public:
};
};
-protected:
- const ManagedVTable *vtbl;
public:
InternalClass *internalClass;
@@ -332,10 +334,10 @@ inline FunctionObject *managed_cast(Managed *m)
inline ReturnedValue Managed::construct(CallData *d) {
- return vtbl->construct(this, d);
+ return internalClass->vtable->construct(this, d);
}
inline ReturnedValue Managed::call(CallData *d) {
- return vtbl->call(this, d);
+ return internalClass->vtable->call(this, d);
}
}