diff options
Diffstat (limited to 'src/qml/compiler/qv4compiler_p.h')
-rw-r--r-- | src/qml/compiler/qv4compiler_p.h | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/src/qml/compiler/qv4compiler_p.h b/src/qml/compiler/qv4compiler_p.h index 6fd597a3b3..756e7cfd52 100644 --- a/src/qml/compiler/qv4compiler_p.h +++ b/src/qml/compiler/qv4compiler_p.h @@ -59,13 +59,31 @@ struct JSClassMember; namespace Compiler { -struct Q_QML_EXPORT JSUnitGenerator { - JSUnitGenerator(IR::Module *module, int headerSize = -1); - - IR::Module *irModule; +struct Q_QML_EXPORT StringTableGenerator { + StringTableGenerator(); int registerString(const QString &str); int getStringId(const QString &string) const; + QString stringForIndex(int index) const { return strings.at(index); } + uint stringCount() const { return strings.size(); } + uint dataSize() const { return stringDataSize; } + + void clear(); + + void serialize(uint *stringTable, char *dataStart, char *stringData); + +private: + QHash<QString, int> stringToId; + QStringList strings; + uint stringDataSize; +}; + +struct Q_QML_EXPORT JSUnitGenerator { + JSUnitGenerator(IR::Module *module, int headerSize = -1); + + int registerString(const QString &str) { return stringTable.registerString(str); } + int getStringId(const QString &string) const { return stringTable.getStringId(string); } + QString stringForIndex(int index) const { return stringTable.stringForIndex(index); } uint registerGetterLookup(const QString &name); uint registerSetterLookup(const QString &name); @@ -79,13 +97,14 @@ struct Q_QML_EXPORT JSUnitGenerator { int registerJSClass(int count, IR::ExprList *args); - QV4::CompiledData::Unit *generateUnit(int *totalUnitSize = 0); + QV4::CompiledData::Unit *generateUnit(); // Returns bytes written int writeFunction(char *f, int index, IR::Function *irFunction); - QHash<QString, int> stringToId; - QStringList strings; - uint stringDataSize; + StringTableGenerator stringTable; +private: + IR::Module *irModule; + QHash<IR::Function *, uint> functionOffsets; QList<CompiledData::Lookup> lookups; QVector<CompiledData::RegExp> regexps; |