diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2018-01-23 14:02:49 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2018-01-25 21:01:26 +0000 |
commit | fff473c6387b0ab241a9b2e1f6e8843d777befb8 (patch) | |
tree | def2e04fa3a7628f3755d473a34199ce5ed61329 | |
parent | c8366096c41f44bd6f05dcd1aef4fd8372902c97 (diff) |
Remove some duplicated code
We can centralize the code that initializes a V4::Script instance used
in worker scripts as well as in the Qt.include() function.
Change-Id: I9a83f990c694eb4d793ec5ac3b1c917d8c068d06
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r-- | src/qml/jsruntime/qv4include.cpp | 16 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4script.cpp | 20 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4script_p.h | 1 | ||||
-rw-r--r-- | src/qml/types/qquickworkerscript.cpp | 20 |
4 files changed, 26 insertions, 31 deletions
diff --git a/src/qml/jsruntime/qv4include.cpp b/src/qml/jsruntime/qv4include.cpp index e9d3d1c95d..d1ceb0a892 100644 --- a/src/qml/jsruntime/qv4include.cpp +++ b/src/qml/jsruntime/qv4include.cpp @@ -227,21 +227,7 @@ QV4::ReturnedValue QV4Include::method_include(const QV4::FunctionObject *b, cons } else { QScopedPointer<QV4::Script> script; - - if (const QQmlPrivate::CachedQmlUnit *cachedUnit = QQmlMetaType::findCachedCompilationUnit(url)) { - QV4::CompiledData::CompilationUnit *jsUnit = cachedUnit->createCompilationUnit(); - script.reset(new QV4::Script(scope.engine, qmlcontext, jsUnit)); - } else { - QFile f(localFile); - - if (f.open(QIODevice::ReadOnly)) { - QByteArray data = f.readAll(); - QString code = QString::fromUtf8(data); - QmlIR::Document::removeScriptPragmas(code); - - script.reset(new QV4::Script(scope.engine, qmlcontext, code, url.toString())); - } - } + script.reset(QV4::Script::createFromFileOrCache(scope.engine, qmlcontext, localFile, url)); if (!script.isNull()) { script->parse(); diff --git a/src/qml/jsruntime/qv4script.cpp b/src/qml/jsruntime/qv4script.cpp index 901f2574da..369ec7d67e 100644 --- a/src/qml/jsruntime/qv4script.cpp +++ b/src/qml/jsruntime/qv4script.cpp @@ -222,6 +222,26 @@ QQmlRefPointer<QV4::CompiledData::CompilationUnit> Script::precompile(QV4::Compi return cg.generateCompilationUnit(/*generate unit data*/false); } +Script *Script::createFromFileOrCache(ExecutionEngine *engine, QmlContext *qmlContext, const QString &fileName, const QUrl &originalUrl) +{ + if (const QQmlPrivate::CachedQmlUnit *cachedUnit = QQmlMetaType::findCachedCompilationUnit(originalUrl)) { + QV4::CompiledData::CompilationUnit *jsUnit = cachedUnit->createCompilationUnit(); + return new QV4::Script(engine, qmlContext, jsUnit); + } + + QFile f(fileName); + if (!f.open(QIODevice::ReadOnly)) + return nullptr; + + QByteArray data = f.readAll(); + QString sourceCode = QString::fromUtf8(data); + QmlIR::Document::removeScriptPragmas(sourceCode); + + auto result = new QV4::Script(engine, qmlContext, sourceCode, originalUrl.toString()); + result->parse(); + return result; +} + QV4::ReturnedValue Script::evaluate(ExecutionEngine *engine, const QString &script, QmlContext *qmlContext) { QV4::Scope scope(engine); diff --git a/src/qml/jsruntime/qv4script_p.h b/src/qml/jsruntime/qv4script_p.h index 158d21c69d..e6b60105f7 100644 --- a/src/qml/jsruntime/qv4script_p.h +++ b/src/qml/jsruntime/qv4script_p.h @@ -99,6 +99,7 @@ struct Q_QML_EXPORT Script { static QQmlRefPointer<CompiledData::CompilationUnit> precompile(QV4::Compiler::Module *module, Compiler::JSUnitGenerator *unitGenerator, const QUrl &url, const QString &source, QList<QQmlError> *reportedErrors = 0, QQmlJS::Directives *directivesCollector = 0); + static Script *createFromFileOrCache(ExecutionEngine *engine, QmlContext *qmlContext, const QString &fileName, const QUrl &originalUrl); static ReturnedValue evaluate(ExecutionEngine *engine, const QString &script, QmlContext *qmlContext); }; diff --git a/src/qml/types/qquickworkerscript.cpp b/src/qml/types/qquickworkerscript.cpp index d90b0ab490..231c0fa810 100644 --- a/src/qml/types/qquickworkerscript.cpp +++ b/src/qml/types/qquickworkerscript.cpp @@ -396,22 +396,10 @@ void QQuickWorkerScriptEnginePrivate::processLoad(int id, const QUrl &url) QV4::Scoped<QV4::QmlContext> qmlContext(scope, getWorker(script)); Q_ASSERT(!!qmlContext); - if (const QQmlPrivate::CachedQmlUnit *cachedUnit = QQmlMetaType::findCachedCompilationUnit(url)) { - QV4::CompiledData::CompilationUnit *jsUnit = cachedUnit->createCompilationUnit(); - program.reset(new QV4::Script(v4, qmlContext, jsUnit)); - } else { - QFile f(fileName); - if (!f.open(QIODevice::ReadOnly)) { - qWarning().nospace() << "WorkerScript: Cannot find source file " << url.toString(); - return; - } - - QByteArray data = f.readAll(); - QString sourceCode = QString::fromUtf8(data); - QmlIR::Document::removeScriptPragmas(sourceCode); - - program.reset(new QV4::Script(v4, qmlContext, sourceCode, url.toString())); - program->parse(); + program.reset(QV4::Script::createFromFileOrCache(v4, qmlContext, fileName, url)); + if (program.isNull()) { + qWarning().nospace() << "WorkerScript: Cannot find source file " << url.toString(); + return; } if (!v4->hasException) |