diff options
author | Erik Verbruggen <[email protected]> | 2016-09-08 11:07:26 +0200 |
---|---|---|
committer | Erik Verbruggen <[email protected]> | 2016-09-30 14:14:31 +0000 |
commit | b80fa8e7d59c2824de067ab4d488d865a6e69d94 (patch) | |
tree | dfbab030756f9c5a0f76aba8a558f429311724a2 /src/qml/jsruntime/qv4context.cpp | |
parent | c2e28350a6ea866b9e68059f232aaeccd47f743b (diff) |
QML: Make all context objects trivial
This change also adds a check to the d() calls for Managed, verifies
that the object has been initialized. This is only done for debug
builds.
To prevent other code from tripping the check, a number of other classes
are either marked as trivial, or do initialization in the constructors.
Because of template function changes in them memory manager (those now
call init() instead of in-place new), String has an extra parameter
to force it to temporarily use an old/unmodified template function.
Change-Id: I8c35161ce7680835d830638b6d21498c5129b02b
Reviewed-by: Simon Hausmann <[email protected]>
Diffstat (limited to 'src/qml/jsruntime/qv4context.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4context.cpp | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/src/qml/jsruntime/qv4context.cpp b/src/qml/jsruntime/qv4context.cpp index 1abaca3dd1..390a5e7d7a 100644 --- a/src/qml/jsruntime/qv4context.cpp +++ b/src/qml/jsruntime/qv4context.cpp @@ -61,8 +61,9 @@ Heap::CallContext *ExecutionContext::newCallContext(const FunctionObject *functi { Q_ASSERT(function->function()); - Heap::CallContext *c = d()->engine->memoryManager->allocManaged<CallContext>(requiredMemoryForExecutionContect(function, callData->argc)); - new (c) Heap::CallContext(d()->engine, Heap::ExecutionContext::Type_CallContext); + Heap::CallContext *c = d()->engine->memoryManager->allocManaged<CallContext>( + requiredMemoryForExecutionContect(function, callData->argc)); + c->init(d()->engine, Heap::ExecutionContext::Type_CallContext); c->function = function->d(); @@ -160,28 +161,16 @@ void ExecutionContext::createMutableBinding(String *name, bool deletable) activation->__defineOwnProperty__(scope.engine, name, desc, attrs); } - -Heap::GlobalContext::GlobalContext(ExecutionEngine *eng) - : Heap::ExecutionContext(eng, Heap::ExecutionContext::Type_GlobalContext) +void Heap::GlobalContext::init(ExecutionEngine *eng) { + Heap::ExecutionContext::init(eng, Heap::ExecutionContext::Type_GlobalContext); global = eng->globalObject->d(); } -Heap::WithContext::WithContext(ExecutionContext *outerContext, Object *with) - : Heap::ExecutionContext(outerContext->engine, Heap::ExecutionContext::Type_WithContext) -{ - outer = outerContext; - callData = outer->callData; - lookups = outer->lookups; - constantTable = outer->constantTable; - compilationUnit = outer->compilationUnit; - - withObject = with; -} - -Heap::CatchContext::CatchContext(ExecutionContext *outerContext, String *exceptionVarName, const Value &exceptionValue) - : Heap::ExecutionContext(outerContext->engine, Heap::ExecutionContext::Type_CatchContext) +void Heap::CatchContext::init(ExecutionContext *outerContext, String *exceptionVarName, + const Value &exceptionValue) { + Heap::ExecutionContext::init(outerContext->engine, Heap::ExecutionContext::Type_CatchContext); outer = outerContext; strictMode = outer->strictMode; callData = outer->callData; @@ -193,9 +182,9 @@ Heap::CatchContext::CatchContext(ExecutionContext *outerContext, String *excepti this->exceptionValue = exceptionValue; } -Heap::QmlContext::QmlContext(QV4::ExecutionContext *outerContext, QV4::QmlContextWrapper *qml) - : Heap::ExecutionContext(outerContext->engine(), Heap::ExecutionContext::Type_QmlContext) +void Heap::QmlContext::init(QV4::ExecutionContext *outerContext, QV4::QmlContextWrapper *qml) { + Heap::ExecutionContext::init(outerContext->engine(), Heap::ExecutionContext::Type_QmlContext); outer = outerContext->d(); strictMode = false; callData = outer->callData; |