diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-06-06 08:42:40 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-06-21 13:30:48 +0000 |
commit | 45d39a1685e72975dd9bd4d3e4a67aab59eeae48 (patch) | |
tree | 61e55f0f733e11c144c2c82ce1725cce28aeab88 /src/qml/compiler/qv4codegen.cpp | |
parent | ce18e987d4ea623c0db6d10f2a97a16b639a234e (diff) | |
download | qtdeclarative-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.cpp | 11 |
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; } } } |