aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4jscall_p.h
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-05-17 15:15:41 +0200
committerUlf Hermann <ulf.hermann@qt.io>2021-06-02 21:04:35 +0200
commit278e8df17b073f96d8ff89d7a470fe63802ed15e (patch)
tree913403a98be4e09d101d48af6861ada2a3d1abc5 /src/qml/jsruntime/qv4jscall_p.h
parentc6c31740a7377715ce53fea5f323c4e48525e425 (diff)
Do QMetaType-style call in QQmlPropertyBinding::evaluate
We already have a void* and metatype available. There is no need to convert, unless we have bound arguments. The call() itself will convert as necessary anyway. However, we do need to figure out whether the returned value was undefined. Pass this information up from the actual call. This reverts commit 8ac705247430ff6fbbc25a9db20c0e7dc572abe7. The original commit 3a4e013f0058952c94ed3414aafbf96216efff8d was correct. We were just missing the value type conversions in metaTypeFromJS(). Change-Id: Ic4b2ebf1eb3fb2e5a50a045be774dd02d0fed7c6 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4jscall_p.h')
-rw-r--r--src/qml/jsruntime/qv4jscall_p.h12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/qml/jsruntime/qv4jscall_p.h b/src/qml/jsruntime/qv4jscall_p.h
index 3f0c8ee06d..c6d320ac20 100644
--- a/src/qml/jsruntime/qv4jscall_p.h
+++ b/src/qml/jsruntime/qv4jscall_p.h
@@ -206,7 +206,7 @@ ReturnedValue convertAndCall(
}
template<typename Callable>
-void convertAndCall(ExecutionEngine *engine, const Value *thisObject,
+bool convertAndCall(ExecutionEngine *engine, const Value *thisObject,
void **a, const QMetaType *types, int argc, Callable call)
{
Scope scope(engine);
@@ -215,13 +215,10 @@ void convertAndCall(ExecutionEngine *engine, const Value *thisObject,
for (int ii = 0; ii < argc; ++ii)
jsCallData.args[ii] = engine->metaTypeToJS(types[ii + 1], a[ii + 1]);
- void *result = a[0];
- if (!result) {
- call(thisObject, jsCallData.args, argc);
- return;
- }
-
ScopedValue jsResult(scope, call(thisObject, jsCallData.args, argc));
+ void *result = a[0];
+ if (!result)
+ return !jsResult->isUndefined();
const QMetaType resultType = types[0];
if (scope.hasException()) {
@@ -237,6 +234,7 @@ void convertAndCall(ExecutionEngine *engine, const Value *thisObject,
scope.engine->metaTypeFromJS(jsResult, resultType, result);
}
}
+ return !jsResult->isUndefined();
}
}