diff --git a/src/qmlcompiler/qqmljstypepropagator.cpp b/src/qmlcompiler/qqmljstypepropagator.cpp index 22854c00c4..fba1f43cce 100644 --- a/src/qmlcompiler/qqmljstypepropagator.cpp +++ b/src/qmlcompiler/qqmljstypepropagator.cpp @@ -1625,10 +1625,6 @@ bool QQmlJSTypePropagator::propagateArrayMethod( const auto valueContained = baseContained->valueType(); const auto valueType = m_typeResolver->globalType(valueContained); - const bool canHaveSideEffects = (baseType.isProperty() && baseType.isWritable()) - || baseContained->isListProperty() - || baseType.isConversion(); - const auto setReturnType = [&](const QQmlJSScope::ConstPtr type) { setAccumulator(m_typeResolver->returnType( type, QQmlJSRegisterContent::MethodReturnValue, baseContained)); @@ -1643,7 +1639,7 @@ bool QQmlJSTypePropagator::propagateArrayMethod( for (int i = 0; i < argc; ++i) addReadRegister(argv + i, intType); - m_state.setHasSideEffects(canHaveSideEffects); + m_state.setHasSideEffects(true); setReturnType(baseContained); return true; } @@ -1662,7 +1658,7 @@ bool QQmlJSTypePropagator::propagateArrayMethod( for (int i = 1; i < argc; ++i) addReadRegister(argv + i, intType); - m_state.setHasSideEffects(canHaveSideEffects); + m_state.setHasSideEffects(true); setReturnType(baseContained); return true; } @@ -1694,7 +1690,7 @@ bool QQmlJSTypePropagator::propagateArrayMethod( } if ((name == u"pop" || name == u"shift") && argc == 0) { - m_state.setHasSideEffects(canHaveSideEffects); + m_state.setHasSideEffects(true); setReturnType(valueContained); return true; } @@ -1708,13 +1704,13 @@ bool QQmlJSTypePropagator::propagateArrayMethod( for (int i = 0; i < argc; ++i) addReadRegister(argv + i, valueType); - m_state.setHasSideEffects(canHaveSideEffects); + m_state.setHasSideEffects(true); setReturnType(m_typeResolver->int32Type()); return true; } if (name == u"reverse" && argc == 0) { - m_state.setHasSideEffects(canHaveSideEffects); + m_state.setHasSideEffects(true); setReturnType(baseContained); return true; } @@ -1751,7 +1747,7 @@ bool QQmlJSTypePropagator::propagateArrayMethod( for (int i = 2; i < argc; ++i) addReadRegister(argv + i, valueType); - m_state.setHasSideEffects(canHaveSideEffects); + m_state.setHasSideEffects(true); setReturnType(baseContained); return true; } diff --git a/tests/auto/qml/qmlcppcodegen/data/jsArrayMethodsUntyped.qml b/tests/auto/qml/qmlcppcodegen/data/jsArrayMethodsUntyped.qml index 7426c692fe..ec61adce19 100644 --- a/tests/auto/qml/qmlcppcodegen/data/jsArrayMethodsUntyped.qml +++ b/tests/auto/qml/qmlcppcodegen/data/jsArrayMethodsUntyped.qml @@ -14,4 +14,11 @@ QtObject { property string jsArrayJoin: jsArray().join() property int jsArrayIndexOf: jsArray().indexOf(l2) property int jsArrayLastIndexOf: jsArray().lastIndexOf(l3) + + property string pushAndJoin: { + var s = []; + s.push("A") + s.push("B") + return s.join("+"); + } } diff --git a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp index 21d649a690..22479d3d9c 100644 --- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp +++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp @@ -2752,6 +2752,8 @@ void tst_QmlCppCodegen::jsArrayMethods() QCOMPARE(object->property("listPropertyLastIndexOf"), object->property("jsArrayLastIndexOf")); QCOMPARE(object->property("listPropertyLastIndexOf").toInt(), 5); + + QCOMPARE(check->property("pushAndJoin").toString(), QStringLiteral("A+B")); } void tst_QmlCppCodegen::jsArrayMethodsWithParams()