summaryrefslogtreecommitdiff
path: root/src/qml/compiler/qv4isel_p.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/compiler/qv4isel_p.cpp')
-rw-r--r--src/qml/compiler/qv4isel_p.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/qml/compiler/qv4isel_p.cpp b/src/qml/compiler/qv4isel_p.cpp
index 2a73b55ed2..f0092b70fc 100644
--- a/src/qml/compiler/qv4isel_p.cpp
+++ b/src/qml/compiler/qv4isel_p.cpp
@@ -367,8 +367,21 @@ void IRDecoder::callBuiltin(IR::Call *call, IR::Temp *result)
}
IR::ExprList *arrayEntries = args;
+ bool needSparseArray = false;
+ for (IR::ExprList *it = arrayEntries; it; it = it->next) {
+ uint index = it->expr->asConst()->value;
+ if (index > 16) {
+ needSparseArray = true;
+ break;
+ }
+ it = it->next;
+ bool isData = it->expr->asConst()->value;
+ it = it->next;
+ if (!isData)
+ it = it->next;
+ }
- callBuiltinDefineObjectLiteral(result, keyValuePairsCount, keyValuePairs, arrayEntries);
+ callBuiltinDefineObjectLiteral(result, keyValuePairsCount, keyValuePairs, arrayEntries, needSparseArray);
} return;
case IR::Name::builtin_setup_argument_object: