[ChangeLog][QtQml] Fix JavaScript Array.pop() not updating the internal array length correctly

While the length property was reporting the correct value, the internal array
length was out-of-sync.

Task-number: QTBUG-35979

Change-Id: I68820a349cf1ce88c6aabc6a2301a8a861018a10
Reviewed-by: Liang Qi <liang.qi@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
This commit is contained in:
Simon Hausmann 2014-01-07 09:59:10 +01:00 committed by The Qt Project
parent f03de5497d
commit 7e115c5c5e
2 changed files with 14 additions and 1 deletions

View File

@ -276,7 +276,7 @@ ReturnedValue ArrayPrototype::method_pop(CallContext *ctx)
if (scope.hasException())
return Encode::undefined();
if (instance->isArrayObject())
instance->setArrayLengthUnchecked(len - 1);
instance->setArrayLength(len - 1);
else
instance->put(ctx->engine->id_length, ScopedValue(scope, Primitive::fromDouble(len - 1)));
return result.asReturnedValue();

View File

@ -146,6 +146,8 @@ private slots:
void threadedEngine();
void functionDeclarationsInConditionals();
void arrayPop_QTBUG_35979();
};
tst_QJSEngine::tst_QJSEngine()
@ -2692,6 +2694,17 @@ void tst_QJSEngine::functionDeclarationsInConditionals()
QCOMPARE(result.toBool(), true);
}
void tst_QJSEngine::arrayPop_QTBUG_35979()
{
QJSEngine eng;
QJSValue result = eng.evaluate(""
"var x = [1, 2]\n"
"x.pop()\n"
"x[1] = 3\n"
"x.toString()\n");
QCOMPARE(result.toString(), QString("1,3"));
}
QTEST_MAIN(tst_QJSEngine)
#include "tst_qjsengine.moc"