diff options
-rw-r--r-- | src/qml/compiler/qqmlirbuilder.cpp | 4 | ||||
-rw-r--r-- | src/qml/compiler/qqmlirbuilder_p.h | 2 | ||||
-rw-r--r-- | src/qml/compiler/qqmltypecompiler.cpp | 6 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 5 | ||||
-rw-r--r-- | tools/qmlcachegen/qmlcachegen.cpp | 24 |
5 files changed, 17 insertions, 24 deletions
diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp index 90ba0506f0..e2ea8f6853 100644 --- a/src/qml/compiler/qqmlirbuilder.cpp +++ b/src/qml/compiler/qqmlirbuilder.cpp @@ -1551,7 +1551,7 @@ bool IRBuilder::isRedundantNullInitializerForPropertyDeclaration(Property *prope return QQmlJS::AST::cast<QQmlJS::AST::NullExpression *>(expr); } -QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output, const QV4::CompiledData::DependentTypesHasher &dependencyHasher) +void QmlUnitGenerator::generate(Document &output, const QV4::CompiledData::DependentTypesHasher &dependencyHasher) { QQmlRefPointer<QV4::CompiledData::CompilationUnit> compilationUnit = output.javaScriptCompilationUnit; @@ -1798,7 +1798,7 @@ QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output, const QV4: qDebug() << " " << totalStringSize << "bytes total strings"; } - return qmlUnit; + compilationUnit->setUnitData(qmlUnit); } char *QmlUnitGenerator::writeBindings(char *bindingPtr, const Object *o, BindingFilter filter) const diff --git a/src/qml/compiler/qqmlirbuilder_p.h b/src/qml/compiler/qqmlirbuilder_p.h index f8d481e14f..d1e2b17bb7 100644 --- a/src/qml/compiler/qqmlirbuilder_p.h +++ b/src/qml/compiler/qqmlirbuilder_p.h @@ -563,7 +563,7 @@ public: struct Q_QML_PRIVATE_EXPORT QmlUnitGenerator { - QV4::CompiledData::Unit *generate(Document &output, const QV4::CompiledData::DependentTypesHasher &dependencyHasher = QV4::CompiledData::DependentTypesHasher()); + void generate(Document &output, const QV4::CompiledData::DependentTypesHasher &dependencyHasher = QV4::CompiledData::DependentTypesHasher()); private: typedef bool (Binding::*BindingFilter)() const; diff --git a/src/qml/compiler/qqmltypecompiler.cpp b/src/qml/compiler/qqmltypecompiler.cpp index 15edc010fd..c4a3d47f44 100644 --- a/src/qml/compiler/qqmltypecompiler.cpp +++ b/src/qml/compiler/qqmltypecompiler.cpp @@ -161,11 +161,7 @@ QQmlRefPointer<QV4::CompiledData::CompilationUnit> QQmlTypeCompiler::compile() // Generate QML compiled type data structures QmlIR::QmlUnitGenerator qmlGenerator; - QV4::CompiledData::Unit *qmlUnit = qmlGenerator.generate(*document, dependencyHasher); - - Q_ASSERT(document->javaScriptCompilationUnit); - // The js unit owns the data and will free the qml unit. - document->javaScriptCompilationUnit->setUnitData(qmlUnit); + qmlGenerator.generate(*document, dependencyHasher); QQmlRefPointer<QV4::CompiledData::CompilationUnit> compilationUnit = document->javaScriptCompilationUnit; compilationUnit = document->javaScriptCompilationUnit; diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index b105165be7..64a0a04cd7 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -3008,10 +3008,7 @@ void QQmlScriptBlob::dataReceived(const SourceCodeData &data) irUnit.javaScriptCompilationUnit = unit; QmlIR::QmlUnitGenerator qmlGenerator; - QV4::CompiledData::Unit *unitData = qmlGenerator.generate(irUnit); - Q_ASSERT(!unit->unitData()); - // The js unit owns the data and will free the qml unit. - unit->setUnitData(unitData); + qmlGenerator.generate(irUnit); if ((!disableDiskCache() || forceDiskCache()) && !isDebugging()) { QString errorString; diff --git a/tools/qmlcachegen/qmlcachegen.cpp b/tools/qmlcachegen/qmlcachegen.cpp index 34814af17c..4dddab18b2 100644 --- a/tools/qmlcachegen/qmlcachegen.cpp +++ b/tools/qmlcachegen/qmlcachegen.cpp @@ -162,7 +162,7 @@ static bool checkArgumentsObjectUseInSignalHandlers(const QmlIR::Document &doc, return true; } -using SaveFunction = std::function<bool (QV4::CompiledData::CompilationUnit *, QString *)>; +using SaveFunction = std::function<bool (const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &, QString *)>; static bool compileQmlFile(const QString &inputFileName, SaveFunction saveFunction, Error *error) { @@ -232,12 +232,12 @@ static bool compileQmlFile(const QString &inputFileName, SaveFunction saveFuncti QmlIR::QmlUnitGenerator generator; irDocument.javaScriptCompilationUnit = v4CodeGen.generateCompilationUnit(/*generate unit*/false); - QV4::CompiledData::Unit *unit = generator.generate(irDocument); + generator.generate(irDocument); + QV4::CompiledData::Unit *unit = const_cast<QV4::CompiledData::Unit*>(irDocument.javaScriptCompilationUnit->data); unit->flags |= QV4::CompiledData::Unit::StaticData; unit->flags |= QV4::CompiledData::Unit::PendingTypeCompilation; - irDocument.javaScriptCompilationUnit->data = unit; - if (!saveFunction(irDocument.javaScriptCompilationUnit.data(), &error->message)) + if (!saveFunction(irDocument.javaScriptCompilationUnit, &error->message)) return false; free(unit); @@ -321,14 +321,13 @@ static bool compileJSFile(const QString &inputFileName, const QString &inputFile irDocument.jsModule.fileName.clear(); irDocument.jsModule.finalUrl.clear(); - QmlIR::QmlUnitGenerator generator; - irDocument.javaScriptCompilationUnit = v4CodeGen.generateCompilationUnit(/*generate unit*/false); - QV4::CompiledData::Unit *unit = generator.generate(irDocument); + QmlIR::QmlUnitGenerator generator; + generator.generate(irDocument); + QV4::CompiledData::Unit *unit = const_cast<QV4::CompiledData::Unit*>(irDocument.javaScriptCompilationUnit->data); unit->flags |= QV4::CompiledData::Unit::StaticData; - irDocument.javaScriptCompilationUnit->data = unit; - if (!saveFunction(irDocument.javaScriptCompilationUnit.data(), &error->message)) { + if (!saveFunction(irDocument.javaScriptCompilationUnit, &error->message)) { engine->setDirectives(oldDirs); return false; } @@ -339,7 +338,8 @@ static bool compileJSFile(const QString &inputFileName, const QString &inputFile return true; } -static bool saveUnitAsCpp(const QString &inputFileName, const QString &outputFileName, QV4::CompiledData::CompilationUnit *unit, QString *errorString) +static bool saveUnitAsCpp(const QString &inputFileName, const QString &outputFileName, + const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &unit, QString *errorString) { QSaveFile f(outputFileName); if (!f.open(QIODevice::WriteOnly | QIODevice::Truncate)) { @@ -527,12 +527,12 @@ int main(int argc, char **argv) inputFileUrl = QStringLiteral("qrc://") + inputResourcePath; - saveFunction = [inputResourcePath, outputFileName](QV4::CompiledData::CompilationUnit *unit, QString *errorString) { + saveFunction = [inputResourcePath, outputFileName](const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &unit, QString *errorString) { return saveUnitAsCpp(inputResourcePath, outputFileName, unit, errorString); }; } else { - saveFunction = [outputFileName](QV4::CompiledData::CompilationUnit *unit, QString *errorString) { + saveFunction = [outputFileName](const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &unit, QString *errorString) { return unit->saveToDisk(outputFileName, errorString); }; } |