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.cpp42
1 files changed, 16 insertions, 26 deletions
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index 230a8c5..9fc2f72 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -854,7 +854,7 @@ QScriptValue QScriptEnginePrivate::scriptValueFromJSCValue(JSC::JSValue value)
QScriptValuePrivate *p_value = new QScriptValuePrivate();
p_value->engine = this;
p_value->initFrom(value);
- return QScriptValuePrivate::get(p_value);
+ return QScriptValuePrivate::toPublic(p_value);
}
JSC::JSValue QScriptEnginePrivate::scriptValueToJSCValue(const QScriptValue &value)
@@ -874,17 +874,6 @@ JSC::JSValue QScriptEnginePrivate::scriptValueToJSCValue(const QScriptValue &val
return vv->jscValue;
}
-void QScriptEnginePrivate::releaseJSCValue(JSC::JSValue value)
-{
-// ### Q_ASSERT(!JSC::JSImmediate::isImmediate(value));
- Q_ASSERT(value.isCell());
- JSC::JSCell *cell = value.asCell();
- if (!keepAliveValues.contains(cell))
- qWarning("QScriptEnginePrivate::releaseJSCValue(): cell %p doesn't need releasing", cell);
- if (!keepAliveValues[cell].deref())
- keepAliveValues.remove(cell);
-}
-
QScriptValue QScriptEnginePrivate::scriptValueFromVariant(const QVariant &v)
{
Q_Q(QScriptEngine);
@@ -1150,11 +1139,11 @@ void QScriptEnginePrivate::mark()
variantPrototype->mark();
{
- QHash<JSC::JSCell*,QBasicAtomicInt>::const_iterator it;
- for (it = keepAliveValues.constBegin(); it != keepAliveValues.constEnd(); ++it) {
- JSC::JSCell *cell = it.key();
- if (!cell->marked())
- cell->mark();
+ QList<QScriptValuePrivate*>::const_iterator it;
+ for (it = registeredScriptValues.constBegin(); it != registeredScriptValues.constEnd(); ++it) {
+ QScriptValuePrivate *val = *it;
+ if (val->isJSC() && !val->jscValue.marked())
+ val->jscValue.mark();
}
}
@@ -1373,21 +1362,22 @@ bool QScriptEnginePrivate::scriptDisconnect(JSC::JSValue signal, JSC::JSValue re
}
#endif
+
void QScriptEnginePrivate::registerScriptValue(QScriptValuePrivate *value)
{
- attachedScriptValues.insert(value);
+ registeredScriptValues.append(value);
+}
+
+void QScriptEnginePrivate::unregisterScriptValue(QScriptValuePrivate *value)
+{
+ registeredScriptValues.removeOne(value);
}
void QScriptEnginePrivate::detachAllRegisteredScriptValues()
{
- //make copy of attachedScriptValues (orignal set will be modified)
- QSet<QScriptValuePrivate*> tmpSet(attachedScriptValues);
- QSet<QScriptValuePrivate*>::const_iterator i = tmpSet.begin();
- while (i != tmpSet.end()) {
- //this will autmagicly remove *i from attachedScriptValues
- (*i)->detachEngine();
- i++;
- }
+ for (int i = 0; i < registeredScriptValues.size(); ++i)
+ registeredScriptValues.at(i)->detachFromEngine();
+ registeredScriptValues.clear();
}
#ifdef QT_NO_QOBJECT