From 05bf96997c52775f14cfd4e34d25187feec897e0 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Fri, 28 Nov 2014 10:05:24 +0100 Subject: Return Heap::ExecutionContext for globalContext() Change-Id: Ide7c81735be4662ff45bf268cfe750ff1f784453 Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4script.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'src/qml/jsruntime/qv4script.cpp') diff --git a/src/qml/jsruntime/qv4script.cpp b/src/qml/jsruntime/qv4script.cpp index 0d41e52e3e..d125f04109 100644 --- a/src/qml/jsruntime/qv4script.cpp +++ b/src/qml/jsruntime/qv4script.cpp @@ -170,7 +170,8 @@ Heap::FunctionObject *QmlBindingWrapper::createQmlCallableForFunction(QQmlContex ExecutionEngine *engine = QQmlEnginePrivate::getV4Engine(qmlContext->engine); QV4::Scope valueScope(engine); QV4::ScopedObject qmlScopeObject(valueScope, QV4::QmlContextWrapper::qmlScope(engine->v8Engine, qmlContext, scopeObject)); - QV4::Scoped wrapper(valueScope, engine->memoryManager->alloc(engine->rootContext(), qmlScopeObject)); + ScopedContext global(valueScope, valueScope.engine->rootContext()); + QV4::Scoped wrapper(valueScope, engine->memoryManager->alloc(global, qmlScopeObject)); QV4::Scoped wrapperContext(valueScope, wrapper->context()); if (!signalParameters.isEmpty()) { @@ -221,7 +222,7 @@ void Script::parse() parsed = true; - ExecutionEngine *v4 = scope->d()->engine; + ExecutionEngine *v4 = scope->engine; Scope valueScope(v4); MemoryManager::GCBlocker gcBlocker(v4->memoryManager); @@ -237,7 +238,7 @@ void Script::parse() foreach (const QQmlJS::DiagnosticMessage &m, parser.diagnosticMessages()) { if (m.isError()) { - scope->engine()->throwSyntaxError(m.message, sourceFile, m.loc.startLine, m.loc.startColumn); + valueScope.engine->throwSyntaxError(m.message, sourceFile, m.loc.startLine, m.loc.startColumn); return; } else { qWarning() << sourceFile << ':' << m.loc.startLine << ':' << m.loc.startColumn @@ -256,7 +257,7 @@ void Script::parse() QStringList inheritedLocals; if (inheritContext) { - CallContext *ctx = scope->asCallContext(); + Scoped ctx(valueScope, scope); if (ctx) { for (Identifier * const *i = ctx->variables(), * const *ei = i + ctx->variableCount(); i < ei; ++i) inheritedLocals.append(*i ? (*i)->string : QString()); @@ -292,22 +293,23 @@ ReturnedValue Script::run() if (!vmFunction) return Encode::undefined(); - QV4::ExecutionEngine *engine = scope->d()->engine; + QV4::ExecutionEngine *engine = scope->engine; QV4::Scope valueScope(engine); if (qml.isUndefined()) { TemporaryAssignment savedGlobalCode(engine->globalCode, vmFunction); ExecutionContextSaver ctxSaver(valueScope, scope); - ContextStateSaver stateSaver(scope); - scope->d()->strictMode = vmFunction->isStrict(); - scope->d()->lookups = vmFunction->compilationUnit->runtimeLookups; - scope->d()->compilationUnit = vmFunction->compilationUnit; + ContextStateSaver stateSaver(valueScope, scope); + scope->strictMode = vmFunction->isStrict(); + scope->lookups = vmFunction->compilationUnit->runtimeLookups; + scope->compilationUnit = vmFunction->compilationUnit; return vmFunction->code(engine, vmFunction->codeData); } else { ScopedObject qmlObj(valueScope, qml.value()); - ScopedFunctionObject f(valueScope, engine->memoryManager->alloc(scope, vmFunction, qmlObj)); + ScopedContext ctx(valueScope, scope); + ScopedFunctionObject f(valueScope, engine->memoryManager->alloc(ctx, vmFunction, qmlObj)); ScopedCallData callData(valueScope); callData->thisObject = Primitive::undefinedValue(); return f->call(callData); @@ -380,10 +382,11 @@ ReturnedValue Script::qmlBinding() { if (!parsed) parse(); - ExecutionEngine *v4 = scope->d()->engine; + ExecutionEngine *v4 = scope->engine; Scope valueScope(v4); ScopedObject qmlObj(valueScope, qml.value()); - ScopedObject v(valueScope, v4->memoryManager->alloc(scope, vmFunction, qmlObj)); + ScopedContext ctx(valueScope, scope); + ScopedObject v(valueScope, v4->memoryManager->alloc(ctx, vmFunction, qmlObj)); return v.asReturnedValue(); } -- cgit v1.2.3