diff options
Diffstat (limited to 'src')
-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())); |