aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsapi/qjsengine.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-03-22 14:11:17 +0100
committerUlf Hermann <ulf.hermann@qt.io>2021-03-24 10:17:35 +0100
commit2943eb3b110e8e93651b42f5d70a574517aaf437 (patch)
treec051bf69fb7460733f7613376836d20ba7dd7aad /src/qml/jsapi/qjsengine.cpp
parent33cf3aab88acfa7c47e3eb7bf2f84a041adbd7d3 (diff)
Use QMetaType for ExecutionEngine::metaTypeFromJS()
We should avoid looking up metatypes by ID. That's expensive. Change-Id: I00ce0a7f95ec82b0db6e7eb976e39e50522a7fe4 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Diffstat (limited to 'src/qml/jsapi/qjsengine.cpp')
-rw-r--r--src/qml/jsapi/qjsengine.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/qml/jsapi/qjsengine.cpp b/src/qml/jsapi/qjsengine.cpp
index dbb35cdde8..3778cba5f8 100644
--- a/src/qml/jsapi/qjsengine.cpp
+++ b/src/qml/jsapi/qjsengine.cpp
@@ -748,32 +748,42 @@ QJSValue QJSEngine::create(QMetaType type, const void *ptr)
bool QJSEngine::convertManaged(const QJSManagedValue &value, int type, void *ptr)
{
+ return convertManaged(value, QMetaType(type), ptr);
+}
+
+bool QJSEngine::convertManaged(const QJSManagedValue &value, QMetaType type, void *ptr)
+{
return QV4::ExecutionEngine::metaTypeFromJS(*value.d, type, ptr);
}
+bool QJSEngine::convertV2(const QJSValue &value, int type, void *ptr)
+{
+ return convertV2(value, QMetaType(type), ptr);
+}
+
/*!
\internal
convert \a value to \a type, store the result in \a ptr
*/
-bool QJSEngine::convertV2(const QJSValue &value, int type, void *ptr)
+bool QJSEngine::convertV2(const QJSValue &value, QMetaType metaType, void *ptr)
{
if (const QString *string = QJSValuePrivate::asQString(&value)) {
// have a string based value without engine. Do conversion manually
- if (type == QMetaType::Bool) {
+ if (metaType == QMetaType::fromType<bool>()) {
*reinterpret_cast<bool*>(ptr) = string->length() != 0;
return true;
}
- if (type == QMetaType::QString) {
+ if (metaType == QMetaType::fromType<QString>()) {
*reinterpret_cast<QString*>(ptr) = *string;
return true;
}
- if (type == QMetaType::QUrl) {
+ if (metaType == QMetaType::fromType<QUrl>()) {
*reinterpret_cast<QUrl *>(ptr) = QUrl(*string);
return true;
}
double d = QV4::RuntimeHelpers::stringToNumber(*string);
- switch (type) {
+ switch (metaType.id()) {
case QMetaType::Int:
*reinterpret_cast<int*>(ptr) = QV4::Value::toInt32(d);
return true;
@@ -815,7 +825,7 @@ bool QJSEngine::convertV2(const QJSValue &value, int type, void *ptr)
}
}
- return QV4::ExecutionEngine::metaTypeFromJS(QJSValuePrivate::asReturnedValue(&value), type, ptr);
+ return QV4::ExecutionEngine::metaTypeFromJS(QJSValuePrivate::asReturnedValue(&value), metaType, ptr);
}
/*! \fn template <typename T> QJSValue QJSEngine::toScriptValue(const T &value)