aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-09-18 16:34:11 +0200
committerUlf Hermann <ulf.hermann@qt.io>2020-09-23 14:54:47 +0200
commit2d02307e73b63c8d2ce935a9d7dd7b177c017f87 (patch)
tree8751f6c3354d24bd4f13182e5178a98b8fca0263
parent39b5be920cf65979df669d02a3410a7396be6ada (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.cpp31
-rw-r--r--src/qml/qml/qqmlglobal_p.h6
-rw-r--r--src/qml/qml/qqmlobjectcreator.cpp4
-rw-r--r--src/qml/qml/qqmlpropertyvalidator.cpp2
-rw-r--r--src/qml/qml/qqmlstringconverters.cpp9
-rw-r--r--src/qml/qml/v8/qqmlbuiltinfunctions.cpp25
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 &params)
-{
- 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 &params);
- 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);
}