diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2021-03-22 14:11:17 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2021-03-24 10:17:35 +0100 |
commit | 2943eb3b110e8e93651b42f5d70a574517aaf437 (patch) | |
tree | c051bf69fb7460733f7613376836d20ba7dd7aad /src/qml/jsapi/qjsengine.cpp | |
parent | 33cf3aab88acfa7c47e3eb7bf2f84a041adbd7d3 (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.cpp | 22 |
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) |