Smaller cleanups
Don't store the current context in Moth's run() method, instead always retrieve it through the engine. Change-Id: I9d56f2c93a02fc1e2f03839b14b3c0053d60b6b2 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
parent
7ed93899e9
commit
31d6333fa1
|
@ -378,7 +378,6 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
const uchar *exceptionHandler = 0;
|
||||
|
||||
QV4::Scope scope(engine);
|
||||
QV4::ExecutionContext *context = engine->currentContext;
|
||||
engine->current->lineNumber = -1;
|
||||
|
||||
#ifdef DO_TRACE_INSTR
|
||||
|
@ -388,7 +387,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
// setup lookup scopes
|
||||
int scopeDepth = 0;
|
||||
{
|
||||
QV4::Heap::ExecutionContext *scope = context->d();
|
||||
QV4::Heap::ExecutionContext *scope = engine->current;
|
||||
while (scope) {
|
||||
++scopeDepth;
|
||||
scope = scope->outer;
|
||||
|
@ -397,10 +396,10 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
|
||||
Q_ALLOCA_VAR(QV4::Value*, scopes, sizeof(QV4::Value *)*(2 + 2*scopeDepth));
|
||||
{
|
||||
scopes[0] = const_cast<QV4::Value *>(static_cast<CompiledData::CompilationUnit*>(context->d()->compilationUnit)->constants);
|
||||
scopes[0] = const_cast<QV4::Value *>(static_cast<CompiledData::CompilationUnit*>(engine->current->compilationUnit)->constants);
|
||||
// stack gets setup in push instruction
|
||||
scopes[1] = 0;
|
||||
QV4::Heap::ExecutionContext *scope = context->d();
|
||||
QV4::Heap::ExecutionContext *scope = engine->current;
|
||||
int i = 0;
|
||||
while (scope) {
|
||||
if (scope->type >= QV4::Heap::ExecutionContext::Type_SimpleCallContext) {
|
||||
|
@ -439,12 +438,12 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
|
||||
MOTH_BEGIN_INSTR(LoadRuntimeString)
|
||||
// TRACE(value, "%s", instr.value.toString(context)->toQString().toUtf8().constData());
|
||||
VALUE(instr.result) = context->d()->compilationUnit->runtimeStrings[instr.stringId];
|
||||
VALUE(instr.result) = engine->current->compilationUnit->runtimeStrings[instr.stringId];
|
||||
MOTH_END_INSTR(LoadRuntimeString)
|
||||
|
||||
MOTH_BEGIN_INSTR(LoadRegExp)
|
||||
// TRACE(value, "%s", instr.value.toString(context)->toQString().toUtf8().constData());
|
||||
VALUE(instr.result) = static_cast<CompiledData::CompilationUnit*>(context->d()->compilationUnit)->runtimeRegularExpressions[instr.regExpId];
|
||||
VALUE(instr.result) = static_cast<CompiledData::CompilationUnit*>(engine->current->compilationUnit)->runtimeRegularExpressions[instr.regExpId];
|
||||
MOTH_END_INSTR(LoadRegExp)
|
||||
|
||||
MOTH_BEGIN_INSTR(LoadClosure)
|
||||
|
@ -457,7 +456,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
MOTH_END_INSTR(LoadName)
|
||||
|
||||
MOTH_BEGIN_INSTR(GetGlobalLookup)
|
||||
QV4::Lookup *l = context->d()->lookups + instr.index;
|
||||
QV4::Lookup *l = engine->current->lookups + instr.index;
|
||||
STOREVALUE(instr.result, l->globalGetter(l, engine));
|
||||
MOTH_END_INSTR(GetGlobalLookup)
|
||||
|
||||
|
@ -472,7 +471,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
MOTH_END_INSTR(LoadElement)
|
||||
|
||||
MOTH_BEGIN_INSTR(LoadElementLookup)
|
||||
QV4::Lookup *l = context->d()->lookups + instr.lookup;
|
||||
QV4::Lookup *l = engine->current->lookups + instr.lookup;
|
||||
STOREVALUE(instr.result, l->indexedGetter(l, VALUE(instr.base), VALUE(instr.index)));
|
||||
MOTH_END_INSTR(LoadElementLookup)
|
||||
|
||||
|
@ -482,7 +481,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
MOTH_END_INSTR(StoreElement)
|
||||
|
||||
MOTH_BEGIN_INSTR(StoreElementLookup)
|
||||
QV4::Lookup *l = context->d()->lookups + instr.lookup;
|
||||
QV4::Lookup *l = engine->current->lookups + instr.lookup;
|
||||
l->indexedSetter(l, VALUE(instr.base), VALUE(instr.index), VALUE(instr.source));
|
||||
CHECK_EXCEPTION;
|
||||
MOTH_END_INSTR(StoreElementLookup)
|
||||
|
@ -492,7 +491,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
MOTH_END_INSTR(LoadProperty)
|
||||
|
||||
MOTH_BEGIN_INSTR(GetLookup)
|
||||
QV4::Lookup *l = context->d()->lookups + instr.index;
|
||||
QV4::Lookup *l = engine->current->lookups + instr.index;
|
||||
STOREVALUE(instr.result, l->getter(l, engine, VALUE(instr.base)));
|
||||
MOTH_END_INSTR(GetLookup)
|
||||
|
||||
|
@ -502,7 +501,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
MOTH_END_INSTR(StoreProperty)
|
||||
|
||||
MOTH_BEGIN_INSTR(SetLookup)
|
||||
QV4::Lookup *l = context->d()->lookups + instr.index;
|
||||
QV4::Lookup *l = engine->current->lookups + instr.index;
|
||||
l->setter(l, engine, VALUE(instr.base), VALUE(instr.source));
|
||||
CHECK_EXCEPTION;
|
||||
MOTH_END_INSTR(SetLookup)
|
||||
|
@ -573,7 +572,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
MOTH_END_INSTR(CallValue)
|
||||
|
||||
MOTH_BEGIN_INSTR(CallProperty)
|
||||
TRACE(property name, "%s, args=%u, argc=%u, this=%s", qPrintable(runtimeStrings[instr.name]->toQString()), instr.callData, instr.argc, (VALUE(instr.base)).toString(context)->toQString().toUtf8().constData());
|
||||
TRACE(property name, "%s, args=%u, argc=%u, this=%s", qPrintable(runtimeStrings[instr.name]->toQString()), instr.callData, instr.argc, (VALUE(instr.base)).toString(engine)->toQString().toUtf8().constData());
|
||||
Q_ASSERT(instr.callData + instr.argc + offsetof(QV4::CallData, args)/sizeof(QV4::Value) <= stackSize);
|
||||
QV4::CallData *callData = reinterpret_cast<QV4::CallData *>(stack + instr.callData);
|
||||
callData->tag = quint32(Value::ValueTypeInternal::Integer);
|
||||
|
@ -592,7 +591,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
MOTH_END_INSTR(CallPropertyLookup)
|
||||
|
||||
MOTH_BEGIN_INSTR(CallScopeObjectProperty)
|
||||
TRACE(property name, "%s, args=%u, argc=%u, this=%s", qPrintable(runtimeStrings[instr.name]->toQString()), instr.callData, instr.argc, (VALUE(instr.base)).toString(context)->toQString().toUtf8().constData());
|
||||
TRACE(property name, "%s, args=%u, argc=%u, this=%s", qPrintable(runtimeStrings[instr.name]->toQString()), instr.callData, instr.argc, (VALUE(instr.base)).toString(engine)->toQString().toUtf8().constData());
|
||||
Q_ASSERT(instr.callData + instr.argc + offsetof(QV4::CallData, args)/sizeof(QV4::Value) <= stackSize);
|
||||
QV4::CallData *callData = reinterpret_cast<QV4::CallData *>(stack + instr.callData);
|
||||
callData->tag = quint32(Value::ValueTypeInternal::Integer);
|
||||
|
@ -602,7 +601,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
MOTH_END_INSTR(CallScopeObjectProperty)
|
||||
|
||||
MOTH_BEGIN_INSTR(CallContextObjectProperty)
|
||||
TRACE(property name, "%s, args=%u, argc=%u, this=%s", qPrintable(runtimeStrings[instr.name]->toQString()), instr.callData, instr.argc, (VALUE(instr.base)).toString(context)->toQString().toUtf8().constData());
|
||||
TRACE(property name, "%s, args=%u, argc=%u, this=%s", qPrintable(runtimeStrings[instr.name]->toQString()), instr.callData, instr.argc, (VALUE(instr.base)).toString(engine)->toQString().toUtf8().constData());
|
||||
Q_ASSERT(instr.callData + instr.argc + offsetof(QV4::CallData, args)/sizeof(QV4::Value) <= stackSize);
|
||||
QV4::CallData *callData = reinterpret_cast<QV4::CallData *>(stack + instr.callData);
|
||||
callData->tag = quint32(Value::ValueTypeInternal::Integer);
|
||||
|
@ -653,18 +652,15 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
|
||||
MOTH_BEGIN_INSTR(CallBuiltinPushCatchScope)
|
||||
Runtime::method_pushCatchScope(static_cast<QV4::NoThrowEngine*>(engine), instr.name);
|
||||
context = engine->currentContext;
|
||||
MOTH_END_INSTR(CallBuiltinPushCatchScope)
|
||||
|
||||
MOTH_BEGIN_INSTR(CallBuiltinPushScope)
|
||||
Runtime::method_pushWithScope(VALUE(instr.arg), static_cast<QV4::NoThrowEngine*>(engine));
|
||||
context = engine->currentContext;
|
||||
CHECK_EXCEPTION;
|
||||
MOTH_END_INSTR(CallBuiltinPushScope)
|
||||
|
||||
MOTH_BEGIN_INSTR(CallBuiltinPopScope)
|
||||
Runtime::method_popScope(static_cast<QV4::NoThrowEngine*>(engine));
|
||||
context = engine->currentContext;
|
||||
MOTH_END_INSTR(CallBuiltinPopScope)
|
||||
|
||||
MOTH_BEGIN_INSTR(CallBuiltinForeachIteratorObject)
|
||||
|
@ -904,22 +900,22 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
#ifndef QT_NO_QML_DEBUGGER
|
||||
MOTH_BEGIN_INSTR(Debug)
|
||||
engine->current->lineNumber = instr.lineNumber;
|
||||
QV4::Debugging::Debugger *debugger = context->engine()->debugger();
|
||||
QV4::Debugging::Debugger *debugger = engine->debugger();
|
||||
if (debugger && debugger->pauseAtNextOpportunity())
|
||||
debugger->maybeBreakAtInstruction();
|
||||
if (qt_v4IsDebugging)
|
||||
qt_v4CheckForBreak(context);
|
||||
qt_v4CheckForBreak(engine->currentContext);
|
||||
MOTH_END_INSTR(Debug)
|
||||
|
||||
MOTH_BEGIN_INSTR(Line)
|
||||
engine->current->lineNumber = instr.lineNumber;
|
||||
if (qt_v4IsDebugging)
|
||||
qt_v4CheckForBreak(context);
|
||||
qt_v4CheckForBreak(engine->currentContext);
|
||||
MOTH_END_INSTR(Line)
|
||||
#endif // QT_NO_QML_DEBUGGER
|
||||
|
||||
MOTH_BEGIN_INSTR(LoadThis)
|
||||
VALUE(instr.result) = context->thisObject();
|
||||
VALUE(instr.result) = engine->currentContext->thisObject();
|
||||
MOTH_END_INSTR(LoadThis)
|
||||
|
||||
MOTH_BEGIN_INSTR(LoadQmlContext)
|
||||
|
@ -945,7 +941,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code)
|
|||
|
||||
Q_ASSERT(false);
|
||||
catchException:
|
||||
Q_ASSERT(context->engine()->hasException);
|
||||
Q_ASSERT(engine->hasException);
|
||||
if (!exceptionHandler)
|
||||
return QV4::Encode::undefined();
|
||||
code = exceptionHandler;
|
||||
|
|
Loading…
Reference in New Issue