aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@qt.io>2018-01-23 14:14:47 +0100
committerLars Knoll <lars.knoll@qt.io>2018-01-28 16:37:30 +0000
commit6ef66a5dfe938a23c67c0aef0d6c7ebc98b8cca8 (patch)
treee4a1d343302d981b31fc4ebd22e0b6e88fc12c16
parente5b157275d7b924e1a0f39d27958a7ad1eed9cef (diff)
Remove private API dependency of qmlcachegen generated code
Since the compilation unit does not have a backend anymore, we can create it in QtQml itself instead of in generated stub code. That removes the last dependency to private headers in the generated code. Change-Id: I186fc5bd679476b1a4714e4e3ba0ac00b55676cf Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r--src/qml/compiler/qv4compileddata.cpp3
-rw-r--r--src/qml/compiler/qv4compileddata_p.h2
-rw-r--r--src/qml/jsruntime/qv4script.cpp2
-rw-r--r--src/qml/qml/qqmlprivate.h5
-rw-r--r--src/qml/qml/qqmltypeloader.cpp8
-rw-r--r--src/qml/qml/qqmltypeloader_p.h2
-rw-r--r--tools/qmlcachegen/generateloader.cpp8
-rw-r--r--tools/qmlcachegen/qtquickcompiler.prf4
8 files changed, 13 insertions, 21 deletions
diff --git a/src/qml/compiler/qv4compileddata.cpp b/src/qml/compiler/qv4compileddata.cpp
index 889e755682..cdba3a5931 100644
--- a/src/qml/compiler/qv4compileddata.cpp
+++ b/src/qml/compiler/qv4compileddata.cpp
@@ -94,7 +94,8 @@ static QString cacheFilePath(const QUrl &url)
}
#endif
-CompilationUnit::CompilationUnit()
+CompilationUnit::CompilationUnit(const Unit *unitData)
+ : data(unitData)
{}
#ifndef V4_BOOTSTRAP
diff --git a/src/qml/compiler/qv4compileddata_p.h b/src/qml/compiler/qv4compileddata_p.h
index faa2d9bcb4..359a92c166 100644
--- a/src/qml/compiler/qv4compileddata_p.h
+++ b/src/qml/compiler/qv4compileddata_p.h
@@ -884,7 +884,7 @@ Q_STATIC_ASSERT(offsetof(CompilationUnitBase, runtimeRegularExpressions) == offs
struct Q_QML_PRIVATE_EXPORT CompilationUnit final : public CompilationUnitBase
{
public:
- CompilationUnit();
+ CompilationUnit(const Unit *unitData = nullptr);
#ifdef V4_BOOTSTRAP
~CompilationUnit() {}
#else
diff --git a/src/qml/jsruntime/qv4script.cpp b/src/qml/jsruntime/qv4script.cpp
index caddf0a3e0..70ea022fe6 100644
--- a/src/qml/jsruntime/qv4script.cpp
+++ b/src/qml/jsruntime/qv4script.cpp
@@ -226,7 +226,7 @@ Script *Script::createFromFileOrCache(ExecutionEngine *engine, QmlContext *qmlCo
{
if (const QQmlPrivate::CachedQmlUnit *cachedUnit = QQmlMetaType::findCachedCompilationUnit(originalUrl)) {
QQmlRefPointer<QV4::CompiledData::CompilationUnit> jsUnit;
- jsUnit.adopt(cachedUnit->createCompilationUnit());
+ jsUnit.adopt(new QV4::CompiledData::CompilationUnit(cachedUnit->qmlData));
return new QV4::Script(engine, qmlContext, jsUnit);
}
diff --git a/src/qml/qml/qqmlprivate.h b/src/qml/qml/qqmlprivate.h
index 7b7e2363e4..b9e9d5e59e 100644
--- a/src/qml/qml/qqmlprivate.h
+++ b/src/qml/qml/qqmlprivate.h
@@ -69,7 +69,6 @@ namespace CompiledData {
struct Unit;
struct CompilationUnit;
}
-typedef CompiledData::CompilationUnit *(*CompilationUnitFactoryFunction)();
}
namespace QmlIR {
struct Document;
@@ -284,8 +283,8 @@ namespace QQmlPrivate
struct CachedQmlUnit {
const QV4::CompiledData::Unit *qmlData;
- QV4::CompilationUnitFactoryFunction createCompilationUnit;
- void *unused;
+ void *unused1;
+ void *unused2;
};
typedef const CachedQmlUnit *(*QmlUnitCacheLookupFunction)(const QUrl &url);
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
index 132c0f64c0..4a22996a52 100644
--- a/src/qml/qml/qqmltypeloader.cpp
+++ b/src/qml/qml/qqmltypeloader.cpp
@@ -2431,7 +2431,7 @@ void QQmlTypeData::initializeFromCachedUnit(const QQmlPrivate::CachedQmlUnit *un
QmlIR::IRLoader loader(unit->qmlData, m_document.data());
loader.load();
m_document->jsModule.fileName = finalUrlString();
- m_document->javaScriptCompilationUnit.adopt(unit->createCompilationUnit());
+ m_document->javaScriptCompilationUnit.adopt(new QV4::CompiledData::CompilationUnit(unit->qmlData));
continueLoadFromIR();
}
@@ -3013,7 +3013,9 @@ void QQmlScriptBlob::dataReceived(const SourceCodeData &data)
void QQmlScriptBlob::initializeFromCachedUnit(const QQmlPrivate::CachedQmlUnit *unit)
{
- initializeFromCompilationUnit(unit->createCompilationUnit());
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> compilationUnit;
+ compilationUnit.adopt(new QV4::CompiledData::CompilationUnit(unit->qmlData));
+ initializeFromCompilationUnit(compilationUnit);
}
void QQmlScriptBlob::done()
@@ -3075,7 +3077,7 @@ void QQmlScriptBlob::scriptImported(QQmlScriptBlob *blob, const QV4::CompiledDat
m_scripts << ref;
}
-void QQmlScriptBlob::initializeFromCompilationUnit(QV4::CompiledData::CompilationUnit *unit)
+void QQmlScriptBlob::initializeFromCompilationUnit(const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &unit)
{
Q_ASSERT(!m_scriptData);
m_scriptData = new QQmlScriptData();
diff --git a/src/qml/qml/qqmltypeloader_p.h b/src/qml/qml/qqmltypeloader_p.h
index 0ec9f9240e..875a681aea 100644
--- a/src/qml/qml/qqmltypeloader_p.h
+++ b/src/qml/qml/qqmltypeloader_p.h
@@ -575,7 +575,7 @@ protected:
private:
void scriptImported(QQmlScriptBlob *blob, const QV4::CompiledData::Location &location, const QString &qualifier, const QString &nameSpace) override;
- void initializeFromCompilationUnit(QV4::CompiledData::CompilationUnit *unit);
+ void initializeFromCompilationUnit(const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &unit);
QList<ScriptReference> m_scripts;
QQmlScriptData *m_scriptData;
diff --git a/tools/qmlcachegen/generateloader.cpp b/tools/qmlcachegen/generateloader.cpp
index dd2e244b56..083af29a2d 100644
--- a/tools/qmlcachegen/generateloader.cpp
+++ b/tools/qmlcachegen/generateloader.cpp
@@ -293,7 +293,6 @@ bool generateLoader(const QStringList &compiledFiles, const QString &outputFileN
{
QTextStream stream(&generatedLoaderCode);
stream << "#include <QtQml/qqmlprivate.h>\n";
- stream << "#include <private/qv4compileddata_p.h>\n";
stream << "#include <QtCore/qdir.h>\n";
stream << "#include <QtCore/qurl.h>\n";
stream << "\n";
@@ -306,13 +305,8 @@ bool generateLoader(const QStringList &compiledFiles, const QString &outputFileN
const QString ns = symbolNamespaceForPath(compiledFile);
stream << "namespace " << symbolNamespaceForPath(compiledFile) << " { \n";
stream << " extern const unsigned char qmlData[];\n";
- stream << " QV4::CompiledData::CompilationUnit *createCompilationUnit() {\n";
- stream << " QV4::CompiledData::CompilationUnit *unit = new QV4::CompiledData::CompilationUnit;\n";
- stream << " unit->data = reinterpret_cast<const QV4::CompiledData::Unit*>(&qmlData);\n";
- stream << " return unit;\n";
- stream << " }\n";
stream << " const QQmlPrivate::CachedQmlUnit unit = {\n";
- stream << " reinterpret_cast<const QV4::CompiledData::Unit*>(&qmlData), &createCompilationUnit, nullptr\n";
+ stream << " reinterpret_cast<const QV4::CompiledData::Unit*>(&qmlData), nullptr, nullptr\n";
stream << " };\n";
stream << "}\n";
}
diff --git a/tools/qmlcachegen/qtquickcompiler.prf b/tools/qmlcachegen/qtquickcompiler.prf
index 985a0a5cdc..b68e8f91a2 100644
--- a/tools/qmlcachegen/qtquickcompiler.prf
+++ b/tools/qmlcachegen/qtquickcompiler.prf
@@ -53,10 +53,6 @@ for(res, QMLCACHE_RESOURCE_FILES) {
QMLCACHE_RESOURCE_FLAGS += --resource=$$res
}
-!isEmpty(QMLCACHE_FILES) {
- QT_PRIVATE *= core-private qml-private
-}
-
defineReplace(qmlCacheOutputName) {
name = $$absolute_path($$1, $$OUT_PWD)
name = $$relative_path($$name, $$_PRO_FILE_PWD_)