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/jsruntime/qv4engine.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/jsruntime/qv4engine.cpp')
| -rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index b18c055786..556409b2fc 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -2231,10 +2231,10 @@ void ExecutionEngine::setExtensionData(int index, Deletable *data) // Converts a JS value to a meta-type. // data must point to a place that can store a value of the given type. // Returns true if conversion succeeded, false otherwise. -bool ExecutionEngine::metaTypeFromJS(const Value &value, int type, void *data) +bool ExecutionEngine::metaTypeFromJS(const Value &value, QMetaType metaType, void *data) { // check if it's one of the types we know - switch (QMetaType::Type(type)) { + switch (metaType.id()) { case QMetaType::Bool: *reinterpret_cast<bool*>(data) = value.toBoolean(); return true; @@ -2382,7 +2382,6 @@ bool ExecutionEngine::metaTypeFromJS(const Value &value, int type, void *data) ; } - const QMetaType metaType(type); { if (metaType.flags() & QMetaType::IsEnumeration) { *reinterpret_cast<int *>(data) = value.toInt32(); @@ -2399,9 +2398,8 @@ bool ExecutionEngine::metaTypeFromJS(const Value &value, int type, void *data) { const QQmlValueTypeWrapper *vtw = value.as<QQmlValueTypeWrapper>(); - if (vtw && vtw->typeId() == type) { + if (vtw && vtw->type() == metaType) return vtw->toGadget(data); - } } #if 0 @@ -2445,8 +2443,7 @@ bool ExecutionEngine::metaTypeFromJS(const Value &value, int type, void *data) bool canCast = false; if (QV4::VariantObject *vo = proto->as<QV4::VariantObject>()) { const QVariant &v = vo->d()->data(); - canCast = (type == v.userType()) - || (valueType.isValid() && (valueType == v.metaType())); + canCast = (metaType == v.metaType()); } else if (proto->as<QV4::QObjectWrapper>()) { QV4::ScopedObject p(scope, proto.getPointer()); @@ -2471,7 +2468,7 @@ bool ExecutionEngine::metaTypeFromJS(const Value &value, int type, void *data) } else if (value.isNull() && isPointer) { *reinterpret_cast<void* *>(data) = nullptr; return true; - } else if (type == qMetaTypeId<QJSValue>()) { + } else if (metaType == QMetaType::fromType<QJSValue>()) { QJSValuePrivate::setValue(reinterpret_cast<QJSValue*>(data), value.asReturnedValue()); return true; } |
