aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/jsruntime/qv4script.cpp8
-rw-r--r--src/qml/qml/qqmltypeloader.cpp8
-rw-r--r--tests/auto/qml/qqmllanguage/data/importJs.11.errors.txt0
-rw-r--r--tests/auto/qml/qqmllanguage/data/importJs.11.qml10
-rw-r--r--tests/auto/qml/qqmllanguage/data/lib/org/qtproject/EmptyJsModule/Empty.js0
-rw-r--r--tests/auto/qml/qqmllanguage/data/lib/org/qtproject/EmptyJsModule/qmldir1
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp5
7 files changed, 27 insertions, 5 deletions
diff --git a/src/qml/jsruntime/qv4script.cpp b/src/qml/jsruntime/qv4script.cpp
index 38d2c12cfb..d4eb388d6e 100644
--- a/src/qml/jsruntime/qv4script.cpp
+++ b/src/qml/jsruntime/qv4script.cpp
@@ -199,14 +199,12 @@ Script::Script(ExecutionEngine *v4, Object *qml, CompiledData::CompilationUnit *
{
parsed = true;
- if (compilationUnit) {
- vmFunction = compilationUnit->linkToEngine(v4);
- Q_ASSERT(vmFunction);
+ vmFunction = compilationUnit ? compilationUnit->linkToEngine(v4) : 0;
+ if (vmFunction) {
Scope valueScope(v4);
ScopedObject holder(valueScope, v4->memoryManager->alloc<CompilationUnitHolder>(v4, compilationUnit));
compilationUnitHolder = holder.asReturnedValue();
- } else
- vmFunction = 0;
+ }
}
Script::~Script()
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
index fb435a50af..99247fc6b7 100644
--- a/src/qml/qml/qqmltypeloader.cpp
+++ b/src/qml/qml/qqmltypeloader.cpp
@@ -2574,6 +2574,11 @@ QQmlScriptData *QQmlScriptBlob::scriptData() const
return m_scriptData;
}
+struct EmptyCompilationUnit : public QV4::CompiledData::CompilationUnit
+{
+ virtual void linkBackendToEngine(QV4::ExecutionEngine *) {}
+};
+
void QQmlScriptBlob::dataReceived(const Data &data)
{
QString source = QString::fromUtf8(data.data(), data.size());
@@ -2600,6 +2605,9 @@ void QQmlScriptBlob::dataReceived(const Data &data)
setError(errors);
return;
}
+ if (!unit) {
+ unit.take(new EmptyCompilationUnit);
+ }
irUnit.javaScriptCompilationUnit = unit;
QmlIR::QmlUnitGenerator qmlGenerator;
diff --git a/tests/auto/qml/qqmllanguage/data/importJs.11.errors.txt b/tests/auto/qml/qqmllanguage/data/importJs.11.errors.txt
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/importJs.11.errors.txt
diff --git a/tests/auto/qml/qqmllanguage/data/importJs.11.qml b/tests/auto/qml/qqmllanguage/data/importJs.11.qml
new file mode 100644
index 0000000000..e76c57b9fc
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/importJs.11.qml
@@ -0,0 +1,10 @@
+import org.qtproject.EmptyJsModule 1.0 as Empty
+import QtQuick 2.0
+
+Item {
+ property bool test: false
+
+ Component.onCompleted: {
+ test = typeof Empty == 'object'
+ }
+}
diff --git a/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/EmptyJsModule/Empty.js b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/EmptyJsModule/Empty.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/EmptyJsModule/Empty.js
diff --git a/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/EmptyJsModule/qmldir b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/EmptyJsModule/qmldir
new file mode 100644
index 0000000000..2a436857f1
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/lib/org/qtproject/EmptyJsModule/qmldir
@@ -0,0 +1 @@
+EmptyAPI 1.0 Empty.js
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index 12d2f53596..734c9a4e1a 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -2924,6 +2924,11 @@ void tst_qqmllanguage::importJs_data()
<< "importJs.10.qml"
<< "importJs.10.errors.txt"
<< true;
+
+ QTest::newRow("emptyScript")
+ << "importJs.11.qml"
+ << "importJs.11.errors.txt"
+ << true;
}
void tst_qqmllanguage::importJs()