summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/declarative/qml/qmlcontext.cpp3
-rw-r--r--src/declarative/qml/qmlexpression.cpp13
-rw-r--r--src/declarative/util/qmlscript.cpp21
3 files changed, 10 insertions, 27 deletions
diff --git a/src/declarative/qml/qmlcontext.cpp b/src/declarative/qml/qmlcontext.cpp
index 451dbcc..009c799 100644
--- a/src/declarative/qml/qmlcontext.cpp
+++ b/src/declarative/qml/qmlcontext.cpp
@@ -105,6 +105,9 @@ void QmlContextPrivate::init()
QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine);
QScriptValue scopeObj =
scriptEngine->newObject(QmlEnginePrivate::get(engine)->contextClass, scriptEngine->newVariant(QVariant::fromValue((QObject*)q)));
+ //### no longer need to push global object once we switch to JSC (test with objects added to globalObject)
+ //if (parent)
+ // scopeChain = parent->d_func()->scopeChain;
if (!parent)
scopeChain.append(scriptEngine->globalObject());
else
diff --git a/src/declarative/qml/qmlexpression.cpp b/src/declarative/qml/qmlexpression.cpp
index f8e78d7..00454a1 100644
--- a/src/declarative/qml/qmlexpression.cpp
+++ b/src/declarative/qml/qmlexpression.cpp
@@ -225,13 +225,9 @@ QVariant QmlExpressionPrivate::evalQtScript()
ctxtPriv->defaultObjects.insert(ctxtPriv->highPriorityCount, me);
QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine);
- QScriptValueList oldScopeChain =
- scriptEngine->currentContext()->scopeChain();
-
- for (int i = 0; i < oldScopeChain.size(); ++i)
- scriptEngine->currentContext()->popScope();
+ QScriptContext *scriptContext = scriptEngine->pushContext();
for (int i = ctxtPriv->scopeChain.size() - 1; i > -1; --i)
- scriptEngine->currentContext()->pushScope(ctxtPriv->scopeChain.at(i));
+ scriptContext->pushScope(ctxtPriv->scopeChain.at(i));
if (!expressionFunctionValid) {
@@ -305,10 +301,7 @@ QVariant QmlExpressionPrivate::evalQtScript()
if (rv.isNull())
rv = svalue.toVariant();
- for (int i = 0; i < ctxtPriv->scopeChain.size(); ++i)
- scriptEngine->currentContext()->popScope();
- for (int i = oldScopeChain.size() - 1; i > -1; --i)
- scriptEngine->currentContext()->pushScope(oldScopeChain.at(i));
+ scriptEngine->popContext();
return rv;
}
diff --git a/src/declarative/util/qmlscript.cpp b/src/declarative/util/qmlscript.cpp
index 5651981..6bc21a2 100644
--- a/src/declarative/util/qmlscript.cpp
+++ b/src/declarative/util/qmlscript.cpp
@@ -187,18 +187,11 @@ void QmlScriptPrivate::addScriptToEngine(const QString &script, const QString &s
QmlContext *context = qmlContext(q);
QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine);
- QScriptContext *currentContext = scriptEngine->currentContext();
- QScriptValueList oldScopeChain = currentContext->scopeChain();
- QScriptValue oldact = currentContext->activationObject();
-
- for (int i = 0; i < oldScopeChain.size(); ++i) {
- currentContext->popScope();
- }
+ QScriptContext *scriptContext = scriptEngine->pushContext();
for (int i = context->d_func()->scopeChain.size() - 1; i > -1; --i) {
- currentContext->pushScope(context->d_func()->scopeChain.at(i));
+ scriptContext->pushScope(context->d_func()->scopeChain.at(i));
}
-
- currentContext->setActivationObject(context->d_func()->scopeChain.at(0));
+ scriptContext->setActivationObject(context->d_func()->scopeChain.at(0));
QScriptValue val = scriptEngine->evaluate(script, source);
if (scriptEngine->hasUncaughtException()) {
@@ -215,13 +208,7 @@ void QmlScriptPrivate::addScriptToEngine(const QString &script, const QString &s
}
}
- currentContext->setActivationObject(oldact);
-
- for (int i = 0; i < context->d_func()->scopeChain.size(); ++i)
- currentContext->popScope();
-
- for (int i = oldScopeChain.size() - 1; i > -1; --i)
- currentContext->pushScope(oldScopeChain.at(i));
+ scriptEngine->popContext();
}
QT_END_NAMESPACE