aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime')
-rw-r--r--src/qml/jsruntime/qv4engine.cpp31
-rw-r--r--src/qml/jsruntime/qv4engine_p.h20
-rw-r--r--src/qml/jsruntime/qv4qmlcontext.cpp2
3 files changed, 25 insertions, 28 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp
index 82e653a645..1f27ca1f1e 100644
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -856,6 +856,10 @@ ExecutionEngine::ExecutionEngine(QJSEngine *jsEngine)
ExecutionEngine::~ExecutionEngine()
{
+#if QT_CONFIG(qml_network)
+ delete networkAccessManager;
+#endif
+ m_typeLoader.reset();
qDeleteAll(m_extensionData);
delete m_multiplyWrappedQObjects;
m_multiplyWrappedQObjects = nullptr;
@@ -884,6 +888,15 @@ ExecutionEngine::~ExecutionEngine()
#endif
}
+#if QT_CONFIG(qml_network)
+QNetworkAccessManager *ExecutionEngine::getNetworkAccessManager()
+{
+ if (!networkAccessManager)
+ networkAccessManager = typeLoader()->createNetworkAccessManager(nullptr);
+ return networkAccessManager;
+}
+#endif
+
#if QT_CONFIG(qml_debug)
void ExecutionEngine::setDebugger(Debugging::Debugger *debugger)
{
@@ -2194,13 +2207,10 @@ ExecutionEngine::Module ExecutionEngine::registerNativeModule(
return Module();
QQmlRefPointer<CompiledData::CompilationUnit> cu;
- if (m_qmlEngine) {
- // Make sure the type loader doesn't try to resolve the module anymore.
- // If some other code requests that same module, we need to produce the same CU.
- cu = QQmlEnginePrivate::get(m_qmlEngine)->typeLoader.injectModule(url, unit);
- } else {
- cu = QQml::makeRefPointer<CompiledData::CompilationUnit>(unit);
- }
+
+ // Make sure the type loader doesn't try to resolve the module anymore.
+ // If some other code requests that same module, we need to produce the same CU.
+ cu = typeLoader()->injectModule(url, unit);
QQmlRefPointer<ExecutableCompilationUnit> newModule = insertCompilationUnit(std::move(cu));
@@ -2956,11 +2966,4 @@ int ExecutionEngine::registerExtension()
return registrationData()->extensionCount++;
}
-#if QT_CONFIG(qml_network)
-QNetworkAccessManager *QV4::detail::getNetworkAccessManager(ExecutionEngine *engine)
-{
- return engine->qmlEngine()->networkAccessManager();
-}
-#endif // qml_network
-
QT_END_NAMESPACE
diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h
index 764a796f9d..8c1c12e543 100644
--- a/src/qml/jsruntime/qv4engine_p.h
+++ b/src/qml/jsruntime/qv4engine_p.h
@@ -57,16 +57,8 @@ QT_BEGIN_NAMESPACE
#if QT_CONFIG(qml_network)
class QNetworkAccessManager;
-
-namespace QV4 {
-struct QObjectMethod;
-namespace detail {
-QNetworkAccessManager *getNetworkAccessManager(ExecutionEngine *engine);
-}
-}
-#else
-namespace QV4 { struct QObjectMethod; }
#endif // qml_network
+namespace QV4 { struct QObjectMethod; }
// Used to allow a QObject method take and return raw V4 handles without having to expose
// 48 in the public API.
@@ -176,9 +168,9 @@ public:
template<typename TypeLoader = QQmlTypeLoader>
TypeLoader *typeLoader()
{
- if (m_qmlEngine)
- return TypeLoader::get(m_qmlEngine);
- return nullptr;
+ if (!m_typeLoader)
+ m_typeLoader = std::make_unique<TypeLoader>(this);
+ return m_typeLoader.get();
}
enum JSObjects {
@@ -359,7 +351,8 @@ public:
FunctionObject *thrower() const { return reinterpret_cast<FunctionObject *>(jsObjects + ThrowerObject); }
#if QT_CONFIG(qml_network)
- QNetworkAccessManager* (*networkAccessManager)(ExecutionEngine*) = detail::getNetworkAccessManager;
+ QNetworkAccessManager *getNetworkAccessManager();
+ QNetworkAccessManager *networkAccessManager = nullptr;
#endif
enum JSStrings {
@@ -866,6 +859,7 @@ private:
void *m_xmlHttpRequestData = nullptr;
#endif
+ std::unique_ptr<QQmlTypeLoader> m_typeLoader;
QQmlEngine *m_qmlEngine = nullptr;
QQmlDelayedCallQueue m_delayedCallQueue;
diff --git a/src/qml/jsruntime/qv4qmlcontext.cpp b/src/qml/jsruntime/qv4qmlcontext.cpp
index baef0b4864..4d29d6b890 100644
--- a/src/qml/jsruntime/qv4qmlcontext.cpp
+++ b/src/qml/jsruntime/qv4qmlcontext.cpp
@@ -201,7 +201,7 @@ ReturnedValue QQmlContextWrapper::getPropertyAndBase(const QQmlContextWrapper *r
if (context->imports() && (name->startsWithUpper() || context->valueTypesAreAddressable())) {
// Search for attached properties, enums and imported scripts
QQmlTypeNameCache::Result r = context->imports()->query<QQmlImport::AllowRecursion>(
- name, QQmlTypeLoader::get(ep));
+ name, v4->typeLoader());
if (r.isValid()) {
if (hasProperty)