diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 6 | ||||
| -rw-r--r-- | src/qmlcompiler/qqmljscodegenerator.cpp | 18 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index 20be25be2f..56cc4efb48 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -1502,6 +1502,12 @@ static QVariant toVariant( if (metaType == QMetaType::fromType<bool>()) return QVariant(value.toBoolean()); + if (metaType == QMetaType::fromType<double>()) + return QVariant(value.toNumber()); + + if (metaType == QMetaType::fromType<float>()) + return QVariant(float(value.toNumber())); + if (metaType == QMetaType::fromType<QJsonValue>()) return QVariant::fromValue(QV4::JsonObject::toJsonValue(value)); diff --git a/src/qmlcompiler/qqmljscodegenerator.cpp b/src/qmlcompiler/qqmljscodegenerator.cpp index c6096574bc..46d05b9f03 100644 --- a/src/qmlcompiler/qqmljscodegenerator.cpp +++ b/src/qmlcompiler/qqmljscodegenerator.cpp @@ -2916,26 +2916,26 @@ QString QQmlJSCodeGenerator::conversion(const QQmlJSScope::ConstPtr &from, const auto jsPrimitiveType = m_typeResolver->jsPrimitiveType(); const auto boolType = m_typeResolver->boolType(); - auto zeroBoolOrNumeric = [&](const QQmlJSScope::ConstPtr &to) { + auto zeroBoolOrInt = [&](const QQmlJSScope::ConstPtr &to) { if (m_typeResolver->equals(to, boolType)) return u"false"_s; if (m_typeResolver->equals(to, m_typeResolver->intType())) return u"0"_s; if (m_typeResolver->equals(to, m_typeResolver->uintType())) return u"0u"_s; - if (m_typeResolver->equals(to, m_typeResolver->floatType())) - return u"0.0f"_s; - if (m_typeResolver->equals(to, m_typeResolver->realType())) - return u"0.0"_s; return QString(); }; if (m_typeResolver->equals(from, m_typeResolver->voidType())) { if (to->accessSemantics() == QQmlJSScope::AccessSemantics::Reference) return u"static_cast<"_s + to->internalName() + u" *>(nullptr)"_s; - const QString zero = zeroBoolOrNumeric(to); + const QString zero = zeroBoolOrInt(to); if (!zero.isEmpty()) return zero; + if (m_typeResolver->equals(to, m_typeResolver->floatType())) + return u"std::numeric_limits<float>::quiet_NaN()"_s; + if (m_typeResolver->equals(to, m_typeResolver->realType())) + return u"std::numeric_limits<double>::quiet_NaN()"_s; if (m_typeResolver->equals(to, m_typeResolver->stringType())) return QQmlJSUtils::toLiteral(u"undefined"_s); if (m_typeResolver->equals(from, to)) @@ -2953,9 +2953,13 @@ QString QQmlJSCodeGenerator::conversion(const QQmlJSScope::ConstPtr &from, return u"QJSPrimitiveValue(QJSPrimitiveNull())"_s; if (m_typeResolver->equals(to, varType)) return u"QVariant::fromValue<std::nullptr_t>(nullptr)"_s; - const QString zero = zeroBoolOrNumeric(to); + const QString zero = zeroBoolOrInt(to); if (!zero.isEmpty()) return zero; + if (m_typeResolver->equals(to, m_typeResolver->floatType())) + return u"0.0f"_s; + if (m_typeResolver->equals(to, m_typeResolver->realType())) + return u"0.0"_s; if (m_typeResolver->equals(to, m_typeResolver->stringType())) return QQmlJSUtils::toLiteral(u"null"_s); if (m_typeResolver->equals(from, to)) |
