diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-10-24 10:38:29 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-29 23:05:33 +0100 |
commit | 1fc951da6aa0bff05af37b20744aba810a2d2988 (patch) | |
tree | ce83346780586278bc5ba91370146a034aeebeac /src | |
parent | 4d33a38f4b11cea2123b818487ff55f0988767bc (diff) |
Cleanup QML specific JS code generator
Move parameters global to the entire QML file to the constructor, pass
component/context specific parameters to the generate function.
Change-Id: I6c3ab41b3bab19b066bbe20f971c5cafaeb70b98
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/compiler/qqmlcodegenerator.cpp | 15 | ||||
-rw-r--r-- | src/qml/compiler/qqmlcodegenerator_p.h | 14 | ||||
-rw-r--r-- | src/qml/qml/qqmlcompiler.cpp | 7 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 4 |
4 files changed, 20 insertions, 20 deletions
diff --git a/src/qml/compiler/qqmlcodegenerator.cpp b/src/qml/compiler/qqmlcodegenerator.cpp index cbf58599ac..fc485e82f2 100644 --- a/src/qml/compiler/qqmlcodegenerator.cpp +++ b/src/qml/compiler/qqmlcodegenerator.cpp @@ -1198,22 +1198,23 @@ int QmlUnitGenerator::getStringId(const QString &str) const return jsUnitGenerator->getStringId(str); } -QVector<int> JSCodeGen::generateJSCodeForFunctionsAndBindings(const QString &fileName, ParsedQML *output) +JSCodeGen::JSCodeGen(const QString &fileName, const QString &sourceCode, V4IR::Module *jsModule, Engine *jsEngine, AST::UiProgram *qmlRoot) + : QQmlJS::Codegen(/*strict mode*/false) + , sourceCode(sourceCode) + , jsEngine(jsEngine) + , qmlRoot(qmlRoot) { - return generateJSCodeForFunctionsAndBindings(fileName, output->code, &output->jsModule, &output->jsParserEngine, - output->program, /* ### */output->program, output->functions); + _module = jsModule; + _module->setFileName(fileName); } -QVector<int> JSCodeGen::generateJSCodeForFunctionsAndBindings(const QString &fileName, const QString &sourceCode, V4IR::Module *jsModule, - QQmlJS::Engine *jsEngine, AST::UiProgram *qmlRoot, AST::Node *contextRoot, +QVector<int> JSCodeGen::generateJSCodeForFunctionsAndBindings(AST::Node *contextRoot, const QList<AST::Node*> &functions, const ObjectIdMapping &objectIds) { this->idObjects = objectIds; QVector<int> runtimeFunctionIndices(functions.size()); - _module = jsModule; - _module->setFileName(fileName); ScanFunctions scan(this, sourceCode, GlobalCode); scan.enterEnvironment(0, QmlBinding); diff --git a/src/qml/compiler/qqmlcodegenerator_p.h b/src/qml/compiler/qqmlcodegenerator_p.h index 0f4c2b145a..1b72e96097 100644 --- a/src/qml/compiler/qqmlcodegenerator_p.h +++ b/src/qml/compiler/qqmlcodegenerator_p.h @@ -345,9 +345,8 @@ private: struct Q_QML_EXPORT JSCodeGen : public QQmlJS::Codegen { - JSCodeGen() - : QQmlJS::Codegen(/*strict mode*/false) - {} + JSCodeGen(const QString &fileName, const QString &sourceCode, V4IR::Module *jsModule, + QQmlJS::Engine *jsEngine, AST::UiProgram *qmlRoot); struct IdMapping { @@ -357,15 +356,16 @@ struct Q_QML_EXPORT JSCodeGen : public QQmlJS::Codegen typedef QVector<IdMapping> ObjectIdMapping; // Returns mapping from input functions to index in V4IR::Module::functions / compiledData->runtimeFunctions - QVector<int> generateJSCodeForFunctionsAndBindings(const QString &fileName, ParsedQML *output); - QVector<int> generateJSCodeForFunctionsAndBindings(const QString &fileName, const QString &sourceCode, V4IR::Module *jsModule, - QQmlJS::Engine *jsEngine, AST::UiProgram *qmlRoot, AST::Node *contextRoot, const QList<AST::Node*> &functions, - const ObjectIdMapping &objectIds = ObjectIdMapping()); + QVector<int> generateJSCodeForFunctionsAndBindings(AST::Node *contextRoot, const QList<AST::Node*> &functions, const ObjectIdMapping &objectIds = ObjectIdMapping()); protected: virtual V4IR::Expr *fallbackNameLookup(const QString &name, int line, int col) const; private: + QString sourceCode; + QQmlJS::Engine *jsEngine; // needed for memory pool + AST::UiProgram *qmlRoot; + ObjectIdMapping idObjects; }; diff --git a/src/qml/qml/qqmlcompiler.cpp b/src/qml/qml/qqmlcompiler.cpp index 0462c0b61a..58495bb1bf 100644 --- a/src/qml/qml/qqmlcompiler.cpp +++ b/src/qml/qml/qqmlcompiler.cpp @@ -3649,11 +3649,11 @@ bool QQmlCompiler::completeComponentBuild() } if (!compileState->functionsToCompile.isEmpty()) { - JSCodeGen jsCodeGen; - const QString &sourceCode = jsEngine->code(); AST::UiProgram *qmlRoot = parser.qmlRoot(); + JSCodeGen jsCodeGen(unit->finalUrlString(), sourceCode, jsModule.data(), jsEngine, qmlRoot); + JSCodeGen::ObjectIdMapping idMapping; if (compileState->ids.count() > 0) { idMapping.reserve(compileState->ids.count()); @@ -3665,8 +3665,7 @@ bool QQmlCompiler::completeComponentBuild() } } - const QVector<int> runtimeFunctionIndices = jsCodeGen.generateJSCodeForFunctionsAndBindings(unit->finalUrlString(), sourceCode, jsModule.data(), jsEngine, - qmlRoot, compileState->root->astNode, + const QVector<int> runtimeFunctionIndices = jsCodeGen.generateJSCodeForFunctionsAndBindings(compileState->root->astNode, compileState->functionsToCompile, idMapping); compileState->runtimeFunctionIndices = runtimeFunctionIndices; diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index 733f057aee..6f718e5b5b 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -2357,8 +2357,8 @@ void QQmlTypeData::compile() // Compile JS binding expressions and signal handlers - JSCodeGen jsCodeGen; - const QVector<int> runtimeFunctionIndices = jsCodeGen.generateJSCodeForFunctionsAndBindings(finalUrlString(), parsedQML.data()); + JSCodeGen jsCodeGen(finalUrlString(), parsedQML->code, &parsedQML->jsModule, &parsedQML->jsParserEngine, parsedQML->program); + const QVector<int> runtimeFunctionIndices = jsCodeGen.generateJSCodeForFunctionsAndBindings(/*### context root*/0, parsedQML->functions); QV4::ExecutionEngine *v4 = QV8Engine::getV4(m_typeLoader->engine()); |