static int calculateSize() { return sizeof(RegExp); }
};
+struct Lookup
+{
+ enum Type {
+ Type_Getter = 0x0,
+ Type_Setter = 0x1,
+ Type_GlobalGetter = 2
+ };
+
+ quint32 type_and_flags;
+ quint32 nameIndex;
+
+ static int calculateSize() { return sizeof(Lookup); }
+};
+
static const char magic_str[] = "qv4cdata";
struct Unit
return reinterpret_cast<const RegExp*>(reinterpret_cast<const char *>(this) + offsetToRegexpTable + index * sizeof(RegExp));
}
- static int calculateSize(uint nStrings, uint nFunctions, uint nRegExps) { return (sizeof(Unit) + (nStrings + nFunctions ) * sizeof(uint) + nRegExps * RegExp::calculateSize() + 7) & ~7; }
+ static int calculateSize(uint nStrings, uint nFunctions, uint nRegExps,
+ uint nLookups) {
+ return (sizeof(Unit)
+ + (nStrings + nFunctions) * sizeof(uint)
+ + nRegExps * RegExp::calculateSize()
+ + nLookups * Lookup::calculateSize()
+ + 7) & ~7; }
};
struct Function
}
};
-struct Lookup
-{
- enum Type {
- Type_Getter = 0x0,
- Type_Setter = 0x1,
- Type_GlobalGetter = 2
- };
-
- quint32 type_and_flags;
- quint32 nameIndex;
-
- static int calculateSize() { return sizeof(Lookup); }
-};
-
// Qml data structures
struct Value
registerString(*f->locals.at(i));
}
- int unitSize = QV4::CompiledData::Unit::calculateSize(strings.size(), irModule->functions.size(), regexps.size());
+ int unitSize = QV4::CompiledData::Unit::calculateSize(strings.size(), irModule->functions.size(), regexps.size(), lookups.size());
uint functionDataSize = 0;
for (int i = 0; i < irModule->functions.size(); ++i) {
functionDataSize += QV4::CompiledData::Function::calculateSize(f->formals.size(), f->locals.size(), f->nestedFunctions.size(), lineNumberMappingCount);
}
- const uint lookupDataSize = CompiledData::Lookup::calculateSize() * lookups.count();
-
- char *data = (char *)malloc(unitSize + functionDataSize + stringDataSize + lookupDataSize);
+ char *data = (char *)malloc(unitSize + functionDataSize + stringDataSize);
QV4::CompiledData::Unit *unit = (QV4::CompiledData::Unit*)data;
memcpy(unit->magic, QV4::CompiledData::magic_str, sizeof(unit->magic));
unit->functionTableSize = irModule->functions.size();
unit->offsetToFunctionTable = unit->offsetToStringTable + unit->stringTableSize * sizeof(uint);
unit->lookupTableSize = lookups.count();
+ unit->offsetToLookupTable = unit->offsetToFunctionTable + unit->functionTableSize * sizeof(uint);
unit->regexpTableSize = regexps.size();
- unit->offsetToRegexpTable = unit->offsetToFunctionTable + unit->functionTableSize * sizeof(uint);
- unit->offsetToLookupTable = unitSize + stringDataSize + functionDataSize;
+ unit->offsetToRegexpTable = unit->offsetToLookupTable + unit->lookupTableSize * CompiledData::Lookup::calculateSize();
unit->sourceFileIndex = getStringId(irModule->fileName);
// write strings and string table