diff options
Diffstat (limited to 'src/qml/jsruntime/qv4context.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4context.cpp | 20 |
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; } |