summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp')
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp39
1 files changed, 20 insertions, 19 deletions
diff --git a/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp b/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp
index 3ea8bcfda..506697a5a 100644
--- a/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp
+++ b/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp
@@ -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());