aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/compiler/qv4codegen.cpp34
-rw-r--r--src/qml/compiler/qv4instr_moth.cpp6
-rw-r--r--src/qml/compiler/qv4instr_moth_p.h2
-rw-r--r--src/qml/jit/qv4jit.cpp14
-rw-r--r--src/qml/jit/qv4jit_p.h1
-rw-r--r--src/qml/jsruntime/qv4engine.cpp1
-rw-r--r--src/qml/jsruntime/qv4engine_p.h2
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp33
-rw-r--r--src/qml/jsruntime/qv4runtimeapi_p.h1
-rw-r--r--src/qml/jsruntime/qv4vme_moth.cpp6
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations89
11 files changed, 95 insertions, 94 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp
index 99c45d19fa..897f104093 100644
--- a/src/qml/compiler/qv4codegen.cpp
+++ b/src/qml/compiler/qv4codegen.cpp
@@ -478,6 +478,7 @@ void Codegen::destructureElementList(const Codegen::Reference &array, PatternEle
Reference iterator = Reference::fromStackSlot(this);
Reference iteratorValue = Reference::fromStackSlot(this);
+ Reference iteratorDone = Reference::fromStackSlot(this);
array.loadInAccumulator();
Instruction::GetIterator iteratorObjInstr;
@@ -485,29 +486,42 @@ void Codegen::destructureElementList(const Codegen::Reference &array, PatternEle
bytecodeGenerator->addInstruction(iteratorObjInstr);
iterator.storeConsumeAccumulator();
+ bool hadNext = false;
+ bool hasRest = false;
+
BytecodeGenerator::Label end = bytecodeGenerator->newLabel();
for (PatternElementList *p = bindingList; p; p = p->next) {
+ PatternElement *e = p->element;
for (Elision *elision = p->elision; elision; elision = elision->next) {
iterator.loadInAccumulator();
Instruction::IteratorNext next;
next.value = iteratorValue.stackSlot();
bytecodeGenerator->addInstruction(next);
+ hadNext = true;
+ bool last = !elision->next && !e && !p->next;
+ if (last)
+ iteratorDone.storeConsumeAccumulator();
}
+ if (!e)
+ continue;
+
+ hadNext = true;
RegisterScope scope(this);
iterator.loadInAccumulator();
- PatternElement *e = p->element;
- if (e && e->type == PatternElement::RestElement) {
+ if (e->type == PatternElement::RestElement) {
bytecodeGenerator->addInstruction(Instruction::DestructureRestElement());
initializeAndDestructureBindingElement(e, Reference::fromAccumulator(this));
+ hasRest = true;
} else {
Instruction::IteratorNext next;
next.value = iteratorValue.stackSlot();
bytecodeGenerator->addInstruction(next);
- if (!e)
- continue;
+ bool last = !p->next;
+ if (last)
+ iteratorDone.storeConsumeAccumulator();
if (e->type != PatternElement::RestElement) {
initializeAndDestructureBindingElement(e, iteratorValue);
if (hasError) {
@@ -517,6 +531,18 @@ void Codegen::destructureElementList(const Codegen::Reference &array, PatternEle
}
}
}
+
+ if (!hadNext) {
+ Reference::storeConstOnStack(this, Encode(false), iteratorDone.stackSlot());
+ }
+
+ if (!hasRest) {
+ iterator.loadInAccumulator();
+ Instruction::IteratorClose close;
+ close.done = iteratorDone.stackSlot();
+ bytecodeGenerator->addInstruction(close);
+ }
+
end.link();
}
diff --git a/src/qml/compiler/qv4instr_moth.cpp b/src/qml/compiler/qv4instr_moth.cpp
index 7d8a1774f1..5e7fe816b2 100644
--- a/src/qml/compiler/qv4instr_moth.cpp
+++ b/src/qml/compiler/qv4instr_moth.cpp
@@ -434,9 +434,13 @@ void dumpBytecode(const char *code, int len, int nLocals, int nFormals, int /*st
MOTH_END_INSTR(GetIterator)
MOTH_BEGIN_INSTR(IteratorNext)
- d << value;
+ d << dumpRegister(value, nFormals);
MOTH_END_INSTR(IteratorNext)
+ MOTH_BEGIN_INSTR(IteratorClose)
+ d << dumpRegister(done, nFormals);
+ MOTH_END_INSTR(IteratorClose)
+
MOTH_BEGIN_INSTR(DestructureRestElement)
MOTH_END_INSTR(DestructureRestElement)
diff --git a/src/qml/compiler/qv4instr_moth_p.h b/src/qml/compiler/qv4instr_moth_p.h
index b4eaae4f6c..83ff11a128 100644
--- a/src/qml/compiler/qv4instr_moth_p.h
+++ b/src/qml/compiler/qv4instr_moth_p.h
@@ -123,6 +123,7 @@ QT_BEGIN_NAMESPACE
#define INSTR_PopContext(op) INSTRUCTION(op, PopContext, 1, reg)
#define INSTR_GetIterator(op) INSTRUCTION(op, GetIterator, 1, iterator)
#define INSTR_IteratorNext(op) INSTRUCTION(op, IteratorNext, 1, value)
+#define INSTR_IteratorClose(op) INSTRUCTION(op, IteratorClose, 1, done)
#define INSTR_DestructureRestElement(op) INSTRUCTION(op, DestructureRestElement, 0)
#define INSTR_DeleteMember(op) INSTRUCTION(op, DeleteMember, 2, member, base)
#define INSTR_DeleteSubscript(op) INSTRUCTION(op, DeleteSubscript, 2, base, index)
@@ -252,6 +253,7 @@ QT_BEGIN_NAMESPACE
F(PopContext) \
F(GetIterator) \
F(IteratorNext) \
+ F(IteratorClose) \
F(DestructureRestElement) \
F(DeleteMember) \
F(DeleteSubscript) \
diff --git a/src/qml/jit/qv4jit.cpp b/src/qml/jit/qv4jit.cpp
index a480cfbc30..15ece7e903 100644
--- a/src/qml/jit/qv4jit.cpp
+++ b/src/qml/jit/qv4jit.cpp
@@ -725,6 +725,17 @@ void BaselineJIT::generate_IteratorNext(int value)
as->checkException();
}
+void BaselineJIT::generate_IteratorClose(int done)
+{
+ as->saveAccumulatorInFrame();
+ as->prepareCallWithArgCount(3);
+ as->passRegAsArg(done, 2);
+ as->passAccumulatorAsArg(1);
+ as->passEngineAsArg(0);
+ JIT_GENERATE_RUNTIME_CALL(Runtime::method_iteratorClose, Assembler::ResultInAccumulator);
+ as->checkException();
+}
+
void BaselineJIT::generate_DestructureRestElement()
{
as->saveAccumulatorInFrame();
@@ -1291,6 +1302,9 @@ void BaselineJIT::collectLabelsInBytecode()
MOTH_BEGIN_INSTR(IteratorNext)
MOTH_END_INSTR(IteratorNext)
+ MOTH_BEGIN_INSTR(IteratorClose)
+ MOTH_END_INSTR(IteratorClose)
+
MOTH_BEGIN_INSTR(DestructureRestElement)
MOTH_END_INSTR(DestructureRestElement)
diff --git a/src/qml/jit/qv4jit_p.h b/src/qml/jit/qv4jit_p.h
index fa4a367e91..d48041d954 100644
--- a/src/qml/jit/qv4jit_p.h
+++ b/src/qml/jit/qv4jit_p.h
@@ -187,6 +187,7 @@ public:
void generate_PopContext(int reg) override;
void generate_GetIterator(int iterator) override;
void generate_IteratorNext(int value) override;
+ void generate_IteratorClose(int done) override;
void generate_DestructureRestElement() override;
void generate_DeleteMember(int member, int base) override;
void generate_DeleteSubscript(int base, int index) override;
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp
index 8227fe0184..96855b6155 100644
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -270,6 +270,7 @@ ExecutionEngine::ExecutionEngine(QJSEngine *jsEngine)
jsStrings[String_lastIndex] = newIdentifier(QStringLiteral("lastIndex"));
jsStrings[String_next] = newIdentifier(QStringLiteral("next"));
jsStrings[String_done] = newIdentifier(QStringLiteral("done"));
+ jsStrings[String_return] = newIdentifier(QStringLiteral("return"));
jsSymbols[Symbol_hasInstance] = Symbol::create(this, QStringLiteral("@Symbol.hasInstance"));
jsSymbols[Symbol_isConcatSpreadable] = Symbol::create(this, QStringLiteral("@Symbol.isConcatSpreadable"));
diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h
index 46bf58de07..e90be8e896 100644
--- a/src/qml/jsruntime/qv4engine_p.h
+++ b/src/qml/jsruntime/qv4engine_p.h
@@ -329,6 +329,7 @@ public:
String_lastIndex,
String_next,
String_done,
+ String_return,
NJSStrings
};
@@ -389,6 +390,7 @@ public:
String *id_lastIndex() const { return reinterpret_cast<String *>(jsStrings + String_lastIndex); }
String *id_next() const { return reinterpret_cast<String *>(jsStrings + String_next); }
String *id_done() const { return reinterpret_cast<String *>(jsStrings + String_done); }
+ String *id_return() const { return reinterpret_cast<String *>(jsStrings + String_return); }
Symbol *symbol_hasInstance() const { return reinterpret_cast<Symbol *>(jsSymbols + Symbol_hasInstance); }
Symbol *symbol_isConcatSpreadable() const { return reinterpret_cast<Symbol *>(jsSymbols + Symbol_isConcatSpreadable); }
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index 650f5c6735..6eff9c50db 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -737,6 +737,39 @@ ReturnedValue Runtime::method_iteratorNext(ExecutionEngine *engine, const Value
return Encode(done);
}
+ReturnedValue Runtime::method_iteratorClose(ExecutionEngine *engine, const Value &iterator, const Value &done)
+{
+ Q_ASSERT(iterator.isObject());
+ Q_ASSERT(done.isBoolean());
+ if (done.booleanValue())
+ return Encode::undefined();
+
+ Scope scope(engine);
+ bool hadException = engine->hasException;
+ ScopedValue e(scope);
+ if (hadException) {
+ e = *engine->exceptionValue;
+ engine->hasException = false;
+ }
+ ScopedFunctionObject f(scope, static_cast<const Object &>(iterator).get(engine->id_return()));
+ ScopedObject o(scope);
+ if (f) {
+ JSCallData cData(scope, 0, nullptr, &iterator);
+ o = f->call(cData);
+ }
+ if (hadException || !f) {
+ *engine->exceptionValue = e;
+ engine->hasException = hadException;
+ return Encode::undefined();
+ }
+ if (engine->hasException)
+ return Encode::undefined();
+
+ if (!o)
+ return engine->throwTypeError();
+ return Encode::undefined();
+}
+
ReturnedValue Runtime::method_destructureRestElement(ExecutionEngine *engine, const Value &iterator)
{
Q_ASSERT(iterator.isObject());
diff --git a/src/qml/jsruntime/qv4runtimeapi_p.h b/src/qml/jsruntime/qv4runtimeapi_p.h
index a22a053cd1..266dc36680 100644
--- a/src/qml/jsruntime/qv4runtimeapi_p.h
+++ b/src/qml/jsruntime/qv4runtimeapi_p.h
@@ -147,6 +147,7 @@ struct ExceptionCheck<void (*)(QV4::NoThrowEngine *, A, B, C)> {
/* for-in, for-of and array destructuring */ \
F(ReturnedValue, getIterator, (ExecutionEngine *engine, const Value &in, int iterator)) \
F(ReturnedValue, iteratorNext, (ExecutionEngine *engine, const Value &iterator, Value *value)) \
+ F(ReturnedValue, iteratorClose, (ExecutionEngine *engine, const Value &iterator, const Value &done)) \
F(ReturnedValue, destructureRestElement, (ExecutionEngine *engine, const Value &iterator)) \
\
/* unary operators */ \
diff --git a/src/qml/jsruntime/qv4vme_moth.cpp b/src/qml/jsruntime/qv4vme_moth.cpp
index 17ed1ae044..f39fd39a98 100644
--- a/src/qml/jsruntime/qv4vme_moth.cpp
+++ b/src/qml/jsruntime/qv4vme_moth.cpp
@@ -965,6 +965,12 @@ QV4::ReturnedValue VME::interpret(CppStackFrame &frame, const uchar *code)
CHECK_EXCEPTION;
MOTH_END_INSTR(IteratorNext)
+ MOTH_BEGIN_INSTR(IteratorClose)
+ STORE_ACC();
+ acc = Runtime::method_iteratorClose(engine, accumulator, STACK_VALUE(done));
+ CHECK_EXCEPTION;
+ MOTH_END_INSTR(IteratorClose)
+
MOTH_BEGIN_INSTR(DestructureRestElement)
STORE_ACC();
acc = Runtime::method_destructureRestElement(engine, ACC);
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index 06f8e8845d..febd0ea42a 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -3233,7 +3233,6 @@ language/expressions/array/spread-sngl-literal.js fails
language/expressions/arrow-function/cannot-override-this-with-thisArg.js fails
language/expressions/arrow-function/dflt-params-ref-later.js fails
language/expressions/arrow-function/dflt-params-ref-self.js fails
-language/expressions/arrow-function/dstr-ary-init-iter-close.js fails
language/expressions/arrow-function/dstr-ary-ptrn-elem-ary-elision-init.js fails
language/expressions/arrow-function/dstr-ary-ptrn-elem-ary-rest-init.js fails
language/expressions/arrow-function/dstr-ary-ptrn-elem-ary-rest-iter.js fails
@@ -3247,7 +3246,6 @@ language/expressions/arrow-function/dstr-ary-ptrn-rest-id-exhausted.js fails
language/expressions/arrow-function/dstr-ary-ptrn-rest-id.js fails
language/expressions/arrow-function/dstr-ary-ptrn-rest-obj-id.js fails
language/expressions/arrow-function/dstr-ary-ptrn-rest-obj-prop-id.js fails
-language/expressions/arrow-function/dstr-dflt-ary-init-iter-close.js fails
language/expressions/arrow-function/dstr-dflt-ary-ptrn-elem-ary-elision-init.js fails
language/expressions/arrow-function/dstr-dflt-ary-ptrn-elem-ary-rest-init.js fails
language/expressions/arrow-function/dstr-dflt-ary-ptrn-elem-ary-rest-iter.js fails
@@ -3311,9 +3309,6 @@ language/expressions/assignment/destructuring/iterator-destructuring-property-re
language/expressions/assignment/destructuring/keyed-destructuring-property-reference-target-evaluation-order.js fails
language/expressions/assignment/dstr-array-elem-init-fn-name-class.js fails
language/expressions/assignment/dstr-array-elem-init-let.js fails
-language/expressions/assignment/dstr-array-elem-iter-nrml-close-err.js fails
-language/expressions/assignment/dstr-array-elem-iter-nrml-close-null.js fails
-language/expressions/assignment/dstr-array-elem-iter-nrml-close.js fails
language/expressions/assignment/dstr-array-elem-iter-rtrn-close-err.js fails
language/expressions/assignment/dstr-array-elem-iter-rtrn-close-null.js fails
language/expressions/assignment/dstr-array-elem-iter-rtrn-close.js fails
@@ -3332,12 +3327,8 @@ language/expressions/assignment/dstr-array-elem-target-yield-expr.js fails
language/expressions/assignment/dstr-array-elem-target-yield-valid.js sloppyFails
language/expressions/assignment/dstr-array-elem-trlg-iter-elision-iter-abpt.js fails
language/expressions/assignment/dstr-array-elem-trlg-iter-elision-iter-nrml-close-err.js fails
-language/expressions/assignment/dstr-array-elem-trlg-iter-elision-iter-nrml-close-null.js fails
language/expressions/assignment/dstr-array-elem-trlg-iter-elision-iter-nrml-close-skip.js fails
language/expressions/assignment/dstr-array-elem-trlg-iter-elision-iter-nrml-close.js fails
-language/expressions/assignment/dstr-array-elem-trlg-iter-list-nrml-close-err.js fails
-language/expressions/assignment/dstr-array-elem-trlg-iter-list-nrml-close-null.js fails
-language/expressions/assignment/dstr-array-elem-trlg-iter-list-nrml-close.js fails
language/expressions/assignment/dstr-array-elem-trlg-iter-list-rtrn-close-err.js fails
language/expressions/assignment/dstr-array-elem-trlg-iter-list-rtrn-close-null.js fails
language/expressions/assignment/dstr-array-elem-trlg-iter-list-rtrn-close.js fails
@@ -3351,12 +3342,8 @@ language/expressions/assignment/dstr-array-elem-trlg-iter-rest-thrw-close-err.js
language/expressions/assignment/dstr-array-elem-trlg-iter-rest-thrw-close.js fails
language/expressions/assignment/dstr-array-elision-iter-abpt.js fails
language/expressions/assignment/dstr-array-elision-iter-nrml-close-err.js fails
-language/expressions/assignment/dstr-array-elision-iter-nrml-close-null.js fails
language/expressions/assignment/dstr-array-elision-iter-nrml-close-skip.js fails
language/expressions/assignment/dstr-array-elision-iter-nrml-close.js fails
-language/expressions/assignment/dstr-array-empty-iter-close-err.js fails
-language/expressions/assignment/dstr-array-empty-iter-close-null.js fails
-language/expressions/assignment/dstr-array-empty-iter-close.js fails
language/expressions/assignment/dstr-array-iteration.js fails
language/expressions/assignment/dstr-array-rest-after-element.js fails
language/expressions/assignment/dstr-array-rest-after-elision.js fails
@@ -4322,22 +4309,16 @@ language/expressions/function/arguments-with-arguments-lex.js sloppyFails
language/expressions/function/dflt-params-ref-later.js fails
language/expressions/function/dflt-params-ref-self.js fails
language/expressions/function/dflt-params-trailing-comma.js fails
-language/expressions/function/dstr-ary-init-iter-close.js fails
-language/expressions/function/dstr-ary-ptrn-elem-ary-elision-init.js fails
language/expressions/function/dstr-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/expressions/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
language/expressions/function/dstr-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/expressions/function/dstr-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/expressions/function/dstr-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/expressions/function/dstr-ary-ptrn-elision.js fails
-language/expressions/function/dstr-dflt-ary-init-iter-close.js fails
-language/expressions/function/dstr-dflt-ary-ptrn-elem-ary-elision-init.js fails
language/expressions/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/expressions/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
language/expressions/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/expressions/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/expressions/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/expressions/function/dstr-dflt-ary-ptrn-elision.js fails
language/expressions/function/dstr-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
language/expressions/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
language/expressions/function/dstr-dflt-obj-ptrn-id-init-fn-name-cover.js fails
@@ -4366,22 +4347,16 @@ language/expressions/generators/default-proto.js fails
language/expressions/generators/dflt-params-ref-later.js fails
language/expressions/generators/dflt-params-ref-self.js fails
language/expressions/generators/dflt-params-trailing-comma.js fails
-language/expressions/generators/dstr-ary-init-iter-close.js fails
-language/expressions/generators/dstr-ary-ptrn-elem-ary-elision-init.js fails
language/expressions/generators/dstr-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/expressions/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
language/expressions/generators/dstr-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/expressions/generators/dstr-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/expressions/generators/dstr-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/expressions/generators/dstr-ary-ptrn-elision.js fails
-language/expressions/generators/dstr-dflt-ary-init-iter-close.js fails
-language/expressions/generators/dstr-dflt-ary-ptrn-elem-ary-elision-init.js fails
language/expressions/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/expressions/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
language/expressions/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/expressions/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/expressions/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/expressions/generators/dstr-dflt-ary-ptrn-elision.js fails
language/expressions/generators/dstr-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
language/expressions/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
language/expressions/generators/dstr-dflt-obj-ptrn-id-init-fn-name-cover.js fails
@@ -4476,22 +4451,16 @@ language/expressions/object/accessor-name-literal-string-single-quote.js fails
language/expressions/object/accessor-name-literal-string-unicode-escape.js fails
language/expressions/object/computed-__proto__.js fails
language/expressions/object/concise-generator.js fails
-language/expressions/object/dstr-gen-meth-ary-init-iter-close.js fails
-language/expressions/object/dstr-gen-meth-ary-ptrn-elem-ary-elision-init.js fails
language/expressions/object/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/expressions/object/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
language/expressions/object/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/expressions/object/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/expressions/object/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/expressions/object/dstr-gen-meth-ary-ptrn-elision.js fails
-language/expressions/object/dstr-gen-meth-dflt-ary-init-iter-close.js fails
-language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-ary-elision-init.js fails
language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elision.js fails
language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-cover.js fails
@@ -4502,22 +4471,16 @@ language/expressions/object/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js fail
language/expressions/object/dstr-gen-meth-obj-ptrn-id-init-fn-name-cover.js fails
language/expressions/object/dstr-gen-meth-obj-ptrn-id-init-fn-name-fn.js fails
language/expressions/object/dstr-gen-meth-obj-ptrn-id-init-fn-name-gen.js fails
-language/expressions/object/dstr-meth-ary-init-iter-close.js fails
-language/expressions/object/dstr-meth-ary-ptrn-elem-ary-elision-init.js fails
language/expressions/object/dstr-meth-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/expressions/object/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
language/expressions/object/dstr-meth-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/expressions/object/dstr-meth-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/expressions/object/dstr-meth-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/expressions/object/dstr-meth-ary-ptrn-elision.js fails
-language/expressions/object/dstr-meth-dflt-ary-init-iter-close.js fails
-language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-ary-elision-init.js fails
language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/expressions/object/dstr-meth-dflt-ary-ptrn-elision.js fails
language/expressions/object/dstr-meth-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
language/expressions/object/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
language/expressions/object/dstr-meth-dflt-obj-ptrn-id-init-fn-name-cover.js fails
@@ -5773,14 +5736,11 @@ language/statements/const/block-local-closure-get-before-initialization.js fails
language/statements/const/block-local-use-before-initialization-in-declaration-statement.js fails
language/statements/const/block-local-use-before-initialization-in-prior-statement.js fails
language/statements/const/cptn-value.js fails
-language/statements/const/dstr-ary-init-iter-close.js fails
-language/statements/const/dstr-ary-ptrn-elem-ary-elision-init.js fails
language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/const/dstr-ary-ptrn-elision.js fails
language/statements/const/dstr-obj-ptrn-id-init-fn-name-arrow.js fails
language/statements/const/dstr-obj-ptrn-id-init-fn-name-class.js fails
language/statements/const/dstr-obj-ptrn-id-init-fn-name-cover.js fails
@@ -5812,9 +5772,6 @@ language/statements/for-of/body-dstr-assign-error.js fails
language/statements/for-of/body-put-error.js fails
language/statements/for-of/dstr-array-elem-init-fn-name-class.js fails
language/statements/for-of/dstr-array-elem-init-let.js fails
-language/statements/for-of/dstr-array-elem-iter-nrml-close-err.js fails
-language/statements/for-of/dstr-array-elem-iter-nrml-close-null.js fails
-language/statements/for-of/dstr-array-elem-iter-nrml-close.js fails
language/statements/for-of/dstr-array-elem-iter-rtrn-close-err.js fails
language/statements/for-of/dstr-array-elem-iter-rtrn-close-null.js fails
language/statements/for-of/dstr-array-elem-iter-rtrn-close.js fails
@@ -5833,12 +5790,8 @@ language/statements/for-of/dstr-array-elem-target-yield-expr.js fails
language/statements/for-of/dstr-array-elem-target-yield-valid.js sloppyFails
language/statements/for-of/dstr-array-elem-trlg-iter-elision-iter-abpt.js fails
language/statements/for-of/dstr-array-elem-trlg-iter-elision-iter-nrml-close-err.js fails
-language/statements/for-of/dstr-array-elem-trlg-iter-elision-iter-nrml-close-null.js fails
language/statements/for-of/dstr-array-elem-trlg-iter-elision-iter-nrml-close-skip.js fails
language/statements/for-of/dstr-array-elem-trlg-iter-elision-iter-nrml-close.js fails
-language/statements/for-of/dstr-array-elem-trlg-iter-list-nrml-close-err.js fails
-language/statements/for-of/dstr-array-elem-trlg-iter-list-nrml-close-null.js fails
-language/statements/for-of/dstr-array-elem-trlg-iter-list-nrml-close.js fails
language/statements/for-of/dstr-array-elem-trlg-iter-list-rtrn-close-err.js fails
language/statements/for-of/dstr-array-elem-trlg-iter-list-rtrn-close-null.js fails
language/statements/for-of/dstr-array-elem-trlg-iter-list-rtrn-close.js fails
@@ -5852,12 +5805,8 @@ language/statements/for-of/dstr-array-elem-trlg-iter-rest-thrw-close-err.js fail
language/statements/for-of/dstr-array-elem-trlg-iter-rest-thrw-close.js fails
language/statements/for-of/dstr-array-elision-iter-abpt.js fails
language/statements/for-of/dstr-array-elision-iter-nrml-close-err.js fails
-language/statements/for-of/dstr-array-elision-iter-nrml-close-null.js fails
language/statements/for-of/dstr-array-elision-iter-nrml-close-skip.js fails
language/statements/for-of/dstr-array-elision-iter-nrml-close.js fails
-language/statements/for-of/dstr-array-empty-iter-close-err.js fails
-language/statements/for-of/dstr-array-empty-iter-close-null.js fails
-language/statements/for-of/dstr-array-empty-iter-close.js fails
language/statements/for-of/dstr-array-iteration.js fails
language/statements/for-of/dstr-array-rest-after-element.js fails
language/statements/for-of/dstr-array-rest-after-elision.js fails
@@ -5900,7 +5849,6 @@ language/statements/for-of/dstr-const-ary-init-iter-no-close.js fails
language/statements/for-of/dstr-const-ary-name-iter-val.js fails
language/statements/for-of/dstr-const-ary-ptrn-elem-ary-elem-init.js fails
language/statements/for-of/dstr-const-ary-ptrn-elem-ary-elem-iter.js fails
-language/statements/for-of/dstr-const-ary-ptrn-elem-ary-elision-init.js fails
language/statements/for-of/dstr-const-ary-ptrn-elem-ary-rest-init.js fails
language/statements/for-of/dstr-const-ary-ptrn-elem-ary-rest-iter.js fails
language/statements/for-of/dstr-const-ary-ptrn-elem-ary-val-null.js fails
@@ -5926,7 +5874,6 @@ language/statements/for-of/dstr-const-ary-ptrn-elem-obj-prop-id-init.js fails
language/statements/for-of/dstr-const-ary-ptrn-elem-obj-prop-id.js fails
language/statements/for-of/dstr-const-ary-ptrn-elem-obj-val-null.js fails
language/statements/for-of/dstr-const-ary-ptrn-elem-obj-val-undef.js fails
-language/statements/for-of/dstr-const-ary-ptrn-elision.js fails
language/statements/for-of/dstr-const-ary-ptrn-rest-ary-elem.js fails
language/statements/for-of/dstr-const-ary-ptrn-rest-ary-rest.js fails
language/statements/for-of/dstr-const-ary-ptrn-rest-id-elision-next-err.js fails
@@ -5965,14 +5912,11 @@ language/statements/for-of/dstr-const-obj-ptrn-prop-obj-init.js fails
language/statements/for-of/dstr-const-obj-ptrn-prop-obj-value-null.js fails
language/statements/for-of/dstr-const-obj-ptrn-prop-obj-value-undef.js fails
language/statements/for-of/dstr-const-obj-ptrn-prop-obj.js fails
-language/statements/for-of/dstr-let-ary-init-iter-close.js fails
-language/statements/for-of/dstr-let-ary-ptrn-elem-ary-elision-init.js fails
language/statements/for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/for-of/dstr-let-ary-ptrn-elision.js fails
language/statements/for-of/dstr-let-obj-ptrn-id-init-fn-name-arrow.js fails
language/statements/for-of/dstr-let-obj-ptrn-id-init-fn-name-class.js fails
language/statements/for-of/dstr-let-obj-ptrn-id-init-fn-name-cover.js fails
@@ -6009,14 +5953,11 @@ language/statements/for-of/dstr-obj-prop-put-let.js fails
language/statements/for-of/dstr-obj-prop-put-prop-ref-no-get.js fails
language/statements/for-of/dstr-obj-prop-put-prop-ref-user-err.js fails
language/statements/for-of/dstr-obj-prop-put-prop-ref.js fails
-language/statements/for-of/dstr-var-ary-init-iter-close.js fails
-language/statements/for-of/dstr-var-ary-ptrn-elem-ary-elision-init.js fails
language/statements/for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/for-of/dstr-var-ary-ptrn-elision.js fails
language/statements/for-of/dstr-var-obj-ptrn-id-init-fn-name-arrow.js fails
language/statements/for-of/dstr-var-obj-ptrn-id-init-fn-name-class.js fails
language/statements/for-of/dstr-var-obj-ptrn-id-init-fn-name-cover.js fails
@@ -6058,40 +5999,31 @@ language/statements/for-of/yield-star-from-try.js fails
language/statements/for-of/yield-star.js fails
language/statements/for/S12.6.3_A9.1.js fails
language/statements/for/S12.6.3_A9.js fails
-language/statements/for/dstr-const-ary-init-iter-close.js fails
-language/statements/for/dstr-const-ary-ptrn-elem-ary-elision-init.js fails
language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/for/dstr-const-ary-ptrn-elision.js fails
language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-arrow.js fails
language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-class.js fails
language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-cover.js fails
language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-fn.js fails
language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-gen.js fails
-language/statements/for/dstr-let-ary-init-iter-close.js fails
-language/statements/for/dstr-let-ary-ptrn-elem-ary-elision-init.js fails
language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/for/dstr-let-ary-ptrn-elision.js fails
language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-arrow.js fails
language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-class.js fails
language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-cover.js fails
language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-fn.js fails
language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-gen.js fails
-language/statements/for/dstr-var-ary-init-iter-close.js fails
-language/statements/for/dstr-var-ary-ptrn-elem-ary-elision-init.js fails
language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/for/dstr-var-ary-ptrn-elision.js fails
language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-arrow.js fails
language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-class.js fails
language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-cover.js fails
@@ -6112,22 +6044,16 @@ language/statements/function/cptn-decl.js fails
language/statements/function/dflt-params-ref-later.js fails
language/statements/function/dflt-params-ref-self.js fails
language/statements/function/dflt-params-trailing-comma.js fails
-language/statements/function/dstr-ary-init-iter-close.js fails
-language/statements/function/dstr-ary-ptrn-elem-ary-elision-init.js fails
language/statements/function/dstr-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/function/dstr-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/function/dstr-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/function/dstr-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/function/dstr-ary-ptrn-elision.js fails
-language/statements/function/dstr-dflt-ary-init-iter-close.js fails
-language/statements/function/dstr-dflt-ary-ptrn-elem-ary-elision-init.js fails
language/statements/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/function/dstr-dflt-ary-ptrn-elision.js fails
language/statements/function/dstr-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
language/statements/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
language/statements/function/dstr-dflt-obj-ptrn-id-init-fn-name-cover.js fails
@@ -6154,22 +6080,16 @@ language/statements/generators/default-proto.js fails
language/statements/generators/dflt-params-ref-later.js fails
language/statements/generators/dflt-params-ref-self.js fails
language/statements/generators/dflt-params-trailing-comma.js fails
-language/statements/generators/dstr-ary-init-iter-close.js fails
-language/statements/generators/dstr-ary-ptrn-elem-ary-elision-init.js fails
language/statements/generators/dstr-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/generators/dstr-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/generators/dstr-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/generators/dstr-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/generators/dstr-ary-ptrn-elision.js fails
-language/statements/generators/dstr-dflt-ary-init-iter-close.js fails
-language/statements/generators/dstr-dflt-ary-ptrn-elem-ary-elision-init.js fails
language/statements/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/generators/dstr-dflt-ary-ptrn-elision.js fails
language/statements/generators/dstr-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
language/statements/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
language/statements/generators/dstr-dflt-obj-ptrn-id-init-fn-name-cover.js fails
@@ -6207,14 +6127,11 @@ language/statements/let/block-local-closure-set-before-initialization.js fails
language/statements/let/block-local-use-before-initialization-in-declaration-statement.js fails
language/statements/let/block-local-use-before-initialization-in-prior-statement.js fails
language/statements/let/cptn-value.js fails
-language/statements/let/dstr-ary-init-iter-close.js fails
-language/statements/let/dstr-ary-ptrn-elem-ary-elision-init.js fails
language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/let/dstr-ary-ptrn-elision.js fails
language/statements/let/dstr-obj-ptrn-id-init-fn-name-arrow.js fails
language/statements/let/dstr-obj-ptrn-id-init-fn-name-class.js fails
language/statements/let/dstr-obj-ptrn-id-init-fn-name-cover.js fails
@@ -6247,14 +6164,11 @@ language/statements/try/cptn-finally-empty-continue.js fails
language/statements/try/cptn-finally-from-catch.js fails
language/statements/try/cptn-finally-skip-catch.js fails
language/statements/try/cptn-finally-wo-catch.js fails
-language/statements/try/dstr-ary-init-iter-close.js fails
-language/statements/try/dstr-ary-ptrn-elem-ary-elision-init.js fails
language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/try/dstr-ary-ptrn-elision.js fails
language/statements/try/dstr-obj-ptrn-id-init-fn-name-arrow.js fails
language/statements/try/dstr-obj-ptrn-id-init-fn-name-class.js fails
language/statements/try/dstr-obj-ptrn-id-init-fn-name-cover.js fails
@@ -6266,14 +6180,11 @@ language/statements/try/tco-catch.js strictFails
language/statements/try/tco-finally.js strictFails
language/statements/variable/binding-resolution.js sloppyFails
language/statements/variable/cptn-value.js fails
-language/statements/variable/dstr-ary-init-iter-close.js fails
-language/statements/variable/dstr-ary-ptrn-elem-ary-elision-init.js fails
language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-arrow.js fails
language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-cover.js fails
language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-fn.js fails
language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-gen.js fails
-language/statements/variable/dstr-ary-ptrn-elision.js fails
language/statements/variable/dstr-obj-ptrn-id-init-fn-name-arrow.js fails
language/statements/variable/dstr-obj-ptrn-id-init-fn-name-class.js fails
language/statements/variable/dstr-obj-ptrn-id-init-fn-name-cover.js fails