summaryrefslogtreecommitdiff
path: root/src/qml/compiler/qv4compiler.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2017-08-29 12:35:05 +0200
committerErik Verbruggen <erik.verbruggen@qt.io>2017-08-29 10:42:35 +0000
commit77e0602021c74b5ec2d8bd9affff5e91bf6f5ae3 (patch)
tree2054bc9a29279db1cdcdb57e414a9532b99cd818 /src/qml/compiler/qv4compiler.cpp
parent99d5cdad6c8580d5ef31c291b721bf6230e2502f (diff)
downloadqtdeclarative-77e0602021c74b5ec2d8bd9affff5e91bf6f5ae3.tar.gz
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.cpp6
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);