diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-06-23 23:47:25 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-07-02 19:29:52 +0000 |
commit | 32c33ee9abec1ef2f05233c3a613689431f6654b (patch) | |
tree | c5ddd9cae6019ffb052e104b2a24c528460fc01a /src/qml/jsruntime/qv4engine.cpp | |
parent | f1703895e2fc9ec5da3a38a3ffef927a8f4ed86c (diff) |
Get rid of Value::asArrayIndex()
It was only used in a few places now, that can be replaced by
either using a PropertyKey, or by limiting the fast path
optimization in the runtime to array indices smaller than
INT_MAX. Since there are less branches this should even be
faster for pretty much all use cases.
Change-Id: Ib4f2f2f3e27f14ad180b810546e82ac83170b106
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4engine.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index b42633b446..e3a99e9ddb 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -1398,9 +1398,6 @@ static QV4::ReturnedValue objectFromVariantMap(QV4::ExecutionEngine *e, const QV QV4::ScopedValue v(scope); for (QVariantMap::const_iterator iter = map.begin(), cend = map.end(); iter != cend; ++iter) { s = e->newString(iter.key()); - uint idx = s->asArrayIndex(); - if (idx > 16 && (!o->arrayData() || idx > o->arrayData()->length() * 2)) - o->initSparseArray(); o->put(s, (v = e->fromVariant(iter.value()))); } return o.asReturnedValue(); @@ -1572,11 +1569,13 @@ static QV4::ReturnedValue variantMapToJS(QV4::ExecutionEngine *v4, const QVarian QV4::Scope scope(v4); QV4::ScopedObject o(scope, v4->newObject()); QV4::ScopedString s(scope); + QV4::ScopedPropertyKey key(scope); QV4::ScopedValue v(scope); for (QVariantMap::const_iterator it = vmap.constBegin(), cend = vmap.constEnd(); it != cend; ++it) { s = v4->newIdentifier(it.key()); + key = s->propertyKey(); v = variantToJS(v4, it.value()); - uint idx = s->asArrayIndex(); + uint idx = key->asArrayIndex(); if (idx < UINT_MAX) o->arraySet(idx, v); else |