diff options
Diffstat (limited to 'src/qml/compiler/qv4isel_p.cpp')
-rw-r--r-- | src/qml/compiler/qv4isel_p.cpp | 15 |
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: |