aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qv4compileddata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/compiler/qv4compileddata.cpp')
-rw-r--r--src/qml/compiler/qv4compileddata.cpp15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/qml/compiler/qv4compileddata.cpp b/src/qml/compiler/qv4compileddata.cpp
index 357c6fc04a..d9e58bb6e8 100644
--- a/src/qml/compiler/qv4compileddata.cpp
+++ b/src/qml/compiler/qv4compileddata.cpp
@@ -471,15 +471,18 @@ Unit *CompilationUnit::createUnitData(QmlIR::Document *irDocument)
QV4::CompiledData::Unit *jsUnit = const_cast<QV4::CompiledData::Unit*>(compilationUnit->data);
auto ensureWritableUnit = [&jsUnit, &compilationUnit]() {
if (jsUnit == compilationUnit->data) {
- char *unitCopy = (char*)malloc(jsUnit->unitSize);
- memcpy(unitCopy, jsUnit, jsUnit->unitSize);
+ // Discard the old QML tables as the caller will re-create them anyway.
+ quint32 unitSizeWithoutQMLTables = jsUnit->offsetToImports;
+ char *unitCopy = (char*)malloc(unitSizeWithoutQMLTables);
+ memcpy(unitCopy, jsUnit, unitSizeWithoutQMLTables);
jsUnit = reinterpret_cast<QV4::CompiledData::Unit*>(unitCopy);
+ jsUnit->unitSize = unitSizeWithoutQMLTables;
}
};
QV4::Compiler::StringTableGenerator &stringTable = irDocument->jsGenerator.stringTable;
- if (jsUnit->sourceFileIndex == quint32(0) || jsUnit->stringAt(jsUnit->sourceFileIndex) != irDocument->jsModule.fileName) {
+ if (jsUnit->sourceFileIndex == quint32(0) || stringTable.stringForIndex(jsUnit->sourceFileIndex) != irDocument->jsModule.fileName) {
ensureWritableUnit();
jsUnit->sourceFileIndex = stringTable.registerString(irDocument->jsModule.fileName);
jsUnit->finalUrlIndex = stringTable.registerString(irDocument->jsModule.finalUrl);
@@ -522,11 +525,7 @@ Unit *CompilationUnit::createUnitData(QmlIR::Document *irDocument)
// Update signal signatures
if (!changedSignals.isEmpty()) {
- if (jsUnit == compilationUnit->data) {
- char *unitCopy = (char*)malloc(jsUnit->unitSize);
- memcpy(unitCopy, jsUnit, jsUnit->unitSize);
- jsUnit = reinterpret_cast<QV4::CompiledData::Unit*>(unitCopy);
- }
+ ensureWritableUnit();
for (int i = 0; i < changedSignals.count(); ++i) {
const uint functionIndex = changedSignals.at(i);