aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4internalclass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime/qv4internalclass.cpp')
-rw-r--r--src/qml/jsruntime/qv4internalclass.cpp30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/qml/jsruntime/qv4internalclass.cpp b/src/qml/jsruntime/qv4internalclass.cpp
index aacc5bf517..3dc20b8e76 100644
--- a/src/qml/jsruntime/qv4internalclass.cpp
+++ b/src/qml/jsruntime/qv4internalclass.cpp
@@ -129,7 +129,7 @@ uint PropertyHash::lookup(const Identifier *identifier) const
InternalClass::InternalClass(ExecutionEngine *engine)
: engine(engine)
, prototype(0)
- , vtable(&Managed::static_vtbl)
+ , vtable(&QV4::Managed::static_vtbl)
, m_sealed(0)
, m_frozen(0)
, size(0)
@@ -138,7 +138,8 @@ InternalClass::InternalClass(ExecutionEngine *engine)
InternalClass::InternalClass(const QV4::InternalClass &other)
- : engine(other.engine)
+ : QQmlJS::Managed()
+ , engine(other.engine)
, prototype(other.prototype)
, vtable(other.vtable)
, propertyTable(other.propertyTable)
@@ -455,17 +456,24 @@ void InternalClass::destroy()
transitions.clear();
}
-void InternalClass::markObjects()
+struct InternalClassPoolVisitor
{
- // all prototype changes are done on the empty class
- Q_ASSERT(!prototype || this != engine->emptyClass);
-
- if (prototype)
- prototype->mark(engine);
+ ExecutionEngine *engine;
+ void operator()(InternalClass *klass)
+ {
+ // all prototype changes are done on the empty class
+ Q_ASSERT(!klass->prototype || klass != engine->emptyClass);
+
+ if (klass->prototype)
+ klass->prototype->mark(engine);
+ }
+};
- for (QHash<Transition, InternalClass *>::ConstIterator it = transitions.begin(), end = transitions.end();
- it != end; ++it)
- it.value()->markObjects();
+void InternalClassPool::markObjects(ExecutionEngine *engine)
+{
+ InternalClassPoolVisitor v;
+ v.engine = engine;
+ visitManagedPool<InternalClass, InternalClassPoolVisitor>(v);
}
QT_END_NAMESPACE