aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4managed.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-11-21 13:15:46 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-04 09:45:45 +0100
commitfbcd0a22f643f0b0ec1404507d63bdf35cd9a195 (patch)
treeb759029b5ca0f9db8d3bf1863ca319a92edb6baf /src/qml/jsruntime/qv4managed.cpp
parent5e8bee55aa78551c2d31b24228227c0bbbdc1d8d (diff)
Move the vtable pointer from the object to the internal class
This saves one pointer per object, and willmake other optimizations easier in the future. Change-Id: I1324cad31998896b5dc76af3c8a7ee9d86283bfe Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4managed.cpp')
-rw-r--r--src/qml/jsruntime/qv4managed.cpp23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/qml/jsruntime/qv4managed.cpp b/src/qml/jsruntime/qv4managed.cpp
index 895ae8d91b..9b52abb9ac 100644
--- a/src/qml/jsruntime/qv4managed.cpp
+++ b/src/qml/jsruntime/qv4managed.cpp
@@ -81,7 +81,6 @@ void Managed::operator delete(void *ptr)
return;
Managed *m = static_cast<Managed *>(ptr);
- m->vtbl = 0;
m->_data = 0;
m->markBit = 0;
m->~Managed();
@@ -177,6 +176,12 @@ QString Managed::className() const
return QString::fromLatin1(s);
}
+void Managed::setVTable(const ManagedVTable *vt)
+{
+ Q_ASSERT(internalClass);
+ internalClass = internalClass->changeVTable(vt);
+}
+
ReturnedValue Managed::construct(Managed *m, CallData *)
{
return m->engine()->current->throwTypeError();
@@ -204,40 +209,40 @@ bool Managed::isEqualTo(Managed *, Managed *)
ReturnedValue Managed::get(const StringRef name, bool *hasProperty)
{
- return vtbl->get(this, name, hasProperty);
+ return internalClass->vtable->get(this, name, hasProperty);
}
ReturnedValue Managed::getIndexed(uint index, bool *hasProperty)
{
- return vtbl->getIndexed(this, index, hasProperty);
+ return internalClass->vtable->getIndexed(this, index, hasProperty);
}
void Managed::put(const StringRef name, const ValueRef value)
{
- vtbl->put(this, name, value);
+ internalClass->vtable->put(this, name, value);
}
void Managed::setLookup(Lookup *l, const ValueRef v)
{
- vtbl->setLookup(this, l, v);
+ internalClass->vtable->setLookup(this, l, v);
}
void Managed::putIndexed(uint index, const ValueRef value)
{
- vtbl->putIndexed(this, index, value);
+ internalClass->vtable->putIndexed(this, index, value);
}
PropertyAttributes Managed::query(StringRef name) const
{
- return vtbl->query(this, name);
+ return internalClass->vtable->query(this, name);
}
bool Managed::deleteProperty(const StringRef name)
{
- return vtbl->deleteProperty(this, name);
+ return internalClass->vtable->deleteProperty(this, name);
}
Property *Managed::advanceIterator(ObjectIterator *it, StringRef name, uint *index, PropertyAttributes *attributes)
{
- return vtbl->advanceIterator(this, it, name, index, attributes);
+ return internalClass->vtable->advanceIterator(this, it, name, index, attributes);
}