diff options
Diffstat (limited to 'WebCore/bridge/qt/qt_instance.cpp')
-rw-r--r-- | WebCore/bridge/qt/qt_instance.cpp | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/WebCore/bridge/qt/qt_instance.cpp b/WebCore/bridge/qt/qt_instance.cpp index 60cf16f..506697a 100644 --- a/WebCore/bridge/qt/qt_instance.cpp +++ b/WebCore/bridge/qt/qt_instance.cpp @@ -74,7 +74,7 @@ private: const ClassInfo QtRuntimeObjectImp::s_info = { "QtRuntimeObject", &RuntimeObjectImp::s_info, 0, 0 }; QtRuntimeObjectImp::QtRuntimeObjectImp(ExecState* exec, PassRefPtr<Instance> instance) - : RuntimeObjectImp(exec, WebCore::getDOMStructure<QtRuntimeObjectImp>(exec), instance) + : RuntimeObjectImp(exec, WebCore::deprecatedGetDOMStructure<QtRuntimeObjectImp>(exec), instance) { } @@ -91,7 +91,7 @@ void QtRuntimeObjectImp::invalidate() void QtRuntimeObjectImp::removeFromCache() { - JSLock lock(false); + JSLock lock(SilenceAssertionsOnly); QtInstance* key = cachedObjects.key(this); if (key) cachedObjects.remove(key); @@ -110,7 +110,7 @@ QtInstance::QtInstance(QObject* o, PassRefPtr<RootObject> rootObject, QScriptEng QtInstance::~QtInstance() { - JSLock lock(false); + JSLock lock(SilenceAssertionsOnly); cachedObjects.remove(this); cachedInstances.remove(m_hashkey); @@ -118,9 +118,7 @@ QtInstance::~QtInstance() // clean up (unprotect from gc) the JSValues we've created m_methods.clear(); - foreach(QtField* f, m_fields.values()) { - delete f; - } + qDeleteAll(m_fields); m_fields.clear(); if (m_object) { @@ -140,7 +138,7 @@ QtInstance::~QtInstance() PassRefPtr<QtInstance> QtInstance::getQtInstance(QObject* o, PassRefPtr<RootObject> rootObject, QScriptEngine::ValueOwnership ownership) { - JSLock lock(false); + JSLock lock(SilenceAssertionsOnly); foreach(QtInstance* instance, cachedInstances.values(o)) { if (instance->rootObject() == rootObject) @@ -163,6 +161,19 @@ void QtInstance::put(JSObject* object, ExecState* exec, const Identifier& proper object->JSObject::put(exec, propertyName, value, slot); } +void QtInstance::removeCachedMethod(JSObject* method) +{ + if (m_defaultMethod == method) + m_defaultMethod = 0; + + for(QHash<QByteArray, JSObject*>::Iterator it = m_methods.begin(), + end = m_methods.end(); it != end; ++it) + if (it.value() == method) { + m_methods.erase(it); + return; + } +} + QtInstance* QtInstance::getInstance(JSObject* object) { if (!object) @@ -181,7 +192,7 @@ Class* QtInstance::getClass() const RuntimeObjectImp* QtInstance::createRuntimeObject(ExecState* exec) { - JSLock lock(false); + JSLock lock(SilenceAssertionsOnly); RuntimeObjectImp* ret = static_cast<RuntimeObjectImp*>(cachedObjects.value(this)); if (!ret) { ret = new (exec) QtRuntimeObjectImp(exec, this); @@ -193,16 +204,12 @@ RuntimeObjectImp* QtInstance::createRuntimeObject(ExecState* exec) void QtInstance::mark() { - if (m_defaultMethod) + if (m_defaultMethod && !m_defaultMethod->marked()) m_defaultMethod->mark(); foreach(JSObject* val, m_methods.values()) { if (val && !val->marked()) val->mark(); } - foreach(JSValue val, m_children.values()) { - if (val && !val.marked()) - val.mark(); - } } void QtInstance::begin() @@ -355,13 +362,7 @@ JSValue QtField::valueFromInstance(ExecState* exec, const Instance* inst) const else if (m_type == DynamicProperty) val = obj->property(m_dynamicProperty); - JSValue ret = convertQVariantToValue(exec, inst->rootObject(), val); - - // Need to save children so we can mark them - if (m_type == ChildObject) - instance->m_children.insert(ret); - - return ret; + return convertQVariantToValue(exec, inst->rootObject(), val); } else { QString msg = QString(QLatin1String("cannot access member `%1' of deleted QObject")).arg(QLatin1String(name())); return throwError(exec, GeneralError, msg.toLatin1().constData()); |