From 044d3d2cdb7ba825069b3d1302b96723cb75d6ca Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Mon, 22 Sep 2025 08:57:53 +0200 Subject: QmlCompiler: Don't adjust the same conversion multiple times MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The same conversion can re-surface in multiple places in the byte code by virtue of being stored and loaded unchanged. If we've already adjusted it, we don't need to do it again. Pick-to: 6.10 Fixes: QTBUG-140415 Change-Id: Ic1e7e90af49f0ee9440a9c37abd4ab8ee0fdbe3e Reviewed-by: Olivier De Cannière Reviewed-by: Sami Shalayel --- tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp') diff --git a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp index d8a90309bb..c4c3846513 100644 --- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp +++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp @@ -198,6 +198,7 @@ private slots: void methodOnListLookup(); void methods(); void modulePrefix(); + void multiAdjust(); void multiDirectory_data(); void multiDirectory(); void multiForeign(); @@ -4042,6 +4043,54 @@ void tst_QmlCppCodegen::modulePrefix() QCOMPARE(rootObject->property("baz").toString(), QStringLiteral("ItIsTheSingleton")); } +void tst_QmlCppCodegen::multiAdjust() +{ + QQmlEngine engine; + QQmlComponent component(&engine, QUrl(u"qrc:/qt/qml/TestTypes/multiAdjust.qml"_s)); + QVERIFY2(component.isReady(), qPrintable(component.errorString())); + + QScopedPointer rootObject(component.create()); + QVERIFY(rootObject); + + QCOMPARE(rootObject->property("calledFoo"), 0); + QCOMPARE(rootObject->property("calledBar"), 0); + + QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Left)); + QCOMPARE(rootObject->property("calledFoo"), 1); + QCOMPARE(rootObject->property("calledBar"), 0); + + QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Right)); + QCOMPARE(rootObject->property("calledFoo"), 2); + QCOMPARE(rootObject->property("calledBar"), 1); + + rootObject->setProperty("a", 3); + QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Left)); + QCOMPARE(rootObject->property("calledFoo"), 2); + QCOMPARE(rootObject->property("calledBar"), 1); + + QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Right)); + QCOMPARE(rootObject->property("calledFoo"), 2); + QCOMPARE(rootObject->property("calledBar"), 2); + + rootObject->setObjectName("a"); + QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Left)); + QCOMPARE(rootObject->property("calledFoo"), 2); + QCOMPARE(rootObject->property("calledBar"), 2); + + QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Right)); + QCOMPARE(rootObject->property("calledFoo"), 2); + QCOMPARE(rootObject->property("calledBar"), 2); + + rootObject->setProperty("a", 1); + QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Left)); + QCOMPARE(rootObject->property("calledFoo"), 3); + QCOMPARE(rootObject->property("calledBar"), 2); + + QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Right)); + QCOMPARE(rootObject->property("calledFoo"), 4); + QCOMPARE(rootObject->property("calledBar"), 2); +} + void tst_QmlCppCodegen::multiDirectory_data() { QTest::addColumn("url"); -- cgit v1.2.3