aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmlcompiler/qqmljsbasicblocks.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2023-07-28 11:16:00 +0200
committerUlf Hermann <ulf.hermann@qt.io>2023-07-28 17:02:01 +0200
commit7fa304b8195be39fd07b5d15d0079b9b1a643e8f (patch)
treedc5784855635faa4f5c11593127cd69db3735876 /src/qmlcompiler/qqmljsbasicblocks.cpp
parentfa6aedf7ac7c83ec056271a00cab21bc2516391c (diff)
QmlCompiler: Refrain from converting when merging equal types
Creating a conversion always loses some information and adds overhead. We can avoid it if both types are the same anyway. Change-Id: Ib32104f949704341c33033d6a5f36a705b6c2022 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qmlcompiler/qqmljsbasicblocks.cpp')
-rw-r--r--src/qmlcompiler/qqmljsbasicblocks.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/qmlcompiler/qqmljsbasicblocks.cpp b/src/qmlcompiler/qqmljsbasicblocks.cpp
index a16db323f9..073e294f45 100644
--- a/src/qmlcompiler/qqmljsbasicblocks.cpp
+++ b/src/qmlcompiler/qqmljsbasicblocks.cpp
@@ -679,14 +679,17 @@ void QQmlJSBasicBlocks::adjustTypes()
if (!liveConversions[i.key()].contains(conversion.key()))
continue;
- QQmlJSScope::ConstPtr conversionResult = conversion->second.content.conversionResult();
- const auto conversionOrigins = conversion->second.content.conversionOrigins();
QQmlJSScope::ConstPtr newResult;
- for (const auto &origin : conversionOrigins)
- newResult = m_typeResolver->merge(newResult, origin);
- if (!m_typeResolver->adjustTrackedType(conversionResult, newResult))
- setError(adjustErrorMessage(conversionResult, newResult));
- transformRegister(conversion->second.content);
+ const auto content = conversion->second.content;
+ if (content.isConversion()) {
+ QQmlJSScope::ConstPtr conversionResult = content.conversionResult();
+ const auto conversionOrigins = content.conversionOrigins();
+ for (const auto &origin : conversionOrigins)
+ newResult = m_typeResolver->merge(newResult, origin);
+ if (!m_typeResolver->adjustTrackedType(conversionResult, newResult))
+ setError(adjustErrorMessage(conversionResult, newResult));
+ }
+ transformRegister(content);
newRegisters.appendOrdered(conversion);
}
i->second.typeConversions = newRegisters.take();