diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2023-05-03 17:49:56 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2023-05-05 22:24:52 +0200 |
commit | 567130e2d06a37b8615db7858050dfa0579ced93 (patch) | |
tree | 6b86f0560eee6656e40748192423465a06153681 /src | |
parent | 30cf4b2b579a3735a59192e2c6ee7d0356cec195 (diff) | |
download | qtdeclarative-567130e2d06a37b8615db7858050dfa0579ced93.tar.gz |
QML: Don't crash when monitoring binding removal
There are more bindings kinds around.
Fixes: QTBUG-113353
Change-Id: If545f56bd61c238431883be3eb013841d96b18bb
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/jsruntime/qv4qobjectwrapper.cpp | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 865f2af699..df6f788247 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -551,14 +551,26 @@ void QObjectWrapper::setProperty( if (Q_UNLIKELY(lcBindingRemoval().isInfoEnabled())) { if (auto binding = QQmlPropertyPrivate::binding(object, QQmlPropertyIndex(property->coreIndex()))) { - Q_ASSERT(binding->kind() == QQmlAbstractBinding::QmlBinding); - const auto qmlBinding = static_cast<const QQmlBinding*>(binding); const auto stackFrame = engine->currentStackFrame; - qCInfo(lcBindingRemoval, - "Overwriting binding on %s::%s at %s:%d that was initially bound at %s", - object->metaObject()->className(), qPrintable(property->name(object)), - qPrintable(stackFrame->source()), stackFrame->lineNumber(), - qPrintable(qmlBinding->expressionIdentifier())); + switch (binding->kind()) { + case QQmlAbstractBinding::QmlBinding: { + const auto qmlBinding = static_cast<const QQmlBinding*>(binding); + qCInfo(lcBindingRemoval, + "Overwriting binding on %s::%s at %s:%d that was initially bound at %s", + object->metaObject()->className(), qPrintable(property->name(object)), + qPrintable(stackFrame->source()), stackFrame->lineNumber(), + qPrintable(qmlBinding->expressionIdentifier())); + break; + } + case QQmlAbstractBinding::ValueTypeProxy: + case QQmlAbstractBinding::PropertyToPropertyBinding: { + qCInfo(lcBindingRemoval, + "Overwriting binding on %s::%s at %s:%d", + object->metaObject()->className(), qPrintable(property->name(object)), + qPrintable(stackFrame->source()), stackFrame->lineNumber()); + break; + } + } } } QQmlPropertyPrivate::removeBinding(object, QQmlPropertyIndex(property->coreIndex())); |