aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4include.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime/qv4include.cpp')
-rw-r--r--src/qml/jsruntime/qv4include.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/qml/jsruntime/qv4include.cpp b/src/qml/jsruntime/qv4include.cpp
index d5bae0e35e..2661ecc346 100644
--- a/src/qml/jsruntime/qv4include.cpp
+++ b/src/qml/jsruntime/qv4include.cpp
@@ -210,20 +210,28 @@ QV4::ReturnedValue QV4Include::method_include(QV4::CallContext *ctx)
result = i->result();
} else {
+ QScopedPointer<QV4::Script> script;
- QFile f(localFile);
+ if (const QQmlPrivate::CachedQmlUnit *cachedUnit = QQmlMetaType::findCachedCompilationUnit(url)) {
+ QV4::CompiledData::CompilationUnit *jsUnit = cachedUnit->createCompilationUnit();
+ script.reset(new QV4::Script(v4, qmlcontextobject, jsUnit));
+ } else {
+ QFile f(localFile);
- if (f.open(QIODevice::ReadOnly)) {
- QByteArray data = f.readAll();
- QString code = QString::fromUtf8(data);
- QmlIR::Document::removeScriptPragmas(code);
+ if (f.open(QIODevice::ReadOnly)) {
+ QByteArray data = f.readAll();
+ QString code = QString::fromUtf8(data);
+ QmlIR::Document::removeScriptPragmas(code);
- QV4::Script script(v4, qmlcontextobject, code, url.toString());
+ script.reset(new QV4::Script(v4, qmlcontextobject, code, url.toString()));
+ }
+ }
+ if (!script.isNull()) {
QV4::ExecutionContext *ctx = v4->currentContext();
- script.parse();
+ script->parse();
if (!v4->hasException)
- script.run();
+ script->run();
if (v4->hasException) {
QV4::ScopedValue ex(scope, ctx->catchException());
result = resultValue(v4, Exception);