aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2017-08-30 14:38:01 +0200
committerLars Knoll <lars.knoll@qt.io>2017-09-01 12:30:30 +0000
commit50828bc6ed9112956170a68dffe72431a21fddd9 (patch)
tree60cd60e614516fb77fe27fe7dc9a4f453b6e2b31 /src
parent85fe2814a1397a17804d8eace4a70e5b7df854b6 (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.h2
-rw-r--r--src/qml/jsruntime/qv4function_p.h16
-rw-r--r--src/qml/jsruntime/qv4functionobject.cpp6
-rw-r--r--src/qml/jsruntime/qv4globalobject.cpp3
-rw-r--r--src/qml/jsruntime/qv4script.cpp6
-rw-r--r--src/qml/jsruntime/qv4vme_moth.cpp9
-rw-r--r--src/qml/jsruntime/qv4vme_moth_p.h2
-rw-r--r--src/qml/qml/qqmljavascriptexpression.cpp5
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())