aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qv4compiler.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@qt.io>2016-07-14 16:12:09 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2016-07-15 08:58:09 +0000
commitc586fc4be2428db57ba8579f8280d09893ba796d (patch)
tree381cd4fd495d2e7ca804e60f16e20cb06ad25e09 /src/qml/compiler/qv4compiler.cpp
parent80a024081a8b04bb789a242fc7949af3110105d7 (diff)
Clean up function offset table generation
We can replace the intermediate hash with a vector of the final little-endian encoded function offsets. Change-Id: If3f970330ab232a672f7c75b4d32f8ef4d246714 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/compiler/qv4compiler.cpp')
-rw-r--r--src/qml/compiler/qv4compiler.cpp11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/qml/compiler/qv4compiler.cpp b/src/qml/compiler/qv4compiler.cpp
index 8c99fdf0ca..4651bc2c8f 100644
--- a/src/qml/compiler/qv4compiler.cpp
+++ b/src/qml/compiler/qv4compiler.cpp
@@ -42,6 +42,7 @@
#include <qv4isel_p.h>
#include <private/qv4string_p.h>
#include <private/qv4value_p.h>
+#include <private/qv4alloca_p.h>
QV4::Compiler::StringTableGenerator::StringTableGenerator()
{
@@ -220,11 +221,11 @@ QV4::CompiledData::Unit *QV4::Compiler::JSUnitGenerator::generateUnit(GeneratorO
int unitSize = QV4::CompiledData::Unit::calculateSize(irModule->functions.size(), regexps.size(),
constants.size(), lookups.size(), jsClassOffsets.count());
- QHash<IR::Function *, uint> functionOffsets;
+ CompiledData::LEUInt32 *functionOffsets = reinterpret_cast<CompiledData::LEUInt32*>(alloca(irModule->functions.size() * sizeof(CompiledData::LEUInt32)));
uint functionDataSize = 0;
for (int i = 0; i < irModule->functions.size(); ++i) {
QV4::IR::Function *f = irModule->functions.at(i);
- functionOffsets.insert(f, functionDataSize + unitSize);
+ functionOffsets[i] = functionDataSize + unitSize;
const int qmlIdDepsCount = f->idObjectDependencies.count();
const int qmlPropertyDepsCount = f->scopeObjectPropertyDependencies.count() + f->contextObjectPropertyDependencies.count();
@@ -266,11 +267,7 @@ QV4::CompiledData::Unit *QV4::Compiler::JSUnitGenerator::generateUnit(GeneratorO
unit->offsetToObjects = 0;
unit->indexOfRootObject = 0;
- {
- CompiledData::LEUInt32 *functionTable = reinterpret_cast<CompiledData::LEUInt32 *>(data + unit->offsetToFunctionTable);
- for (int i = 0; i < irModule->functions.size(); ++i)
- functionTable[i] = functionOffsets.value(irModule->functions.at(i));
- }
+ memcpy(data + unit->offsetToFunctionTable, functionOffsets, unit->functionTableSize * sizeof(CompiledData::LEUInt32));
char *f = data + unitSize;
for (int i = 0; i < irModule->functions.size(); ++i) {