aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qqmlirbuilder_p.h
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-03-27 17:07:06 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-28 15:07:03 +0100
commit0ed744c1ef955cdb94cbd89c58283663da490d7d (patch)
treee07da64307bb70331ed0a9cbfa78ecd960b57b14 /src/qml/compiler/qqmlirbuilder_p.h
parent6bbd173a9cb36021ed284522ac628400469eab2f (diff)
Various cleanups
* Encapsulate the string pooling for the V4 data generation into a StringGenerator class. * Move type reference collection into the IR::Document, where it belongs (as it writes into the typeReferences there) * const fixes * Remove unused methods and members * Store unit and qml unit sizes right in the generated data structure. That makes copying easier (like we do when generating the QML data based on the JS fields) Change-Id: I053146ab0b00cc90ac7f72f867415962d1be121b Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/compiler/qqmlirbuilder_p.h')
-rw-r--r--src/qml/compiler/qqmlirbuilder_p.h42
1 files changed, 18 insertions, 24 deletions
diff --git a/src/qml/compiler/qqmlirbuilder_p.h b/src/qml/compiler/qqmlirbuilder_p.h
index a345290672..cd67c52ed7 100644
--- a/src/qml/compiler/qqmlirbuilder_p.h
+++ b/src/qml/compiler/qqmlirbuilder_p.h
@@ -60,6 +60,9 @@ class QQmlTypeNameCache;
namespace QmlIR {
+struct Document;
+struct IRLoader;
+
template <typename T>
struct PoolList
{
@@ -199,7 +202,7 @@ struct Signal
QV4::CompiledData::Location location;
PoolList<SignalParameter> *parameters;
- QStringList parameterStringList(const QStringList &stringPool) const;
+ QStringList parameterStringList(const QV4::Compiler::StringTableGenerator *stringPool) const;
Signal *next;
};
@@ -285,6 +288,8 @@ public:
FixedPoolArray<int> *runtimeFunctionIndices;
private:
+ friend struct IRLoader;
+
PoolList<Property> *properties;
PoolList<Signal> *qmlSignals;
PoolList<Binding> *bindings;
@@ -303,15 +308,11 @@ struct Q_QML_EXPORT Pragma
struct Q_QML_EXPORT Document
{
- Document(bool debugMode)
- : jsModule(debugMode)
- , jsGenerator(&jsModule, sizeof(QV4::CompiledData::QmlUnit))
- , unitFlags(0)
- {}
+ Document(bool debugMode);
QString code;
QQmlJS::Engine jsParserEngine;
QV4::IR::Module jsModule;
- QList<QV4::CompiledData::Import*> imports;
+ QList<const QV4::CompiledData::Import *> imports;
QList<Pragma*> pragmas;
QQmlJS::AST::UiProgram *program;
int indexOfRootObject;
@@ -319,10 +320,14 @@ struct Q_QML_EXPORT Document
QV4::Compiler::JSUnitGenerator jsGenerator;
quint32 unitFlags;
+ QV4::CompiledData::CompilationUnit *javaScriptCompilationUnit;
+ QHash<int, QStringList> extraSignalParameters;
+
QV4::CompiledData::TypeReferenceMap typeReferences;
+ void collectTypeReferences();
int registerString(const QString &str) { return jsGenerator.registerString(str); }
- QString stringAt(int index) const { return jsGenerator.strings.value(index); }
+ QString stringAt(int index) const { return jsGenerator.stringForIndex(index); }
void extractScriptMetaData(QString &script, QQmlError *error);
static void removeScriptPragmas(QString &script);
@@ -388,12 +393,10 @@ public:
void recordError(const QQmlJS::AST::SourceLocation &location, const QString &description);
- void collectTypeReferences();
-
quint32 registerString(const QString &str) const { return jsGenerator->registerString(str); }
template <typename _Tp> _Tp *New() { return pool->New<_Tp>(); }
- QString stringAt(int index) const { return jsGenerator->strings.at(index); }
+ QString stringAt(int index) const { return jsGenerator->stringForIndex(index); }
static bool isStatementNodeScript(QQmlJS::AST::Statement *statement);
@@ -401,7 +404,7 @@ public:
QSet<QString> illegalNames;
- QList<QV4::CompiledData::Import*> _imports;
+ QList<const QV4::CompiledData::Import *> _imports;
QList<Pragma*> _pragmas;
QList<Object*> _objects;
@@ -418,20 +421,11 @@ public:
struct Q_QML_EXPORT QmlUnitGenerator
{
- QmlUnitGenerator()
- : jsUnitGenerator(0)
- {
- }
-
- QV4::CompiledData::QmlUnit *generate(Document &output, int *totalUnitSizeInBytes = 0);
+ QV4::CompiledData::QmlUnit *generate(Document &output);
private:
typedef bool (Binding::*BindingFilter)() const;
char *writeBindings(char *bindingPtr, Object *o, BindingFilter filter) const;
-
- int getStringId(const QString &str) const;
-
- QV4::Compiler::JSUnitGenerator *jsUnitGenerator;
};
struct Q_QML_EXPORT PropertyResolver
@@ -457,7 +451,7 @@ struct Q_QML_EXPORT JSCodeGen : public QQmlJS::Codegen
{
JSCodeGen(const QString &fileName, const QString &sourceCode, QV4::IR::Module *jsModule,
QQmlJS::Engine *jsEngine, QQmlJS::AST::UiProgram *qmlRoot, QQmlTypeNameCache *imports,
- const QStringList &stringPool);
+ const QV4::Compiler::StringTableGenerator *stringPool);
struct IdMapping
{
@@ -484,7 +478,7 @@ private:
QQmlJS::Engine *jsEngine; // needed for memory pool
QQmlJS::AST::UiProgram *qmlRoot;
QQmlTypeNameCache *imports;
- const QStringList &stringPool;
+ const QV4::Compiler::StringTableGenerator *stringPool;
bool _disableAcceleratedLookups;
ObjectIdMapping _idObjects;