diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2024-01-08 16:49:19 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2024-01-18 14:54:21 +0100 |
commit | 03662c8507ba80a4d10c79c9dbc449f5a8e8af1d (patch) | |
tree | 09a8052985f88609126f26a21960f5f0330e4e42 /src | |
parent | 4e5c096153b8a5d6e110ef8a6db265b0bc138ce1 (diff) |
QtQml: Move dependentScripts into base CU
Change-Id: Ia332a691a4a5f04fcca50eb1c3e2018f8368dbe6
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/common/qv4compileddata.cpp | 1 | ||||
-rw-r--r-- | src/qml/common/qv4compileddata_p.h | 3 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4executablecompilationunit.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4executablecompilationunit_p.h | 11 | ||||
-rw-r--r-- | src/qml/qml/qqmlengine.cpp | 12 | ||||
-rw-r--r-- | src/qml/qml/qqmltypedata.cpp | 4 |
6 files changed, 22 insertions, 11 deletions
diff --git a/src/qml/common/qv4compileddata.cpp b/src/qml/common/qv4compileddata.cpp index 253c9a5e77..411e8cb0b7 100644 --- a/src/qml/common/qv4compileddata.cpp +++ b/src/qml/common/qv4compileddata.cpp @@ -3,6 +3,7 @@ #include "qv4compileddata_p.h" +#include <private/qqmlscriptdata_p.h> #include <private/qqmltypenamecache_p.h> #include <private/qv4resolvedtypereference_p.h> diff --git a/src/qml/common/qv4compileddata_p.h b/src/qml/common/qv4compileddata_p.h index 5d4c7747d1..747be0c61c 100644 --- a/src/qml/common/qv4compileddata_p.h +++ b/src/qml/common/qv4compileddata_p.h @@ -58,6 +58,7 @@ class QQmlTypeNameCache; class QQmlType; class QQmlEngine; class QQmlPropertyData; +class QQmlScriptData; namespace QQmlPrivate { struct AOTCompiledFunction; @@ -1493,6 +1494,8 @@ struct CompilationUnit final : public QQmlRefCounted<CompilationUnit> QQmlType qmlType; + QVector<QQmlRefPointer<QQmlScriptData>> dependentScripts; + public: using CompiledObject = CompiledData::Object; diff --git a/src/qml/jsruntime/qv4executablecompilationunit.cpp b/src/qml/jsruntime/qv4executablecompilationunit.cpp index 60af2b2203..d35090d293 100644 --- a/src/qml/jsruntime/qv4executablecompilationunit.cpp +++ b/src/qml/jsruntime/qv4executablecompilationunit.cpp @@ -260,8 +260,6 @@ void ExecutableCompilationUnit::clear() runtimeLookups[i].releasePropertyCache(); } - dependentScripts.clear(); - delete [] runtimeLookups; runtimeLookups = nullptr; diff --git a/src/qml/jsruntime/qv4executablecompilationunit_p.h b/src/qml/jsruntime/qv4executablecompilationunit_p.h index 3d9b32d354..67a61d0c91 100644 --- a/src/qml/jsruntime/qv4executablecompilationunit_p.h +++ b/src/qml/jsruntime/qv4executablecompilationunit_p.h @@ -121,7 +121,6 @@ public: int totalBindingsCount() const { return m_compilationUnit->totalBindingsCount(); } int totalParserStatusCount() const { return m_compilationUnit->totalParserStatusCount(); } int totalObjectCount() const { return m_compilationUnit->totalObjectCount(); } - QVector<QQmlRefPointer<QQmlScriptData>> dependentScripts; ResolvedTypeReference *resolvedType(int id) const { @@ -285,6 +284,16 @@ public: QString stringAt(uint index) const { return m_compilationUnit->stringAt(index); } + const QVector<QQmlRefPointer<QQmlScriptData>> *dependentScriptsPtr() const + { + return &m_compilationUnit->dependentScripts; + } + + QVector<QQmlRefPointer<QQmlScriptData>> *dependentScriptsPtr() + { + return &m_compilationUnit->dependentScripts; + } + const CompiledData::BindingPropertyData *bindingPropertyDataPerObjectAt( qsizetype objectIndex) const { diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 49093bfdbd..03058762a4 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -1989,18 +1989,18 @@ QQmlEnginePrivate::createInternalContext(const QQmlRefPointer<QV4::ExecutableCom context->setImports(unit->typeNameCache()); context->initFromTypeCompilationUnit(unit, subComponentIndex); - if (isComponentRoot && unit->dependentScripts.size()) { + const auto *dependentScripts = unit->dependentScriptsPtr(); + const qsizetype dependentScriptsSize = dependentScripts->size(); + if (isComponentRoot && dependentScriptsSize) { QV4::ExecutionEngine *v4 = v4engine(); Q_ASSERT(v4); QV4::Scope scope(v4); - QV4::ScopedObject scripts(scope, v4->newArrayObject(unit->dependentScripts.size())); + QV4::ScopedObject scripts(scope, v4->newArrayObject(dependentScriptsSize)); context->setImportedScripts(QV4::PersistentValue(v4, scripts.asReturnedValue())); QV4::ScopedValue v(scope); - for (int i = 0; i < unit->dependentScripts.size(); ++i) { - QQmlRefPointer<QQmlScriptData> s = unit->dependentScripts.at(i); - scripts->put(i, (v = s->scriptValueForContext(context))); - } + for (qsizetype i = 0; i < dependentScriptsSize; ++i) + scripts->put(i, (v = dependentScripts->at(i)->scriptValueForContext(context))); } return context; diff --git a/src/qml/qml/qqmltypedata.cpp b/src/qml/qml/qqmltypedata.cpp index 8d66a265d4..f74d3752d5 100644 --- a/src/qml/qml/qqmltypedata.cpp +++ b/src/qml/qml/qqmltypedata.cpp @@ -557,7 +557,7 @@ void QQmlTypeData::done() { // Collect imported scripts - m_compiledData->dependentScripts.reserve(m_scripts.size()); + m_compiledData->dependentScriptsPtr()->reserve(m_scripts.size()); for (int scriptIndex = 0; scriptIndex < m_scripts.size(); ++scriptIndex) { const QQmlTypeData::ScriptReference &script = m_scripts.at(scriptIndex); @@ -573,7 +573,7 @@ void QQmlTypeData::done() m_compiledData->typeNameCache()->add( qualifier.toString(), scriptIndex, enclosingNamespace); QQmlRefPointer<QQmlScriptData> scriptData = script.script->scriptData(); - m_compiledData->dependentScripts << scriptData; + *m_compiledData->dependentScriptsPtr() << scriptData; } } } |