diff options
| author | Ulf Hermann <ulf.hermann@qt.io> | 2024-06-10 11:21:15 +0200 |
|---|---|---|
| committer | Ulf Hermann <ulf.hermann@qt.io> | 2024-06-16 00:17:34 +0200 |
| commit | dd731b880b4bfbe7bad7b0b4d1ac3b72503c0071 (patch) | |
| tree | 6a00d633cccc1d3ce0236cfcaa3bd4a1816430e0 /src/qmlcompiler/qqmljsoptimizations.cpp | |
| parent | 9542b4b93576dd42cfbfe2dd8692b317fe6f7e3c (diff) | |
QmlCompiler: Create QQmlJSRegisterContent unstored
Add a separate pass to populate the stored types and only run that after
we're done with all the type propagation and optimization.
Task-number: QTBUG-124670
Change-Id: I740063908b22684f5d2c72d6261fad98850d8636
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qmlcompiler/qqmljsoptimizations.cpp')
| -rw-r--r-- | src/qmlcompiler/qqmljsoptimizations.cpp | 23 |
1 files changed, 1 insertions, 22 deletions
diff --git a/src/qmlcompiler/qqmljsoptimizations.cpp b/src/qmlcompiler/qqmljsoptimizations.cpp index 000d255251..2f55980155 100644 --- a/src/qmlcompiler/qqmljsoptimizations.cpp +++ b/src/qmlcompiler/qqmljsoptimizations.cpp @@ -84,11 +84,7 @@ void QQmlJSOptimizations::populateReaderLocations() it->second.changedRegister = QQmlJSRegisterContent(); } else { // void the output, rather than deleting it. We still need its variant. - bool adjusted = m_typeResolver->adjustTrackedType( - it->second.changedRegister.storedType(), m_typeResolver->voidType()); - Q_ASSERT(adjusted); // Can always convert to void - - adjusted = m_typeResolver->adjustTrackedType( + const bool adjusted = m_typeResolver->adjustTrackedType( m_typeResolver->containedType(it->second.changedRegister), m_typeResolver->voidType()); Q_ASSERT(adjusted); // Can always convert to void @@ -315,13 +311,6 @@ void QQmlJSOptimizations::adjustTypes() } }; - const auto transformRegister = [&](const QQmlJSRegisterContent &content) { - const QQmlJSScope::ConstPtr conversion - = m_typeResolver->storedType(m_typeResolver->containedType(content)); - if (!m_typeResolver->adjustTrackedType(content.storedType(), conversion)) - setError(adjustErrorMessage(content.storedType(), conversion)); - }; - // Handle the array definitions first. // Changing the array type changes the expected element types. auto adjustArray = [&](int instructionOffset, int mode) { @@ -354,9 +343,6 @@ void QQmlJSOptimizations::adjustTypes() || !m_typeResolver->equals(contained, m_typeResolver->realType())) { if (!m_typeResolver->adjustTrackedType(contained, valueType)) setError(adjustErrorMessage(contained, valueType)); - - // We still need to adjust the stored type, too. - transformRegister(content); } } @@ -412,9 +398,6 @@ void QQmlJSOptimizations::adjustTypes() const QQmlJSScope::ConstPtr contained = m_typeResolver->containedType(content); if (!m_typeResolver->adjustTrackedType(contained, propType)) setError(adjustErrorMessage(contained, propType)); - - // We still need to adjust the stored type, too. - transformRegister(content); } // The others cannot be adjusted. We don't know their names, yet. @@ -456,9 +439,6 @@ void QQmlJSOptimizations::adjustTypes() NewVirtualRegisters newRegisters; for (auto i = m_annotations.begin(), iEnd = m_annotations.end(); i != iEnd; ++i) { - if (i->second.changedRegisterIndex != InvalidRegister) - transformRegister(i->second.changedRegister); - for (auto conversion = i->second.typeConversions.begin(), conversionEnd = i->second.typeConversions.end(); conversion != conversionEnd; ++conversion) { @@ -475,7 +455,6 @@ void QQmlJSOptimizations::adjustTypes() if (!m_typeResolver->adjustTrackedType(conversionResult, newResult)) setError(adjustErrorMessage(conversionResult, newResult)); } - transformRegister(content); newRegisters.appendOrdered(conversion); } i->second.typeConversions = newRegisters.take(); |
