diff options
| author | Ulf Hermann <ulf.hermann@qt.io> | 2022-12-06 19:38:39 +0100 |
|---|---|---|
| committer | Ulf Hermann <ulf.hermann@qt.io> | 2022-12-15 17:48:10 +0100 |
| commit | 054f430232bcc34511941ed596404c0207a70868 (patch) | |
| tree | 229511cf4f9dd2c4dbeeee24c6ee8ba10f2f3658 /src/qml/jsapi/qjsengine.cpp | |
| parent | 6aed5f4fb55508f7e5e6fc6fabdb430f45b4deea (diff) | |
QJSEngine: Add QJSPrimitiveValue conversions
We need those in order to get correct results when using the more
generic conversions with QJSPrimitiveValue as source or target. Without
those extra methods, we frequently get garbage where it would be
possible to construct a QJSPrimitiveValue.
Pick-to: 6.5
Task-number: QTBUG-109111
Change-Id: I6ceb2a4ed73dae228dd2e5690cd608c58537b95f
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/jsapi/qjsengine.cpp')
| -rw-r--r-- | src/qml/jsapi/qjsengine.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/qml/jsapi/qjsengine.cpp b/src/qml/jsapi/qjsengine.cpp index 8b0b650c1f..d9a2abd3a9 100644 --- a/src/qml/jsapi/qjsengine.cpp +++ b/src/qml/jsapi/qjsengine.cpp @@ -792,6 +792,13 @@ QJSValue QJSEngine::globalObject() const return QJSValuePrivate::fromReturnedValue(v->asReturnedValue()); } +QJSPrimitiveValue QJSEngine::createPrimitive(QMetaType type, const void *ptr) +{ + QV4::Scope scope(m_v4Engine); + QV4::ScopedValue v(scope, m_v4Engine->metaTypeToJS(type, ptr)); + return QV4::ExecutionEngine::createPrimitive(v); +} + QJSManagedValue QJSEngine::createManaged(QMetaType type, const void *ptr) { QJSManagedValue result(m_v4Engine); @@ -818,6 +825,26 @@ QJSValue QJSEngine::create(int typeId, const void *ptr) } #endif +bool QJSEngine::convertPrimitive(const QJSPrimitiveValue &value, QMetaType type, void *ptr) +{ + switch (value.type()) { + case QJSPrimitiveValue::Undefined: + return QV4::ExecutionEngine::metaTypeFromJS(QV4::Value::undefinedValue(), type, ptr); + case QJSPrimitiveValue::Null: + return QV4::ExecutionEngine::metaTypeFromJS(QV4::Value::nullValue(), type, ptr); + case QJSPrimitiveValue::Boolean: + return QV4::ExecutionEngine::metaTypeFromJS(QV4::Value::fromBoolean(value.toBoolean()), type, ptr); + case QJSPrimitiveValue::Integer: + return QV4::ExecutionEngine::metaTypeFromJS(QV4::Value::fromInt32(value.toInteger()), type, ptr); + case QJSPrimitiveValue::Double: + return QV4::ExecutionEngine::metaTypeFromJS(QV4::Value::fromDouble(value.toDouble()), type, ptr); + case QJSPrimitiveValue::String: + return convertString(value.toString(), type, ptr); + } + + Q_UNREACHABLE_RETURN(false); +} + bool QJSEngine::convertManaged(const QJSManagedValue &value, int type, void *ptr) { return convertManaged(value, QMetaType(type), ptr); |
