aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime/qv4context.cpp')
-rw-r--r--src/qml/jsruntime/qv4context.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/qml/jsruntime/qv4context.cpp b/src/qml/jsruntime/qv4context.cpp
index e18d8bce83..ddb5dc4ea5 100644
--- a/src/qml/jsruntime/qv4context.cpp
+++ b/src/qml/jsruntime/qv4context.cpp
@@ -253,24 +253,24 @@ ReturnedValue QV4::ExecutionContext::simpleCall(ExecutionEngine *engine, CallDat
{
Q_ASSERT(function->canUseSimpleFunction());
- ExecutionContextSaver ctxSaver(engine);
-
- CallContext::Data *ctx = engine->memoryManager->allocSimpleCallContext();
-
- ctx->callData = callData;
- ctx->v4Function = function;
- ctx->outer.set(engine, this->d());
+ Value *jsStackTop = engine->jsStackTop;
+ engine->jsStackTop = reinterpret_cast<QV4::Value *>(callData) + 2 + (int)function->nFormals;
for (int i = callData->argc; i < (int)function->nFormals; ++i)
callData->args[i] = Encode::undefined();
- engine->pushContext(ctx);
- Q_ASSERT(engine->current == ctx);
+ ExecutionContext *old = engine->currentContext;
+ engine->currentContext = this;
+ engine->current = d();
ReturnedValue res = Q_V4_PROFILE(engine, function, 0);
if (function->hasQmlDependencies)
QQmlPropertyCapture::registerQmlDependencies(engine, function->compiledFunction);
- engine->memoryManager->freeSimpleCallContext();
+
+ engine->currentContext = old;
+ engine->current = old->d();
+
+ engine->jsStackTop = jsStackTop;
return res;
}