summaryrefslogtreecommitdiffstats
path: root/src/script/api/qscriptengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/script/api/qscriptengine.cpp')
-rw-r--r--src/script/api/qscriptengine.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index b5ba4ff..af09572 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -669,8 +669,8 @@ JSC::JSValue functionPrint(JSC::ExecState* exec, JSC::JSObject*, JSC::JSValue, c
JSC::JSValue functionGC(JSC::ExecState* exec, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&)
{
- JSC::JSLock lock(false);
- exec->heap()->collect();
+ QScriptEnginePrivate *engine = static_cast<GlobalObject*>(exec->lexicalGlobalObject())->engine;
+ engine->collectGarbage();
return JSC::jsUndefined();
}
@@ -1050,6 +1050,15 @@ bool QScriptEnginePrivate::isCollecting() const
return globalObject->globalData()->heap.isBusy();
}
+void QScriptEnginePrivate::collectGarbage()
+{
+ // ### why isn't the global object always marked by the Collector?
+ if (!globalObject->marked())
+ globalObject->mark();
+ JSC::JSLock lock(false);
+ globalData->heap.collect();
+}
+
#ifndef QT_NO_QOBJECT
JSC::JSValue QScriptEnginePrivate::newQObject(
@@ -3135,11 +3144,7 @@ QStringList QScriptEngine::importedExtensions() const
void QScriptEngine::collectGarbage()
{
Q_D(QScriptEngine);
- // ### why isn't the global object always marked by the Collector?
- if (!d->globalObject->marked())
- d->globalObject->mark();
- JSC::JSLock lock(false);
- d->globalData->heap.collect();
+ d->collectGarbage();
}
/*!