diff options
Diffstat (limited to 'src/qml/jsruntime/qv4engine.cpp')
| -rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index c471b3332e..0b6464f094 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -1660,7 +1660,8 @@ static QVariant toVariant(const QV4::Value &value, QMetaType metaType, JSToQVari #endif if (metaType.isValid() && !(metaType.flags() & QMetaType::PointerToQObject)) { - const QVariant result = QQmlValueTypeProvider::createValueType(value, metaType); + const QVariant result + = QQmlValueTypeProvider::createValueType(value, metaType, scope.engine); if (result.isValid()) return result; } @@ -2706,14 +2707,18 @@ bool ExecutionEngine::metaTypeFromJS(const Value &value, QMetaType metaType, voi d->readReference(); if (void *gadgetPtr = d->gadgetPtr()) { - if (QQmlValueTypeProvider::populateValueType(metaType, data, valueType, gadgetPtr)) + if (QQmlValueTypeProvider::populateValueType( + metaType, data, valueType, gadgetPtr, vtw->engine())) { return true; + } if (QMetaType::canConvert(valueType, metaType)) return QMetaType::convert(valueType, gadgetPtr, metaType, data); } else { QVariant empty(valueType); - if (QQmlValueTypeProvider::populateValueType(metaType, data, valueType, empty.data())) + if (QQmlValueTypeProvider::populateValueType( + metaType, data, valueType, empty.data(), vtw->engine())) { return true; + } if (QMetaType::canConvert(valueType, metaType)) return QMetaType::convert(valueType, empty.data(), metaType, data); } @@ -2779,7 +2784,7 @@ bool ExecutionEngine::metaTypeFromJS(const Value &value, QMetaType metaType, voi } } } else if (QQmlValueTypeProvider::populateValueType( - metaType, data, var.metaType(), var.data())) { + metaType, data, var.metaType(), var.data(), variantObject->engine())) { return true; } } else if (value.isNull() && isPointer) { @@ -2792,8 +2797,11 @@ bool ExecutionEngine::metaTypeFromJS(const Value &value, QMetaType metaType, voi *reinterpret_cast<QJSPrimitiveValue *>(data) = createPrimitive(&value); return true; } else if (!isPointer) { - if (QQmlValueTypeProvider::populateValueType(metaType, data, value)) + const QV4::Managed *managed = value.as<QV4::Managed>(); + if (QQmlValueTypeProvider::populateValueType( + metaType, data, value, managed ? managed->engine() : nullptr)) { return true; + } } if (const QV4::Sequence *sequence = value.as<Sequence>()) { |
