summaryrefslogtreecommitdiffstats
path: root/src/script/api/qscriptvalueiterator.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@nokia.com>2010-04-01 21:07:37 (GMT)
committerThiago Macieira <thiago.macieira@nokia.com>2010-04-01 21:07:37 (GMT)
commit23eb677daea8e084fcaa1256f1a9433e324b1474 (patch)
treea21225293db6881174814290ad7298120c4a078b /src/script/api/qscriptvalueiterator.cpp
parent1f327a1de8db245d0b28e7dfdc5bca1af0b56782 (diff)
parent37e8fd4e09c1221efde3e67e6acd5cfbb35686fd (diff)
downloadQt-23eb677daea8e084fcaa1256f1a9433e324b1474.zip
Qt-23eb677daea8e084fcaa1256f1a9433e324b1474.tar.gz
Qt-23eb677daea8e084fcaa1256f1a9433e324b1474.tar.bz2
Merge remote branch 'origin/4.7' into HEAD
Conflicts: examples/declarative/proxywidgets/proxywidgets.pro examples/declarative/widgets/mywidgets.pro examples/declarative/widgets/widgets.pro
Diffstat (limited to 'src/script/api/qscriptvalueiterator.cpp')
-rw-r--r--src/script/api/qscriptvalueiterator.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/script/api/qscriptvalueiterator.cpp b/src/script/api/qscriptvalueiterator.cpp
index c58c046..ecda5fc 100644
--- a/src/script/api/qscriptvalueiterator.cpp
+++ b/src/script/api/qscriptvalueiterator.cpp
@@ -85,6 +85,17 @@ public:
: initialized(false)
{}
+ ~QScriptValueIteratorPrivate()
+ {
+ if (!initialized)
+ return;
+ QScriptEnginePrivate *eng_p = engine();
+ if (!eng_p)
+ return;
+ QScript::APIShim shim(eng_p);
+ propertyNames.clear(); //destroying the identifiers need to be done under the APIShim guard
+ }
+
QScriptValuePrivate *object() const
{
return QScriptValuePrivate::get(objectValue);
@@ -139,12 +150,6 @@ QScriptValueIterator::QScriptValueIterator(const QScriptValue &object)
*/
QScriptValueIterator::~QScriptValueIterator()
{
- Q_D(QScriptValueIterator);
- if (d && d->engine()) {
- // Make sure identifiers are removed from the correct engine.
- QScript::APIShim shim(d->engine());
- d->propertyNames.clear();
- }
}
/*!
@@ -287,6 +292,7 @@ QScriptValue QScriptValueIterator::value() const
Q_D(const QScriptValueIterator);
if (!d || !d->initialized || !d->engine())
return QScriptValue();
+ QScript::APIShim shim(d->engine());
JSC::JSValue jsValue = d->object()->property(*d->current);
return d->engine()->scriptValueFromJSCValue(jsValue);
}
@@ -302,6 +308,7 @@ void QScriptValueIterator::setValue(const QScriptValue &value)
Q_D(QScriptValueIterator);
if (!d || !d->initialized || !d->engine())
return;
+ QScript::APIShim shim(d->engine());
JSC::JSValue jsValue = d->engine()->scriptValueToJSCValue(value);
d->object()->setProperty(*d->current, jsValue);
}
@@ -317,6 +324,7 @@ QScriptValue::PropertyFlags QScriptValueIterator::flags() const
Q_D(const QScriptValueIterator);
if (!d || !d->initialized || !d->engine())
return 0;
+ QScript::APIShim shim(d->engine());
return d->object()->propertyFlags(*d->current);
}
@@ -331,6 +339,7 @@ void QScriptValueIterator::remove()
Q_D(QScriptValueIterator);
if (!d || !d->initialized || !d->engine())
return;
+ QScript::APIShim shim(d->engine());
d->object()->setProperty(*d->current, JSC::JSValue());
d->propertyNames.erase(d->current);
}