From 37c290c5b8659256ff574a06a3df2c363ae446b5 Mon Sep 17 00:00:00 2001 From: Maximilian Goldstein Date: Wed, 2 Dec 2020 13:08:57 +0100 Subject: [PATCH 16/28] qv4qmlcontext: Fix bounded signal expressions when debugging Fixes: QTBUG-83599 Change-Id: I8909f0b2d3eca909512b99c172c8dc5e93e48482 Reviewed-by: Ulf Hermann (cherry picked from commit bad85119bf35468292cfd80ecc934b66515f0c68) Reviewed-by: Qt Cherry-pick Bot --- src/qml/jsruntime/qv4qmlcontext.cpp | 4 ++-- .../qml/debugger/qv4debugger/tst_qv4debugger.cpp | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/qml/jsruntime/qv4qmlcontext.cpp b/src/qml/jsruntime/qv4qmlcontext.cpp index e2d3b98ff6..6eece147a6 100644 --- a/src/qml/jsruntime/qv4qmlcontext.cpp +++ b/src/qml/jsruntime/qv4qmlcontext.cpp @@ -466,9 +466,9 @@ ReturnedValue QQmlContextWrapper::resolveQmlContextPropertyLookupGetter(Lookup * return static_cast(ctx)->locals[index].asReturnedValue(); } - // Skip only block contexts within the current call context. + // Skip only block and call contexts. // Other contexts need a regular QML property lookup. See below. - if (ctx->type != Heap::ExecutionContext::Type_BlockContext) + if (ctx->type != Heap::ExecutionContext::Type_BlockContext && ctx->type != Heap::ExecutionContext::Type_CallContext) break; } diff --git a/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp b/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp index 84f5eebd10..e3cbeb9891 100644 --- a/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp +++ b/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp @@ -910,19 +910,25 @@ void tst_qv4debugger::signalParameters() component.setData("import QtQml 2.12\n" "QtObject {\n" " id: root\n" - " property string result\n" + " property string result: 'unset'\n" + " property string resultCallbackInternal: 'unset'\n" + " property string resultCallbackExternal: 'unset'\n" " signal signalWithArg(string textArg)\n" + " function call(callback) { callback(); }\n" + " function externalCallback() { root.resultCallbackExternal = textArg; }\n" " property Connections connections : Connections {\n" " target: root\n" - " onSignalWithArg: { root.result = textArg; }\n" + " onSignalWithArg: { root.result = textArg; call(function() { root.resultCallbackInternal = textArg; }); call(externalCallback); }\n" " }\n" " Component.onCompleted: signalWithArg('something')\n" "}", QUrl("test.qml")); - QVERIFY(component.isReady()); + QVERIFY2(component.isReady(), qPrintable(component.errorString())); QScopedPointer obj(component.create()); QVERIFY(obj); QCOMPARE(obj->property("result").toString(), QLatin1String("something")); + QCOMPARE(obj->property("resultCallbackInternal").toString(), QLatin1String("something")); + QCOMPARE(obj->property("resultCallbackExternal").toString(), QLatin1String("unset")); } QTEST_MAIN(tst_qv4debugger) -- 2.31.1