diff options
-rw-r--r-- | src/declarative/qml/qmlcontext.cpp | 3 | ||||
-rw-r--r-- | src/declarative/qml/qmlexpression.cpp | 13 | ||||
-rw-r--r-- | src/declarative/util/qmlscript.cpp | 21 |
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 |