diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-09-18 16:34:11 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-09-23 14:54:47 +0200 |
commit | 2d02307e73b63c8d2ce935a9d7dd7b177c017f87 (patch) | |
tree | 8751f6c3354d24bd4f13182e5178a98b8fca0263 | |
parent | 39b5be920cf65979df669d02a3410a7396be6ada (diff) |
Condense the different value type creation functions into one
They all did the same thing.
Change-Id: I7661b19ad16c0713d46c4df337899e3897349b2e
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
-rw-r--r-- | src/qml/qml/qqmlglobal.cpp | 31 | ||||
-rw-r--r-- | src/qml/qml/qqmlglobal_p.h | 6 | ||||
-rw-r--r-- | src/qml/qml/qqmlobjectcreator.cpp | 4 | ||||
-rw-r--r-- | src/qml/qml/qqmlpropertyvalidator.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlstringconverters.cpp | 9 | ||||
-rw-r--r-- | src/qml/qml/v8/qqmlbuiltinfunctions.cpp | 25 |
6 files changed, 26 insertions, 51 deletions
diff --git a/src/qml/qml/qqmlglobal.cpp b/src/qml/qml/qqmlglobal.cpp index 22a87c2eec..4d3c81037e 100644 --- a/src/qml/qml/qqmlglobal.cpp +++ b/src/qml/qml/qqmlglobal.cpp @@ -67,20 +67,7 @@ bool QQmlValueTypeProvider::initValueType(int type, QVariant& dst) return true; } -QVariant QQmlValueTypeProvider::createValueType(int type, const QJSValue ¶ms) -{ - QVariant v; - - QQmlValueTypeProvider *p = this; - do { - if (p->create(type, params, &v)) - return v; - } while ((p = p->next)); - - return QVariant(); -} - -bool QQmlValueTypeProvider::createValueFromString(int type, const QJSValue &s, QVariant *data) +bool QQmlValueTypeProvider::createValueType(int type, const QJSValue &s, QVariant *data) { Q_ASSERT(data); @@ -93,22 +80,6 @@ bool QQmlValueTypeProvider::createValueFromString(int type, const QJSValue &s, Q return false; } -QVariant QQmlValueTypeProvider::createVariantFromJsObject(int type, const QJSValue &obj, bool *ok) -{ - QVariant v; - - QQmlValueTypeProvider *p = this; - do { - if (p->create(type, obj, &v)) { - if (ok) *ok = true; - return v; - } - } while ((p = p->next)); - - if (ok) *ok = false; - return QVariant(); -} - bool QQmlValueTypeProvider::equalValueType(int type, const void *lhs, const QVariant& rhs) { Q_ASSERT(lhs); diff --git a/src/qml/qml/qqmlglobal_p.h b/src/qml/qml/qqmlglobal_p.h index 5caa8e7d29..98ef809f0a 100644 --- a/src/qml/qml/qqmlglobal_p.h +++ b/src/qml/qml/qqmlglobal_p.h @@ -223,11 +223,7 @@ public: virtual ~QQmlValueTypeProvider(); bool initValueType(int, QVariant&); - - QVariant createValueType(int, const QJSValue ¶ms); - bool createValueFromString(int, const QJSValue &, QVariant *); - QVariant createVariantFromJsObject(int, const QJSValue &, bool *); - + bool createValueType(int, const QJSValue &, QVariant *); bool equalValueType(int, const void *, const QVariant&); bool readValueType(const QVariant&, void *, int); bool writeValueType(int, const void *, QVariant&); diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp index 809d1c4976..dc25aa9f0a 100644 --- a/src/qml/qml/qqmlobjectcreator.cpp +++ b/src/qml/qml/qqmlobjectcreator.cpp @@ -484,7 +484,7 @@ void QQmlObjectCreator::setPropertyValue(const QQmlPropertyData *property, const break; case QMetaType::QColor: { QVariant data; - if (QQml_valueTypeProvider()->createValueFromString( + if (QQml_valueTypeProvider()->createValueType( QMetaType::QColor, compilationUnit->bindingValueAsString(binding), &data)) { property->writeProperty(_qobject, data.data(), propertyWriteFlags); } @@ -567,7 +567,7 @@ void QQmlObjectCreator::setPropertyValue(const QQmlPropertyData *property, const case QMetaType::QVector4D: case QMetaType::QQuaternion: { QVariant result; - bool ok = QQml_valueTypeProvider()->createValueFromString( + bool ok = QQml_valueTypeProvider()->createValueType( propertyType, compilationUnit->bindingValueAsString(binding), &result); assertOrNull(ok); Q_UNUSED(ok); diff --git a/src/qml/qml/qqmlpropertyvalidator.cpp b/src/qml/qml/qqmlpropertyvalidator.cpp index 4e02e6b5e2..5bb3abd396 100644 --- a/src/qml/qml/qqmlpropertyvalidator.cpp +++ b/src/qml/qml/qqmlpropertyvalidator.cpp @@ -565,7 +565,7 @@ QQmlError QQmlPropertyValidator::validateLiteralBinding(QQmlPropertyCache *prope } }; QVariant result; - if (!QQml_valueTypeProvider()->createValueFromString( + if (!QQml_valueTypeProvider()->createValueType( property->propType(), compilationUnit->bindingValueAsString(binding), &result)) { return warnOrError(tr("Invalid property assignment: %1 expected") diff --git a/src/qml/qml/qqmlstringconverters.cpp b/src/qml/qml/qqmlstringconverters.cpp index 74dd5f431c..c7c111a052 100644 --- a/src/qml/qml/qqmlstringconverters.cpp +++ b/src/qml/qml/qqmlstringconverters.cpp @@ -75,8 +75,13 @@ QVariant QQmlStringConverters::variantFromString(const QString &s, int preferred return QVariant::fromValue(rectFFromString(s, ok)); case QMetaType::QRect: return QVariant::fromValue(rectFFromString(s, ok).toRect()); - default: - return QQml_valueTypeProvider()->createVariantFromJsObject(preferredType, QJSValue(s), ok); + default: { + QVariant ret; + bool success = QQml_valueTypeProvider()->createValueType(preferredType, QJSValue(s), &ret); + if (ok) + *ok = success; + return ret; + } } } diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp index ff05c0c2ff..12e54f0895 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp +++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp @@ -460,12 +460,12 @@ ReturnedValue QtObject::method_font(const FunctionObject *b, const Value *, cons if (argc != 1 || !argv[0].isObject()) THROW_GENERIC_ERROR("Qt.font(): Invalid arguments"); - bool ok = false; - QVariant v = QQml_valueTypeProvider()->createVariantFromJsObject( + QVariant v; + if (!QQml_valueTypeProvider()->createValueType( QMetaType::QFont, QJSValuePrivate::fromReturnedValue(argv[0].asReturnedValue()), - &ok); - if (!ok) + &v)) { THROW_GENERIC_ERROR("Qt.font(): Invalid argument: no valid font subproperties specified"); + } return scope.engine->fromVariant(v); } @@ -482,7 +482,9 @@ static ReturnedValue createValueType(const FunctionObject *b, const Value *argv, for (int i = 0; i < parameters; ++i) params.setProperty(i, QJSValuePrivate::fromReturnedValue(argv[i].asReturnedValue())); - return scope.engine->fromVariant(QQml_valueTypeProvider()->createValueType(type, params)); + QVariant variant; + QQml_valueTypeProvider()->createValueType(type, params, &variant); + return scope.engine->fromVariant(variant); } /*! @@ -551,17 +553,18 @@ ReturnedValue QtObject::method_matrix4x4(const FunctionObject *b, const Value *, QV4::Scope scope(b); if (argc == 0) { - return scope.engine->fromVariant(QQml_valueTypeProvider()->createValueType( - QMetaType::QMatrix4x4, QJSValue())); + QVariant variant; + QQml_valueTypeProvider()->createValueType(QMetaType::QMatrix4x4, QJSValue(), &variant); + return scope.engine->fromVariant(variant); } if (argc == 1 && argv[0].isObject()) { - bool ok = false; - QVariant v = QQml_valueTypeProvider()->createVariantFromJsObject( + QVariant v; + if (!QQml_valueTypeProvider()->createValueType( QMetaType::QMatrix4x4, - QJSValuePrivate::fromReturnedValue(argv[0].asReturnedValue()), &ok); - if (!ok) + QJSValuePrivate::fromReturnedValue(argv[0].asReturnedValue()), &v)) { THROW_GENERIC_ERROR("Qt.matrix4x4(): Invalid argument: not a valid matrix4x4 values array"); + } return scope.engine->fromVariant(v); } |