diff options
author | Lars Knoll <lars.knoll@theqtcompany.com> | 2015-08-20 16:05:30 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@theqtcompany.com> | 2015-09-08 18:34:19 +0000 |
commit | 0c48277203b13ebc37fba4f4d111db7e6b7579a8 (patch) | |
tree | e570a3a9fbb7f1daee469d4058014544acb78612 | |
parent | 548cc400a780f795cceef0eb841191a3669f58f2 (diff) |
Don't push new QML contexts onto the context stack
When creating new QML contexts, these are not used directly,
but rather as scopes for other functions. Change the
behavior, so that newQmlContext doesn't push the new context
onto the context stack.
Change-Id: I8254da3f660c4791941835c925b9892274ea51b0
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
-rw-r--r-- | src/qml/jsruntime/qv4context.cpp | 8 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4functionobject.cpp | 1 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4script.cpp | 1 | ||||
-rw-r--r-- | src/qml/qml/qqmlobjectcreator.cpp | 1 |
4 files changed, 6 insertions, 5 deletions
diff --git a/src/qml/jsruntime/qv4context.cpp b/src/qml/jsruntime/qv4context.cpp index d5e2a57b20..1f561e5f58 100644 --- a/src/qml/jsruntime/qv4context.cpp +++ b/src/qml/jsruntime/qv4context.cpp @@ -95,14 +95,18 @@ Heap::CatchContext *ExecutionContext::newCatchContext(String *exceptionVarName, Heap::QmlContext *ExecutionContext::newQmlContext(QmlContextWrapper *qml) { - return d()->engine->memoryManager->alloc<QmlContext>(this, qml); + Heap::QmlContext *c = d()->engine->memoryManager->alloc<QmlContext>(this, qml); + d()->engine->popContext(); + return c; } Heap::QmlContext *ExecutionContext::newQmlContext(QQmlContextData *context, QObject *scopeObject) { Scope scope(this); Scoped<QmlContextWrapper> qml(scope, QmlContextWrapper::qmlScope(scope.engine, context, scopeObject)); - return d()->engine->memoryManager->alloc<QmlContext>(this, qml); + Heap::QmlContext *c = d()->engine->memoryManager->alloc<QmlContext>(this, qml); + d()->engine->popContext(); + return c; } void ExecutionContext::createMutableBinding(String *name, bool deletable) diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp index 525f806d7a..1cff952401 100644 --- a/src/qml/jsruntime/qv4functionobject.cpp +++ b/src/qml/jsruntime/qv4functionobject.cpp @@ -212,7 +212,6 @@ Heap::FunctionObject *FunctionObject::createQmlFunction(QQmlContextData *qmlCont QV4::Scope valueScope(engine); ScopedContext global(valueScope, valueScope.engine->rootContext()); QV4::Scoped<QmlContext> wrapperContext(valueScope, global->newQmlContext(qmlContext, scopeObject)); - engine->popContext(); if (!signalParameters.isEmpty()) { if (error) diff --git a/src/qml/jsruntime/qv4script.cpp b/src/qml/jsruntime/qv4script.cpp index c221a99959..493e35c852 100644 --- a/src/qml/jsruntime/qv4script.cpp +++ b/src/qml/jsruntime/qv4script.cpp @@ -111,7 +111,6 @@ Heap::QmlBindingWrapper::QmlBindingWrapper(QV4::ExecutionContext *scope, Functio Scoped<QV4::QmlBindingWrapper> protectThis(s, this); this->scope = scope->newQmlContext(qml); - internalClass->engine->popContext(); } ReturnedValue QmlBindingWrapper::call(const Managed *that, CallData *callData) diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp index 12415e1583..ed58df843b 100644 --- a/src/qml/qml/qqmlobjectcreator.cpp +++ b/src/qml/qml/qqmlobjectcreator.cpp @@ -991,7 +991,6 @@ QV4::Heap::QmlContext *QQmlObjectCreator::currentQmlContext() QV4::Scope valueScope(v4); QV4::ScopedContext global(valueScope, v4->rootContext()); _qmlContext->setM(global->newQmlContext(context, _scopeObject)); - v4->popContext(); } return _qmlContext->d(); } |