diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2021-01-06 18:06:13 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2021-01-12 11:44:07 +0100 |
commit | 830eba61b73852a354954086a67e24cc22393558 (patch) | |
tree | f82c195afd398805c538e3822052219c681760ed /src/qml/jsapi | |
parent | 7660c30e08975011c7bd47bcb1796139b9d77196 (diff) |
QJSManagedValue: Allow array access to strings
If you access a string as an array you get a one-character string of the
index you are asking for.
Change-Id: Ie2ac3243c9e23f37b8904c54d824946646a596eb
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Diffstat (limited to 'src/qml/jsapi')
-rw-r--r-- | src/qml/jsapi/qjsmanagedvalue.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/qml/jsapi/qjsmanagedvalue.cpp b/src/qml/jsapi/qjsmanagedvalue.cpp index 35efd5c0f3..cd93366524 100644 --- a/src/qml/jsapi/qjsmanagedvalue.cpp +++ b/src/qml/jsapi/qjsmanagedvalue.cpp @@ -830,6 +830,9 @@ bool QJSManagedValue::hasProperty(quint32 arrayIndex) const if (!d || d->isNullOrUndefined()) return false; + if (QV4::String *string = d->as<QV4::String>()) + return arrayIndex < quint32(string->d()->length()); + if (QV4::Object *obj = d->as<QV4::Object>()) { bool hasProperty = false; if (arrayIndex == std::numeric_limits<quint32>::max()) @@ -852,6 +855,9 @@ bool QJSManagedValue::hasOwnProperty(quint32 arrayIndex) const if (!d || d->isNullOrUndefined()) return false; + if (QV4::String *string = d->as<QV4::String>()) + return arrayIndex < quint32(string->d()->length()); + if (QV4::Object *obj = d->as<QV4::Object>()) { if (arrayIndex == std::numeric_limits<quint32>::max()) { return obj->getOwnProperty(obj->engine()->id_uintMax()->toPropertyKey()) @@ -875,6 +881,13 @@ QJSValue QJSManagedValue::property(quint32 arrayIndex) const if (!d || d->isNullOrUndefined()) return QJSValue(); + if (QV4::String *string = d->as<QV4::String>()) { + const QString qString = string->toQString(); + if (arrayIndex < qString.size()) + return qString.sliced(arrayIndex, 1); + return QJSValue(); + } + if (QV4::Object *obj = d->as<QV4::Object>()) { if (arrayIndex == std::numeric_limits<quint32>::max()) return QJSValuePrivate::fromReturnedValue(obj->get(obj->engine()->id_uintMax())); |