aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/qml/jsapi/qjsmanagedvalue.cpp13
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()));