aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2024-01-08 16:49:19 +0100
committerUlf Hermann <ulf.hermann@qt.io>2024-01-18 14:54:21 +0100
commit03662c8507ba80a4d10c79c9dbc449f5a8e8af1d (patch)
tree09a8052985f88609126f26a21960f5f0330e4e42 /src
parent4e5c096153b8a5d6e110ef8a6db265b0bc138ce1 (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.cpp1
-rw-r--r--src/qml/common/qv4compileddata_p.h3
-rw-r--r--src/qml/jsruntime/qv4executablecompilationunit.cpp2
-rw-r--r--src/qml/jsruntime/qv4executablecompilationunit_p.h11
-rw-r--r--src/qml/qml/qqmlengine.cpp12
-rw-r--r--src/qml/qml/qqmltypedata.cpp4
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;
}
}
}