aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-03-25 15:05:08 +0200
committerLars Knoll <lars.knoll@qt.io>2018-04-27 08:11:46 +0000
commit00b47c45097d7183ac7f3655aa4b2e6e74359e3f (patch)
tree1936bb166024948c9325a0c6fe3ebf6a760ccfc6
parent851b8fe905ff2f3fe5c5199fdbcb930201d52b87 (diff)
Add support for destructuring variable declarations
Change-Id: Ia7f894fb61cfa760e253963ab4815d98103cfd9b Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--src/qml/compiler/qv4codegen.cpp41
-rw-r--r--src/qml/compiler/qv4compilerscanfunctions.cpp36
-rw-r--r--src/qml/parser/qqmljs.g1
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations230
4 files changed, 45 insertions, 263 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp
index 0323012686..151e98c673 100644
--- a/src/qml/compiler/qv4codegen.cpp
+++ b/src/qml/compiler/qv4codegen.cpp
@@ -380,14 +380,7 @@ void Codegen::variableDeclaration(PatternElement *ast)
if (!ast->initializer)
return;
- Reference rhs = expression(ast->initializer);
- if (hasError)
- return;
-
- Reference lhs = referenceForName(ast->bindingIdentifier, true);
- //### if lhs is a temp, this won't generate a temp-to-temp move. Same for when rhs is a const
- rhs.loadInAccumulator();
- lhs.storeConsumeAccumulator();
+ initializeAndDestructureBindingElement(ast, Reference());
}
void Codegen::variableDeclarationList(VariableDeclarationList *ast)
@@ -401,19 +394,25 @@ void Codegen::initializeAndDestructureBindingElement(AST::PatternElement *e, con
{
RegisterScope scope(this);
Reference varToStore = e->bindingIdentifier.isNull() ? Reference::fromStackSlot(this, bytecodeGenerator->newRegister()) : referenceForName(e->bindingIdentifier, true);
- if (e->initializer && baseRef == varToStore) {
- baseRef.loadInAccumulator();
- BytecodeGenerator::Jump jump = bytecodeGenerator->jumpNotUndefined();
- expression(e->initializer).loadInAccumulator();
- varToStore.storeConsumeAccumulator();
- jump.link();
- } else if (e->initializer) {
- baseRef.loadInAccumulator();
- BytecodeGenerator::Jump jump = bytecodeGenerator->jumpNotUndefined();
- expression(e->initializer).loadInAccumulator();
- jump.link();
- varToStore.storeConsumeAccumulator();
- } else if (baseRef != varToStore) {
+ if (e->initializer) {
+ if (!baseRef.isValid()) {
+ // assignment
+ expression(e->initializer).loadInAccumulator();
+ varToStore.storeConsumeAccumulator();
+ } else if (baseRef == varToStore) {
+ baseRef.loadInAccumulator();
+ BytecodeGenerator::Jump jump = bytecodeGenerator->jumpNotUndefined();
+ expression(e->initializer).loadInAccumulator();
+ varToStore.storeConsumeAccumulator();
+ jump.link();
+ } else {
+ baseRef.loadInAccumulator();
+ BytecodeGenerator::Jump jump = bytecodeGenerator->jumpNotUndefined();
+ expression(e->initializer).loadInAccumulator();
+ jump.link();
+ varToStore.storeConsumeAccumulator();
+ }
+ } else if (baseRef != varToStore && baseRef.isValid()) {
baseRef.loadInAccumulator();
varToStore.storeConsumeAccumulator();
}
diff --git a/src/qml/compiler/qv4compilerscanfunctions.cpp b/src/qml/compiler/qv4compilerscanfunctions.cpp
index 3f98d7fd67..c6e792fc45 100644
--- a/src/qml/compiler/qv4compilerscanfunctions.cpp
+++ b/src/qml/compiler/qv4compilerscanfunctions.cpp
@@ -196,18 +196,30 @@ bool ScanFunctions::visit(PatternElement *ast)
if (!ast->isVariableDeclaration())
return true;
- if (_context->isStrict && (ast->bindingIdentifier == QLatin1String("eval") || ast->bindingIdentifier == QLatin1String("arguments")))
- _cg->throwSyntaxError(ast->identifierToken, QStringLiteral("Variable name may not be eval or arguments in strict mode"));
- checkName(QStringRef(&ast->bindingIdentifier), ast->identifierToken);
- if (ast->bindingIdentifier == QLatin1String("arguments"))
- _context->usesArgumentsObject = Context::ArgumentsObjectNotUsed;
- if (ast->scope == VariableScope::Const && !ast->initializer) {
- _cg->throwSyntaxError(ast->identifierToken, QStringLiteral("Missing initializer in const declaration"));
- return false;
- }
- if (!_context->addLocalVar(ast->bindingIdentifier, ast->initializer ? Context::VariableDefinition : Context::VariableDeclaration, ast->scope)) {
- _cg->throwSyntaxError(ast->identifierToken, QStringLiteral("Identifier %1 has already been declared").arg(ast->bindingIdentifier));
- return false;
+ QStringList names;
+ ast->boundNames(&names);
+
+ for (const QString &name : qAsConst(names)) {
+ if (_context->isStrict && (name == QLatin1String("eval") || name == QLatin1String("arguments")))
+ _cg->throwSyntaxError(ast->identifierToken, QStringLiteral("Variable name may not be eval or arguments in strict mode"));
+ checkName(QStringRef(&name), ast->identifierToken);
+ if (name == QLatin1String("arguments"))
+ _context->usesArgumentsObject = Context::ArgumentsObjectNotUsed;
+ if (ast->scope == VariableScope::Const && !ast->initializer) {
+ _cg->throwSyntaxError(ast->identifierToken, QStringLiteral("Missing initializer in const declaration"));
+ return false;
+ }
+ const Context::Member *m = nullptr;
+ if (_context->memberInfo(name, &m)) {
+ if (m->isLexicallyScoped() || ast->isLexicallyScoped()) {
+ _cg->throwSyntaxError(ast->identifierToken, QStringLiteral("Identifier %1 has already been declared").arg(name));
+ return false;
+ }
+ }
+ if (!_context->addLocalVar(name, ast->initializer ? Context::VariableDefinition : Context::VariableDeclaration, ast->scope)) {
+ _cg->throwSyntaxError(ast->identifierToken, QStringLiteral("Identifier %1 has already been declared").arg(ast->bindingIdentifier));
+ return false;
+ }
}
return true;
}
diff --git a/src/qml/parser/qqmljs.g b/src/qml/parser/qqmljs.g
index 5200779924..bf733dd6cd 100644
--- a/src/qml/parser/qqmljs.g
+++ b/src/qml/parser/qqmljs.g
@@ -2824,7 +2824,6 @@ VariableDeclaration: BindingPattern Initializer;
VariableDeclaration_In: BindingPattern Initializer_In;
/.
case $rule_number: {
- UNIMPLEMENTED;
auto *node = new (pool) AST::PatternElement(sym(1).Pattern, sym(2).Expression);
node->identifierToken = loc(1);
sym(1).Node = node;
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index 5b1301247e..8823e5a94a 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -7639,32 +7639,17 @@ language/statements/const/dstr-ary-ptrn-elem-ary-elem-iter
language/statements/const/dstr-ary-ptrn-elem-ary-elision-init
language/statements/const/dstr-ary-ptrn-elem-ary-elision-iter
language/statements/const/dstr-ary-ptrn-elem-ary-empty-init
-language/statements/const/dstr-ary-ptrn-elem-ary-empty-iter
language/statements/const/dstr-ary-ptrn-elem-ary-rest-init
language/statements/const/dstr-ary-ptrn-elem-ary-rest-iter
-language/statements/const/dstr-ary-ptrn-elem-ary-val-null
-language/statements/const/dstr-ary-ptrn-elem-id-init-exhausted
language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-arrow
language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-class
language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-cover
language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-fn
language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-gen
-language/statements/const/dstr-ary-ptrn-elem-id-init-hole
language/statements/const/dstr-ary-ptrn-elem-id-init-skipped
-language/statements/const/dstr-ary-ptrn-elem-id-init-throws
-language/statements/const/dstr-ary-ptrn-elem-id-init-undef
-language/statements/const/dstr-ary-ptrn-elem-id-init-unresolvable
-language/statements/const/dstr-ary-ptrn-elem-id-iter-complete
-language/statements/const/dstr-ary-ptrn-elem-id-iter-done
language/statements/const/dstr-ary-ptrn-elem-id-iter-step-err
language/statements/const/dstr-ary-ptrn-elem-id-iter-val
language/statements/const/dstr-ary-ptrn-elem-id-iter-val-err
-language/statements/const/dstr-ary-ptrn-elem-obj-id
-language/statements/const/dstr-ary-ptrn-elem-obj-id-init
-language/statements/const/dstr-ary-ptrn-elem-obj-prop-id
-language/statements/const/dstr-ary-ptrn-elem-obj-prop-id-init
-language/statements/const/dstr-ary-ptrn-elem-obj-val-null
-language/statements/const/dstr-ary-ptrn-elem-obj-val-undef
language/statements/const/dstr-ary-ptrn-elision
language/statements/const/dstr-ary-ptrn-elision-exhausted
language/statements/const/dstr-ary-ptrn-elision-step-err
@@ -7681,36 +7666,13 @@ language/statements/const/dstr-ary-ptrn-rest-id-iter-step-err
language/statements/const/dstr-ary-ptrn-rest-id-iter-val-err
language/statements/const/dstr-ary-ptrn-rest-obj-id
language/statements/const/dstr-ary-ptrn-rest-obj-prop-id
-language/statements/const/dstr-obj-init-null
-language/statements/const/dstr-obj-init-undefined
-language/statements/const/dstr-obj-ptrn-empty
-language/statements/const/dstr-obj-ptrn-id-get-value-err
language/statements/const/dstr-obj-ptrn-id-init-fn-name-arrow
language/statements/const/dstr-obj-ptrn-id-init-fn-name-class
language/statements/const/dstr-obj-ptrn-id-init-fn-name-cover
language/statements/const/dstr-obj-ptrn-id-init-fn-name-fn
language/statements/const/dstr-obj-ptrn-id-init-fn-name-gen
-language/statements/const/dstr-obj-ptrn-id-init-skipped
-language/statements/const/dstr-obj-ptrn-id-init-throws
-language/statements/const/dstr-obj-ptrn-id-init-unresolvable
-language/statements/const/dstr-obj-ptrn-id-trailing-comma
-language/statements/const/dstr-obj-ptrn-list-err
language/statements/const/dstr-obj-ptrn-prop-ary
language/statements/const/dstr-obj-ptrn-prop-ary-init
-language/statements/const/dstr-obj-ptrn-prop-ary-trailing-comma
-language/statements/const/dstr-obj-ptrn-prop-ary-value-null
-language/statements/const/dstr-obj-ptrn-prop-eval-err
-language/statements/const/dstr-obj-ptrn-prop-id
-language/statements/const/dstr-obj-ptrn-prop-id-get-value-err
-language/statements/const/dstr-obj-ptrn-prop-id-init
-language/statements/const/dstr-obj-ptrn-prop-id-init-skipped
-language/statements/const/dstr-obj-ptrn-prop-id-init-throws
-language/statements/const/dstr-obj-ptrn-prop-id-init-unresolvable
-language/statements/const/dstr-obj-ptrn-prop-id-trailing-comma
-language/statements/const/dstr-obj-ptrn-prop-obj
-language/statements/const/dstr-obj-ptrn-prop-obj-init
-language/statements/const/dstr-obj-ptrn-prop-obj-value-null
-language/statements/const/dstr-obj-ptrn-prop-obj-value-undef
language/statements/const/fn-name-arrow
language/statements/const/fn-name-class
language/statements/const/fn-name-cover
@@ -7737,32 +7699,17 @@ language/statements/for/dstr-const-ary-ptrn-elem-ary-elem-iter
language/statements/for/dstr-const-ary-ptrn-elem-ary-elision-init
language/statements/for/dstr-const-ary-ptrn-elem-ary-elision-iter
language/statements/for/dstr-const-ary-ptrn-elem-ary-empty-init
-language/statements/for/dstr-const-ary-ptrn-elem-ary-empty-iter
language/statements/for/dstr-const-ary-ptrn-elem-ary-rest-init
language/statements/for/dstr-const-ary-ptrn-elem-ary-rest-iter
-language/statements/for/dstr-const-ary-ptrn-elem-ary-val-null
-language/statements/for/dstr-const-ary-ptrn-elem-id-init-exhausted
language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-arrow
language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-class
language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-cover
language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-fn
language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-gen
-language/statements/for/dstr-const-ary-ptrn-elem-id-init-hole
language/statements/for/dstr-const-ary-ptrn-elem-id-init-skipped
-language/statements/for/dstr-const-ary-ptrn-elem-id-init-throws
-language/statements/for/dstr-const-ary-ptrn-elem-id-init-undef
-language/statements/for/dstr-const-ary-ptrn-elem-id-init-unresolvable
-language/statements/for/dstr-const-ary-ptrn-elem-id-iter-complete
-language/statements/for/dstr-const-ary-ptrn-elem-id-iter-done
language/statements/for/dstr-const-ary-ptrn-elem-id-iter-step-err
language/statements/for/dstr-const-ary-ptrn-elem-id-iter-val
language/statements/for/dstr-const-ary-ptrn-elem-id-iter-val-err
-language/statements/for/dstr-const-ary-ptrn-elem-obj-id
-language/statements/for/dstr-const-ary-ptrn-elem-obj-id-init
-language/statements/for/dstr-const-ary-ptrn-elem-obj-prop-id
-language/statements/for/dstr-const-ary-ptrn-elem-obj-prop-id-init
-language/statements/for/dstr-const-ary-ptrn-elem-obj-val-null
-language/statements/for/dstr-const-ary-ptrn-elem-obj-val-undef
language/statements/for/dstr-const-ary-ptrn-elision
language/statements/for/dstr-const-ary-ptrn-elision-exhausted
language/statements/for/dstr-const-ary-ptrn-elision-iter-close
@@ -7781,36 +7728,13 @@ language/statements/for/dstr-const-ary-ptrn-rest-id-iter-step-err
language/statements/for/dstr-const-ary-ptrn-rest-id-iter-val-err
language/statements/for/dstr-const-ary-ptrn-rest-obj-id
language/statements/for/dstr-const-ary-ptrn-rest-obj-prop-id
-language/statements/for/dstr-const-obj-init-null
-language/statements/for/dstr-const-obj-init-undefined
-language/statements/for/dstr-const-obj-ptrn-empty
-language/statements/for/dstr-const-obj-ptrn-id-get-value-err
language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-arrow
language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-class
language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-cover
language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-fn
language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-gen
-language/statements/for/dstr-const-obj-ptrn-id-init-skipped
-language/statements/for/dstr-const-obj-ptrn-id-init-throws
-language/statements/for/dstr-const-obj-ptrn-id-init-unresolvable
-language/statements/for/dstr-const-obj-ptrn-id-trailing-comma
-language/statements/for/dstr-const-obj-ptrn-list-err
language/statements/for/dstr-const-obj-ptrn-prop-ary
language/statements/for/dstr-const-obj-ptrn-prop-ary-init
-language/statements/for/dstr-const-obj-ptrn-prop-ary-trailing-comma
-language/statements/for/dstr-const-obj-ptrn-prop-ary-value-null
-language/statements/for/dstr-const-obj-ptrn-prop-eval-err
-language/statements/for/dstr-const-obj-ptrn-prop-id
-language/statements/for/dstr-const-obj-ptrn-prop-id-get-value-err
-language/statements/for/dstr-const-obj-ptrn-prop-id-init
-language/statements/for/dstr-const-obj-ptrn-prop-id-init-skipped
-language/statements/for/dstr-const-obj-ptrn-prop-id-init-throws
-language/statements/for/dstr-const-obj-ptrn-prop-id-init-unresolvable
-language/statements/for/dstr-const-obj-ptrn-prop-id-trailing-comma
-language/statements/for/dstr-const-obj-ptrn-prop-obj
-language/statements/for/dstr-const-obj-ptrn-prop-obj-init
-language/statements/for/dstr-const-obj-ptrn-prop-obj-value-null
-language/statements/for/dstr-const-obj-ptrn-prop-obj-value-undef
language/statements/for/dstr-let-ary-init-iter-close
language/statements/for/dstr-let-ary-init-iter-get-err
language/statements/for/dstr-let-ary-init-iter-no-close
@@ -7820,32 +7744,17 @@ language/statements/for/dstr-let-ary-ptrn-elem-ary-elem-iter
language/statements/for/dstr-let-ary-ptrn-elem-ary-elision-init
language/statements/for/dstr-let-ary-ptrn-elem-ary-elision-iter
language/statements/for/dstr-let-ary-ptrn-elem-ary-empty-init
-language/statements/for/dstr-let-ary-ptrn-elem-ary-empty-iter
language/statements/for/dstr-let-ary-ptrn-elem-ary-rest-init
language/statements/for/dstr-let-ary-ptrn-elem-ary-rest-iter
-language/statements/for/dstr-let-ary-ptrn-elem-ary-val-null
-language/statements/for/dstr-let-ary-ptrn-elem-id-init-exhausted
language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-arrow
language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-class
language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-cover
language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-fn
language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-gen
-language/statements/for/dstr-let-ary-ptrn-elem-id-init-hole
language/statements/for/dstr-let-ary-ptrn-elem-id-init-skipped
-language/statements/for/dstr-let-ary-ptrn-elem-id-init-throws
-language/statements/for/dstr-let-ary-ptrn-elem-id-init-undef
-language/statements/for/dstr-let-ary-ptrn-elem-id-init-unresolvable
-language/statements/for/dstr-let-ary-ptrn-elem-id-iter-complete
-language/statements/for/dstr-let-ary-ptrn-elem-id-iter-done
language/statements/for/dstr-let-ary-ptrn-elem-id-iter-step-err
language/statements/for/dstr-let-ary-ptrn-elem-id-iter-val
language/statements/for/dstr-let-ary-ptrn-elem-id-iter-val-err
-language/statements/for/dstr-let-ary-ptrn-elem-obj-id
-language/statements/for/dstr-let-ary-ptrn-elem-obj-id-init
-language/statements/for/dstr-let-ary-ptrn-elem-obj-prop-id
-language/statements/for/dstr-let-ary-ptrn-elem-obj-prop-id-init
-language/statements/for/dstr-let-ary-ptrn-elem-obj-val-null
-language/statements/for/dstr-let-ary-ptrn-elem-obj-val-undef
language/statements/for/dstr-let-ary-ptrn-elision
language/statements/for/dstr-let-ary-ptrn-elision-exhausted
language/statements/for/dstr-let-ary-ptrn-elision-iter-close
@@ -7864,36 +7773,13 @@ language/statements/for/dstr-let-ary-ptrn-rest-id-iter-step-err
language/statements/for/dstr-let-ary-ptrn-rest-id-iter-val-err
language/statements/for/dstr-let-ary-ptrn-rest-obj-id
language/statements/for/dstr-let-ary-ptrn-rest-obj-prop-id
-language/statements/for/dstr-let-obj-init-null
-language/statements/for/dstr-let-obj-init-undefined
-language/statements/for/dstr-let-obj-ptrn-empty
-language/statements/for/dstr-let-obj-ptrn-id-get-value-err
language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-arrow
language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-class
language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-cover
language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-fn
language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-gen
-language/statements/for/dstr-let-obj-ptrn-id-init-skipped
-language/statements/for/dstr-let-obj-ptrn-id-init-throws
-language/statements/for/dstr-let-obj-ptrn-id-init-unresolvable
-language/statements/for/dstr-let-obj-ptrn-id-trailing-comma
-language/statements/for/dstr-let-obj-ptrn-list-err
language/statements/for/dstr-let-obj-ptrn-prop-ary
language/statements/for/dstr-let-obj-ptrn-prop-ary-init
-language/statements/for/dstr-let-obj-ptrn-prop-ary-trailing-comma
-language/statements/for/dstr-let-obj-ptrn-prop-ary-value-null
-language/statements/for/dstr-let-obj-ptrn-prop-eval-err
-language/statements/for/dstr-let-obj-ptrn-prop-id
-language/statements/for/dstr-let-obj-ptrn-prop-id-get-value-err
-language/statements/for/dstr-let-obj-ptrn-prop-id-init
-language/statements/for/dstr-let-obj-ptrn-prop-id-init-skipped
-language/statements/for/dstr-let-obj-ptrn-prop-id-init-throws
-language/statements/for/dstr-let-obj-ptrn-prop-id-init-unresolvable
-language/statements/for/dstr-let-obj-ptrn-prop-id-trailing-comma
-language/statements/for/dstr-let-obj-ptrn-prop-obj
-language/statements/for/dstr-let-obj-ptrn-prop-obj-init
-language/statements/for/dstr-let-obj-ptrn-prop-obj-value-null
-language/statements/for/dstr-let-obj-ptrn-prop-obj-value-undef
language/statements/for/dstr-var-ary-init-iter-close
language/statements/for/dstr-var-ary-init-iter-get-err
language/statements/for/dstr-var-ary-init-iter-no-close
@@ -7903,32 +7789,17 @@ language/statements/for/dstr-var-ary-ptrn-elem-ary-elem-iter
language/statements/for/dstr-var-ary-ptrn-elem-ary-elision-init
language/statements/for/dstr-var-ary-ptrn-elem-ary-elision-iter
language/statements/for/dstr-var-ary-ptrn-elem-ary-empty-init
-language/statements/for/dstr-var-ary-ptrn-elem-ary-empty-iter
language/statements/for/dstr-var-ary-ptrn-elem-ary-rest-init
language/statements/for/dstr-var-ary-ptrn-elem-ary-rest-iter
-language/statements/for/dstr-var-ary-ptrn-elem-ary-val-null
-language/statements/for/dstr-var-ary-ptrn-elem-id-init-exhausted
language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-arrow
language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-class
language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-cover
language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-fn
language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-gen
-language/statements/for/dstr-var-ary-ptrn-elem-id-init-hole
language/statements/for/dstr-var-ary-ptrn-elem-id-init-skipped
-language/statements/for/dstr-var-ary-ptrn-elem-id-init-throws
-language/statements/for/dstr-var-ary-ptrn-elem-id-init-undef
-language/statements/for/dstr-var-ary-ptrn-elem-id-init-unresolvable
-language/statements/for/dstr-var-ary-ptrn-elem-id-iter-complete
-language/statements/for/dstr-var-ary-ptrn-elem-id-iter-done
language/statements/for/dstr-var-ary-ptrn-elem-id-iter-step-err
language/statements/for/dstr-var-ary-ptrn-elem-id-iter-val
language/statements/for/dstr-var-ary-ptrn-elem-id-iter-val-err
-language/statements/for/dstr-var-ary-ptrn-elem-obj-id
-language/statements/for/dstr-var-ary-ptrn-elem-obj-id-init
-language/statements/for/dstr-var-ary-ptrn-elem-obj-prop-id
-language/statements/for/dstr-var-ary-ptrn-elem-obj-prop-id-init
-language/statements/for/dstr-var-ary-ptrn-elem-obj-val-null
-language/statements/for/dstr-var-ary-ptrn-elem-obj-val-undef
language/statements/for/dstr-var-ary-ptrn-elision
language/statements/for/dstr-var-ary-ptrn-elision-exhausted
language/statements/for/dstr-var-ary-ptrn-elision-iter-close
@@ -7947,36 +7818,13 @@ language/statements/for/dstr-var-ary-ptrn-rest-id-iter-step-err
language/statements/for/dstr-var-ary-ptrn-rest-id-iter-val-err
language/statements/for/dstr-var-ary-ptrn-rest-obj-id
language/statements/for/dstr-var-ary-ptrn-rest-obj-prop-id
-language/statements/for/dstr-var-obj-init-null
-language/statements/for/dstr-var-obj-init-undefined
-language/statements/for/dstr-var-obj-ptrn-empty
-language/statements/for/dstr-var-obj-ptrn-id-get-value-err
language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-arrow
language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-class
language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-cover
language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-fn
language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-gen
-language/statements/for/dstr-var-obj-ptrn-id-init-skipped
-language/statements/for/dstr-var-obj-ptrn-id-init-throws
-language/statements/for/dstr-var-obj-ptrn-id-init-unresolvable
-language/statements/for/dstr-var-obj-ptrn-id-trailing-comma
-language/statements/for/dstr-var-obj-ptrn-list-err
language/statements/for/dstr-var-obj-ptrn-prop-ary
language/statements/for/dstr-var-obj-ptrn-prop-ary-init
-language/statements/for/dstr-var-obj-ptrn-prop-ary-trailing-comma
-language/statements/for/dstr-var-obj-ptrn-prop-ary-value-null
-language/statements/for/dstr-var-obj-ptrn-prop-eval-err
-language/statements/for/dstr-var-obj-ptrn-prop-id
-language/statements/for/dstr-var-obj-ptrn-prop-id-get-value-err
-language/statements/for/dstr-var-obj-ptrn-prop-id-init
-language/statements/for/dstr-var-obj-ptrn-prop-id-init-skipped
-language/statements/for/dstr-var-obj-ptrn-prop-id-init-throws
-language/statements/for/dstr-var-obj-ptrn-prop-id-init-unresolvable
-language/statements/for/dstr-var-obj-ptrn-prop-id-trailing-comma
-language/statements/for/dstr-var-obj-ptrn-prop-obj
-language/statements/for/dstr-var-obj-ptrn-prop-obj-init
-language/statements/for/dstr-var-obj-ptrn-prop-obj-value-null
-language/statements/for/dstr-var-obj-ptrn-prop-obj-value-undef
language/statements/for/head-let-destructuring
language/statements/for/head-lhs-let
language/statements/for-in/head-const-bound-names-fordecl-tdz
@@ -8939,32 +8787,17 @@ language/statements/let/dstr-ary-ptrn-elem-ary-elem-iter
language/statements/let/dstr-ary-ptrn-elem-ary-elision-init
language/statements/let/dstr-ary-ptrn-elem-ary-elision-iter
language/statements/let/dstr-ary-ptrn-elem-ary-empty-init
-language/statements/let/dstr-ary-ptrn-elem-ary-empty-iter
language/statements/let/dstr-ary-ptrn-elem-ary-rest-init
language/statements/let/dstr-ary-ptrn-elem-ary-rest-iter
-language/statements/let/dstr-ary-ptrn-elem-ary-val-null
-language/statements/let/dstr-ary-ptrn-elem-id-init-exhausted
language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-arrow
language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-class
language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-cover
language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-fn
language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-gen
-language/statements/let/dstr-ary-ptrn-elem-id-init-hole
language/statements/let/dstr-ary-ptrn-elem-id-init-skipped
-language/statements/let/dstr-ary-ptrn-elem-id-init-throws
-language/statements/let/dstr-ary-ptrn-elem-id-init-undef
-language/statements/let/dstr-ary-ptrn-elem-id-init-unresolvable
-language/statements/let/dstr-ary-ptrn-elem-id-iter-complete
-language/statements/let/dstr-ary-ptrn-elem-id-iter-done
language/statements/let/dstr-ary-ptrn-elem-id-iter-step-err
language/statements/let/dstr-ary-ptrn-elem-id-iter-val
language/statements/let/dstr-ary-ptrn-elem-id-iter-val-err
-language/statements/let/dstr-ary-ptrn-elem-obj-id
-language/statements/let/dstr-ary-ptrn-elem-obj-id-init
-language/statements/let/dstr-ary-ptrn-elem-obj-prop-id
-language/statements/let/dstr-ary-ptrn-elem-obj-prop-id-init
-language/statements/let/dstr-ary-ptrn-elem-obj-val-null
-language/statements/let/dstr-ary-ptrn-elem-obj-val-undef
language/statements/let/dstr-ary-ptrn-elision
language/statements/let/dstr-ary-ptrn-elision-exhausted
language/statements/let/dstr-ary-ptrn-elision-step-err
@@ -8981,36 +8814,13 @@ language/statements/let/dstr-ary-ptrn-rest-id-iter-step-err
language/statements/let/dstr-ary-ptrn-rest-id-iter-val-err
language/statements/let/dstr-ary-ptrn-rest-obj-id
language/statements/let/dstr-ary-ptrn-rest-obj-prop-id
-language/statements/let/dstr-obj-init-null
-language/statements/let/dstr-obj-init-undefined
-language/statements/let/dstr-obj-ptrn-empty
-language/statements/let/dstr-obj-ptrn-id-get-value-err
language/statements/let/dstr-obj-ptrn-id-init-fn-name-arrow
language/statements/let/dstr-obj-ptrn-id-init-fn-name-class
language/statements/let/dstr-obj-ptrn-id-init-fn-name-cover
language/statements/let/dstr-obj-ptrn-id-init-fn-name-fn
language/statements/let/dstr-obj-ptrn-id-init-fn-name-gen
-language/statements/let/dstr-obj-ptrn-id-init-skipped
-language/statements/let/dstr-obj-ptrn-id-init-throws
-language/statements/let/dstr-obj-ptrn-id-init-unresolvable
-language/statements/let/dstr-obj-ptrn-id-trailing-comma
-language/statements/let/dstr-obj-ptrn-list-err
language/statements/let/dstr-obj-ptrn-prop-ary
language/statements/let/dstr-obj-ptrn-prop-ary-init
-language/statements/let/dstr-obj-ptrn-prop-ary-trailing-comma
-language/statements/let/dstr-obj-ptrn-prop-ary-value-null
-language/statements/let/dstr-obj-ptrn-prop-eval-err
-language/statements/let/dstr-obj-ptrn-prop-id
-language/statements/let/dstr-obj-ptrn-prop-id-get-value-err
-language/statements/let/dstr-obj-ptrn-prop-id-init
-language/statements/let/dstr-obj-ptrn-prop-id-init-skipped
-language/statements/let/dstr-obj-ptrn-prop-id-init-throws
-language/statements/let/dstr-obj-ptrn-prop-id-init-unresolvable
-language/statements/let/dstr-obj-ptrn-prop-id-trailing-comma
-language/statements/let/dstr-obj-ptrn-prop-obj
-language/statements/let/dstr-obj-ptrn-prop-obj-init
-language/statements/let/dstr-obj-ptrn-prop-obj-value-null
-language/statements/let/dstr-obj-ptrn-prop-obj-value-undef
language/statements/let/fn-name-arrow
language/statements/let/fn-name-class
language/statements/let/fn-name-cover
@@ -9145,32 +8955,17 @@ language/statements/variable/dstr-ary-ptrn-elem-ary-elem-iter
language/statements/variable/dstr-ary-ptrn-elem-ary-elision-init
language/statements/variable/dstr-ary-ptrn-elem-ary-elision-iter
language/statements/variable/dstr-ary-ptrn-elem-ary-empty-init
-language/statements/variable/dstr-ary-ptrn-elem-ary-empty-iter
language/statements/variable/dstr-ary-ptrn-elem-ary-rest-init
language/statements/variable/dstr-ary-ptrn-elem-ary-rest-iter
-language/statements/variable/dstr-ary-ptrn-elem-ary-val-null
-language/statements/variable/dstr-ary-ptrn-elem-id-init-exhausted
language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-arrow
language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-class
language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-cover
language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-fn
language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-gen
-language/statements/variable/dstr-ary-ptrn-elem-id-init-hole
language/statements/variable/dstr-ary-ptrn-elem-id-init-skipped
-language/statements/variable/dstr-ary-ptrn-elem-id-init-throws
-language/statements/variable/dstr-ary-ptrn-elem-id-init-undef
-language/statements/variable/dstr-ary-ptrn-elem-id-init-unresolvable
-language/statements/variable/dstr-ary-ptrn-elem-id-iter-complete
-language/statements/variable/dstr-ary-ptrn-elem-id-iter-done
language/statements/variable/dstr-ary-ptrn-elem-id-iter-step-err
language/statements/variable/dstr-ary-ptrn-elem-id-iter-val
language/statements/variable/dstr-ary-ptrn-elem-id-iter-val-err
-language/statements/variable/dstr-ary-ptrn-elem-obj-id
-language/statements/variable/dstr-ary-ptrn-elem-obj-id-init
-language/statements/variable/dstr-ary-ptrn-elem-obj-prop-id
-language/statements/variable/dstr-ary-ptrn-elem-obj-prop-id-init
-language/statements/variable/dstr-ary-ptrn-elem-obj-val-null
-language/statements/variable/dstr-ary-ptrn-elem-obj-val-undef
language/statements/variable/dstr-ary-ptrn-elision
language/statements/variable/dstr-ary-ptrn-elision-exhausted
language/statements/variable/dstr-ary-ptrn-elision-step-err
@@ -9187,36 +8982,13 @@ language/statements/variable/dstr-ary-ptrn-rest-id-iter-step-err
language/statements/variable/dstr-ary-ptrn-rest-id-iter-val-err
language/statements/variable/dstr-ary-ptrn-rest-obj-id
language/statements/variable/dstr-ary-ptrn-rest-obj-prop-id
-language/statements/variable/dstr-obj-init-null
-language/statements/variable/dstr-obj-init-undefined
-language/statements/variable/dstr-obj-ptrn-empty
-language/statements/variable/dstr-obj-ptrn-id-get-value-err
language/statements/variable/dstr-obj-ptrn-id-init-fn-name-arrow
language/statements/variable/dstr-obj-ptrn-id-init-fn-name-class
language/statements/variable/dstr-obj-ptrn-id-init-fn-name-cover
language/statements/variable/dstr-obj-ptrn-id-init-fn-name-fn
language/statements/variable/dstr-obj-ptrn-id-init-fn-name-gen
-language/statements/variable/dstr-obj-ptrn-id-init-skipped
-language/statements/variable/dstr-obj-ptrn-id-init-throws
-language/statements/variable/dstr-obj-ptrn-id-init-unresolvable
-language/statements/variable/dstr-obj-ptrn-id-trailing-comma
-language/statements/variable/dstr-obj-ptrn-list-err
language/statements/variable/dstr-obj-ptrn-prop-ary
language/statements/variable/dstr-obj-ptrn-prop-ary-init
-language/statements/variable/dstr-obj-ptrn-prop-ary-trailing-comma
-language/statements/variable/dstr-obj-ptrn-prop-ary-value-null
-language/statements/variable/dstr-obj-ptrn-prop-eval-err
-language/statements/variable/dstr-obj-ptrn-prop-id
-language/statements/variable/dstr-obj-ptrn-prop-id-get-value-err
-language/statements/variable/dstr-obj-ptrn-prop-id-init
-language/statements/variable/dstr-obj-ptrn-prop-id-init-skipped
-language/statements/variable/dstr-obj-ptrn-prop-id-init-throws
-language/statements/variable/dstr-obj-ptrn-prop-id-init-unresolvable
-language/statements/variable/dstr-obj-ptrn-prop-id-trailing-comma
-language/statements/variable/dstr-obj-ptrn-prop-obj
-language/statements/variable/dstr-obj-ptrn-prop-obj-init
-language/statements/variable/dstr-obj-ptrn-prop-obj-value-null
-language/statements/variable/dstr-obj-ptrn-prop-obj-value-undef
language/statements/variable/fn-name-arrow
language/statements/variable/fn-name-class
language/statements/variable/fn-name-cover
@@ -9262,4 +9034,4 @@ language/global-code/decl-lex-restricted-global
language/statements/const/global-use-before-initialization-in-declaration-statement
language/statements/const/global-use-before-initialization-in-prior-statement
language/statements/let/global-use-before-initialization-in-declaration-statement
-language/statements/let/global-use-before-initialization-in-prior-statement
+language/statements/let/global-use-before-initialization-in-prior-statement \ No newline at end of file