diff options
| author | Ulf Hermann <ulf.hermann@qt.io> | 2023-07-28 11:16:00 +0200 |
|---|---|---|
| committer | Ulf Hermann <ulf.hermann@qt.io> | 2023-07-28 17:02:01 +0200 |
| commit | 7fa304b8195be39fd07b5d15d0079b9b1a643e8f (patch) | |
| tree | dc5784855635faa4f5c11593127cd69db3735876 /src/qmlcompiler/qqmljsbasicblocks.cpp | |
| parent | fa6aedf7ac7c83ec056271a00cab21bc2516391c (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.cpp | 17 |
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(); |
