summaryrefslogtreecommitdiff
path: root/src/qml/compiler/qv4codegen.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-06-06 08:42:40 +0200
committerLars Knoll <lars.knoll@qt.io>2018-06-21 13:30:48 +0000
commit45d39a1685e72975dd9bd4d3e4a67aab59eeae48 (patch)
tree61e55f0f733e11c144c2c82ce1725cce28aeab88 /src/qml/compiler/qv4codegen.cpp
parentce18e987d4ea623c0db6d10f2a97a16b639a234e (diff)
downloadqtdeclarative-45d39a1685e72975dd9bd4d3e4a67aab59eeae48.tar.gz
Fix array destructuring nested in a rest element
Change-Id: I3a8c15fe221bff04a3b9b21ed8c0b06c04770a3d Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/compiler/qv4codegen.cpp')
-rw-r--r--src/qml/compiler/qv4codegen.cpp11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp
index d71d36845b..b3b522e661 100644
--- a/src/qml/compiler/qv4codegen.cpp
+++ b/src/qml/compiler/qv4codegen.cpp
@@ -484,6 +484,7 @@ Codegen::Reference Codegen::targetForPatternElement(AST::PatternElement *p)
void Codegen::initializeAndDestructureBindingElement(AST::PatternElement *e, const Reference &base)
{
+ Q_ASSERT(e->type == AST::PatternElement::Binding || e->type == AST::PatternElement::RestElement);
RegisterScope scope(this);
Reference baseRef = (base.isAccumulator()) ? base.storeOnStack() : base;
Reference varToStore = targetForPatternElement(e);
@@ -619,12 +620,10 @@ void Codegen::destructureElementList(const Codegen::Reference &array, PatternEle
bool last = !p->next || (!p->next->elision && !p->next->element);
if (last)
iteratorDone.storeConsumeAccumulator();
- if (e->type != PatternElement::RestElement) {
- initializeAndDestructureBindingElement(e, iteratorValue);
- if (hasError) {
- end.link();
- return;
- }
+ initializeAndDestructureBindingElement(e, iteratorValue);
+ if (hasError) {
+ end.link();
+ return;
}
}
}