diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-08-15 14:11:19 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2013-08-15 15:28:46 +0200 |
commit | c5c968933b7ce4540cf03ef6964846075cca5bb8 (patch) | |
tree | b50b3daae3c4c4cf07b5a9cd5d90bfdf528eca11 /src/qml/compiler/qv4compileddata.cpp | |
parent | 4036d2b17795da106aba8977d3009b7dd4b78e00 (diff) |
Fix crashes with unmarked runtime strings
Runtime strings are identifiers, but they still require to be marked. Keep
track of all compilation units in the engine (one per file) and mark its
run-time strings.
Change-Id: Ie70b00dfa373c4567279591de2f717e8103c288f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/compiler/qv4compileddata.cpp')
-rw-r--r-- | src/qml/compiler/qv4compileddata.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/qml/compiler/qv4compileddata.cpp b/src/qml/compiler/qv4compileddata.cpp index c4d75090f8..38461af88c 100644 --- a/src/qml/compiler/qv4compileddata.cpp +++ b/src/qml/compiler/qv4compileddata.cpp @@ -56,6 +56,7 @@ int Function::calculateSize(QQmlJS::V4IR::Function *f) CompilationUnit::~CompilationUnit() { + engine->compilationUnits.erase(engine->compilationUnits.find(this)); free(data); free(runtimeStrings); delete [] runtimeLookups; @@ -63,6 +64,9 @@ CompilationUnit::~CompilationUnit() QV4::Function *CompilationUnit::linkToEngine(ExecutionEngine *engine) { + this->engine = engine; + engine->compilationUnits.insert(this); + assert(!runtimeStrings); assert(data); runtimeStrings = (QV4::String**)malloc(data->stringTableSize * sizeof(QV4::String*)); @@ -93,6 +97,12 @@ QV4::Function *CompilationUnit::linkToEngine(ExecutionEngine *engine) return linkBackendToEngine(engine); } +void CompilationUnit::markObjects() +{ + for (int i = 0; i < data->stringTableSize; ++i) + runtimeStrings[i]->mark(); +} + } } |