diff options
author | Lars Knoll <lars.knoll@qt.io> | 2017-08-30 14:38:01 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2017-09-01 12:30:30 +0000 |
commit | 50828bc6ed9112956170a68dffe72431a21fddd9 (patch) | |
tree | 60cd60e614516fb77fe27fe7dc9a4f453b6e2b31 /src | |
parent | 85fe2814a1397a17804d8eace4a70e5b7df854b6 (diff) |
Use the context member in CallData
Store the current context in the context member instead of
passing it along as arguments.
Change-Id: If3dd0d32eddb2a02bcbf65fe6e8d15142403170e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/jsruntime/qv4context_p.h | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4function_p.h | 16 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4functionobject.cpp | 6 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4globalobject.cpp | 3 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4script.cpp | 6 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4vme_moth.cpp | 9 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4vme_moth_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmljavascriptexpression.cpp | 5 |
8 files changed, 28 insertions, 21 deletions
diff --git a/src/qml/jsruntime/qv4context_p.h b/src/qml/jsruntime/qv4context_p.h index 75786cea9b..8bcf89c1a4 100644 --- a/src/qml/jsruntime/qv4context_p.h +++ b/src/qml/jsruntime/qv4context_p.h @@ -89,7 +89,7 @@ struct CallData } Value function; - Value dummy_context; + Value context; Value thisObject; Value args[1]; diff --git a/src/qml/jsruntime/qv4function_p.h b/src/qml/jsruntime/qv4function_p.h index d5dcce58c8..d845eec4d9 100644 --- a/src/qml/jsruntime/qv4function_p.h +++ b/src/qml/jsruntime/qv4function_p.h @@ -63,15 +63,15 @@ struct Q_QML_EXPORT Function { const CompiledData::Function *compiledFunction; CompiledData::CompilationUnit *compilationUnit; - ReturnedValue execute(Heap::ExecutionContext *c, CallData *callData) { - return code(callData, c, this); + ReturnedValue execute(CallData *callData) { + return code(callData, this); } - ReturnedValue call(Heap::ExecutionContext *c, CallData *callData) { - return call(callData, c, this); + ReturnedValue call(CallData *callData) { + return call(callData, this); } - typedef ReturnedValue (*Code)(CallData *, Heap::ExecutionContext *c, Function *); + typedef ReturnedValue (*Code)(CallData *, Function *); Code code; const uchar *codeData; @@ -104,12 +104,12 @@ struct Q_QML_EXPORT Function { } private: - static ReturnedValue call(CallData *callData, Heap::ExecutionContext *context, Function *function) + static ReturnedValue call(CallData *callData, Function *function) { if (!function->canUseSimpleCall) - context = ExecutionContext::newCallContext(context, function, callData); + callData->context = ExecutionContext::newCallContext(static_cast<Heap::ExecutionContext *>(callData->context.m()), function, callData); - return function->execute(context, callData); + return function->execute(callData); } }; diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp index 218e591486..724d41be82 100644 --- a/src/qml/jsruntime/qv4functionobject.cpp +++ b/src/qml/jsruntime/qv4functionobject.cpp @@ -368,7 +368,8 @@ ReturnedValue ScriptFunction::construct(const Managed *that, CallData *callData) QV4::Function *v4Function = f->function(); Q_ASSERT(v4Function); - ReturnedValue result = v4Function->call(f->scope(), callData); + callData->context = f->scope(); +ReturnedValue result = v4Function->call(callData); if (Q_UNLIKELY(v4->hasException)) return Encode::undefined(); @@ -388,7 +389,8 @@ ReturnedValue ScriptFunction::call(const Managed *that, CallData *callData) QV4::Function *v4Function = f->function(); Q_ASSERT(v4Function); - return v4Function->call(f->scope(), callData); + callData->context = f->scope(); + return v4Function->call(callData); } void Heap::ScriptFunction::init(QV4::ExecutionContext *scope, Function *function) diff --git a/src/qml/jsruntime/qv4globalobject.cpp b/src/qml/jsruntime/qv4globalobject.cpp index bd8e747c41..08bae8fe02 100644 --- a/src/qml/jsruntime/qv4globalobject.cpp +++ b/src/qml/jsruntime/qv4globalobject.cpp @@ -388,7 +388,8 @@ ReturnedValue EvalFunction::evalCall(CallData *callData, bool directCall) const ScopedCallData cData(scope); cData->thisObject = scope.engine->currentStackFrame->thisObject(); - return function->execute(ctx->d(), cData); + cData->context = *ctx; + return function->execute(cData); } diff --git a/src/qml/jsruntime/qv4script.cpp b/src/qml/jsruntime/qv4script.cpp index 23dfd3fc89..d5f08041f6 100644 --- a/src/qml/jsruntime/qv4script.cpp +++ b/src/qml/jsruntime/qv4script.cpp @@ -153,12 +153,14 @@ ReturnedValue Script::run() QV4::ScopedCallData cData(scope); cData->thisObject = engine->globalObject; - return vmFunction->execute(scope->d(), cData); + cData->context = *scope; + return vmFunction->execute(cData); } else { Scoped<QmlContext> qml(valueScope, qmlContext.value()); ScopedCallData callData(valueScope); callData->thisObject = Primitive::undefinedValue(); - return vmFunction->call(qml->d(), callData); + callData->context = *qml; + return vmFunction->call(callData); } } diff --git a/src/qml/jsruntime/qv4vme_moth.cpp b/src/qml/jsruntime/qv4vme_moth.cpp index 7c389e2dd3..ad3fd0bce1 100644 --- a/src/qml/jsruntime/qv4vme_moth.cpp +++ b/src/qml/jsruntime/qv4vme_moth.cpp @@ -489,7 +489,7 @@ static bool compareEqualInt(Value &accumulator, Value lhs, int rhs) } while (false) -QV4::ReturnedValue VME::exec(CallData *callData, Heap::ExecutionContext *context, QV4::Function *function) +QV4::ReturnedValue VME::exec(CallData *callData, QV4::Function *function) { qt_v4ResolvePendingBreakpointsHook(); @@ -514,7 +514,7 @@ QV4::ReturnedValue VME::exec(CallData *callData, Heap::ExecutionContext *context stack = engine->jsAlloca(function->compiledFunction->nRegisters + sizeof(JSStackFrame)/sizeof(QV4::Value)); frame.jsFrame = reinterpret_cast<JSStackFrame *>(stack); - frame.jsFrame->context = context; + frame.jsFrame->context = callData->context; QV4::Value &accumulator = frame.jsFrame->accumulator; QV4::ReturnedValue acc = Encode::undefined(); @@ -1287,8 +1287,9 @@ functionExit: engine->jsStackTop = jsStackTop; if (function->hasQmlDependencies) { - Q_ASSERT(context->type == Heap::ExecutionContext::Type_QmlContext); - QQmlPropertyCapture::registerQmlDependencies(static_cast<Heap::QmlContext *>(context), engine, function->compiledFunction); + Heap::QmlContext *c = static_cast<Heap::QmlContext *>(callData->context.m()); + Q_ASSERT(c->type == Heap::ExecutionContext::Type_QmlContext); + QQmlPropertyCapture::registerQmlDependencies(c, engine, function->compiledFunction); } return ACC.asReturnedValue(); diff --git a/src/qml/jsruntime/qv4vme_moth_p.h b/src/qml/jsruntime/qv4vme_moth_p.h index 5911081b28..3a1e7b6637 100644 --- a/src/qml/jsruntime/qv4vme_moth_p.h +++ b/src/qml/jsruntime/qv4vme_moth_p.h @@ -65,7 +65,7 @@ namespace Moth { class VME { public: - static QV4::ReturnedValue exec(CallData *callData, Heap::ExecutionContext *context, QV4::Function *); + static QV4::ReturnedValue exec(CallData *callData, QV4::Function *); }; } // namespace Moth diff --git a/src/qml/qml/qqmljavascriptexpression.cpp b/src/qml/qml/qqmljavascriptexpression.cpp index 037b82cdff..e61c8f551c 100644 --- a/src/qml/qml/qqmljavascriptexpression.cpp +++ b/src/qml/qml/qqmljavascriptexpression.cpp @@ -227,8 +227,9 @@ QV4::ReturnedValue QQmlJavaScriptExpression::evaluate(QV4::CallData *callData, b callData->thisObject = value; } - QV4::ExecutionContext *outer = static_cast<QV4::ExecutionContext *>(m_qmlScope.valueRef()); - result = v4Function->call(outer->d(), callData); + Q_ASSERT(m_qmlScope.valueRef()); + callData->context = *m_qmlScope.valueRef(); + result = v4Function->call(callData); if (scope.hasException()) { if (watcher.wasDeleted()) |