diff options
author | Lars Knoll <lars.knoll@qt.io> | 2017-08-29 12:35:05 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@qt.io> | 2017-08-29 10:42:35 +0000 |
commit | 77e0602021c74b5ec2d8bd9affff5e91bf6f5ae3 (patch) | |
tree | 2054bc9a29279db1cdcdb57e414a9532b99cd818 /src/qml/compiler/qv4compiler.cpp | |
parent | 99d5cdad6c8580d5ef31c291b721bf6230e2502f (diff) |
Fix line number mapping to work with non increasing line numbers
The old map assumed that line numbers are always increasing, something
that isn't always true. So move to a format where we map blocks of
bytecode to a line number instead.
Change-Id: I1cd9dd1329d415122cd3d560294ef53007f879f8
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Diffstat (limited to 'src/qml/compiler/qv4compiler.cpp')
-rw-r--r-- | src/qml/compiler/qv4compiler.cpp | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/src/qml/compiler/qv4compiler.cpp b/src/qml/compiler/qv4compiler.cpp index acfd5c56e7..aaa06efa8c 100644 --- a/src/qml/compiler/qv4compiler.cpp +++ b/src/qml/compiler/qv4compiler.cpp @@ -318,7 +318,7 @@ void QV4::Compiler::JSUnitGenerator::writeFunction(char *f, QV4::Compiler::Conte function->nLineNumbers = irFunction->lineNumberMapping.size(); function->lineNumberOffset = currentOffset; - currentOffset += function->nLineNumbers * sizeof(quint32); + currentOffset += function->nLineNumbers * sizeof(CompiledData::CodeOffsetToLine); function->nInnerFunctions = irFunction->nestedContexts.size(); @@ -363,9 +363,7 @@ void QV4::Compiler::JSUnitGenerator::writeFunction(char *f, QV4::Compiler::Conte locals[i] = getStringId(irFunction->locals.at(i)); // write line numbers - quint32 *lineNumbers = (quint32 *)(f + function->lineNumberOffset); - for (int i = 0; i < irFunction->lineNumberMapping.size(); ++i) - lineNumbers[i] = irFunction->lineNumberMapping.at(i); + memcpy(f + function->lineNumberOffset, irFunction->lineNumberMapping.constData(), irFunction->lineNumberMapping.size()*sizeof(CompiledData::CodeOffsetToLine)); // write QML dependencies quint32_le *writtenDeps = (quint32_le *)(f + function->dependingIdObjectsOffset); |