commit:     fcc4f0cb453d0629691774e2a28c55645bb98817
Author:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Mon Sep  8 01:44:22 2025 +0000
Commit:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Mon Sep  8 05:56:54 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=fcc4f0cb

dev-qt/qtdeclarative: backport fix for QTBUG-139626

Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org>

 .../files/qtdeclarative-6.9.2-QTBUG-139626.patch   | 87 ++++++++++++++++++++++
 ...-6.9.2.ebuild => qtdeclarative-6.9.2-r1.ebuild} |  4 +
 2 files changed, 91 insertions(+)

diff --git a/dev-qt/qtdeclarative/files/qtdeclarative-6.9.2-QTBUG-139626.patch 
b/dev-qt/qtdeclarative/files/qtdeclarative-6.9.2-QTBUG-139626.patch
new file mode 100644
index 000000000000..71aa7d3809e4
--- /dev/null
+++ b/dev-qt/qtdeclarative/files/qtdeclarative-6.9.2-QTBUG-139626.patch
@@ -0,0 +1,87 @@
+https://bugreports.qt.io/browse/QTBUG-139626
+https://codereview.qt-project.org/c/qt/qtdeclarative/+/672607
+--- a/src/qmlcompiler/qqmljscodegenerator.cpp
++++ b/src/qmlcompiler/qqmljscodegenerator.cpp
+@@ -1441,4 +1441,15 @@
+ }
+ 
++QString QQmlJSCodeGenerator::generateVariantMapLookup(
++        const QString &map, const int nameIndex)
++{
++    const QString mapLookup = map
++            + u"["_s + 
QQmlJSUtils::toLiteral(m_jsUnitGenerator->lookupName(nameIndex)) + u"]"_s;
++
++    return m_state.accumulatorVariableOut + u" = "_s
++            + conversion(m_typeResolver->varType(), m_state.accumulatorOut(), 
mapLookup)
++            + u";\n"_s;
++}
++
+ void QQmlJSCodeGenerator::generate_GetLookupHelper(int index)
+ {
+@@ -1588,9 +1599,5 @@
+         }
+     } else if (accumulatorIn.isStoredIn(m_typeResolver->variantMapType())) {
+-        QString mapLookup = m_state.accumulatorVariableIn + u"["_s
+-                + 
QQmlJSUtils::toLiteral(m_jsUnitGenerator->lookupName(index)) + u"]"_s;
+-        m_body += m_state.accumulatorVariableOut + u" = "_s;
+-        m_body += conversion(m_typeResolver->varType(), 
m_state.accumulatorOut(), mapLookup);
+-        m_body += u";\n"_s;
++        m_body += generateVariantMapLookup(m_state.accumulatorVariableIn, 
index);
+     } else {
+         if (m_state.isRegisterAffectedBySideEffects(Accumulator))
+@@ -1602,4 +1609,11 @@
+                         m_jsUnitGenerator->lookupName(index)));
+ 
++        if (scope.contains(m_typeResolver->variantMapType())) {
++            m_body += generateVariantMapLookup(
++                    u"(*static_cast<const QVariantMap *>("_s
++                            + inputContentPointer + u"))"_s, index);
++            return;
++        }
++
+         const QString lookup = u"aotContext->getValueLookup("_s + indexString
+                 + u", "_s + inputContentPointer
+--- a/src/qmlcompiler/qqmljscodegenerator_p.h
++++ b/src/qmlcompiler/qqmljscodegenerator_p.h
+@@ -360,4 +360,6 @@
+             const QStringList &arguments, const QString &metaType, const 
QString &metaObject);
+ 
++    QString generateVariantMapLookup(const QString &map, const int nameIndex);
++
+     QQmlJSRegisterContent originalType(QQmlJSRegisterContent tracked)
+     {
+--- a/tests/auto/qml/qmlcppcodegen/data/variantMapLookup.h
++++ b/tests/auto/qml/qmlcppcodegen/data/variantMapLookup.h
+@@ -9,4 +9,5 @@
+     QML_ELEMENT
+     Q_PROPERTY(QVariantMap data READ data CONSTANT)
++    Q_PROPERTY(QList<QVariantMap> many READ many CONSTANT)
+ 
+ public:
+@@ -15,3 +16,10 @@
+ private:
+     QVariantMap data() const { return { { QStringLiteral("value"), 42 } }; }
++    QList<QVariantMap> many() const
++    {
++        const QVariantMap one = data();
++        return QList<QVariantMap>({one, one, one});
++    }
+ };
++
++
+--- a/tests/auto/qml/qmlcppcodegen/data/variantMapLookup.qml
++++ b/tests/auto/qml/qmlcppcodegen/data/variantMapLookup.qml
+@@ -5,4 +5,5 @@
+ Item {
+     property int i: moo.data.value
++    property int j: moo.many[1].value
+ 
+     VariantMapLookupFoo {
+--- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
++++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
+@@ -5697,4 +5697,5 @@
+     QVERIFY(!o.isNull());
+     QCOMPARE(o->property("i"), 42);
++    QCOMPARE(o->property("j"), 42);
+ }
+ 

diff --git a/dev-qt/qtdeclarative/qtdeclarative-6.9.2.ebuild 
b/dev-qt/qtdeclarative/qtdeclarative-6.9.2-r1.ebuild
similarity index 97%
rename from dev-qt/qtdeclarative/qtdeclarative-6.9.2.ebuild
rename to dev-qt/qtdeclarative/qtdeclarative-6.9.2-r1.ebuild
index eb34cbcde726..20dd725e2bb4 100644
--- a/dev-qt/qtdeclarative/qtdeclarative-6.9.2.ebuild
+++ b/dev-qt/qtdeclarative/qtdeclarative-6.9.2-r1.ebuild
@@ -32,6 +32,10 @@ BDEPEND="
        ~dev-qt/qtshadertools-${PV}:6
 "
 
+PATCHES=(
+       "${FILESDIR}"/${P}-QTBUG-139626.patch
+)
+
 src_configure() {
        local mycmakeargs=(
                $(cmake_use_find_package qmlls Qt6LanguageServerPrivate)

Reply via email to