From 163432b54114b6e93eab0c4359d627347a6d4dc3 Mon Sep 17 00:00:00 2001 From: ctw-ian Date: Mon, 20 Feb 2023 14:16:56 +0800 Subject: [PATCH 1/2] Support async generator && for-await-of on es2abc Issue:I6EKU1 Signed-off-by: ctw-ian Change-Id: Ie9a4cc4cd417d7651b96cf757318c9217b6febb2 --- es2panda/compiler/base/destructuring.cpp | 4 +- es2panda/compiler/base/iterators.cpp | 77 +- es2panda/compiler/core/function.cpp | 18 +- es2panda/compiler/core/pandagen.cpp | 49 +- es2panda/compiler/core/pandagen.h | 4 + .../function/asyncFunctionBuilder.cpp | 5 + .../compiler/function/asyncFunctionBuilder.h | 1 + .../asyncGeneratorFunctionBuilder.cpp | 74 +- .../function/asyncGeneratorFunctionBuilder.h | 1 + .../compiler/function/functionBuilder.cpp | 23 +- es2panda/compiler/function/functionBuilder.h | 3 +- .../function/generatorFunctionBuilder.cpp | 6 +- .../function/generatorFunctionBuilder.h | 1 + es2panda/ir/statements/returnStatement.cpp | 2 +- ...lose-uncallable-return-test-1-expected.txt | 2 + .../iteratorclose-uncallable-return-test-1.js | 16 + ...close-undefined-return-test-1-expected.txt | 2 + .../iteratorclose-undefined-return-test-1.js | 16 + test262/es2021_tests.txt | 2153 ++++++++++++++++- test262/skip_tests.json | 41 +- 20 files changed, 2359 insertions(+), 139 deletions(-) create mode 100644 es2panda/test/compiler/js/iteratorclose-uncallable-return-test-1-expected.txt create mode 100644 es2panda/test/compiler/js/iteratorclose-uncallable-return-test-1.js create mode 100644 es2panda/test/compiler/js/iteratorclose-undefined-return-test-1-expected.txt create mode 100644 es2panda/test/compiler/js/iteratorclose-undefined-return-test-1.js diff --git a/es2panda/compiler/base/destructuring.cpp b/es2panda/compiler/base/destructuring.cpp index 651292aa8a..557be97ecb 100644 --- a/es2panda/compiler/base/destructuring.cpp +++ b/es2panda/compiler/base/destructuring.cpp @@ -112,7 +112,7 @@ static void GenArray(PandaGen *pg, const ir::ArrayExpression *array) if (init) { auto *assingValue = pg->AllocLabel(); auto *defaultInit = pg->AllocLabel(); - pg->BranchIfUndefined(element, defaultInit); + pg->BranchIfStrictUndefined(element, defaultInit); pg->LoadAccumulator(element, iterator.Result()); pg->Branch(element, assingValue); @@ -181,7 +181,7 @@ static void GenObjectProperty(PandaGen *pg, const ir::ObjectExpression *object, auto *getDefault = pg->AllocLabel(); auto *store = pg->AllocLabel(); - pg->BranchIfUndefined(element, getDefault); + pg->BranchIfStrictUndefined(element, getDefault); pg->LoadAccumulator(element, loadedValue); pg->Branch(element, store); diff --git a/es2panda/compiler/base/iterators.cpp b/es2panda/compiler/base/iterators.cpp index f88e502870..1cd69d46a0 100644 --- a/es2panda/compiler/base/iterators.cpp +++ b/es2panda/compiler/base/iterators.cpp @@ -77,44 +77,17 @@ void Iterator::Value() const void Iterator::Close(bool abruptCompletion) const { - if (type_ == IteratorType::SYNC) { - RegScope rs(pg_); - VReg exception = pg_->AllocReg(); - VReg innerResult = pg_->AllocReg(); - Label *noReturn = pg_->AllocLabel(); - - if (abruptCompletion) { - pg_->StoreAccumulator(node_, exception); - } - - // close iterator - pg_->LoadObjByName(node_, iterator_, "return"); - pg_->StoreAccumulator(node_, method_); - pg_->LoadConst(node_, Constant::JS_UNDEFINED); - pg_->Condition(node_, lexer::TokenType::PUNCTUATOR_NOT_STRICT_EQUAL, method_, noReturn); - CallMethod(); - pg_->StoreAccumulator(node_, innerResult); - pg_->ThrowIfNotObject(node_, innerResult); - - pg_->SetLabel(node_, noReturn); - if (abruptCompletion) { - pg_->LoadAccumulator(node_, exception); - pg_->EmitThrow(node_); - } - return; - } - RegScope rs(pg_); VReg completion = pg_->AllocReg(); VReg innerResult = pg_->AllocReg(); - VReg innerResultType = pg_->AllocReg(); + VReg innerException = pg_->AllocReg(); + Label *noReturn = pg_->AllocLabel(); pg_->StoreAccumulator(node_, completion); - pg_->StoreConst(node_, innerResultType, Constant::JS_HOLE); + pg_->StoreConst(node_, innerException, Constant::JS_HOLE); TryContext tryCtx(pg_); const auto &labelSet = tryCtx.LabelSet(); - Label *returnExits = pg_->AllocLabel(); pg_->SetLabel(node_, labelSet.TryBegin()); @@ -123,45 +96,23 @@ void Iterator::Close(bool abruptCompletion) const // 5. If innerResult.[[Type]] is normal, then { - // b. If return is undefined, return Completion(completion). - pg_->BranchIfNotUndefined(node_, returnExits); // a. Let return be innerResult.[[Value]]. - pg_->LoadAccumulator(node_, completion); - - if (abruptCompletion) { - pg_->EmitThrow(node_); - } else { - pg_->DirectReturn(node_); - } - - pg_->SetLabel(node_, returnExits); - - { - TryContext innerTryCtx(pg_); - const auto &innerLabelSet = innerTryCtx.LabelSet(); - - pg_->SetLabel(node_, innerLabelSet.TryBegin()); - // c. Set innerResult to Call(return, iterator). - CallMethod(); + // b. If return is undefined, return Completion(completion). + pg_->BranchIfUndefined(node_, noReturn); + // c. Set innerResult to Call(return, iterator). + CallMethod(); + if (type_ == IteratorType::ASYNC) { // d. If innerResult.[[Type]] is normal, set innerResult to Await(innerResult.[[Value]]). pg_->FuncBuilder()->Await(node_); - pg_->StoreAccumulator(node_, innerResult); - pg_->SetLabel(node_, innerLabelSet.TryEnd()); - pg_->Branch(node_, innerLabelSet.CatchEnd()); - - pg_->SetLabel(node_, innerLabelSet.CatchBegin()); - pg_->StoreAccumulator(node_, innerResult); - pg_->StoreAccumulator(node_, innerResultType); - pg_->SetLabel(node_, innerLabelSet.CatchEnd()); } + pg_->StoreAccumulator(node_, innerResult); } pg_->SetLabel(node_, labelSet.TryEnd()); pg_->Branch(node_, labelSet.CatchEnd()); pg_->SetLabel(node_, labelSet.CatchBegin()); - pg_->StoreAccumulator(node_, innerResult); - pg_->StoreAccumulator(node_, innerResultType); + pg_->StoreAccumulator(node_, innerException); pg_->SetLabel(node_, labelSet.CatchEnd()); // 6. If completion.[[Type]] is throw, return Completion(completion). @@ -170,13 +121,19 @@ void Iterator::Close(bool abruptCompletion) const pg_->EmitThrow(node_); } else { // 7. If innerResult.[[Type]] is throw, return Completion(innerResult). - pg_->LoadAccumulator(node_, innerResultType); + pg_->LoadAccumulator(node_, innerException); pg_->EmitRethrow(node_); } // 8. If Type(innerResult.[[Value]]) is not Object, throw a TypeError exception. pg_->LoadAccumulator(node_, innerResult); pg_->ThrowIfNotObject(node_, innerResult); + + pg_->SetLabel(node_, noReturn); + pg_->LoadAccumulator(node_, completion); + if (abruptCompletion) { + pg_->EmitThrow(node_); + } } DestructuringIterator::DestructuringIterator(PandaGen *pg, const ir::AstNode *node) diff --git a/es2panda/compiler/core/function.cpp b/es2panda/compiler/core/function.cpp index f3c5b6156f..48978b81dc 100644 --- a/es2panda/compiler/core/function.cpp +++ b/es2panda/compiler/core/function.cpp @@ -103,6 +103,11 @@ static void CompileFunctionParameterDeclaration(PandaGen *pg, const ir::ScriptFu pg->BranchIfStrictNotUndefined(func, nonDefaultLabel); param->AsAssignmentPattern()->Right()->Compile(pg); + VReg init = pg->AllocReg(); + pg->StoreAccumulator(func, init); + ref.GetValue(); + pg->ThrowParameterDfltInitSelf(func, paramVar->Name(), init); + pg->LoadAccumulator(func, init); ref.SetValue(); pg->SetLabel(func, nonDefaultLabel); } @@ -171,12 +176,16 @@ static void CompileFunction(PandaGen *pg) pg->SetSourceLocationFlag(lexer::SourceLocationFlag::INVALID_SOURCE_LOCATION); pg->FunctionEnter(); pg->SetSourceLocationFlag(lexer::SourceLocationFlag::VALID_SOURCE_LOCATION); + + if (pg->IsAsyncFunction()) { + CompileFunctionParameterDeclaration(pg, decl); + } + const ir::AstNode *body = decl->Body(); - CompileFunctionParameterDeclaration(pg, decl); if (body->IsExpression()) { body->Compile(pg); - pg->DirectReturn(decl); + pg->ExplicitReturn(decl); } else { CompileSourceBlock(pg, body->AsBlockStatement()); } @@ -192,6 +201,10 @@ static void CompileFunctionOrProgram(PandaGen *pg) if (pg->FunctionHasFinalizer()) { ASSERT(topScope->IsFunctionScope()); + if (!pg->IsAsyncFunction()) { + CompileFunctionParameterDeclaration(pg, pg->RootNode()->AsScriptFunction()); + } + TryContext tryCtx(pg); pg->FunctionInit(tryCtx.GetCatchTable()); @@ -200,6 +213,7 @@ static void CompileFunctionOrProgram(PandaGen *pg) pg->FunctionInit(nullptr); if (topScope->IsFunctionScope() || topScope->IsTSModuleScope() || topScope->IsTSEnumScope()) { + CompileFunctionParameterDeclaration(pg, pg->RootNode()->AsScriptFunction()); CompileFunction(pg); } else { ASSERT(topScope->IsGlobalScope() || topScope->IsModuleScope()); diff --git a/es2panda/compiler/core/pandagen.cpp b/es2panda/compiler/core/pandagen.cpp index e3de4d322a..125075287f 100644 --- a/es2panda/compiler/core/pandagen.cpp +++ b/es2panda/compiler/core/pandagen.cpp @@ -195,6 +195,12 @@ bool PandaGen::FunctionHasFinalizer() const return func->IsAsync() || func->IsGenerator(); } +bool PandaGen::IsAsyncFunction() const +{ + const ir::ScriptFunction *func = rootNode_->AsScriptFunction(); + return func->IsAsync() && !func->IsGenerator(); +} + void PandaGen::FunctionEnter() { builder_->Prepare(rootNode_->AsScriptFunction()); @@ -1048,6 +1054,16 @@ void PandaGen::BranchIfUndefined(const ir::AstNode *node, Label *target) ra_.Emit(node, target); } +void PandaGen::BranchIfStrictUndefined(const ir::AstNode *node, class Label *target) +{ + RegScope rs(this); + VReg tmp = AllocReg(); + StoreAccumulator(node, tmp); + LoadConst(node, Constant::JS_UNDEFINED); + StrictEqual(node, tmp); + ra_.Emit(node, target); +} + void PandaGen::BranchIfNotUndefined(const ir::AstNode *node, Label *target) { RegScope rs(this); @@ -1144,6 +1160,11 @@ void PandaGen::DirectReturn(const ir::AstNode *node) builder_->DirectReturn(node); } +void PandaGen::ExplicitReturn(const ir::AstNode *node) +{ + builder_->ExplicitReturn(node); +} + void PandaGen::ValidateClassDirectReturn(const ir::AstNode *node) { const ir::ScriptFunction *func = util::Helpers::GetContainingFunction(node); @@ -1388,18 +1409,14 @@ void PandaGen::SuspendAsyncGenerator(const ir::AstNode *node, VReg asyncGenObj) void PandaGen::GeneratorYield(const ir::AstNode *node, VReg genObj) { - /* - * TODO: set generator yield - * ra_.Emit(node, genObj, static_cast(GeneratorState::SUSPENDED_YIELD)); - */ + LoadAccumulator(node, genObj); + ra_.Emit(node, static_cast(GeneratorState::SUSPENDED_YIELD)); } void PandaGen::GeneratorComplete(const ir::AstNode *node, VReg genObj) { - /* - * TODO: set generator complete - * ra_.Emit(node, genObj, static_cast(GeneratorState::COMPLETED)); - */ + LoadAccumulator(node, genObj); + ra_.Emit(node, static_cast(GeneratorState::COMPLETED)); } void PandaGen::ResumeGenerator(const ir::AstNode *node, VReg genObj) @@ -1627,10 +1644,7 @@ void PandaGen::GetIterator(const ir::AstNode *node) void PandaGen::GetAsyncIterator(const ir::AstNode *node) { - /* - * TODO: async iterator - * ra_.Emit(node); - */ + ra_.Emit(node, 0); } void PandaGen::CreateObjectWithExcludedKeys(const ir::AstNode *node, VReg obj, VReg argStart, size_t argCount) @@ -1869,6 +1883,17 @@ void PandaGen::ThrowConstAssignment(const ir::AstNode *node, const util::StringV strings_.insert(name); } +void PandaGen::ThrowParameterDfltInitSelf(const ir::AstNode *node, const util::StringView &name, VReg init) +{ + RegScope rs(this); + auto *notItSelf = AllocLabel(); + Condition(node, lexer::TokenType::PUNCTUATOR_STRICT_EQUAL, init, notItSelf); + LoadConst(node, Constant::JS_HOLE); + ThrowUndefinedIfHole(node, name); + + SetLabel(node, notItSelf); +} + void PandaGen::PopLexEnv(const ir::AstNode *node) { ra_.Emit(node); diff --git a/es2panda/compiler/core/pandagen.h b/es2panda/compiler/core/pandagen.h index d8f775330a..6beae9d09c 100644 --- a/es2panda/compiler/core/pandagen.h +++ b/es2panda/compiler/core/pandagen.h @@ -255,6 +255,7 @@ public: Label *AllocLabel(); bool FunctionHasFinalizer() const; + bool IsAsyncFunction() const; void FunctionInit(CatchTable* catchTable); void FunctionEnter(); void FunctionExit(); @@ -330,6 +331,7 @@ public: void IsTrue(const ir::AstNode *node); void BranchIfUndefined(const ir::AstNode *node, class Label *target); + void BranchIfStrictUndefined(const ir::AstNode *node, class Label *target); void BranchIfStrictNotUndefined(const ir::AstNode *node, class Label *target); void BranchIfNotUndefined(const ir::AstNode *node, class Label *target); void BranchIfHole(const ir::AstNode *node, class Label *target); @@ -345,6 +347,7 @@ public: void EmitReturnUndefined(const ir::AstNode *node); void ValidateClassDirectReturn(const ir::AstNode *node); void DirectReturn(const ir::AstNode *node); + void ExplicitReturn(const ir::AstNode *node); void ImplicitReturn(const ir::AstNode *node); void EmitAwait(const ir::AstNode *node); @@ -438,6 +441,7 @@ public: void ThrowIfSuperNotCorrectCall(const ir::AstNode *node, int64_t num); void ThrowUndefinedIfHole(const ir::AstNode *node, const util::StringView &name); void ThrowConstAssignment(const ir::AstNode *node, const util::StringView &name); + void ThrowParameterDfltInitSelf(const ir::AstNode *node, const util::StringView &name, VReg init); uint32_t TryDepth() const; CatchTable *CreateCatchTable(); diff --git a/es2panda/compiler/function/asyncFunctionBuilder.cpp b/es2panda/compiler/function/asyncFunctionBuilder.cpp index c02a8cfc13..203090887b 100644 --- a/es2panda/compiler/function/asyncFunctionBuilder.cpp +++ b/es2panda/compiler/function/asyncFunctionBuilder.cpp @@ -34,6 +34,11 @@ void AsyncFunctionBuilder::ImplicitReturn(const ir::AstNode *node) const DirectReturn(node); } +void AsyncFunctionBuilder::ExplicitReturn(const ir::AstNode *node) const +{ + DirectReturn(node); +} + void AsyncFunctionBuilder::Prepare(const ir::ScriptFunction *node) { pg_->AsyncFunctionEnter(node); diff --git a/es2panda/compiler/function/asyncFunctionBuilder.h b/es2panda/compiler/function/asyncFunctionBuilder.h index 68bdd99433..ecef6c40e6 100644 --- a/es2panda/compiler/function/asyncFunctionBuilder.h +++ b/es2panda/compiler/function/asyncFunctionBuilder.h @@ -35,6 +35,7 @@ public: void DirectReturn(const ir::AstNode *node) const override; void ImplicitReturn(const ir::AstNode *node) const override; + void ExplicitReturn(const ir::AstNode *node) const override; protected: BuilderType BuilderKind() const override diff --git a/es2panda/compiler/function/asyncGeneratorFunctionBuilder.cpp b/es2panda/compiler/function/asyncGeneratorFunctionBuilder.cpp index 9d0bb47dee..f6d5cd16e1 100644 --- a/es2panda/compiler/function/asyncGeneratorFunctionBuilder.cpp +++ b/es2panda/compiler/function/asyncGeneratorFunctionBuilder.cpp @@ -41,9 +41,13 @@ void AsyncGeneratorFunctionBuilder::CleanUp(const ir::ScriptFunction *node) cons const auto &labelSet = catchTable_->LabelSet(); RegScope rs(pg_); + VReg retVal = pg_->AllocReg(); pg_->SetLabel(node, labelSet.TryEnd()); pg_->SetLabel(node, labelSet.CatchBegin()); + pg_->StoreAccumulator(node, retVal); + pg_->GeneratorComplete(node, funcObj_); + pg_->LoadAccumulator(node, retVal); pg_->AsyncGeneratorReject(node, funcObj_); pg_->EmitReturn(node); pg_->SetLabel(node, labelSet.CatchEnd()); @@ -58,6 +62,7 @@ void AsyncGeneratorFunctionBuilder::DirectReturn(const ir::AstNode *node) const pg_->StoreAccumulator(node, retVal); pg_->StoreConst(node, canSuspend, Constant::JS_TRUE); + pg_->GeneratorComplete(node, funcObj_); pg_->AsyncGeneratorResolve(node, funcObj_, retVal, canSuspend); pg_->EmitReturn(node); } @@ -68,38 +73,69 @@ void AsyncGeneratorFunctionBuilder::ImplicitReturn(const ir::AstNode *node) cons DirectReturn(node); } +void AsyncGeneratorFunctionBuilder::ExplicitReturn(const ir::AstNode *node) const +{ + RegScope rs(pg_); + VReg resumeType = pg_->AllocReg(); + VReg resumeValue = pg_->AllocReg(); + VReg canSuspend = pg_->AllocReg(); + + pg_->StoreAccumulator(node, resumeValue); + pg_->GeneratorComplete(node, funcObj_); + pg_->LoadAccumulator(node, resumeValue); + pg_->AsyncFunctionAwait(node, funcObj_); + SuspendResumeExecution(node, resumeType, resumeValue); + pg_->StoreConst(node, canSuspend, Constant::JS_TRUE); + pg_->AsyncGeneratorResolve(node, funcObj_, resumeValue, canSuspend); + pg_->EmitReturn(node); +} + void AsyncGeneratorFunctionBuilder::Yield(const ir::AstNode *node) { RegScope rs(pg_); VReg value = pg_->AllocReg(); - VReg done = pg_->AllocReg(); - VReg completionType = pg_->AllocReg(); - VReg completionValue = pg_->AllocReg(); - - auto *notNextCompletion = pg_->AllocLabel(); + VReg resumeType = pg_->AllocReg(); + VReg resumeValue = pg_->AllocReg(); + auto *notReturn = pg_->AllocLabel(); + auto *normalCompletion = pg_->AllocLabel(); auto *notThrowCompletion = pg_->AllocLabel(); + // 27.6.3.8.5 Set value to ? Await(value). + Await(node); pg_->StoreAccumulator(node, value); - pg_->StoreConst(node, done, Constant::JS_FALSE); - pg_->AsyncGeneratorResolve(node, funcObj_, value, done); - SuspendResumeExecution(node, completionType, completionValue); - // .next(value) - pg_->LoadAccumulatorInt(node, static_cast(ResumeMode::NEXT)); - pg_->Condition(node, lexer::TokenType::PUNCTUATOR_EQUAL, completionType, notNextCompletion); - pg_->LoadAccumulator(node, completionValue); + AsyncYield(node, value, resumeType, resumeValue); + + // 27.6.3.8.8.a If resumptionValue.[[Type]] is not return + pg_->LoadAccumulatorInt(node, static_cast(ResumeMode::RETURN)); + pg_->Condition(node, lexer::TokenType::PUNCTUATOR_EQUAL, resumeType, notReturn); + + // 27.6.3.8.8.b Let awaited be Await(resumptionValue.[[Value]]). + pg_->LoadAccumulator(node, resumeValue); + pg_->AsyncFunctionAwait(node, funcObj_); + SuspendResumeExecution(node, resumeType, resumeValue); - // .throw(value) - pg_->SetLabel(node, notNextCompletion); + // 27.6.3.8.8.c. If awaited.[[Type]] is throw, return Completion(awaited). pg_->LoadAccumulatorInt(node, static_cast(ResumeMode::THROW)); - pg_->Condition(node, lexer::TokenType::PUNCTUATOR_EQUAL, completionType, notThrowCompletion); - pg_->LoadAccumulator(node, completionValue); + pg_->Condition(node, lexer::TokenType::PUNCTUATOR_EQUAL, resumeType, normalCompletion); + pg_->LoadAccumulator(node, resumeValue); pg_->EmitThrow(node); - // .return(value) + pg_->SetLabel(node, normalCompletion); + // 27.6.3.8.8.d. Assert: awaited.[[Type]] is normal. + // 27.6.3.8.8.e. Return Completion { [[Type]]: return, [[Value]]: awaited.[[Value]], [[Target]]: empty } + pg_->ControlFlowChangeBreak(); + pg_->LoadAccumulator(node, resumeValue); + DirectReturn(node); + + pg_->SetLabel(node, notReturn); + // 27.6.3.8.8.a return Completion(resumptionValue) + pg_->LoadAccumulatorInt(node, static_cast(ResumeMode::THROW)); + pg_->Condition(node, lexer::TokenType::PUNCTUATOR_EQUAL, resumeType, notThrowCompletion); + pg_->LoadAccumulator(node, resumeValue); + pg_->EmitThrow(node); pg_->SetLabel(node, notThrowCompletion); - pg_->LoadAccumulator(node, completionValue); - pg_->EmitReturn(node); + pg_->LoadAccumulator(node, resumeValue); } IteratorType AsyncGeneratorFunctionBuilder::GeneratorKind() const diff --git a/es2panda/compiler/function/asyncGeneratorFunctionBuilder.h b/es2panda/compiler/function/asyncGeneratorFunctionBuilder.h index 8ae591a79c..e188d601f1 100644 --- a/es2panda/compiler/function/asyncGeneratorFunctionBuilder.h +++ b/es2panda/compiler/function/asyncGeneratorFunctionBuilder.h @@ -35,6 +35,7 @@ public: void DirectReturn(const ir::AstNode *node) const override; void ImplicitReturn(const ir::AstNode *node) const override; + void ExplicitReturn(const ir::AstNode *node) const override; void Yield(const ir::AstNode *node) override; diff --git a/es2panda/compiler/function/functionBuilder.cpp b/es2panda/compiler/function/functionBuilder.cpp index eb79e61556..824e6a0385 100644 --- a/es2panda/compiler/function/functionBuilder.cpp +++ b/es2panda/compiler/function/functionBuilder.cpp @@ -62,12 +62,24 @@ void FunctionBuilder::ImplicitReturn(const ir::AstNode *node) const pg_->EmitReturn(node); } -void FunctionBuilder::AsyncYield(const ir::AstNode *node, VReg completionType, VReg completionValue) const +void FunctionBuilder::ExplicitReturn(const ir::AstNode *node) const { - ASSERT(BuilderKind() == BuilderType::ASYNC_GENERATOR); + DirectReturn(node); +} +void FunctionBuilder::AsyncYield(const ir::AstNode *node, VReg value, VReg completionType, VReg completionValue) const +{ + ASSERT(BuilderKind() == BuilderType::ASYNC_GENERATOR); + RegScope rs(pg_); + VReg done = pg_->AllocReg(); + // 27.6.3.8.6 Set generator.[[AsyncGeneratorState]] to suspendedYield. pg_->GeneratorYield(node, funcObj_); - pg_->SuspendAsyncGenerator(node, funcObj_); + /** 27.6.3.8.7 Remove genContext from the execution context stack and restore the execution context that + * is at the top of the execution context stack as the running execution context. + * 27.6.3.8.9 Return ! AsyncGeneratorResolve(generator, value, false). + */ + pg_->StoreConst(node, done, Constant::JS_FALSE); + pg_->AsyncGeneratorResolve(node, funcObj_, value, done); resumeGenerator(node, completionType, completionValue); } @@ -173,6 +185,7 @@ void FunctionBuilder::YieldStar(const ir::AstNode *node) VReg receivedType = pg_->AllocReg(); VReg nextMethod = pg_->AllocReg(); VReg exitReturn = pg_->AllocReg(); + VReg iterValue = pg_->AllocReg(); pg_->StoreConst(node, receivedValue, Constant::JS_UNDEFINED); pg_->LoadAccumulatorInt(node, static_cast(ResumeMode::NEXT)); @@ -269,7 +282,8 @@ void FunctionBuilder::YieldStar(const ir::AstNode *node) // 5. Set value to ? Await(value). Await(node); // 6. Set generator.[[AsyncGeneratorState]] to suspendedYield. - AsyncYield(node, receivedType, receivedValue); + pg_->StoreAccumulator(node, iterValue); + AsyncYield(node, iterValue, receivedType, receivedValue); // a. If resumptionValue.[[Type]] is not return pg_->LoadAccumulatorInt(node, static_cast(ResumeMode::RETURN)); @@ -289,7 +303,6 @@ void FunctionBuilder::YieldStar(const ir::AstNode *node) // vii. Else, set received to GeneratorYield(innerResult). // 8. Else, set received to GeneratorYield(innerResult). // x. Else, set received to GeneratorYield(innerReturnResult). - pg_->GeneratorYield(node, funcObj_); SuspendResumeExecution(node, receivedType, receivedValue); } diff --git a/es2panda/compiler/function/functionBuilder.h b/es2panda/compiler/function/functionBuilder.h index 63abf6f78e..981c224d8b 100644 --- a/es2panda/compiler/function/functionBuilder.h +++ b/es2panda/compiler/function/functionBuilder.h @@ -54,6 +54,7 @@ public: virtual void DirectReturn(const ir::AstNode *node) const; virtual void ImplicitReturn(const ir::AstNode *node) const; + virtual void ExplicitReturn(const ir::AstNode *node) const; virtual void Await(const ir::AstNode *node); virtual void YieldStar(const ir::AstNode *node); @@ -72,7 +73,7 @@ protected: virtual IteratorType GeneratorKind() const; void SuspendResumeExecution(const ir::AstNode *node, VReg completionType, VReg completionValue) const; - void AsyncYield(const ir::AstNode *node, VReg completionType, VReg completionValue) const; + void AsyncYield(const ir::AstNode *node, VReg value, VReg completionType, VReg completionValue) const; VReg FunctionReg(const ir::ScriptFunction *node) const; void HandleCompletion(const ir::AstNode *node, VReg completionType, VReg completionValue); diff --git a/es2panda/compiler/function/generatorFunctionBuilder.cpp b/es2panda/compiler/function/generatorFunctionBuilder.cpp index e302dfe984..945ceef06a 100644 --- a/es2panda/compiler/function/generatorFunctionBuilder.cpp +++ b/es2panda/compiler/function/generatorFunctionBuilder.cpp @@ -40,7 +40,6 @@ void GeneratorFunctionBuilder::CleanUp(const ir::ScriptFunction *node) const pg_->SetLabel(node, labelSet.TryEnd()); pg_->SetLabel(node, labelSet.CatchBegin()); - pg_->GeneratorComplete(node, funcObj_); pg_->EmitThrow(node); pg_->SetLabel(node, labelSet.CatchEnd()); } @@ -56,6 +55,11 @@ void GeneratorFunctionBuilder::ImplicitReturn(const ir::AstNode *node) const DirectReturn(node); } +void GeneratorFunctionBuilder::ExplicitReturn(const ir::AstNode *node) const +{ + DirectReturn(node); +} + void GeneratorFunctionBuilder::Yield(const ir::AstNode *node) { RegScope rs(pg_); diff --git a/es2panda/compiler/function/generatorFunctionBuilder.h b/es2panda/compiler/function/generatorFunctionBuilder.h index 6b3b96acb3..9032a61ee1 100644 --- a/es2panda/compiler/function/generatorFunctionBuilder.h +++ b/es2panda/compiler/function/generatorFunctionBuilder.h @@ -49,6 +49,7 @@ public: void DirectReturn(const ir::AstNode *node) const override; void ImplicitReturn(const ir::AstNode *node) const override; + void ExplicitReturn(const ir::AstNode *node) const override; void Yield(const ir::AstNode *node) override; diff --git a/es2panda/ir/statements/returnStatement.cpp b/es2panda/ir/statements/returnStatement.cpp index dcca0e2e3a..cce75df25c 100644 --- a/es2panda/ir/statements/returnStatement.cpp +++ b/es2panda/ir/statements/returnStatement.cpp @@ -57,7 +57,7 @@ void ReturnStatement::Compile(compiler::PandaGen *pg) const if (argument_) { pg->ValidateClassDirectReturn(this); - pg->DirectReturn(this); + pg->ExplicitReturn(this); } else { pg->ImplicitReturn(this); } diff --git a/es2panda/test/compiler/js/iteratorclose-uncallable-return-test-1-expected.txt b/es2panda/test/compiler/js/iteratorclose-uncallable-return-test-1-expected.txt new file mode 100644 index 0000000000..a247b96d92 --- /dev/null +++ b/es2panda/test/compiler/js/iteratorclose-uncallable-return-test-1-expected.txt @@ -0,0 +1,2 @@ +1 +123 diff --git a/es2panda/test/compiler/js/iteratorclose-uncallable-return-test-1.js b/es2panda/test/compiler/js/iteratorclose-uncallable-return-test-1.js new file mode 100644 index 0000000000..5bb33fa2a0 --- /dev/null +++ b/es2panda/test/compiler/js/iteratorclose-uncallable-return-test-1.js @@ -0,0 +1,16 @@ +"use strict"; +var iterable = {}; + +iterable[Symbol.iterator] = function() { + return { + next: function() { + return { done: false, value: 1 }; + }, + return: 1 + }; +}; + +for (let i of iterable) { + print(i); + throw "123"; +} diff --git a/es2panda/test/compiler/js/iteratorclose-undefined-return-test-1-expected.txt b/es2panda/test/compiler/js/iteratorclose-undefined-return-test-1-expected.txt new file mode 100644 index 0000000000..a247b96d92 --- /dev/null +++ b/es2panda/test/compiler/js/iteratorclose-undefined-return-test-1-expected.txt @@ -0,0 +1,2 @@ +1 +123 diff --git a/es2panda/test/compiler/js/iteratorclose-undefined-return-test-1.js b/es2panda/test/compiler/js/iteratorclose-undefined-return-test-1.js new file mode 100644 index 0000000000..c39bf3e058 --- /dev/null +++ b/es2panda/test/compiler/js/iteratorclose-undefined-return-test-1.js @@ -0,0 +1,16 @@ +"use strict"; +var iterable = {}; + +iterable[Symbol.iterator] = function() { + return { + next: function() { + return { done: false, value: 1 }; + }, + return: undefined + }; +}; + +for (let i of iterable) { + print(i); + throw "123"; +} diff --git a/test262/es2021_tests.txt b/test262/es2021_tests.txt index c10ef55e48..97451dbb7d 100644 --- a/test262/es2021_tests.txt +++ b/test262/es2021_tests.txt @@ -1214,4 +1214,2155 @@ built-ins/RegExp/match-indices/indices-array-unicode-property-names.js built-ins/RegExp/unicode_restricted_identity_escape_u.js built-ins/RegExp/unicode_restricted_identity_escape_x.js built-ins/JSON/stringify/value-string-escape-unicode.js -built-ins/Function/prototype/toString/unicode.js \ No newline at end of file +built-ins/Function/prototype/toString/unicode.js +language/expressions/async-generator/dflt-params-arg-val-not-undefined.js +language/expressions/async-generator/named-strict-error-reassign-fn-name-in-body-in-arrow.js +language/expressions/async-generator/yield-star-getiter-async-not-callable-number-throw.js +language/expressions/async-generator/named-yield-star-next-then-get-abrupt.js +language/expressions/async-generator/yield-star-async-return.js +language/expressions/async-generator/named-yield-star-next-not-callable-number-throw.js +language/expressions/async-generator/yield-star-next-call-done-get-abrupt.js +language/expressions/async-generator/await-as-binding-identifier-escaped.js +language/expressions/async-generator/named-yield-star-getiter-async-not-callable-string-throw.js +language/expressions/async-generator/expression-await-promise-as-yield-operand.js +language/expressions/async-generator/forbidden-ext/b2/async-gen-named-func-expr-forbidden-ext-indirect-access-own-prop-caller-get.js +language/expressions/async-generator/forbidden-ext/b2/async-gen-func-expr-forbidden-ext-indirect-access-own-prop-caller-get.js +language/expressions/async-generator/forbidden-ext/b2/async-gen-named-func-expr-forbidden-ext-indirect-access-own-prop-caller-value.js +language/expressions/async-generator/forbidden-ext/b2/async-gen-named-func-expr-forbidden-ext-indirect-access-prop-caller.js +language/expressions/async-generator/forbidden-ext/b2/async-gen-func-expr-forbidden-ext-indirect-access-prop-caller.js +language/expressions/async-generator/forbidden-ext/b2/async-gen-func-expr-forbidden-ext-indirect-access-own-prop-caller-value.js +language/expressions/async-generator/forbidden-ext/b1/async-gen-func-expr-forbidden-ext-direct-access-prop-arguments.js +language/expressions/async-generator/forbidden-ext/b1/async-gen-named-func-expr-forbidden-ext-direct-access-prop-caller.js +language/expressions/async-generator/forbidden-ext/b1/async-gen-named-func-expr-forbidden-ext-direct-access-prop-arguments.js +language/expressions/async-generator/forbidden-ext/b1/async-gen-func-expr-forbidden-ext-direct-access-prop-caller.js +language/expressions/async-generator/named-dflt-params-ref-later.js +language/expressions/async-generator/yield-promise-reject-next-yield-star-async-iterator.js +language/expressions/async-generator/named-unscopables-with-in-nested-fn.js +language/expressions/async-generator/named-yield-star-getiter-async-returns-boolean-throw.js +language/expressions/async-generator/yield-star-getiter-async-returns-string-throw.js +language/expressions/async-generator/named-yield-as-binding-identifier-escaped.js +language/expressions/async-generator/yield-star-getiter-sync-not-callable-string-throw.js +language/expressions/async-generator/yield-star-getiter-async-throw-method-is-null.js +language/expressions/async-generator/await-as-binding-identifier.js +language/expressions/async-generator/yield-star-getiter-async-return-method-is-null.js +language/expressions/async-generator/early-errors-expression-eval-in-formal-parameters.js +language/expressions/async-generator/named-yield-as-label-identifier-escaped.js +language/expressions/async-generator/params-trailing-comma-multiple.js +language/expressions/async-generator/yield-promise-reject-next.js +language/expressions/async-generator/named-yield-as-identifier-reference.js +language/expressions/async-generator/early-errors-expression-label-name-yield.js +language/expressions/async-generator/named-yield-star-getiter-sync-returns-undefined-throw.js +language/expressions/async-generator/named-yield-star-getiter-async-returns-number-throw.js +language/expressions/async-generator/named-yield-spread-arr-multiple.js +language/expressions/async-generator/yield-star-next-not-callable-object-throw.js +language/expressions/async-generator/yield-star-getiter-sync-returns-undefined-throw.js +language/expressions/async-generator/named-yield-star-async-next.js +language/expressions/async-generator/default-proto.js +language/expressions/async-generator/yield-star-getiter-sync-returns-number-throw.js +language/expressions/async-generator/named-yield-star-next-then-non-callable-object-fulfillpromise.js +language/expressions/async-generator/named-yield-star-next-non-object-ignores-then.js +language/expressions/async-generator/named-yield-star-getiter-async-not-callable-number-throw.js +language/expressions/async-generator/await-as-label-identifier.js +language/expressions/async-generator/named-yield-star-getiter-sync-not-callable-number-throw.js +language/expressions/async-generator/named-yield-identifier-spread-non-strict.js +language/expressions/async-generator/yield-star-next-then-non-callable-string-fulfillpromise.js +language/expressions/async-generator/named-yield-spread-arr-single.js +language/expressions/async-generator/yield-star-getiter-async-null-sync-get-abrupt.js +language/expressions/async-generator/early-errors-expression-not-simple-assignment-target.js +language/expressions/async-generator/named-strict-error-reassign-fn-name-in-body-in-eval.js +language/expressions/async-generator/yield-star-getiter-sync-not-callable-number-throw.js +language/expressions/async-generator/named-yield-star-getiter-async-not-callable-symbol-throw.js +language/expressions/async-generator/early-errors-expression-yield-as-function-binding-identifier.js +language/expressions/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js +language/expressions/async-generator/early-errors-expression-body-contains-super-call.js +language/expressions/async-generator/yield-as-binding-identifier.js +language/expressions/async-generator/named-rest-param-strict-body.js +language/expressions/async-generator/named-yield-star-next-then-non-callable-null-fulfillpromise.js +language/expressions/async-generator/named-yield-star-getiter-sync-returns-symbol-throw.js +language/expressions/async-generator/named-yield-star-next-then-non-callable-symbol-fulfillpromise.js +language/expressions/async-generator/yield-star-next-not-callable-symbol-throw.js +language/expressions/async-generator/dflt-params-ref-later.js +language/expressions/async-generator/named-no-strict-reassign-fn-name-in-body-in-arrow.js +language/expressions/async-generator/named-await-as-label-identifier-escaped.js +language/expressions/async-generator/named-yield-star-getiter-sync-not-callable-symbol-throw.js +language/expressions/async-generator/named-yield-star-next-then-non-callable-boolean-fulfillpromise.js +language/expressions/async-generator/named-yield-star-getiter-async-returns-null-throw.js +language/expressions/async-generator/named-yield-star-getiter-async-get-abrupt.js +language/expressions/async-generator/named-yield-star-getiter-sync-returns-null-throw.js +language/expressions/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js +language/expressions/async-generator/named-yield-star-expr-abrupt.js +language/expressions/async-generator/named-yield-star-getiter-async-returns-string-throw.js +language/expressions/async-generator/named-yield-star-getiter-async-undefined-sync-get-abrupt.js +language/expressions/async-generator/named-yield-star-sync-return.js +language/expressions/async-generator/object-destructuring-param-strict-body.js +language/expressions/async-generator/yield-star-next-not-callable-null-throw.js +language/expressions/async-generator/named-yield-star-next-then-non-callable-string-fulfillpromise.js +language/expressions/async-generator/named-yield-star-async-throw.js +language/expressions/async-generator/yield-star-next-not-callable-number-throw.js +language/expressions/async-generator/yield-star-next-then-non-callable-symbol-fulfillpromise.js +language/expressions/async-generator/named-array-destructuring-param-strict-body.js +language/expressions/async-generator/yield-star-getiter-sync-returns-null-throw.js +language/expressions/async-generator/named-yield-star-getiter-sync-returns-string-throw.js +language/expressions/async-generator/named-yield-as-label-identifier.js +language/expressions/async-generator/early-errors-expression-formals-contains-await.js +language/expressions/async-generator/named-rest-params-trailing-comma-early-error.js +language/expressions/async-generator/named-dflt-params-duplicates.js +language/expressions/async-generator/dflt-params-abrupt.js +language/expressions/async-generator/named-yield-star-getiter-sync-get-abrupt.js +language/expressions/async-generator/yield-star-getiter-sync-not-callable-boolean-throw.js +language/expressions/async-generator/named-yield-star-getiter-sync-returns-number-throw.js +language/expressions/async-generator/named-yield-star-getiter-async-not-callable-object-throw.js +language/expressions/async-generator/expression-await-thenable-as-yield-operand.js +language/expressions/async-generator/yield-as-label-identifier-escaped.js +language/expressions/async-generator/yield-thenable-create-resolving-functions-resolve.js +language/expressions/async-generator/yield-star-getiter-async-not-callable-string-throw.js +language/expressions/async-generator/yield-identifier-spread-non-strict.js +language/expressions/async-generator/yield-star-next-then-non-callable-undefined-fulfillpromise.js +language/expressions/async-generator/named-params-trailing-comma-multiple.js +language/expressions/async-generator/named-strict-error-reassign-fn-name-in-body.js +language/expressions/async-generator/named-yield-star-getiter-sync-not-callable-boolean-throw.js +language/expressions/async-generator/eval-var-scope-syntax-err.js +language/expressions/async-generator/named-dflt-params-abrupt.js +language/expressions/async-generator/named-yield-star-sync-next.js +language/expressions/async-generator/yield-star-next-not-callable-boolean-throw.js +language/expressions/async-generator/generator-created-after-decl-inst.js +language/expressions/async-generator/named-yield-star-getiter-sync-not-callable-object-throw.js +language/expressions/async-generator/yield-spread-arr-single.js +language/expressions/async-generator/expression-yield-star-before-newline.js +language/expressions/async-generator/yield-star-next-call-returns-abrupt.js +language/expressions/async-generator/named-yield-promise-reject-next-yield-star-sync-iterator.js +language/expressions/async-generator/yield-star-async-next.js +language/expressions/async-generator/yield-star-getiter-async-returns-symbol-throw.js +language/expressions/async-generator/early-errors-expression-formals-contains-yield.js +language/expressions/async-generator/unscopables-with.js +language/expressions/async-generator/yield-star-getiter-async-returns-undefined-throw.js +language/expressions/async-generator/named-dflt-params-trailing-comma.js +language/expressions/async-generator/named-yield-identifier-non-strict.js +language/expressions/async-generator/named-yield-star-async-return.js +language/expressions/async-generator/yield-star-getiter-sync-returns-symbol-throw.js +language/expressions/async-generator/yield-star-next-then-get-abrupt.js +language/expressions/async-generator/yield-promise-reject-next-catch.js +language/expressions/async-generator/yield-spread-arr-multiple.js +language/expressions/async-generator/early-errors-expression-await-as-function-binding-identifier.js +language/expressions/async-generator/yield-star-getiter-sync-get-abrupt.js +language/expressions/async-generator/named-yield-promise-reject-next-yield-star-async-iterator.js +language/expressions/async-generator/named-dflt-params-ref-self.js +language/expressions/async-generator/named-await-as-binding-identifier-escaped.js +language/expressions/async-generator/named-dflt-params-arg-val-not-undefined.js +language/expressions/async-generator/named-yield-star-next-not-callable-boolean-throw.js +language/expressions/async-generator/yield-star-getiter-async-not-callable-boolean-throw.js +language/expressions/async-generator/named-yield-star-getiter-async-returns-undefined-throw.js +language/expressions/async-generator/yield-star-next-not-callable-string-throw.js +language/expressions/async-generator/named-await-as-label-identifier.js +language/expressions/async-generator/named-yield-star-next-not-callable-undefined-throw.js +language/expressions/async-generator/named-yield-star-getiter-async-not-callable-boolean-throw.js +language/expressions/async-generator/early-errors-expression-formals-contains-yield-expr.js +language/expressions/async-generator/early-errors-expression-binding-identifier-eval.js +language/expressions/async-generator/yield-star-async-throw.js +language/expressions/async-generator/name.js +language/expressions/async-generator/yield-star-next-then-non-callable-null-fulfillpromise.js +language/expressions/async-generator/dflt-params-ref-prior.js +language/expressions/async-generator/yield-star-sync-throw.js +language/expressions/async-generator/named-yield-identifier-strict.js +language/expressions/async-generator/yield-star-next-non-object-ignores-then.js +language/expressions/async-generator/dflt-params-arg-val-undefined.js +language/expressions/async-generator/named-yield-star-next-not-callable-object-throw.js +language/expressions/async-generator/named-no-strict-reassign-fn-name-in-body.js +language/expressions/async-generator/yield-star-next-then-non-callable-number-fulfillpromise.js +language/expressions/async-generator/yield-identifier-strict.js +language/expressions/async-generator/early-errors-expression-body-contains-super-property.js +language/expressions/async-generator/named-yield-as-identifier-reference-escaped.js +language/expressions/async-generator/named-yield-star-getiter-sync-returns-abrupt.js +language/expressions/async-generator/named-dflt-params-arg-val-undefined.js +language/expressions/async-generator/expression-await-as-yield-operand.js +language/expressions/async-generator/yield-star-getiter-async-returns-boolean-throw.js +language/expressions/async-generator/named-no-strict-reassign-fn-name-in-body-in-eval.js +language/expressions/async-generator/named-yield-star-next-then-non-callable-number-fulfillpromise.js +language/expressions/async-generator/early-errors-expression-arguments-in-formal-parameters.js +language/expressions/async-generator/yield-star-getiter-async-returns-number-throw.js +language/expressions/async-generator/early-errors-expression-formals-contains-await-expr.js +language/expressions/async-generator/named-yield-star-next-not-callable-symbol-throw.js +language/expressions/async-generator/yield-star-getiter-async-undefined-sync-get-abrupt.js +language/expressions/async-generator/yield-star-getiter-sync-returns-abrupt.js +language/expressions/async-generator/named-yield-star-getiter-async-null-sync-get-abrupt.js +language/expressions/async-generator/yield-thenable-create-resolving-functions-reject.js +language/expressions/async-generator/named-yield-star-getiter-async-returns-abrupt.js +language/expressions/async-generator/named-dflt-params-rest.js +language/expressions/async-generator/yield-star-getiter-sync-returns-string-throw.js +language/expressions/async-generator/early-errors-expression-formals-contains-super-call.js +language/expressions/async-generator/await-as-label-identifier-escaped.js +language/expressions/async-generator/yield-star-sync-return.js +language/expressions/async-generator/named-yield-star-next-call-returns-abrupt.js +language/expressions/async-generator/yield-star-next-not-callable-undefined-throw.js +language/expressions/async-generator/dflt-params-duplicates.js +language/expressions/async-generator/expression-yield-as-operand.js +language/expressions/async-generator/rest-params-trailing-comma-early-error.js +language/expressions/async-generator/eval-body-proto-realm.js +language/expressions/async-generator/early-errors-expression-formals-body-duplicate-let.js +language/expressions/async-generator/named-yield-spread-obj.js +language/expressions/async-generator/yield-star-getiter-async-get-abrupt.js +language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-async-iterator.js +language/expressions/async-generator/yield-identifier-spread-strict.js +language/expressions/async-generator/named-yield-star-next-call-value-get-abrupt.js +language/expressions/async-generator/named-params-trailing-comma-single.js +language/expressions/async-generator/expression-yield-as-statement.js +language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-sync-iterator.js +language/expressions/async-generator/named-await-as-identifier-reference.js +language/expressions/async-generator/named-dflt-params-ref-prior.js +language/expressions/async-generator/array-destructuring-param-strict-body.js +language/expressions/async-generator/named-yield-star-next-not-callable-string-throw.js +language/expressions/async-generator/expression-yield-newline.js +language/expressions/async-generator/await-as-identifier-reference.js +language/expressions/async-generator/named-yield-star-next-get-abrupt.js +language/expressions/async-generator/yield-star-getiter-sync-not-callable-object-throw.js +language/expressions/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js +language/expressions/async-generator/named-await-as-identifier-reference-escaped.js +language/expressions/async-generator/yield-star-next-get-abrupt.js +language/expressions/async-generator/unscopables-with-in-nested-fn.js +language/expressions/async-generator/named-yield-promise-reject-next-catch.js +language/expressions/async-generator/dflt-params-ref-self.js +language/expressions/async-generator/yield-star-getiter-sync-not-callable-symbol-throw.js +language/expressions/async-generator/early-errors-expression-yield-star-after-newline.js +language/expressions/async-generator/named-yield-star-getiter-sync-not-callable-string-throw.js +language/expressions/async-generator/named-yield-star-getiter-sync-returns-boolean-throw.js +language/expressions/async-generator/named-yield-star-next-call-done-get-abrupt.js +language/expressions/async-generator/dflt-params-trailing-comma.js +language/expressions/async-generator/dflt-params-rest.js +language/expressions/async-generator/params-trailing-comma-single.js +language/expressions/async-generator/early-errors-expression-binding-identifier-arguments.js +language/expressions/async-generator/yield-as-identifier-reference.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-ary-elision-iter.js +language/expressions/async-generator/dstr/named-obj-init-null.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-ary-trailing-comma.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-id-trailing-comma.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-id-init-skipped.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-ary-val-null.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-empty.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-undef.js +language/expressions/async-generator/dstr/ary-ptrn-elem-obj-prop-id-init.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-unresolvable.js +language/expressions/async-generator/dstr/named-dflt-ary-init-iter-get-err-array-prototype.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-ary-elision-init.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-init-id.js +language/expressions/async-generator/dstr/ary-ptrn-rest-ary-elem.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-id-iter-val-err.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-fn-name-fn.js +language/expressions/async-generator/dstr/ary-ptrn-elem-ary-val-null.js +language/expressions/async-generator/dstr/ary-ptrn-elem-ary-elem-iter.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-init-ary.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-iter-done.js +language/expressions/async-generator/dstr/named-obj-ptrn-rest-getter.js +language/expressions/async-generator/dstr/obj-ptrn-id-init-fn-name-fn.js +language/expressions/async-generator/dstr/named-dflt-ary-init-iter-no-close.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-iter-complete.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-throws.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-obj-prop-id.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elision-step-err.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-rest-val-obj.js +language/expressions/async-generator/dstr/named-obj-ptrn-id-init-skipped.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-obj-value-null.js +language/expressions/async-generator/dstr/named-dflt-obj-init-null.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-ary-elem.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-obj-val-null.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-obj-prop-id-init.js +language/expressions/async-generator/dstr/named-obj-ptrn-id-get-value-err.js +language/expressions/async-generator/dstr/ary-ptrn-rest-init-id.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-ary-empty-init.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-obj-id.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-iter-val-array-prototype.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-not-final-ary.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-obj-prop-id.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-ary-elision-init.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-id-iter-val-err.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-obj-id-init.js +language/expressions/async-generator/dstr/ary-ptrn-rest-id-iter-step-err.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-ary-elem-iter.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-id-elision-next-err.js +language/expressions/async-generator/dstr/obj-ptrn-prop-id-trailing-comma.js +language/expressions/async-generator/dstr/named-ary-init-iter-close.js +language/expressions/async-generator/dstr/obj-init-null.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-unresolvable.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-id-init.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-ary-empty-iter.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-ary-elision.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-obj-value-undef.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-obj.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-eval-err.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-ary-elision-init.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-exhausted.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-unresolvable.js +language/expressions/async-generator/dstr/ary-ptrn-rest-init-ary.js +language/expressions/async-generator/dstr/named-obj-ptrn-empty.js +language/expressions/async-generator/dstr/named-ary-init-iter-get-err.js +language/expressions/async-generator/dstr/obj-ptrn-id-init-unresolvable.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-not-final-obj.js +language/expressions/async-generator/dstr/obj-ptrn-list-err.js +language/expressions/async-generator/dstr/obj-ptrn-prop-id-init-throws.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-ary-elem-init.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-undef.js +language/expressions/async-generator/dstr/ary-ptrn-rest-obj-prop-id.js +language/expressions/async-generator/dstr/obj-ptrn-id-get-value-err.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elision.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-ary-rest-init.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-ary-value-null.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-ary-rest-iter.js +language/expressions/async-generator/dstr/ary-ptrn-rest-id.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-ary-init.js +language/expressions/async-generator/dstr/obj-ptrn-id-init-fn-name-arrow.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-iter-val-err.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-ary-value-null.js +language/expressions/async-generator/dstr/obj-ptrn-prop-obj-value-undef.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-obj-init.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-list-err.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elision-exhausted.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-fn-name-gen.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-obj.js +language/expressions/async-generator/dstr/obj-ptrn-rest-val-obj.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-init-ary.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-id-iter-val-err.js +language/expressions/async-generator/dstr/ary-init-iter-close.js +language/expressions/async-generator/dstr/obj-ptrn-prop-obj-init.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-obj-value-undef.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-fn-name-cover.js +language/expressions/async-generator/dstr/dflt-obj-init-undefined.js +language/expressions/async-generator/dstr/ary-ptrn-elem-obj-id.js +language/expressions/async-generator/dstr/obj-ptrn-id-init-skipped.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-id.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-obj-value-null.js +language/expressions/async-generator/dstr/dflt-ary-init-iter-get-err-array-prototype.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-ary-empty.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-ary-rest.js +language/expressions/async-generator/dstr/named-dflt-ary-init-iter-get-err.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-get-value-err.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-id-direct.js +language/expressions/async-generator/dstr/ary-ptrn-rest-ary-rest.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-iter-complete.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-undef.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-fn-name-class.js +language/expressions/async-generator/dstr/ary-init-iter-get-err-array-prototype.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-init-obj.js +language/expressions/async-generator/dstr/obj-ptrn-id-init-throws.js +language/expressions/async-generator/dstr/named-obj-ptrn-id-trailing-comma.js +language/expressions/async-generator/dstr/named-obj-ptrn-id-init-unresolvable.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-iter-val-err.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-empty.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-id-init-unresolvable.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-ary-empty-iter.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-init-id.js +language/expressions/async-generator/dstr/obj-init-undefined.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-id.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-empty.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-hole.js +language/expressions/async-generator/dstr/ary-ptrn-rest-not-final-obj.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-obj-prop-id-init.js +language/expressions/async-generator/dstr/named-obj-ptrn-list-err.js +language/expressions/async-generator/dstr/obj-ptrn-rest-skip-non-enumerable.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-list-err.js +language/expressions/async-generator/dstr/dflt-ary-init-iter-no-close.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-throws.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-iter-val-array-prototype.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-obj-val-null.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-id-direct.js +language/expressions/async-generator/dstr/named-obj-ptrn-id-init-fn-name-fn.js +language/expressions/async-generator/dstr/named-ary-ptrn-elision.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-obj-id.js +language/expressions/async-generator/dstr/ary-ptrn-elem-ary-rest-iter.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-id-trailing-comma.js +language/expressions/async-generator/dstr/obj-ptrn-prop-id.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-obj-val-null.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-hole.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-throws.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-skipped.js +language/expressions/async-generator/dstr/obj-ptrn-id-init-fn-name-class.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-skipped.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-exhausted.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-arrow.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-id-elision.js +language/expressions/async-generator/dstr/named-dflt-ary-init-iter-close.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-ary-empty-init.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-gen.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-obj-value-undef.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-ary-elision-iter.js +language/expressions/async-generator/dstr/dflt-ary-init-iter-close.js +language/expressions/async-generator/dstr/named-obj-init-undefined.js +language/expressions/async-generator/dstr/named-obj-ptrn-id-init-fn-name-cover.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-init-ary.js +language/expressions/async-generator/dstr/ary-ptrn-elem-ary-empty-iter.js +language/expressions/async-generator/dstr/named-obj-ptrn-rest-skip-non-enumerable.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-hole.js +language/expressions/async-generator/dstr/ary-ptrn-rest-not-final-id.js +language/expressions/async-generator/dstr/obj-ptrn-prop-ary-init.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-id-init-unresolvable.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-ary-rest.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elision.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-init-id.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-obj.js +language/expressions/async-generator/dstr/named-ary-init-iter-no-close.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-ary-init.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-iter-done.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-iter-step-err.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-obj-id.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-id-exhausted.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-val-err.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-fn-name-fn.js +language/expressions/async-generator/dstr/ary-ptrn-elision-step-err.js +language/expressions/async-generator/dstr/named-ary-ptrn-elision-exhausted.js +language/expressions/async-generator/dstr/ary-ptrn-elem-ary-empty-init.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-ary-rest-iter.js +language/expressions/async-generator/dstr/obj-ptrn-empty.js +language/expressions/async-generator/dstr/ary-ptrn-rest-ary-empty.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-ary.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-throws.js +language/expressions/async-generator/dstr/dflt-ary-init-iter-get-err.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-throws.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-ary-empty.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-rest-getter.js +language/expressions/async-generator/dstr/ary-ptrn-rest-id-elision.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-ary-elision.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-rest-getter.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-complete.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-obj-prop-id.js +language/expressions/async-generator/dstr/named-obj-ptrn-id-init-fn-name-arrow.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-not-final-id.js +language/expressions/async-generator/dstr/ary-ptrn-rest-id-iter-val-err.js +language/expressions/async-generator/dstr/named-obj-ptrn-id-init-fn-name-class.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-undef.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-ary-empty-init.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-id-trailing-comma.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-fn-name-class.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-fn-name-arrow.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-id-init.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-exhausted.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-fn-name-gen.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-fn-name-fn.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-rest-val-obj.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-id-iter-step-err.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-id-init-skipped.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-not-final-ary.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-obj-init.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-not-final-ary.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-obj-value-null.js +language/expressions/async-generator/dstr/named-ary-ptrn-empty.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-init-obj.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-hole.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-id-direct.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-id-init-skipped.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-skipped.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-id-iter-step-err.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-done.js +language/expressions/async-generator/dstr/ary-ptrn-elem-ary-elem-init.js +language/expressions/async-generator/dstr/obj-ptrn-id-trailing-comma.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-id-init-throws.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-obj-id.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-id.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-id-get-value-err.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-ary-elision-iter.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-iter-complete.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-ary-rest-init.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-id-iter-step-err.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-iter-step-err.js +language/expressions/async-generator/dstr/obj-ptrn-prop-obj.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-ary-trailing-comma.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-obj-prop-id.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-ary-elem-iter.js +language/expressions/async-generator/dstr/ary-ptrn-elem-ary-rest-init.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-gen.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-not-final-obj.js +language/expressions/async-generator/dstr/ary-ptrn-elem-obj-val-null.js +language/expressions/async-generator/dstr/obj-ptrn-rest-getter.js +language/expressions/async-generator/dstr/ary-ptrn-elem-ary-elision-iter.js +language/expressions/async-generator/dstr/ary-ptrn-elem-obj-val-undef.js +language/expressions/async-generator/dstr/ary-ptrn-rest-id-exhausted.js +language/expressions/async-generator/dstr/obj-ptrn-prop-id-init.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-id-init-throws.js +language/expressions/async-generator/dstr/ary-ptrn-elem-obj-id-init.js +language/expressions/async-generator/dstr/ary-ptrn-rest-id-direct.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-id-trailing-comma.js +language/expressions/async-generator/dstr/named-ary-init-iter-get-err-array-prototype.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-fn-name-arrow.js +language/expressions/async-generator/dstr/ary-ptrn-elision.js +language/expressions/async-generator/dstr/ary-ptrn-rest-id-elision-next-err.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-obj-prop-id.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-val.js +language/expressions/async-generator/dstr/named-ary-ptrn-elision-step-err.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-iter-step-err.js +language/expressions/async-generator/dstr/ary-init-iter-get-err.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-id-get-value-err.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-init-obj.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-ary-empty-iter.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-id-get-value-err.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-id-elision.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-id-init.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-eval-err.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-obj-prop-id.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-fn-name-gen.js +language/expressions/async-generator/dstr/ary-ptrn-elision-exhausted.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-iter-val-array-prototype.js +language/expressions/async-generator/dstr/obj-ptrn-prop-obj-value-null.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-ary-elem-iter.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-ary-elem-init.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-ary-empty.js +language/expressions/async-generator/dstr/named-ary-name-iter-val.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-ary-init.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-rest-skip-non-enumerable.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-ary-elem.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-iter-done.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-step-err.js +language/expressions/async-generator/dstr/named-dflt-obj-init-undefined.js +language/expressions/async-generator/dstr/ary-ptrn-elem-ary-elision-init.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-id-elision-next-err.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-ary-value-null.js +language/expressions/async-generator/dstr/ary-name-iter-val.js +language/expressions/async-generator/dstr/dflt-obj-init-null.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-empty.js +language/expressions/async-generator/dstr/obj-ptrn-prop-ary-value-null.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-id.js +language/expressions/async-generator/dstr/obj-ptrn-id-init-fn-name-gen.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-id.js +language/expressions/async-generator/dstr/obj-ptrn-prop-eval-err.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-iter-val.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-cover.js +language/expressions/async-generator/dstr/ary-ptrn-rest-ary-elision.js +language/expressions/async-generator/dstr/ary-init-iter-no-close.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-exhausted.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-ary-rest-init.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-obj-val-undef.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-ary-rest.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-ary.js +language/expressions/async-generator/dstr/ary-ptrn-empty.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-skipped.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-unresolvable.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-obj-id.js +language/expressions/async-generator/dstr/obj-ptrn-id-init-fn-name-cover.js +language/expressions/async-generator/dstr/named-obj-ptrn-id-init-fn-name-gen.js +language/expressions/async-generator/dstr/obj-ptrn-prop-id-init-skipped.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-ary-elision.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-fn.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elision-step-err.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-ary-val-null.js +language/expressions/async-generator/dstr/obj-ptrn-prop-ary-trailing-comma.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-fn-name-cover.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-fn.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-fn-name-cover.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-id-get-value-err.js +language/expressions/async-generator/dstr/ary-ptrn-rest-init-obj.js +language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-class.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-id-exhausted.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-not-final-id.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-obj-id-init.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-iter-val-err.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-skipped.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-ary.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-obj-id.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-obj-val-undef.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-class.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-skipped.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-id-elision.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-unresolvable.js +language/expressions/async-generator/dstr/ary-ptrn-rest-obj-id.js +language/expressions/async-generator/dstr/named-obj-ptrn-id-init-throws.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-not-final-obj.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-obj-val-undef.js +language/expressions/async-generator/dstr/obj-ptrn-prop-id-get-value-err.js +language/expressions/async-generator/dstr/dflt-ary-name-iter-val.js +language/expressions/async-generator/dstr/obj-ptrn-prop-ary.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-ary-rest-iter.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-obj-init.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-id-elision-next-err.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-not-final-id.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-rest-id.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-throws.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elision-exhausted.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-obj-id-init.js +language/expressions/async-generator/dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-prop-id-init-throws.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-trailing-comma.js +language/expressions/async-generator/dstr/ary-ptrn-rest-not-final-ary.js +language/expressions/async-generator/dstr/named-obj-ptrn-prop-eval-err.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-rest-id-exhausted.js +language/expressions/async-generator/dstr/named-obj-ptrn-rest-val-obj.js +language/expressions/async-generator/dstr/named-ary-ptrn-rest-ary-elem.js +language/expressions/async-generator/dstr/ary-ptrn-elem-obj-prop-id.js +language/expressions/async-generator/dstr/named-dflt-ary-name-iter-val.js +language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-iter-val.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-iter-val.js +language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-fn-name-class.js +language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-ary-val-null.js +language/expressions/async-generator/dstr/obj-ptrn-prop-id-init-unresolvable.js +language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-ary-elem-init.js +language/expressions/async-generator/yield-spread-obj.js +language/expressions/async-generator/yield-star-getiter-async-not-callable-object-throw.js +language/expressions/async-generator/escaped-async.js +language/expressions/async-generator/early-errors-expression-formals-body-duplicate-const.js +language/expressions/async-generator/named-yield-star-next-then-non-callable-undefined-fulfillpromise.js +language/expressions/async-generator/yield-star-getiter-async-not-callable-symbol-throw.js +language/expressions/async-generator/named-eval-var-scope-syntax-err.js +language/expressions/async-generator/named-unscopables-with.js +language/expressions/async-generator/yield-star-getiter-sync-returns-boolean-throw.js +language/expressions/async-generator/yield-star-sync-next.js +language/expressions/async-generator/named-object-destructuring-param-strict-body.js +language/expressions/async-generator/early-errors-expression-label-name-await.js +language/expressions/async-generator/early-errors-expression-formals-contains-super-property.js +language/expressions/async-generator/named-yield-promise-reject-next.js +language/expressions/async-generator/yield-star-next-then-non-callable-boolean-fulfillpromise.js +language/expressions/async-generator/yield-as-label-identifier.js +language/expressions/async-generator/named-yield-star-sync-throw.js +language/expressions/async-generator/named-yield-identifier-spread-strict.js +language/expressions/async-generator/yield-identifier-non-strict.js +language/expressions/async-generator/yield-star-next-call-value-get-abrupt.js +language/expressions/async-generator/yield-star-next-then-non-callable-object-fulfillpromise.js +language/expressions/async-generator/named-yield-as-binding-identifier.js +language/expressions/async-generator/yield-star-getiter-async-returns-abrupt.js +language/expressions/async-generator/yield-as-binding-identifier-escaped.js +language/expressions/async-generator/named-yield-star-getiter-async-returns-symbol-throw.js +language/expressions/async-generator/early-errors-expression-NSPL-with-USD.js +language/expressions/async-generator/rest-param-strict-body.js +language/expressions/async-generator/named-yield-star-next-not-callable-null-throw.js +language/expressions/async-generator/await-as-identifier-reference-escaped.js +language/expressions/async-generator/named-await-as-binding-identifier.js +language/expressions/async-generator/yield-star-expr-abrupt.js +language/expressions/async-generator/yield-as-identifier-reference-escaped.js +language/expressions/async-generator/yield-star-getiter-async-returns-null-throw.js +language/statements/async-generator/dflt-params-arg-val-not-undefined.js +language/statements/async-generator/yield-star-getiter-async-not-callable-number-throw.js +language/statements/async-generator/yield-star-async-return.js +language/statements/async-generator/yield-star-next-call-done-get-abrupt.js +language/statements/async-generator/await-as-binding-identifier-escaped.js +language/statements/async-generator/forbidden-ext/b2/async-gen-func-decl-forbidden-ext-indirect-access-own-prop-caller-get.js +language/statements/async-generator/forbidden-ext/b2/async-gen-func-decl-forbidden-ext-indirect-access-own-prop-caller-value.js +language/statements/async-generator/forbidden-ext/b2/async-gen-func-decl-forbidden-ext-indirect-access-prop-caller.js +language/statements/async-generator/forbidden-ext/b1/async-gen-func-decl-forbidden-ext-direct-access-prop-caller.js +language/statements/async-generator/forbidden-ext/b1/async-gen-func-decl-forbidden-ext-direct-access-prop-arguments.js +language/statements/async-generator/yield-promise-reject-next-yield-star-async-iterator.js +language/statements/async-generator/yield-star-getiter-async-returns-string-throw.js +language/statements/async-generator/yield-star-getiter-sync-not-callable-string-throw.js +language/statements/async-generator/await-as-binding-identifier.js +language/statements/async-generator/params-trailing-comma-multiple.js +language/statements/async-generator/yield-promise-reject-next.js +language/statements/async-generator/yield-star-next-not-callable-object-throw.js +language/statements/async-generator/yield-star-getiter-sync-returns-undefined-throw.js +language/statements/async-generator/yield-star-getiter-sync-returns-number-throw.js +language/statements/async-generator/await-as-label-identifier.js +language/statements/async-generator/yield-star-next-then-non-callable-string-fulfillpromise.js +language/statements/async-generator/yield-star-getiter-async-null-sync-get-abrupt.js +language/statements/async-generator/yield-star-getiter-sync-not-callable-number-throw.js +language/statements/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js +language/statements/async-generator/yield-as-binding-identifier.js +language/statements/async-generator/yield-star-next-not-callable-symbol-throw.js +language/statements/async-generator/dflt-params-ref-later.js +language/statements/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js +language/statements/async-generator/yield-star-normal-notdone-iter-value-throws.js +language/statements/async-generator/object-destructuring-param-strict-body.js +language/statements/async-generator/yield-star-next-not-callable-null-throw.js +language/statements/async-generator/yield-star-async-from-sync-iterator-inaccessible.js +language/statements/async-generator/yield-star-next-not-callable-number-throw.js +language/statements/async-generator/yield-star-next-then-non-callable-symbol-fulfillpromise.js +language/statements/async-generator/yield-star-getiter-sync-returns-null-throw.js +language/statements/async-generator/yield-return-then-getter-ticks.js +language/statements/async-generator/dflt-params-abrupt.js +language/statements/async-generator/yield-star-getiter-sync-not-callable-boolean-throw.js +language/statements/async-generator/yield-as-label-identifier-escaped.js +language/statements/async-generator/return-undefined-implicit-and-explicit.js +language/statements/async-generator/yield-star-getiter-async-not-callable-string-throw.js +language/statements/async-generator/yield-identifier-spread-non-strict.js +language/statements/async-generator/yield-star-next-then-non-callable-undefined-fulfillpromise.js +language/statements/async-generator/eval-var-scope-syntax-err.js +language/statements/async-generator/yield-star-next-not-callable-boolean-throw.js +language/statements/async-generator/generator-created-after-decl-inst.js +language/statements/async-generator/yield-spread-arr-single.js +language/statements/async-generator/yield-star-next-call-returns-abrupt.js +language/statements/async-generator/yield-star-return-then-getter-ticks.js +language/statements/async-generator/yield-star-async-next.js +language/statements/async-generator/yield-star-getiter-async-returns-symbol-throw.js +language/statements/async-generator/unscopables-with.js +language/statements/async-generator/yield-star-getiter-async-returns-undefined-throw.js +language/statements/async-generator/yield-star-throw-notdone-iter-value-throws.js +language/statements/async-generator/yield-star-getiter-sync-returns-symbol-throw.js +language/statements/async-generator/yield-star-next-then-get-abrupt.js +language/statements/async-generator/yield-promise-reject-next-catch.js +language/statements/async-generator/yield-spread-arr-multiple.js +language/statements/async-generator/yield-star-getiter-sync-get-abrupt.js +language/statements/async-generator/yield-star-getiter-async-not-callable-boolean-throw.js +language/statements/async-generator/yield-star-next-not-callable-string-throw.js +language/statements/async-generator/yield-star-async-throw.js +language/statements/async-generator/yield-star-next-then-non-callable-null-fulfillpromise.js +language/statements/async-generator/dflt-params-ref-prior.js +language/statements/async-generator/yield-star-sync-throw.js +language/statements/async-generator/yield-star-next-non-object-ignores-then.js +language/statements/async-generator/dflt-params-arg-val-undefined.js +language/statements/async-generator/yield-star-next-then-non-callable-number-fulfillpromise.js +language/statements/async-generator/yield-identifier-strict.js +language/statements/async-generator/yield-star-return-missing-value-is-awaited.js +language/statements/async-generator/yield-star-getiter-async-returns-boolean-throw.js +language/statements/async-generator/yield-star-getiter-async-returns-number-throw.js +language/statements/async-generator/yield-star-getiter-async-undefined-sync-get-abrupt.js +language/statements/async-generator/yield-star-getiter-sync-returns-abrupt.js +language/statements/async-generator/yield-star-getiter-sync-returns-string-throw.js +language/statements/async-generator/await-as-label-identifier-escaped.js +language/statements/async-generator/yield-star-sync-return.js +language/statements/async-generator/yield-star-next-not-callable-undefined-throw.js +language/statements/async-generator/dflt-params-duplicates.js +language/statements/async-generator/rest-params-trailing-comma-early-error.js +language/statements/async-generator/yield-star-getiter-async-get-abrupt.js +language/statements/async-generator/yield-identifier-spread-strict.js +language/statements/async-generator/array-destructuring-param-strict-body.js +language/statements/async-generator/await-as-identifier-reference.js +language/statements/async-generator/yield-star-getiter-sync-not-callable-object-throw.js +language/statements/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js +language/statements/async-generator/yield-star-next-get-abrupt.js +language/statements/async-generator/unscopables-with-in-nested-fn.js +language/statements/async-generator/dflt-params-ref-self.js +language/statements/async-generator/yield-star-getiter-sync-not-callable-symbol-throw.js +language/statements/async-generator/dflt-params-trailing-comma.js +language/statements/async-generator/dflt-params-rest.js +language/statements/async-generator/params-trailing-comma-single.js +language/statements/async-generator/yield-star-return-notdone-iter-value-throws.js +language/statements/async-generator/yield-as-identifier-reference.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-ary-elision-iter.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-id-init-skipped.js +language/statements/async-generator/dstr/dflt-obj-ptrn-empty.js +language/statements/async-generator/dstr/ary-ptrn-elem-obj-prop-id-init.js +language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-unresolvable.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-ary-elision-init.js +language/statements/async-generator/dstr/ary-ptrn-rest-ary-elem.js +language/statements/async-generator/dstr/ary-ptrn-elem-ary-val-null.js +language/statements/async-generator/dstr/ary-ptrn-elem-ary-elem-iter.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-init-ary.js +language/statements/async-generator/dstr/obj-ptrn-id-init-fn-name-fn.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-iter-complete.js +language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-throws.js +language/statements/async-generator/dstr/dflt-obj-ptrn-rest-val-obj.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-ary-elem.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-obj-val-null.js +language/statements/async-generator/dstr/ary-ptrn-rest-init-id.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-ary-empty-init.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-obj-id.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-not-final-ary.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-id-iter-val-err.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-obj-id-init.js +language/statements/async-generator/dstr/ary-ptrn-rest-id-iter-step-err.js +language/statements/async-generator/dstr/obj-ptrn-prop-id-trailing-comma.js +language/statements/async-generator/dstr/obj-init-null.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-ary-empty-iter.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-obj.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-eval-err.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/async-generator/dstr/ary-ptrn-rest-init-ary.js +language/statements/async-generator/dstr/obj-ptrn-id-init-unresolvable.js +language/statements/async-generator/dstr/obj-ptrn-list-err.js +language/statements/async-generator/dstr/obj-ptrn-prop-id-init-throws.js +language/statements/async-generator/dstr/ary-ptrn-rest-obj-prop-id.js +language/statements/async-generator/dstr/obj-ptrn-id-get-value-err.js +language/statements/async-generator/dstr/ary-ptrn-rest-id.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-ary-init.js +language/statements/async-generator/dstr/obj-ptrn-id-init-fn-name-arrow.js +language/statements/async-generator/dstr/obj-ptrn-prop-obj-value-undef.js +language/statements/async-generator/dstr/dflt-obj-ptrn-list-err.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elision-exhausted.js +language/statements/async-generator/dstr/obj-ptrn-rest-val-obj.js +language/statements/async-generator/dstr/ary-init-iter-close.js +language/statements/async-generator/dstr/obj-ptrn-prop-obj-init.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-id-init-unresolvable.js +language/statements/async-generator/dstr/dflt-obj-init-undefined.js +language/statements/async-generator/dstr/ary-ptrn-elem-obj-id.js +language/statements/async-generator/dstr/obj-ptrn-id-init-skipped.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-id.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-obj-value-null.js +language/statements/async-generator/dstr/dflt-ary-init-iter-get-err-array-prototype.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-id-direct.js +language/statements/async-generator/dstr/ary-ptrn-rest-ary-rest.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-undef.js +language/statements/async-generator/dstr/ary-init-iter-get-err-array-prototype.js +language/statements/async-generator/dstr/obj-ptrn-id-init-throws.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-iter-val-err.js +language/statements/async-generator/dstr/dflt-ary-ptrn-empty.js +language/statements/async-generator/dstr/obj-init-undefined.js +language/statements/async-generator/dstr/ary-ptrn-rest-not-final-obj.js +language/statements/async-generator/dstr/obj-ptrn-rest-skip-non-enumerable.js +language/statements/async-generator/dstr/dflt-ary-init-iter-no-close.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-iter-val-array-prototype.js +language/statements/async-generator/dstr/ary-ptrn-elem-ary-rest-iter.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-id-trailing-comma.js +language/statements/async-generator/dstr/obj-ptrn-prop-id.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-hole.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-throws.js +language/statements/async-generator/dstr/obj-ptrn-id-init-fn-name-class.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-init-skipped.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-exhausted.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-obj-value-undef.js +language/statements/async-generator/dstr/dflt-ary-init-iter-close.js +language/statements/async-generator/dstr/ary-ptrn-elem-ary-empty-iter.js +language/statements/async-generator/dstr/ary-ptrn-rest-not-final-id.js +language/statements/async-generator/dstr/obj-ptrn-prop-ary-init.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elision.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-init-id.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-iter-step-err.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-obj-id.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-val-err.js +language/statements/async-generator/dstr/ary-ptrn-elision-step-err.js +language/statements/async-generator/dstr/ary-ptrn-elem-ary-empty-init.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-ary-rest-iter.js +language/statements/async-generator/dstr/obj-ptrn-empty.js +language/statements/async-generator/dstr/ary-ptrn-rest-ary-empty.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-ary.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-init-throws.js +language/statements/async-generator/dstr/dflt-ary-init-iter-get-err.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-ary-empty.js +language/statements/async-generator/dstr/ary-ptrn-rest-id-elision.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-ary-elision.js +language/statements/async-generator/dstr/dflt-obj-ptrn-rest-getter.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-complete.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-obj-prop-id.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-not-final-id.js +language/statements/async-generator/dstr/ary-ptrn-rest-id-iter-val-err.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-init-undef.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-id-init.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-init-obj.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-init-hole.js +language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-skipped.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-done.js +language/statements/async-generator/dstr/ary-ptrn-elem-ary-elem-init.js +language/statements/async-generator/dstr/obj-ptrn-id-trailing-comma.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-id.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-id-get-value-err.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-ary-rest-init.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-id-iter-step-err.js +language/statements/async-generator/dstr/obj-ptrn-prop-obj.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-ary-elem-iter.js +language/statements/async-generator/dstr/ary-ptrn-elem-ary-rest-init.js +language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-gen.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-not-final-obj.js +language/statements/async-generator/dstr/ary-ptrn-elem-obj-val-null.js +language/statements/async-generator/dstr/obj-ptrn-rest-getter.js +language/statements/async-generator/dstr/ary-ptrn-elem-ary-elision-iter.js +language/statements/async-generator/dstr/ary-ptrn-elem-obj-val-undef.js +language/statements/async-generator/dstr/ary-ptrn-rest-id-exhausted.js +language/statements/async-generator/dstr/obj-ptrn-prop-id-init.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-id-init-throws.js +language/statements/async-generator/dstr/ary-ptrn-elem-obj-id-init.js +language/statements/async-generator/dstr/ary-ptrn-rest-id-direct.js +language/statements/async-generator/dstr/dflt-obj-ptrn-id-trailing-comma.js +language/statements/async-generator/dstr/ary-ptrn-elision.js +language/statements/async-generator/dstr/ary-ptrn-rest-id-elision-next-err.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-obj-prop-id.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-val.js +language/statements/async-generator/dstr/ary-init-iter-get-err.js +language/statements/async-generator/dstr/dflt-obj-ptrn-id-get-value-err.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-unresolvable.js +language/statements/async-generator/dstr/ary-ptrn-elision-exhausted.js +language/statements/async-generator/dstr/obj-ptrn-prop-obj-value-null.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-iter-done.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-step-err.js +language/statements/async-generator/dstr/ary-ptrn-elem-ary-elision-init.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-obj-prop-id-init.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-ary-value-null.js +language/statements/async-generator/dstr/ary-name-iter-val.js +language/statements/async-generator/dstr/dflt-obj-init-null.js +language/statements/async-generator/dstr/obj-ptrn-prop-ary-value-null.js +language/statements/async-generator/dstr/obj-ptrn-id-init-fn-name-gen.js +language/statements/async-generator/dstr/obj-ptrn-prop-eval-err.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-iter-val.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/async-generator/dstr/ary-ptrn-rest-ary-elision.js +language/statements/async-generator/dstr/ary-init-iter-no-close.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-init-exhausted.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-ary-rest.js +language/statements/async-generator/dstr/ary-ptrn-empty.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-init-unresolvable.js +language/statements/async-generator/dstr/obj-ptrn-id-init-fn-name-cover.js +language/statements/async-generator/dstr/obj-ptrn-prop-id-init-skipped.js +language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-fn.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elision-step-err.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-ary-val-null.js +language/statements/async-generator/dstr/obj-ptrn-prop-ary-trailing-comma.js +language/statements/async-generator/dstr/dflt-obj-ptrn-rest-skip-non-enumerable.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/async-generator/dstr/ary-ptrn-rest-init-obj.js +language/statements/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-class.js +language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js +language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-class.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-skipped.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-id-elision.js +language/statements/async-generator/dstr/ary-ptrn-rest-obj-id.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-obj-val-undef.js +language/statements/async-generator/dstr/obj-ptrn-prop-id-get-value-err.js +language/statements/async-generator/dstr/dflt-ary-name-iter-val.js +language/statements/async-generator/dstr/obj-ptrn-prop-ary.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-obj-init.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-iter-val-array-prototype.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-id-elision-next-err.js +language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js +language/statements/async-generator/dstr/dflt-obj-ptrn-prop-ary-trailing-comma.js +language/statements/async-generator/dstr/ary-ptrn-rest-not-final-ary.js +language/statements/async-generator/dstr/dflt-ary-ptrn-rest-id-exhausted.js +language/statements/async-generator/dstr/ary-ptrn-elem-obj-prop-id.js +language/statements/async-generator/dstr/obj-ptrn-prop-id-init-unresolvable.js +language/statements/async-generator/dstr/dflt-ary-ptrn-elem-ary-elem-init.js +language/statements/async-generator/yield-spread-obj.js +language/statements/async-generator/yield-star-getiter-async-not-callable-object-throw.js +language/statements/async-generator/escaped-async.js +language/statements/async-generator/yield-star-getiter-async-not-callable-symbol-throw.js +language/statements/async-generator/yield-star-getiter-sync-returns-boolean-throw.js +language/statements/async-generator/yield-star-sync-next.js +language/statements/async-generator/yield-star-next-then-non-callable-boolean-fulfillpromise.js +language/statements/async-generator/yield-as-label-identifier.js +language/statements/async-generator/yield-identifier-non-strict.js +language/statements/async-generator/yield-star-next-call-value-get-abrupt.js +language/statements/async-generator/yield-star-next-then-non-callable-object-fulfillpromise.js +language/statements/async-generator/yield-star-getiter-async-returns-abrupt.js +language/statements/async-generator/yield-as-binding-identifier-escaped.js +language/statements/async-generator/rest-param-strict-body.js +language/statements/async-generator/await-as-identifier-reference-escaped.js +language/statements/async-generator/yield-star-expr-abrupt.js +language/statements/async-generator/yield-as-identifier-reference-escaped.js +language/statements/async-generator/yield-star-getiter-async-returns-null-throw.js +language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-assignment.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-evaluation.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-fn-name-arrow.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-fn-name-class.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-fn-name-cover.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-fn-name-fn.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-fn-name-gen.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-in.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-order.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-simple-no-strict.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-yield-ident-invalid.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-init-yield-ident-valid.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-iter-nrml-close.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array-invalid.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array-null.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array-undefined-hole.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array-undefined.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array-undefined-own.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array-yield-ident-invalid.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array-yield-ident-valid.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj-invalid.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj-null.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj-undefined-hole.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj-undefined.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj-undefined-own.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj-yield-ident-invalid.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj-yield-ident-valid.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-put-const.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-put-prop-ref.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-put-prop-ref-no-get.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-put-prop-ref-user-err.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-put-unresolvable-no-strict.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-put-unresolvable-strict.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-target-identifier.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-target-simple-strict.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-target-yield-invalid.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-target-yield-valid.js +language/statements/for-await-of/async-func-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close-null.js +language/statements/for-await-of/async-func-decl-dstr-array-elision-val-array.js +language/statements/for-await-of/async-func-decl-dstr-array-elision-val-string.js +language/statements/for-await-of/async-func-decl-dstr-array-empty-val-array.js +language/statements/for-await-of/async-func-decl-dstr-array-empty-val-string.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-after-element.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-after-elision.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-elision.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-iteration.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-array.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-array-null.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-array-undefined-hole.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-array-undefined.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-array-undefined-own.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-array-yield-ident-valid.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-null.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined-hole.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined-own.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-yield-ident-valid.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-put-prop-ref.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-put-prop-ref-no-get.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-put-unresolvable-no-strict.js +language/statements/for-await-of/async-func-decl-dstr-array-rest-yield-ident-valid.js +language/statements/for-await-of/async-func-decl-dstr-obj-empty-bool.js +language/statements/for-await-of/async-func-decl-dstr-obj-empty-num.js +language/statements/for-await-of/async-func-decl-dstr-obj-empty-obj.js +language/statements/for-await-of/async-func-decl-dstr-obj-empty-string.js +language/statements/for-await-of/async-func-decl-dstr-obj-empty-symbol.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-identifier-resolution-first.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-identifier-resolution-last.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-identifier-resolution-lone.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-identifier-resolution-middle.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-identifier-resolution-trlng.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-assignment-missing.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-assignment-null.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-assignment-truthy.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-assignment-undef.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-evaluation.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-fn-name-class.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-in.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-order.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-simple-no-strict.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-init-yield-ident-valid.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-put-unresolvable-no-strict.js +language/statements/for-await-of/async-func-decl-dstr-obj-id-simple-no-strict.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-assignment-missing.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-assignment-null.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-assignment-truthy.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-assignment-undef.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-evaluation.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-fn-name-arrow.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-fn-name-class.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-fn-name-cover.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-fn-name-fn.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-fn-name-gen.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-in.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-yield-ident-valid.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-target-yield-ident-valid.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-identifier-resolution-first.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-identifier-resolution-last.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-identifier-resolution-lone.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-identifier-resolution-middle.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-identifier-resolution-trlng.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-name-evaluation.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-nested-array.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-nested-array-yield-ident-valid.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-nested-obj.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-nested-obj-yield-ident-valid.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-put-order.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-put-prop-ref.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-put-prop-ref-no-get.js +language/statements/for-await-of/async-func-decl-dstr-obj-prop-put-unresolvable-no-strict.js +language/statements/for-await-of/async-func-decl-dstr-obj-rest-descriptors.js +language/statements/for-await-of/async-func-decl-dstr-obj-rest-empty-obj.js +language/statements/for-await-of/async-func-decl-dstr-obj-rest-getter.js +language/statements/for-await-of/async-func-decl-dstr-obj-rest-number.js +language/statements/for-await-of/async-func-decl-dstr-obj-rest-same-name.js +language/statements/for-await-of/async-func-decl-dstr-obj-rest-skip-non-enumerable.js +language/statements/for-await-of/async-func-decl-dstr-obj-rest-str-val.js +language/statements/for-await-of/async-func-decl-dstr-obj-rest-symbol-val.js +language/statements/for-await-of/async-func-decl-dstr-obj-rest-to-property.js +language/statements/for-await-of/async-func-decl-dstr-obj-rest-to-property-with-setter.js +language/statements/for-await-of/async-func-decl-dstr-obj-rest-valid-object.js +language/statements/for-await-of/async-func-dstr-const-ary-init-iter-close.js +language/statements/for-await-of/async-func-dstr-const-ary-init-iter-get-err.js +language/statements/for-await-of/async-func-dstr-const-ary-init-iter-no-close.js +language/statements/for-await-of/async-func-dstr-const-ary-name-iter-val.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-ary-val-null.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-throws.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-unresolvable.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-iter-step-err.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-iter-val-err.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-obj-val-null.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-obj-val-undef.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elision-iter-close.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elision.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elision-step-err.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id-elision-next-err.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id-iter-close.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id-iter-step-err.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id-iter-val-err.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-id.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-func-dstr-const-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-const-async-ary-init-iter-close.js +language/statements/for-await-of/async-func-dstr-const-async-ary-init-iter-no-close.js +language/statements/for-await-of/async-func-dstr-const-async-ary-name-iter-val.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elision.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-id.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-prop-id.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/async-func-dstr-const-obj-init-null.js +language/statements/for-await-of/async-func-dstr-const-obj-init-undefined.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-get-value-err.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-throws.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-unresolvable.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-list-err.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-ary-value-null.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-eval-err.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-id-get-value-err.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-id-init-throws.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-id-init-unresolvable.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-id.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-obj-value-null.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-prop-obj-value-undef.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/async-func-dstr-let-ary-init-iter-close.js +language/statements/for-await-of/async-func-dstr-let-ary-init-iter-get-err.js +language/statements/for-await-of/async-func-dstr-let-ary-init-iter-no-close.js +language/statements/for-await-of/async-func-dstr-let-ary-name-iter-val.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-ary-val-null.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-throws.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-unresolvable.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-iter-step-err.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-iter-val-err.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-obj-val-null.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-obj-val-undef.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elision-iter-close.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elision.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elision-step-err.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id-elision-next-err.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id-iter-close.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id-iter-step-err.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id-iter-val-err.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-id.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-func-dstr-let-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-let-async-ary-init-iter-close.js +language/statements/for-await-of/async-func-dstr-let-async-ary-init-iter-no-close.js +language/statements/for-await-of/async-func-dstr-let-async-ary-name-iter-val.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elision.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-id.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-prop-id.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/async-func-dstr-let-obj-init-null.js +language/statements/for-await-of/async-func-dstr-let-obj-init-undefined.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-get-value-err.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-throws.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-unresolvable.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-list-err.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-ary-value-null.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-eval-err.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-id-get-value-err.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-id-init-throws.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-id-init-unresolvable.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-id.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-obj-value-null.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-prop-obj-value-undef.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/async-func-dstr-var-ary-init-iter-close.js +language/statements/for-await-of/async-func-dstr-var-ary-init-iter-get-err.js +language/statements/for-await-of/async-func-dstr-var-ary-init-iter-no-close.js +language/statements/for-await-of/async-func-dstr-var-ary-name-iter-val.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-ary-val-null.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-throws.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-unresolvable.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-iter-step-err.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-iter-val-err.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-obj-val-null.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-obj-val-undef.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elision-iter-close.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elision.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elision-step-err.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id-elision-next-err.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id-iter-close.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id-iter-step-err.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id-iter-val-err.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-id.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-func-dstr-var-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-var-async-ary-init-iter-close.js +language/statements/for-await-of/async-func-dstr-var-async-ary-init-iter-no-close.js +language/statements/for-await-of/async-func-dstr-var-async-ary-name-iter-val.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elision.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-id.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-prop-id.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/async-func-dstr-var-obj-init-null.js +language/statements/for-await-of/async-func-dstr-var-obj-init-undefined.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-empty.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-get-value-err.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-throws.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-unresolvable.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-list-err.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-ary-value-null.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-eval-err.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-id-get-value-err.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-id-init-throws.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-id-init-unresolvable.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-id.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-obj-value-null.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-prop-obj-value-undef.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-assignment.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-evaluation.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-fn-name-class.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-fn-name-cover.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-fn-name-fn.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-fn-name-gen.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-in.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-order.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-simple-no-strict.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-get-err.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-nrml-close-err.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-nrml-close.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-nrml-close-null.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-nrml-close-skip.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-rtrn-close-null.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-thrw-close-skip.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-array-null.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-array-undefined-hole.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-array-undefined.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-array-undefined-own.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-array-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj-null.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj-undefined-hole.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj-undefined.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj-undefined-own.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-const.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-prop-ref.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-prop-ref-no-get.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-prop-ref-user-err.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-unresolvable-no-strict.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-unresolvable-strict.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-target-simple-no-strict.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-target-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close-err.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close-null.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close-skip.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-list-nrml-close-err.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-list-nrml-close.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-list-nrml-close-skip.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-list-thrw-close-skip.js +language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-rest-nrml-close-skip.js +language/statements/for-await-of/async-gen-decl-dstr-array-elision-iter-nrml-close.js +language/statements/for-await-of/async-gen-decl-dstr-array-elision-iter-nrml-close-skip.js +language/statements/for-await-of/async-gen-decl-dstr-array-elision-val-array.js +language/statements/for-await-of/async-gen-decl-dstr-array-elision-val-string.js +language/statements/for-await-of/async-gen-decl-dstr-array-empty-iter-close.js +language/statements/for-await-of/async-gen-decl-dstr-array-empty-val-array.js +language/statements/for-await-of/async-gen-decl-dstr-array-empty-val-string.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-after-element.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-after-elision.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-elision.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-iteration.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-iter-nrml-close-skip.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-lref.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array-null.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array-undefined-hole.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array-undefined.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array-undefined-own.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-null.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined-hole.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined-own.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-put-prop-ref.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-put-prop-ref-no-get.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-put-unresolvable-no-strict.js +language/statements/for-await-of/async-gen-decl-dstr-array-rest-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-obj-empty-bool.js +language/statements/for-await-of/async-gen-decl-dstr-obj-empty-num.js +language/statements/for-await-of/async-gen-decl-dstr-obj-empty-obj.js +language/statements/for-await-of/async-gen-decl-dstr-obj-empty-string.js +language/statements/for-await-of/async-gen-decl-dstr-obj-empty-symbol.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-identifier-resolution-first.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-identifier-resolution-last.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-identifier-resolution-lone.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-identifier-resolution-middle.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-identifier-resolution-trlng.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-assignment-missing.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-assignment-null.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-assignment-truthy.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-assignment-undef.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-evaluation.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-in.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-order.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-simple-no-strict.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-put-unresolvable-no-strict.js +language/statements/for-await-of/async-gen-decl-dstr-obj-id-simple-no-strict.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-assignment-missing.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-assignment-null.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-assignment-truthy.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-assignment-undef.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-evaluation.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-fn-name-class.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-fn-name-cover.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-fn-name-fn.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-fn-name-gen.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-in.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-target-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-identifier-resolution-first.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-identifier-resolution-last.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-identifier-resolution-lone.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-identifier-resolution-middle.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-identifier-resolution-trlng.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-name-evaluation.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-nested-array.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-nested-array-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-nested-obj.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-nested-obj-yield-expr.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-put-order.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-put-prop-ref.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-put-prop-ref-no-get.js +language/statements/for-await-of/async-gen-decl-dstr-obj-prop-put-unresolvable-no-strict.js +language/statements/for-await-of/async-gen-decl-dstr-obj-rest-descriptors.js +language/statements/for-await-of/async-gen-decl-dstr-obj-rest-empty-obj.js +language/statements/for-await-of/async-gen-decl-dstr-obj-rest-getter.js +language/statements/for-await-of/async-gen-decl-dstr-obj-rest-number.js +language/statements/for-await-of/async-gen-decl-dstr-obj-rest-same-name.js +language/statements/for-await-of/async-gen-decl-dstr-obj-rest-skip-non-enumerable.js +language/statements/for-await-of/async-gen-decl-dstr-obj-rest-str-val.js +language/statements/for-await-of/async-gen-decl-dstr-obj-rest-symbol-val.js +language/statements/for-await-of/async-gen-decl-dstr-obj-rest-to-property.js +language/statements/for-await-of/async-gen-decl-dstr-obj-rest-to-property-with-setter.js +language/statements/for-await-of/async-gen-decl-dstr-obj-rest-valid-object.js +language/statements/for-await-of/async-gen-dstr-const-ary-init-iter-close.js +language/statements/for-await-of/async-gen-dstr-const-ary-init-iter-get-err.js +language/statements/for-await-of/async-gen-dstr-const-ary-init-iter-no-close.js +language/statements/for-await-of/async-gen-dstr-const-ary-name-iter-val.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-ary-val-null.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-throws.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-unresolvable.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-iter-step-err.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-iter-val-err.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-obj-val-null.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-obj-val-undef.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elision-iter-close.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elision.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elision-step-err.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-init-err.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id-elision-next-err.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id-iter-close.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id-iter-step-err.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id-iter-val-err.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-id.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-init-iter-close.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-init-iter-no-close.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-name-iter-val.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elision.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-id.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-prop-id.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/async-gen-dstr-const-obj-init-null.js +language/statements/for-await-of/async-gen-dstr-const-obj-init-undefined.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-get-value-err.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-throws.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-unresolvable.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-init-err.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-list-err.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-ary-value-null.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-eval-err.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-id-get-value-err.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-id-init-throws.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-id-init-unresolvable.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-id.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-obj-value-null.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-prop-obj-value-undef.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/async-gen-dstr-let-ary-init-iter-close.js +language/statements/for-await-of/async-gen-dstr-let-ary-init-iter-get-err.js +language/statements/for-await-of/async-gen-dstr-let-ary-init-iter-no-close.js +language/statements/for-await-of/async-gen-dstr-let-ary-name-iter-val.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-ary-val-null.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-throws.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-unresolvable.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-iter-step-err.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-iter-val-err.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-obj-val-null.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-obj-val-undef.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elision-iter-close.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elision.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elision-step-err.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-init-err.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id-elision-next-err.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id-iter-close.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id-iter-step-err.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id-iter-val-err.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-id.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-init-iter-close.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-init-iter-no-close.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-name-iter-val.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elision.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-id.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-prop-id.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/async-gen-dstr-let-obj-init-null.js +language/statements/for-await-of/async-gen-dstr-let-obj-init-undefined.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-get-value-err.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-throws.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-unresolvable.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-init-err.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-list-err.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-ary-value-null.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-eval-err.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-id-get-value-err.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-id-init-throws.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-id-init-unresolvable.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-id.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-obj-value-null.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-prop-obj-value-undef.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/async-gen-dstr-var-ary-init-iter-close.js +language/statements/for-await-of/async-gen-dstr-var-ary-init-iter-get-err.js +language/statements/for-await-of/async-gen-dstr-var-ary-init-iter-no-close.js +language/statements/for-await-of/async-gen-dstr-var-ary-name-iter-val.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-ary-val-null.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-throws.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-unresolvable.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-iter-step-err.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-iter-val-err.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-obj-val-null.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-obj-val-undef.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elision-iter-close.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elision.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elision-step-err.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-init-err.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id-elision-next-err.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id-iter-close.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id-iter-step-err.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id-iter-val-err.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-id.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-init-iter-close.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-init-iter-no-close.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-name-iter-val.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-ary-elem-init.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-ary-elem-iter.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-ary-elision-init.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-ary-elision-iter.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-ary-empty-init.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-ary-empty-iter.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-ary-rest-init.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-ary-rest-iter.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-exhausted.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-hole.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-undef.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-iter-complete.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-iter-done.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-iter-val.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-obj-id-init.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-obj-id.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-obj-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elision-exhausted.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elision.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-ary-elem.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-ary-elision.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-ary-empty.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-ary-rest.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-id-elision.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-id-exhausted.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-id.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-init-ary.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-init-id.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-init-obj.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-not-final-ary.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-not-final-id.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-not-final-obj.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-obj-id.js +language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-rest-obj-prop-id.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-prop-id.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/async-gen-dstr-var-obj-init-null.js +language/statements/for-await-of/async-gen-dstr-var-obj-init-undefined.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-empty.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-get-value-err.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-fn-name-arrow.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-fn-name-class.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-fn-name-cover.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-fn-name-fn.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-fn-name-gen.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-throws.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-unresolvable.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-init-err.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-list-err.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-ary-init.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-ary.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-ary-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-ary-value-null.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-eval-err.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-id-get-value-err.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-id-init.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-id-init-skipped.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-id-init-throws.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-id-init-unresolvable.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-id.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-id-trailing-comma.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-obj-init.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-obj.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-obj-value-null.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-prop-obj-value-undef.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-getter.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-skip-non-enumerable.js +language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-val-obj.js +language/statements/for-await-of/escaped-of.js +language/statements/for-await-of/head-const-init.js +language/statements/for-await-of/head-let-init.js +language/statements/for-await-of/head-var-init.js +language/statements/for-await-of/iterator-close-non-throw-get-method-abrupt.js +language/statements/for-await-of/iterator-close-non-throw-get-method-is-null.js +language/statements/for-await-of/iterator-close-non-throw-get-method-non-callable.js +language/statements/for-await-of/iterator-close-throw-get-method-abrupt.js +language/statements/for-await-of/iterator-close-throw-get-method-non-callable.js +language/statements/for-await-of/let-array-with-newline.js +language/statements/for-await-of/let-block-with-newline.js +language/statements/for-await-of/let-identifier-with-newline.js +language/statements/for-await-of/ticks-with-async-iter-resolved-promise-and-constructor-lookup.js +language/statements/for-await-of/ticks-with-async-iter-resolved-promise-and-constructor-lookup-two.js +language/statements/for-await-of/ticks-with-sync-iter-resolved-promise-and-constructor-lookup.js diff --git a/test262/skip_tests.json b/test262/skip_tests.json index 46ec45304b..c207380c32 100644 --- a/test262/skip_tests.json +++ b/test262/skip_tests.json @@ -677,7 +677,8 @@ "built-ins/Function/internals/Construct/base-ctor-revoked-proxy-realm.js", "built-ins/Function/internals/Call/class-ctor-realm.js", "built-ins/Proxy/get-fn-realm-recursive.js", - "language/expressions/optional-chaining/eval-optional-call.js" + "language/expressions/optional-chaining/eval-optional-call.js", + "language/expressions/async-generator/eval-body-proto-realm.js" ] }, { @@ -1591,43 +1592,13 @@ "built-ins/WeakRef/prototype/deref/gc-cleanup-not-prevented-with-wr-deref.js" ] }, - { - "reason": "asyncgenerator constructor not yet supported", - "files": [ - "built-ins/AsyncGeneratorFunction/invoked-as-constructor-no-arguments.js", - "built-ins/AsyncGeneratorFunction/has-instance.js", - "built-ins/AsyncGeneratorFunction/invoked-as-function-no-arguments.js", - "built-ins/AsyncGeneratorFunction/instance-construct-throws.js", - "built-ins/AsyncGeneratorFunction/invoked-as-function-single-argument.js", - "built-ins/AsyncGeneratorFunction/instance-length.js", - "built-ins/AsyncGeneratorFunction/is-a-constructor.js", - "built-ins/AsyncGeneratorFunction/instance-prototype.js", - "built-ins/AsyncGeneratorFunction/proto-from-ctor-realm.js", - "built-ins/AsyncGeneratorFunction/proto-from-ctor-realm-prototype.js", - "built-ins/AsyncGeneratorFunction/instance-yield-expr-in-param.js", - "built-ins/AsyncGeneratorFunction/instance-name.js", - "built-ins/AsyncGeneratorFunction/instance-await-expr-in-param.js", - "built-ins/AsyncGeneratorFunction/invoked-as-function-multiple-arguments.js" - ] - }, { "reason": "Some special use cases have not yet been implemented", "files": [ - "built-ins/AsyncGeneratorPrototype/constructor.js", - "built-ins/AsyncGeneratorPrototype/throw/this-val-not-async-generator.js", - "built-ins/AsyncGeneratorPrototype/throw/throw-suspendedYield-try-finally.js", - "built-ins/AsyncGeneratorPrototype/throw/request-queue-order-state-executing.js", - "built-ins/AsyncGeneratorPrototype/throw/this-val-not-object.js", - "built-ins/AsyncGeneratorPrototype/next/this-val-not-async-generator.js", - "built-ins/AsyncGeneratorPrototype/next/request-queue-order-state-executing.js", - "built-ins/AsyncGeneratorPrototype/next/this-val-not-object.js", - "built-ins/AsyncGeneratorPrototype/return/return-suspendedYield-try-finally-throw.js", - "built-ins/AsyncGeneratorPrototype/return/this-val-not-async-generator.js", - "built-ins/AsyncGeneratorPrototype/return/return-suspendedYield-try-finally-return.js", - "built-ins/AsyncGeneratorPrototype/return/request-queue-order-state-executing.js", - "built-ins/AsyncGeneratorPrototype/return/this-val-not-object.js", - "built-ins/AsyncGeneratorPrototype/return/return-suspendedYield-try-finally.js", - "language/expressions/optional-chaining/iteration-statement-for-await-of.js" + "language/expressions/optional-chaining/iteration-statement-for-await-of.js", + "language/expressions/async-generator/named-yield-star-next-then-returns-abrupt.js", + "language/expressions/async-generator/yield-star-next-then-returns-abrupt.js", + "language/statements/async-generator/yield-star-next-then-returns-abrupt.js" ] } ] -- Gitee From ba1bfb1a284d8d8d3688802391863762ce072a9e Mon Sep 17 00:00:00 2001 From: ctw-ian Date: Mon, 20 Feb 2023 14:18:25 +0800 Subject: [PATCH 2/2] Support async generator && for-await-of on ts2abc Issue:I6EKU1 Signed-off-by: ctw-ian Change-Id: I38f3f9d3d50c4e114c1fd7f0b047b8fcbd9eaed2 --- test262/es2abc_skip_tests.json | 54 ++ test262/ts2abc_skip_tests.json | 461 ++++++++++++++++++ ts2panda/src/base/iterator.ts | 105 +++- ts2panda/src/compiler.ts | 32 +- ts2panda/src/expression/yieldExpression.ts | 11 +- ts2panda/src/function/asyncFunctionBuilder.ts | 77 +-- .../function/asyncGeneratorFunctionBuilder.ts | 363 ++++++++++---- ts2panda/src/function/functionBuilder.ts | 60 ++- .../src/function/generatorFunctionBuilder.ts | 82 ++-- ts2panda/src/pandagen.ts | 51 +- ts2panda/src/statement/forOfStatement.ts | 5 +- ts2panda/src/statement/returnStatement.ts | 13 +- ts2panda/src/statement/tryStatement.ts | 11 +- ts2panda/tests/expression/commalist.test.ts | 58 +-- .../expression/functionExpression.test.ts | 5 +- 15 files changed, 1128 insertions(+), 260 deletions(-) diff --git a/test262/es2abc_skip_tests.json b/test262/es2abc_skip_tests.json index cb19a43f04..01a4366390 100644 --- a/test262/es2abc_skip_tests.json +++ b/test262/es2abc_skip_tests.json @@ -279,5 +279,59 @@ "files": [ "built-ins/Function/prototype/toString/unicode.js" ] + }, + { + "reason" : "For-await-of failed cases due to parser", + "files" : [ + "language/statements/for-await-of/async-func-decl-dstr-array-elem-target-simple-strict.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-after-element.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-after-elision.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-elision.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-iteration.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-descriptors.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-empty-obj.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-getter.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-same-name.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-skip-non-enumerable.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-valid-object.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-rest-nrml-close-skip.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-after-element.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-after-elision.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-elision.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-iter-nrml-close-skip.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-iteration.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-descriptors.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-empty-obj.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-getter.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-same-name.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-skip-non-enumerable.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-valid-object.js" + ] + }, + { + "reason" : "For-await-of failed cases due to destructuring", + "files" : [ + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-to-property.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-to-property-with-setter.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-symbol-val.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-str-val.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-number.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-const.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-rtrn-close-null.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-to-property.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-to-property-with-setter.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-symbol-val.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-str-val.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-number.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-put-const.js" + ] + }, + { + "reason" : "Special for-await-of cases that failed", + "files" : [ + "language/statements/for-await-of/ticks-with-sync-iter-resolved-promise-and-constructor-lookup.js", + "language/statements/for-await-of/ticks-with-async-iter-resolved-promise-and-constructor-lookup-two.js", + "language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js" + ] } ] diff --git a/test262/ts2abc_skip_tests.json b/test262/ts2abc_skip_tests.json index 23584afbdb..e2a2ac2f82 100644 --- a/test262/ts2abc_skip_tests.json +++ b/test262/ts2abc_skip_tests.json @@ -515,5 +515,466 @@ "built-ins/JSON/stringify/value-string-escape-unicode.js", "built-ins/Function/prototype/toString/unicode.js" ] + }, + { + "reason" : "Paramter-related and funcName-related Cases that are not supported on ts2abc about async generators for now", + "files": [ + "language/expressions/async-generator/object-destructuring-param-strict-body.js", + "language/expressions/async-generator/named-object-destructuring-param-strict-body.js", + "language/expressions/async-generator/named-dflt-params-ref-self.js", + "language/expressions/async-generator/named-dflt-params-ref-later.js", + "language/expressions/async-generator/named-array-destructuring-param-strict-body.js", + "language/expressions/async-generator/dflt-params-ref-self.js", + "language/expressions/async-generator/dflt-params-ref-later.js", + "language/expressions/async-generator/array-destructuring-param-strict-body.js", + "language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-class.js", + "language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-cover.js", + "language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-fn.js", + "language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-gen.js", + "language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js", + "language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js", + "language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-class.js", + "language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js", + "language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-fn.js", + "language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-gen.js", + "language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-fn-name-class.js", + "language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-fn-name-class.js", + "language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-fn-name-arrow.js", + "language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-fn-name-class.js", + "language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-fn-name-cover.js", + "language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-fn-name-fn.js", + "language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-fn-name-gen.js", + "language/expressions/async-generator/dstr/named-obj-ptrn-id-init-fn-name-arrow.js", + "language/expressions/async-generator/dstr/named-obj-ptrn-id-init-fn-name-class.js", + "language/expressions/async-generator/dstr/named-obj-ptrn-id-init-fn-name-cover.js", + "language/expressions/async-generator/dstr/named-obj-ptrn-id-init-fn-name-fn.js", + "language/expressions/async-generator/dstr/named-obj-ptrn-id-init-fn-name-gen.js", + "language/expressions/async-generator/dstr/obj-ptrn-id-init-fn-name-arrow.js", + "language/expressions/async-generator/dstr/obj-ptrn-id-init-fn-name-class.js", + "language/expressions/async-generator/dstr/obj-ptrn-id-init-fn-name-cover.js", + "language/expressions/async-generator/dstr/obj-ptrn-id-init-fn-name-fn.js", + "language/expressions/async-generator/dstr/obj-ptrn-id-init-fn-name-gen.js", + "language/statements/async-generator/array-destructuring-param-strict-body.js", + "language/statements/async-generator/dflt-params-ref-later.js", + "language/statements/async-generator/dflt-params-ref-self.js", + "language/statements/async-generator/object-destructuring-param-strict-body.js", + "language/statements/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-class.js", + "language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/async-generator/dstr/obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/async-generator/dstr/obj-ptrn-id-init-fn-name-class.js", + "language/statements/async-generator/dstr/obj-ptrn-id-init-fn-name-cover.js", + "language/statements/async-generator/dstr/obj-ptrn-id-init-fn-name-fn.js", + "language/statements/async-generator/dstr/obj-ptrn-id-init-fn-name-gen.js", + "language/expressions/async-generator/named-strict-error-reassign-fn-name-in-body-in-arrow.js", + "language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-fn-name-fn.js", + "language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-fn-name-gen.js", + "language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-fn-name-cover.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-init-fn-name-class.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-fn-name-class.js" + ] + }, + { + "reason" : "Async-generator-related cases failed in tsc, Debug Faliure", + "files": [ + "language/expressions/async-generator/yield-star-async-next.js", + "language/expressions/async-generator/yield-star-async-return.js", + "language/expressions/async-generator/yield-star-async-throw.js", + "language/expressions/async-generator/named-yield-star-async-return.js", + "language/expressions/async-generator/named-yield-star-async-next.js", + "language/expressions/async-generator/named-yield-star-async-throw.js", + "language/statements/async-generator/yield-star-async-next.js", + "language/statements/async-generator/yield-star-async-return.js", + "language/statements/async-generator/yield-star-async-throw.js" + ] + }, + { + "reason" : "for-await-of cases failed due to destructuring", + "files" : [ + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-valid-object.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-same-name.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-to-property.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-skip-non-enumerable.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-str-val.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-symbol-val.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-to-property-with-setter.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-number.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-getter.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-descriptors.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-rest-empty-obj.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-put-order.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-put-prop-ref.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-put-prop-ref-no-get.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-nested-obj.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-name-evaluation.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-identifier-resolution-trlng.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-nested-array.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-nested-array-yield-expr.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-nested-obj-yield-expr.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-identifier-resolution-middle.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-target-yield-expr.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-identifier-resolution-lone.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-yield-expr.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-in.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-identifier-resolution-first.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-identifier-resolution-last.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-fn-name-arrow.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-identifier-resolution-trlng.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-get-err.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-init-assignment.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-empty-string.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-assignment-missing.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-array-undefined-hole.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-array-undefined-hole.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined-own.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-nrml-close-err.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-evaluation.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-symbol-val.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-empty-symbol.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-identifier-resolution-last.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-identifier-resolution-last.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-array-null.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elision-val-array.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array-yield-expr.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj-undefined-own.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array-undefined.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-rtrn-close-null.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-list-nrml-close-err.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj-undefined-own.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-getter.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-empty-symbol.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-empty-num.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-empty-num.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elision-iter-nrml-close-skip.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj-undefined-hole.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-assignment-truthy.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-assignment-truthy.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-empty-obj.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-evaluation.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-put-prop-ref.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-skip-non-enumerable.js", + "language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-number.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-assignment-missing.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-null.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-put-prop-ref-no-get.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-assignment-undef.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-assignment.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-iter-nrml-close-skip.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-after-elision.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-nrml-close-skip.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-in.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-prop-ref-no-get.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-list-nrml-close-skip.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj-undefined-hole.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-array-undefined.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-assignment-undef.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array-undefined-hole.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined-hole.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close-err.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-evaluation.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-iteration.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close-null.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-yield-expr.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-init-order.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-identifier-resolution-trlng.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-assignment-truthy.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-prop-ref.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-identifier-resolution-lone.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-init-evaluation.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-nested-array.js", + "language/statements/for-await-of/async-func-decl-dstr-array-empty-val-string.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-array-yield-expr.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-identifier-resolution-first.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elision-val-array.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-array-undefined.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array-undefined.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-order.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj-undefined.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array-null.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-in.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-identifier-resolution-last.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-empty-string.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-list-thrw-close-skip.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-identifier-resolution-lone.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array-undefined-own.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-put-prop-ref-no-get.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-put-prop-ref.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj-yield-expr.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close-skip.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-elision.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array-undefined-hole.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj-null.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-assignment-null.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-in.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elision-val-string.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-iter-nrml-close.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-identifier-resolution-lone.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-target-yield-expr.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-array-null.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-init-in.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-identifier-resolution-first.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-lref.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-put-prop-ref.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-put-prop-ref-user-err.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-obj-undefined.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-identifier-resolution-middle.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-str-val.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-assignment-missing.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-thrw-close-skip.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-prop-elem-init-assignment-null.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-empty-obj.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array-null.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-identifier-resolution-first.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-yield-expr.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-nrml-close-null.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined-hole.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-prop-ref-user-err.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-same-name.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-assignment-missing.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-nrml-close.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-put-prop-ref.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-in.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-empty-iter-close.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-array-undefined-own.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-empty-bool.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elision-val-string.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elision-iter-nrml-close.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-after-element.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-identifier-resolution-middle.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-to-property-with-setter.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-valid-object.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-assignment-null.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-after-elision.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-order.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-rest-nrml-close-skip.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined-own.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-assignment-null.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-order.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-put-unresolvable-strict.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-put-const.js", + "language/statements/for-await-of/async-func-decl-dstr-array-empty-val-array.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-id-init-assignment-undef.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-elision.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-empty-val-array.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-nested-obj.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-elision-iter-nrml-close-null.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-identifier-resolution-trlng.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-name-evaluation.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-array.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj-null.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-to-property.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-array.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-identifier-resolution-middle.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-nested-array-undefined-own.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-after-element.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-empty-val-string.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-put-prop-ref-no-get.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-unresolvable-strict.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-put-const.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-put-order.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-empty-obj.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-init-evaluation.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-yield-expr.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-put-prop-ref-no-get.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-assignment-truthy.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-evaluation.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-rest-descriptors.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-empty-bool.js", + "language/statements/for-await-of/async-func-decl-dstr-array-elem-target-identifier.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-rest-iteration.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-array-undefined-own.js", + "language/statements/for-await-of/async-gen-decl-dstr-obj-id-init-yield-expr.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-nested-obj.js", + "language/statements/for-await-of/async-func-decl-dstr-obj-prop-elem-init-assignment-undef.js", + "language/statements/for-await-of/async-gen-decl-dstr-array-elem-trlg-iter-list-nrml-close.js", + "language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-null.js" + ] + }, + { + "reason": "special failed cases of for-await-of", + "files" : [ + "language/statements/for-await-of/iterator-close-throw-get-method-abrupt.js", + "language/statements/for-await-of/iterator-close-non-throw-get-method-is-null.js", + "language/statements/for-await-of/iterator-close-throw-get-method-non-callable.js", + "language/statements/for-await-of/ticks-with-sync-iter-resolved-promise-and-constructor-lookup.js", + "language/statements/for-await-of/ticks-with-async-iter-resolved-promise-and-constructor-lookup-two.js" + ] } ] diff --git a/ts2panda/src/base/iterator.ts b/ts2panda/src/base/iterator.ts index 465ff61a75..ddaacaa167 100644 --- a/ts2panda/src/base/iterator.ts +++ b/ts2panda/src/base/iterator.ts @@ -13,11 +13,17 @@ * limitations under the License. */ +import { IteratorType } from "../statement/forOfStatement"; import * as ts from "typescript"; import { + Label, VReg } from "../irnodes"; import { PandaGen } from "../pandagen"; +import { CatchTable, LabelPair } from "../statement/tryStatement"; +import { FunctionBuilder } from "../function/functionBuilder"; +import { AsyncGeneratorFunctionBuilder } from "../function/asyncGeneratorFunctionBuilder"; +import { CacheList, getVregisterCache } from "./vregisterCache"; export class Iterator { private iterRecord: { iterator: VReg, nextMethod: VReg }; @@ -25,13 +31,23 @@ export class Iterator { private iterValue: VReg; private pandaGen: PandaGen; private node: ts.Node; + private kind: IteratorType = IteratorType.Normal; + private funcBuilder: FunctionBuilder | undefined = undefined; - constructor(iterRecord: {iterator: VReg, nextMethod: VReg}, iterDone: VReg, iterValue: VReg, pandaGen: PandaGen, node: ts.Node) { + constructor(iterRecord: {iterator: VReg, nextMethod: VReg}, iterDone: VReg, iterValue: VReg, + pandaGen: PandaGen, node: ts.Node, kind ? : IteratorType, funcBuilder ? : FunctionBuilder) { this.iterRecord = iterRecord; this.iterDone = iterDone; this.iterValue = iterValue; this.pandaGen = pandaGen; this.node = node; + if (kind) { + this.kind = kind; + } + + if (funcBuilder) { + this.funcBuilder = funcBuilder; + } } getIterator() { @@ -39,7 +55,7 @@ export class Iterator { let iterator = this.iterRecord.iterator; // get iterator - pandaGen.getIterator(this.node); + this.kind == IteratorType.Normal ? pandaGen.getIterator(this.node) : pandaGen.getAsyncIterator(this.node); pandaGen.storeAccumulator(this.node, iterator); // get the next method @@ -47,6 +63,15 @@ export class Iterator { pandaGen.storeAccumulator(this.node, this.iterRecord.nextMethod); } + method(): VReg { + return this.iterRecord.nextMethod; + } + + getMethod(id: string) { + this.pandaGen.loadObjProperty(this.node, this.iterRecord.iterator, id); + this.pandaGen.storeAccumulator(this.node, this.iterRecord.nextMethod); + } + /** * iterResult = nextMethod.call(iterator); * if (!isObject(iterResult)) { @@ -58,6 +83,10 @@ export class Iterator { this.pandaGen.storeAccumulator(this.node, iterResult); } + callMethodwithValue(value: VReg) { + this.pandaGen.call(this.node, [this.iterRecord.nextMethod, this.iterRecord.iterator, value], true); + } + iteratorComplete(iterResult: VReg) { this.pandaGen.loadObjProperty(this.node, iterResult, "done"); this.pandaGen.storeAccumulator(this.node, this.iterDone); @@ -69,7 +98,77 @@ export class Iterator { } close() { - this.pandaGen.closeIterator(this.node, this.iterRecord.iterator); + let pg = this.pandaGen; + if (this.kind == IteratorType.Normal) { + pg.closeIterator(this.node, this.iterRecord.iterator); + return; + } + + let completion = pg.getTemp(); + let res = pg.getTemp(); + let exception = pg.getTemp(); + let noReturn = new Label(); + + let tryBeginLabel = new Label(); + let tryEndLabel = new Label(); + let catchBeginLabel = new Label(); + let catchEndLabel = new Label(); + new CatchTable( + pg, + catchBeginLabel, + new LabelPair(tryBeginLabel, tryEndLabel) + ); + + pg.storeAccumulator(this.node, completion); + pg.storeConst(this.node, exception, CacheList.HOLE); + + + pg.label(this.node, tryBeginLabel); + + // 4. Let innerResult be GetMethod(iterator, "return"). + this.getMethod("return"); + + // 5. If innerResult.[[Type]] is normal, then + // a. Let return be innerResult.[[Value]]. + // b. If return is undefined, return Completion(completion). + pg.branchIfUndefined(this.node, noReturn); + this.callNext(res); + + // if (this.kind == IteratorType.Async) { + // if (!this.funcBuilder) { + // throw new Error("function builder are not supposed to be undefined"); + // } + + // (this.funcBuilder).await(this.node); + // } + (this.funcBuilder).await(this.node); + pg.storeAccumulator(this.node, res); + + pg.label(this.node, tryEndLabel); + pg.branch(this.node, catchEndLabel); + + pg.label(this.node, catchBeginLabel); + pg.storeAccumulator(this.node, exception); + pg.label(this.node, catchEndLabel); + + let skipThrow = new Label(); + let doThrow = new Label(); + pg.loadAccumulator(this.node, getVregisterCache(pg, CacheList.HOLE)); + pg.condition(this.node, ts.SyntaxKind.ExclamationEqualsToken, exception, skipThrow); + + pg.label(this.node, doThrow); + pg.loadAccumulator(this.node, exception); + pg.throw(this.node); + + pg.label(this.node, skipThrow); + + pg.loadAccumulator(this.node, res); + pg.throwIfNotObject(this.node, res); + + pg.label(this.node, noReturn); + pg.loadAccumulator(this.node, completion); + + pg.freeTemps(completion, res, exception) } getCurrentValue() { diff --git a/ts2panda/src/compiler.ts b/ts2panda/src/compiler.ts index 3f50b1a0bc..7cbbb4eca5 100644 --- a/ts2panda/src/compiler.ts +++ b/ts2panda/src/compiler.ts @@ -59,7 +59,7 @@ import { getTemplateObject } from "./expression/templateExpression"; import { compileYieldExpression } from "./expression/yieldExpression"; import { AsyncFunctionBuilder } from "./function/asyncFunctionBuilder"; import { AsyncGeneratorFunctionBuilder } from "./function/asyncGeneratorFunctionBuilder"; -import { FunctionBuilder, FunctionBuilderType } from "./function/functionBuilder"; +import { FunctionBuilder } from "./function/functionBuilder"; import { GeneratorFunctionBuilder } from "./function/generatorFunctionBuilder"; import { @@ -133,7 +133,7 @@ export class Compiler { private pandaGen: PandaGen; private scope: Scope; private compilerDriver: CompilerDriver; - private funcBuilder: FunctionBuilderType; + private funcBuilder: FunctionBuilder; private recorder: Recorder; private envUnion: Array = new Array(); @@ -142,7 +142,7 @@ export class Compiler { this.pandaGen = pandaGen; this.compilerDriver = compilerDriver; this.recorder = recorder; - this.funcBuilder = new FunctionBuilder(); + this.funcBuilder = new FunctionBuilder(pandaGen); // At the beginning of function compile, alloc pandagen.local for 4funcObj/newTarget/this/parameters, because of // maybe no one used this parameter, will get undefined for RA @@ -230,7 +230,6 @@ export class Compiler { } private compileSourceFileOrBlock(body: ts.SourceFile | ts.Block) { - let pandaGen = this.pandaGen; let statements = body.statements; let unreachableFlag = false; @@ -253,13 +252,7 @@ export class Compiler { return ; } // exit GlobalScopefunction or Function Block return - if (this.funcBuilder instanceof AsyncFunctionBuilder || this.funcBuilder instanceof AsyncGeneratorFunctionBuilder) { - this.funcBuilder.resolve(NodeKind.Invalid, getVregisterCache(pandaGen, CacheList.undefined)); - pandaGen.return(NodeKind.Invalid); - } else { - CmdOptions.isWatchEvaluateExpressionMode() ? - pandaGen.return(NodeKind.Invalid) : pandaGen.returnUndefined(NodeKind.Invalid); - } + this.funcBuilder.implicitReturn(NodeKind.Invalid); } private compileFunctionBody(kind: number, body: ts.ConciseBody): void { @@ -336,7 +329,7 @@ export class Compiler { } } - private createFuncBuilder(decl: ts.FunctionLikeDeclaration): FunctionBuilderType { + private createFuncBuilder(decl: ts.FunctionLikeDeclaration): FunctionBuilder { let pandaGen = this.pandaGen; if (decl.modifiers) { @@ -356,7 +349,7 @@ export class Compiler { return new GeneratorFunctionBuilder(pandaGen, this); } - return new FunctionBuilder(); + return new FunctionBuilder(pandaGen); } private compileFunctionLikeDeclaration(decl: ts.FunctionLikeDeclaration): void { @@ -379,7 +372,7 @@ export class Compiler { } this.funcBuilder = this.createFuncBuilder(decl); - this.funcBuilder.prepare(decl, this.recorder); + this.funcBuilder.prepare(decl); if (decl.body) { this.compileFunctionBody(decl.kind, decl.body); } @@ -1095,16 +1088,11 @@ export class Compiler { } if (expr.expression) { - let retValue = pandaGen.getTemp(); - this.compileExpression(expr.expression); - pandaGen.storeAccumulator(expr, retValue); - - this.funcBuilder.await(expr, retValue); - - pandaGen.freeTemps(retValue); + this.funcBuilder.await(expr); } else { - this.funcBuilder.await(expr, getVregisterCache(pandaGen, CacheList.undefined)); + pandaGen.loadAccumulator(expr, getVregisterCache(pandaGen, CacheList.undefined)); + this.funcBuilder.await(expr); } } diff --git a/ts2panda/src/expression/yieldExpression.ts b/ts2panda/src/expression/yieldExpression.ts index f064ebd5f1..4280d68c28 100644 --- a/ts2panda/src/expression/yieldExpression.ts +++ b/ts2panda/src/expression/yieldExpression.ts @@ -32,16 +32,11 @@ function genYieldExpr(compiler: Compiler, expr: ts.YieldExpression) { let pandaGen = compiler.getPandaGen(); let funcBuilder = compiler.getFuncBuilder(); if (expr.expression) { - let retValue = pandaGen.getTemp(); - compiler.compileExpression(expr.expression); - pandaGen.storeAccumulator(expr, retValue); - - funcBuilder.yield(expr, retValue); - - pandaGen.freeTemps(retValue); + funcBuilder.yield(expr); } else { - funcBuilder.yield(expr, getVregisterCache(pandaGen, CacheList.undefined)); + pandaGen.loadAccumulator(expr, getVregisterCache(pandaGen, CacheList.undefined)); + funcBuilder.yield(expr); } } diff --git a/ts2panda/src/function/asyncFunctionBuilder.ts b/ts2panda/src/function/asyncFunctionBuilder.ts index bf0a9e66ed..3dc968aff0 100644 --- a/ts2panda/src/function/asyncFunctionBuilder.ts +++ b/ts2panda/src/function/asyncFunctionBuilder.ts @@ -13,9 +13,8 @@ * limitations under the License. */ -import { loadAccumulator } from "src/base/bcGenUtil"; -import * as ts from "typescript"; import { CacheList, getVregisterCache } from "../base/vregisterCache"; +import * as ts from "typescript"; import { NodeKind } from "../debuginfo"; import { Label, @@ -23,60 +22,60 @@ import { } from "../irnodes"; import { PandaGen } from "../pandagen"; import { CatchTable, LabelPair } from "../statement/tryStatement"; +import { FunctionBuilder, FunctionBuilderType } from "./functionBuilder"; -enum ResumeMode { Return = 0, Throw, Next }; +enum ResumeMode { + Return, + Throw, + Next +}; /** * async function foo() { * await 'promise obj'; * } */ -export class AsyncFunctionBuilder { - private pandaGen: PandaGen; - private beginLabel: Label; - private endLabel: Label; - private asyncObj: VReg; - private retVal: VReg; - +export class AsyncFunctionBuilder extends FunctionBuilder { constructor(pandaGen: PandaGen) { - this.pandaGen = pandaGen; + super(pandaGen); + this.funcObj = pandaGen.getTemp(); + this.resumeVal = pandaGen.getTemp(); this.beginLabel = new Label(); this.endLabel = new Label(); - this.asyncObj = pandaGen.getTemp(); - this.retVal = pandaGen.getTemp(); } prepare(node: ts.Node): void { - let pandaGen = this.pandaGen; + let pandaGen = this.pg; pandaGen.asyncFunctionEnter(NodeKind.Invalid); - pandaGen.storeAccumulator(NodeKind.Invalid, this.asyncObj); + pandaGen.storeAccumulator(NodeKind.Invalid, this.funcObj); pandaGen.label(node, this.beginLabel); } - await(node: ts.Node, value: VReg): void { - let pandaGen = this.pandaGen; - let promise = this.pandaGen.getTemp(); - - pandaGen.loadAccumulator(node, value); - pandaGen.asyncFunctionAwaitUncaught(node, this.asyncObj); - - pandaGen.suspendGenerator(node, this.asyncObj); - - pandaGen.freeTemps(promise); + await(node: ts.Node): void { + // value is in acc + this.functionAwait(node); + this.handleMode(node); + } - pandaGen.resumeGenerator(node, this.asyncObj); - pandaGen.storeAccumulator(node, this.retVal); + explicitReturn(node: ts.Node | NodeKind, empty ? : boolean): void { + // value is in acc + this.pg.asyncFunctionResolve(node, this.funcObj); + this.pg.return(node); + } - this.handleMode(node); + implicitReturn(node: ts.Node | NodeKind): void { + this.pg.loadAccumulator(node, getVregisterCache(this.pg, CacheList.undefined)); + this.pg.asyncFunctionResolve(node, this.funcObj); + this.pg.return(node); } private handleMode(node: ts.Node) { - let pandaGen = this.pandaGen; + let pandaGen = this.pg; let modeType = pandaGen.getTemp(); - pandaGen.getResumeMode(node, this.asyncObj); + pandaGen.getResumeMode(node, this.funcObj); pandaGen.storeAccumulator(node, modeType); // .reject @@ -86,33 +85,37 @@ export class AsyncFunctionBuilder { // jump to normal code pandaGen.condition(node, ts.SyntaxKind.EqualsEqualsToken, modeType, notThrowLabel); - pandaGen.loadAccumulator(node, this.retVal); + pandaGen.loadAccumulator(node, this.resumeVal); pandaGen.throw(node); pandaGen.freeTemps(modeType); // .resolve pandaGen.label(node, notThrowLabel); - pandaGen.loadAccumulator(node, this.retVal); + pandaGen.loadAccumulator(node, this.resumeVal); } resolve(node: ts.Node | NodeKind, value: VReg) { - let pandaGen = this.pandaGen; + let pandaGen = this.pg; pandaGen.loadAccumulator(node, value); - pandaGen.asyncFunctionResolve(node, this.asyncObj); + pandaGen.asyncFunctionResolve(node, this.funcObj); } cleanUp(node: ts.Node): void { - let pandaGen = this.pandaGen; + let pandaGen = this.pg; pandaGen.label(node, this.endLabel); // exception is in acc - pandaGen.asyncFunctionReject(NodeKind.Invalid, this.asyncObj); + pandaGen.asyncFunctionReject(NodeKind.Invalid, this.funcObj); pandaGen.return(NodeKind.Invalid); - pandaGen.freeTemps(this.asyncObj, this.retVal); + pandaGen.freeTemps(this.funcObj, this.resumeVal); new CatchTable(pandaGen, this.endLabel, new LabelPair(this.beginLabel, this.endLabel)); } + + builderType(): FunctionBuilderType { + return FunctionBuilderType.ASYNC; + } } \ No newline at end of file diff --git a/ts2panda/src/function/asyncGeneratorFunctionBuilder.ts b/ts2panda/src/function/asyncGeneratorFunctionBuilder.ts index fa4dc53c48..451b6a734e 100644 --- a/ts2panda/src/function/asyncGeneratorFunctionBuilder.ts +++ b/ts2panda/src/function/asyncGeneratorFunctionBuilder.ts @@ -21,160 +21,331 @@ import { VReg } from "../irnodes"; import { PandaGen } from "../pandagen"; -import { Recorder } from "../recorder"; import { NodeKind } from "../debuginfo"; import { CatchTable, LabelPair } from "../statement/tryStatement"; +import { FunctionBuilder } from "./functionBuilder"; +import { Iterator } from "../base/iterator"; +import { IteratorType } from "../statement/forOfStatement"; + +enum ResumeMode { + RETURN, + THROW, + NEXT +}; + +export enum AsyncGeneratorState { + UNDEFINED, + SUSPENDSTART, + SUSPENDYIELD, + EXECUTING, + COMPLETED, + AWAITING_RETURN +} -enum ResumeMode { Return = 0, Throw, Next }; - -/** - * async function *foo() { - * yield 'a' - * } -*/ -export class AsyncGeneratorFunctionBuilder { - private asyncPandaGen: PandaGen; +export class AsyncGeneratorFunctionBuilder extends FunctionBuilder { private compiler: Compiler; - private asyncGenObj: VReg; - private retValue: VReg; - private beginLabel: Label; - private endLabel: Label; constructor(pandaGen: PandaGen, compiler: Compiler) { - this.asyncPandaGen = pandaGen; - this.compiler = compiler; + super(pandaGen); + this.funcObj = pandaGen.getTemp(); + this.resumeVal = pandaGen.getTemp(); + this.resumeType = pandaGen.getTemp(); this.beginLabel = new Label(); this.endLabel = new Label(); - this.asyncGenObj = pandaGen.getTemp(); - this.retValue = pandaGen.getTemp(); + this.compiler = compiler; } - prepare(node: ts.Node, recorder: Recorder) { - let pandaGen = this.asyncPandaGen; + prepare(node: ts.Node) { + let pg = this.pg; // backend handle funcobj, frontend set undefined - pandaGen.createAsyncGeneratorObj(node, getVregisterCache(pandaGen, CacheList.FUNC)); - pandaGen.storeAccumulator(node, this.asyncGenObj); - pandaGen.loadAccumulator(node, getVregisterCache(pandaGen, CacheList.undefined)); - pandaGen.suspendGenerator(node, this.asyncGenObj); - pandaGen.resumeGenerator(node, this.asyncGenObj); - pandaGen.storeAccumulator(node, this.retValue); + pg.createAsyncGeneratorObj(node, getVregisterCache(pg, CacheList.FUNC)); + pg.storeAccumulator(node, this.funcObj); + + pg.label(node, this.beginLabel); + pg.loadAccumulator(node, getVregisterCache(pg, CacheList.undefined)); + pg.suspendGenerator(node, this.funcObj); + pg.resumeGenerator(node, this.funcObj); + pg.storeAccumulator(node, this.resumeVal); } - await(node: ts.Node, value: VReg): void { - let pandaGen = this.asyncPandaGen; - let promise = this.asyncPandaGen.getTemp(); - - pandaGen.loadAccumulator(node, value); - pandaGen.asyncFunctionAwaitUncaught(node, this.asyncGenObj); - - pandaGen.suspendGenerator(node, this.asyncGenObj); + await(node: ts.Node): void { + // value is in acc + this.functionAwait(node); + this.handleMode(node); + } - pandaGen.freeTemps(promise); + directReturn(node: ts.Node | NodeKind): void { + let pg = this.pg; + pg.storeAccumulator(node, this.resumeVal); + pg.generatorComplete(node, this.funcObj); + pg.asyncgeneratorresolve(node, this.funcObj, this.resumeVal, getVregisterCache(pg, CacheList.True)); + pg.return(node); + } - pandaGen.resumeGenerator(node, this.asyncGenObj); - pandaGen.storeAccumulator(node, this.retValue); + explicitReturn(node: ts.Node | NodeKind, empty ? : boolean): void { + let pg = this.pg; + if (!empty) { + pg.asyncFunctionAwaitUncaught(node, this.funcObj); + pg.suspendGenerator(node, this.funcObj); + this.resumeGenerator(node); + } + pg.generatorComplete(node, this.funcObj); + pg.asyncgeneratorresolve(node, this.funcObj, this.resumeVal, getVregisterCache(pg, CacheList.True)); + pg.return(node); + } - this.handleMode(node); + implicitReturn(node: ts.Node | NodeKind): void { + this.pg.loadAccumulator(node, getVregisterCache(this.pg, CacheList.undefined)); + this.directReturn(node); } - yield(node: ts.Node, value: VReg) { - let pandaGen = this.asyncPandaGen; - let promise = this.asyncPandaGen.getTemp(); - pandaGen.Asyncgeneratorresolve(node, this.asyncGenObj, value, getVregisterCache(pandaGen, CacheList.False)); - pandaGen.suspendGenerator(node, this.asyncGenObj); - pandaGen.freeTemps(promise); - pandaGen.resumeGenerator(node, this.asyncGenObj); - pandaGen.storeAccumulator(node, this.retValue); - this.asyncHandleMode(node, value); + yield(node: ts.Node) { + let pg = this.pg; + + // 27.6.3.8.5 Set value to ? Await(value). + // vallue is in acc + this.await(node); + pg.storeAccumulator(node, this.resumeVal); + + // 27.6.3.8.6 Set generator.[[AsyncGeneratorState]] to suspendedYield. + pg.generatorYield(node, this.funcObj); + /** 27.6.3.8.7 Remove genContext from the execution context stack and restore the execution context that + * is at the top of the execution context stack as the running execution context. + * 27.6.3.8.9 Return ! AsyncGeneratorResolve(generator, value, false). + */ + pg.asyncgeneratorresolve(node, this.funcObj, this.resumeVal, getVregisterCache(pg, CacheList.False)); + this.resumeGenerator(node); + + this.handleAsyncYieldResume(node); } - private handleMode(node: ts.Node) { - let pandaGen = this.asyncPandaGen; + yieldStar(node: ts.Node) { + let pg = this.pg; + let method = pg.getTemp(); + let iterator = pg.getTemp(); + let nextResult = pg.getTemp(); + let value = pg.getTemp(); + let done = pg.getTemp(); + let nextMethod = pg.getTemp(); + let exitReturn = pg.getTemp(); + + // 4. Let iteratorRecord be ? GetIterator(value, generatorKind) + let iter: Iterator = new Iterator({iterator: iterator, nextMethod: method}, done, value, pg, + node, IteratorType.Async, this); + iter.getIterator(); + + let receivedValue = this.resumeVal; + this.resumeVal = nextResult; + + // 6. Let received be NormalCompletion(undefined) + pg.storeConst(node, this.resumeVal, CacheList.undefined); + pg.loadAccumulatorInt(node, ResumeMode.NEXT); + pg.storeAccumulator(node, this.resumeType); + pg.moveVreg(node, nextMethod, iter.method()); + + let loopStart = new Label(); + let throwCompletion = new Label(); + let returnCompletion = new Label(); + let callMethod = new Label(); + let normalOrThrowCompletion = new Label(); + let iterCompletion = new Label(); + // 7. Repeat + pg.label(node, loopStart); + pg.storeConst(node, exitReturn, CacheList.False); + + // a. If received.[[Type]] is normal, then + pg.loadAccumulatorInt(node, ResumeMode.NEXT); + pg.condition(node, ts.SyntaxKind.EqualsEqualsEqualsToken, this.resumeType, throwCompletion); + pg.moveVreg(node, iter.method(), nextMethod); + pg.branch(node, callMethod); + + // b. Else if received.[[Type]] is throw, then + pg.label(node, throwCompletion); + pg.loadAccumulatorInt(node, ResumeMode.THROW); + pg.condition(node, ts.SyntaxKind.EqualsEqualsEqualsToken, this.resumeType, returnCompletion); + + // i. Let throw be ? GetMethod(iterator, "throw") + iter.getMethod("throw"); + + // ii. If throw is not undefined, then + pg.branchIfNotUndefined(node, callMethod); + + // iii. Else, + // 1. NOTE: If iterator does not have a throw method, this throw is going to terminate the yield* loop. But first we + // need to give iterator a chance to clean up. + // 2. Let closeCompletion be Completion { [[Type]]: normal, [[Value]]: empty, [[Target]]: empty }. + // 3. If generatorKind is async, perform ? AsyncIteratorClose(iteratorRecord, closeCompletion). + // 4. Else, perform ? IteratorClose(iteratorRecord, closeCompletion). + iter.close() + // 5. NOTE: The next step throws a TypeError to indicate that there was a yield* protocol violation: iterator does + // not have a throw method. + // 6. Throw a TypeError exception. + pg.throwThrowNotExist(node); + + // c. Else, + // i. Assert: received.[[Type]] is return + pg.label(node, returnCompletion); + pg.storeConst(node, exitReturn, CacheList.True); + // ii. Let return be ? GetMethod(iterator, "return"). + iter.getMethod("return"); + + // iii. If return is undefined, then + pg.branchIfNotUndefined(node, callMethod); + + this.compiler.compileFinallyBeforeCFC( + undefined, + ControlFlowChange.Break, + undefined + ); - let modeType = pandaGen.getTemp(); + pg.loadAccumulator(node, this.resumeVal); + this.await(node); - pandaGen.getResumeMode(node, this.asyncGenObj); - pandaGen.storeAccumulator(node, modeType); + this.directReturn(node); - // .return(value) - pandaGen.loadAccumulatorInt(node, ResumeMode.Return); + pg.label(node, callMethod); + // i. Let innerResult be ? Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]], « received.[[Value]] »). + // 1. Let innerResult be ? Call(throw, iterator, « received.[[Value]] »). + // iv. Let innerReturnResult be ? Call(return, iterator, « received.[[Value]] »). + // pg.moveVreg(node, nextResult, this.resumeVal); + iter.callMethodwithValue(this.resumeVal); - let notRetLabel = new Label(); + this.await(node); + pg.throwIfNotObject(node, this.resumeVal); - pandaGen.condition(node, ts.SyntaxKind.EqualsEqualsToken, modeType, notRetLabel); + iter.iteratorComplete(this.resumeVal); + pg.jumpIfTrue(node, iterCompletion); + + pg.loadAccumulator(node, this.resumeVal); + + iter.iteratorValue(this.resumeVal); + this.await(node); + + pg.generatorYield(node, this.funcObj); + pg.storeConst(node, done, CacheList.False); + pg.asyncgeneratorresolve(node, this.funcObj, this.resumeVal, done); + + this.resumeGenerator(node); + + pg.loadAccumulatorInt(node, ResumeMode.RETURN); + pg.condition(node, ts.SyntaxKind.EqualsEqualsToken, this.resumeType, loopStart); + + pg.loadAccumulator(node, this.resumeVal); + pg.asyncFunctionAwaitUncaught(node, this.funcObj); + + pg.suspendGenerator(node, this.funcObj); + this.resumeGenerator(node); + + pg.loadAccumulatorInt(node, ResumeMode.THROW); + pg.condition(node, ts.SyntaxKind.EqualsEqualsToken, this.resumeType, returnCompletion); + + pg.branch(node, loopStart); + + pg.label(node, iterCompletion); + + pg.loadAccumulator(node, exitReturn); + pg.jumpIfFalse(node, normalOrThrowCompletion); + + iter.iteratorValue(this.resumeVal); - // if there are finally blocks, should implement these at first. this.compiler.compileFinallyBeforeCFC( undefined, ControlFlowChange.Break, undefined - ); + ) - pandaGen.loadAccumulator(node, this.retValue); - pandaGen.return(node); + this.directReturn(node); - // .throw(value) - pandaGen.label(node, notRetLabel); + pg.label(node, normalOrThrowCompletion); + iter.iteratorValue(this.resumeVal); - pandaGen.loadAccumulatorInt(node, ResumeMode.Throw); + this.resumeVal = receivedValue; - let notThrowLabel = new Label(); + pg.freeTemps(method, iterator, nextResult, value, done, nextMethod, exitReturn); + } - pandaGen.condition(node, ts.SyntaxKind.EqualsEqualsToken, modeType, notThrowLabel); - pandaGen.loadAccumulator(node, this.retValue); - pandaGen.throw(node); + private handleAsyncYieldResume(node: ts.Node) { + let pg = this.pg; + let notRet = new Label(); + let normalCompletion = new Label(); + let notThrow = new Label(); - pandaGen.freeTemps(modeType); + // 27.6.3.8.8.a If resumptionValue.[[Type]] is not return + pg.loadAccumulatorInt(node, ResumeMode.RETURN); + pg.condition(node, ts.SyntaxKind.EqualsEqualsEqualsToken, this.resumeType, notRet); - // .next(value) - pandaGen.label(node, notThrowLabel); - pandaGen.loadAccumulator(node, this.retValue); - } + // 27.6.3.8.8.b Let awaited be Await(resumptionValue.[[Value]]) + pg.loadAccumulator(node, this.resumeVal); + pg.asyncFunctionAwaitUncaught(node, this.funcObj); + pg.suspendGenerator(node, this.funcObj); + this.resumeGenerator(node); - private asyncHandleMode(node: ts.Node, value: VReg) { - let pandaGen = this.asyncPandaGen; + // 27.6.3.8.8.c. If awaited.[[Type]] is throw, return Completion(awaited) + pg.loadAccumulatorInt(node, ResumeMode.THROW); + pg.condition(node, ts.SyntaxKind.EqualsEqualsEqualsToken, this.resumeType, normalCompletion); + pg.loadAccumulator(node, this.resumeVal); + pg.throw(node); - let modeType = pandaGen.getTemp(); + pg.label(node, normalCompletion); + // 27.6.3.8.8.d. Assert: awaited.[[Type]] is normal. + // 27.6.3.8.8.e. Return Completion { [[Type]]: return, [[Value]]: awaited.[[Value]], [[Target]]: empty } - pandaGen.getResumeMode(node, this.asyncGenObj); - pandaGen.storeAccumulator(node, modeType); + // if there are finally blocks, should implement these at first. + this.compiler.compileFinallyBeforeCFC( + undefined, + ControlFlowChange.Break, + undefined + ); + pg.loadAccumulator(node, this.resumeVal); + this.directReturn(node); + + pg.label(node, notRet); + // 27.6.3.8.8.a return Completion(resumptionValue) + pg.loadAccumulatorInt(node, ResumeMode.THROW); + pg.condition(node, ts.SyntaxKind.EqualsEqualsEqualsToken, this.resumeType, notThrow); + pg.loadAccumulator(node, this.resumeVal); + pg.throw(node); + + pg.label(node, notThrow); + pg.loadAccumulator(node, this.resumeVal); + } - // .next(value) - pandaGen.loadAccumulatorInt(node, ResumeMode.Next); + private handleMode(node: ts.Node) { + let pandaGen = this.pg; - let notNextLabel = new Label(); - pandaGen.condition(node, ts.SyntaxKind.EqualsEqualsToken, modeType, notNextLabel); - pandaGen.loadAccumulator(node, this.retValue); + pandaGen.getResumeMode(node, this.funcObj); + pandaGen.storeAccumulator(node, this.resumeType); // .throw(value) - pandaGen.label(node, notNextLabel); - pandaGen.loadAccumulatorInt(node, ResumeMode.Throw); + pandaGen.loadAccumulatorInt(node, ResumeMode.THROW); + let notThrowLabel = new Label(); - pandaGen.condition(node, ts.SyntaxKind.EqualsEqualsToken, modeType, notThrowLabel); - pandaGen.loadAccumulator(node, this.retValue); - pandaGen.throw(node); - pandaGen.freeTemps(modeType); + pandaGen.condition(node, ts.SyntaxKind.EqualsEqualsToken, this.resumeType, notThrowLabel); + pandaGen.loadAccumulator(node, this.resumeVal); + pandaGen.throw(node); - // .return(value) + // .next(value) pandaGen.label(node, notThrowLabel); - pandaGen.loadAccumulator(node, this.retValue); - pandaGen.return(node); + pandaGen.loadAccumulator(node, this.resumeVal); } resolve(node: ts.Node | NodeKind, value: VReg) { - let pandaGen = this.asyncPandaGen; - pandaGen.Asyncgeneratorresolve(node, this.asyncGenObj, value, getVregisterCache(pandaGen, CacheList.True)); + let pandaGen = this.pg; + pandaGen.asyncgeneratorresolve(node, this.funcObj, value, getVregisterCache(pandaGen, CacheList.True)); } cleanUp(node: ts.Node) { - let pandaGen = this.asyncPandaGen; + let pandaGen = this.pg; pandaGen.label(node, this.endLabel); // catch - pandaGen.asyncgeneratorreject(node, this.asyncGenObj); // exception is in acc + pandaGen.storeAccumulator(node, this.resumeVal); + pandaGen.generatorComplete(node, this.funcObj); + pandaGen.loadAccumulator(node, this.resumeVal); + pandaGen.asyncgeneratorreject(node, this.funcObj); // exception is in acc pandaGen.return(NodeKind.Invalid); - this.asyncPandaGen.freeTemps(this.asyncGenObj, this.retValue); + this.pg.freeTemps(this.funcObj, this.resumeVal, this.resumeType); new CatchTable(pandaGen, this.endLabel, new LabelPair(this.beginLabel, this.endLabel)); } } diff --git a/ts2panda/src/function/functionBuilder.ts b/ts2panda/src/function/functionBuilder.ts index 075da8b6f8..23a32bcc1a 100644 --- a/ts2panda/src/function/functionBuilder.ts +++ b/ts2panda/src/function/functionBuilder.ts @@ -13,14 +13,35 @@ * limitations under the License. */ +import { CmdOptions } from "../cmdOptions"; +import { NodeKind } from "../debuginfo"; import * as ts from "typescript"; -import { GeneratorFunctionBuilder } from "./generatorFunctionBuilder"; -import { AsyncFunctionBuilder } from "./asyncFunctionBuilder"; -import { AsyncGeneratorFunctionBuilder } from "./asyncGeneratorFunctionBuilder"; +import { + Label, + VReg +} from "../irnodes"; +import { PandaGen } from "../pandagen"; +import { CatchTable } from "../statement/tryStatement"; -export type FunctionBuilderType = AsyncFunctionBuilder | GeneratorFunctionBuilder | FunctionBuilder | AsyncGeneratorFunctionBuilder; +export enum FunctionBuilderType { + NORMAL, + GENERATOR, + ASYNC, + ASYNCGENERATOR +} export class FunctionBuilder { + protected pg: PandaGen | undefined = undefined; + protected funcObj: VReg | undefined = undefined; + protected resumeVal: VReg | undefined = undefined; + protected resumeType: VReg | undefined = undefined; + protected beginLabel: Label | undefined = undefined; + protected endLabel: Label | undefined = undefined; + + constructor(pg: PandaGen) { + this.pg = pg; + } + // @ts-ignore prepare(node: ts.Node): void { } @@ -28,4 +49,35 @@ export class FunctionBuilder { // @ts-ignore cleanUp(node: ts.Node): void { } + + functionAwait(node: ts.Node): void { + let pg = this.pg; + + // value is in acc + pg.asyncFunctionAwaitUncaught(node, this.funcObj); + pg.suspendGenerator(node, this.funcObj); + + pg.resumeGenerator(node, this.funcObj); + pg.storeAccumulator(node, this.resumeVal); + } + + resumeGenerator(node: ts.Node | NodeKind) { + let pg = this.pg; + pg.resumeGenerator(node, this.funcObj); + pg.storeAccumulator(node, this.resumeVal); + pg.getResumeMode(node, this.funcObj); + pg.storeAccumulator(node, this.resumeType); + } + + explicitReturn(node: ts.Node | NodeKind, empty ? : boolean) { + this.pg.return(node); + } + + implicitReturn(node: ts.Node | NodeKind) { + CmdOptions.isWatchEvaluateExpressionMode() ? this.pg.return(NodeKind.Invalid) : this.pg.returnUndefined(node); + } + + builderType(): FunctionBuilderType { + return FunctionBuilderType.NORMAL; + } } \ No newline at end of file diff --git a/ts2panda/src/function/generatorFunctionBuilder.ts b/ts2panda/src/function/generatorFunctionBuilder.ts index a3dae1c83e..bbbd621c70 100644 --- a/ts2panda/src/function/generatorFunctionBuilder.ts +++ b/ts2panda/src/function/generatorFunctionBuilder.ts @@ -13,8 +13,9 @@ * limitations under the License. */ -import { Scope } from "src/scope"; import * as ts from "typescript"; +import { CmdOptions } from "../cmdOptions"; +import { NodeKind } from "../debuginfo"; import { CacheList, getVregisterCache } from "../base/vregisterCache"; import { Compiler, ControlFlowChange } from "../compiler"; import { @@ -22,8 +23,8 @@ import { VReg } from "../irnodes"; import { PandaGen } from "../pandagen"; -import { Recorder } from "../recorder"; import { IteratorRecord, IteratorType, getIteratorRecord } from "../statement/forOfStatement"; +import { FunctionBuilder } from "./functionBuilder"; enum ResumeMode { Return = 0, Throw, Next }; @@ -32,51 +33,56 @@ enum ResumeMode { Return = 0, Throw, Next }; * yield 'a' * } */ -export class GeneratorFunctionBuilder { - private pandaGen: PandaGen; +export class GeneratorFunctionBuilder extends FunctionBuilder { private compiler: Compiler; - private genObj: VReg; - private retVal: VReg; constructor(pandaGen: PandaGen, compiler: Compiler) { - this.pandaGen = pandaGen; + super(pandaGen); + this.funcObj = pandaGen.getTemp(); + this.resumeVal = pandaGen.getTemp(); this.compiler = compiler; - this.genObj = pandaGen.getTemp(); - this.retVal = pandaGen.getTemp(); } - prepare(node: ts.Node, recorder: Recorder) { - let pandaGen = this.pandaGen; - // @ts-ignore - let scope = recorder.getScopeOfNode(node); + prepare(node: ts.Node) { + let pandaGen = this.pg; // backend handle funcobj, frontend set undefined pandaGen.createGeneratorObj(node, getVregisterCache(pandaGen, CacheList.FUNC)); - pandaGen.storeAccumulator(node, this.genObj); + pandaGen.storeAccumulator(node, this.funcObj); pandaGen.loadAccumulator(node, getVregisterCache(pandaGen, CacheList.undefined)); - pandaGen.suspendGenerator(node, this.genObj); - pandaGen.resumeGenerator(node, this.genObj); - pandaGen.storeAccumulator(node, this.retVal); + pandaGen.suspendGenerator(node, this.funcObj); + pandaGen.resumeGenerator(node, this.funcObj); + pandaGen.storeAccumulator(node, this.resumeVal); this.handleMode(node); } - yield(node: ts.Node, value: VReg) { - let pandaGen = this.pandaGen; + explicitReturn(node: ts.Node | NodeKind, empty ? : boolean) { + this.pg.return(node); + } + + implicitReturn(node: ts.Node | NodeKind) { + CmdOptions.isWatchEvaluateExpressionMode() ? this.pg.return(NodeKind.Invalid) : this.pg.returnUndefined(node); + } + yield(node: ts.Node) { + let pandaGen = this.pg; let iterRslt = pandaGen.getTemp(); + let value = pandaGen.getTemp(); + + pandaGen.storeAccumulator(node, value); pandaGen.Createiterresultobj(node, value, getVregisterCache(pandaGen, CacheList.False)); - pandaGen.suspendGenerator(node, this.genObj); - pandaGen.freeTemps(iterRslt); + pandaGen.suspendGenerator(node, this.funcObj); + pandaGen.freeTemps(iterRslt, value); - pandaGen.resumeGenerator(node, this.genObj); - pandaGen.storeAccumulator(node, this.retVal); + pandaGen.resumeGenerator(node, this.funcObj); + pandaGen.storeAccumulator(node, this.resumeVal); this.handleMode(node); } yieldStar(expr: ts.YieldExpression) { - let pandaGen = this.pandaGen; + let pandaGen = this.pg; let method = pandaGen.getTemp(); let object = pandaGen.getTemp(); @@ -171,17 +177,17 @@ export class GeneratorFunctionBuilder { // iteratorCompletion pandaGen.label(expr, iteratorCompletionLabel); - pandaGen.storeAccumulator(expr, this.retVal); - pandaGen.throwIfNotObject(expr, this.retVal); + pandaGen.storeAccumulator(expr, this.resumeVal); + pandaGen.throwIfNotObject(expr, this.resumeVal); - pandaGen.loadObjProperty(expr, this.retVal, "done"); + pandaGen.loadObjProperty(expr, this.resumeVal, "done"); pandaGen.jumpIfTrue(expr, exitLabel_value); - pandaGen.loadAccumulator(expr, this.retVal); - pandaGen.suspendGenerator(expr, this.genObj); - pandaGen.resumeGenerator(expr, this.genObj); + pandaGen.loadAccumulator(expr, this.resumeVal); + pandaGen.suspendGenerator(expr, this.funcObj); + pandaGen.resumeGenerator(expr, this.funcObj); pandaGen.storeAccumulator(expr, receivedValue); - pandaGen.getResumeMode(expr, this.genObj); + pandaGen.getResumeMode(expr, this.funcObj); pandaGen.storeAccumulator(expr, modeType); pandaGen.branch(expr, loopStartLabel); @@ -191,7 +197,7 @@ export class GeneratorFunctionBuilder { let outputLabel = new Label(); pandaGen.label(expr, exitLabel_value); - pandaGen.loadObjProperty(expr, this.retVal, "value"); + pandaGen.loadObjProperty(expr, this.resumeVal, "value"); let outputResult = pandaGen.getTemp(); pandaGen.storeAccumulator(expr, outputResult); pandaGen.loadAccumulatorInt(expr, ResumeMode.Return); @@ -212,11 +218,11 @@ export class GeneratorFunctionBuilder { } private handleMode(node: ts.Node) { - let pandaGen = this.pandaGen; + let pandaGen = this.pg; let modeType = pandaGen.getTemp(); - pandaGen.getResumeMode(node, this.genObj); + pandaGen.getResumeMode(node, this.funcObj); pandaGen.storeAccumulator(node, modeType); // .return(value) @@ -233,7 +239,7 @@ export class GeneratorFunctionBuilder { undefined ); - pandaGen.loadAccumulator(node, this.retVal); + pandaGen.loadAccumulator(node, this.resumeVal); pandaGen.return(node); // .throw(value) @@ -244,17 +250,17 @@ export class GeneratorFunctionBuilder { let notThrowLabel = new Label(); pandaGen.condition(node, ts.SyntaxKind.EqualsEqualsToken, modeType, notThrowLabel); - pandaGen.loadAccumulator(node, this.retVal); + pandaGen.loadAccumulator(node, this.resumeVal); pandaGen.throw(node); pandaGen.freeTemps(modeType); // .next(value) pandaGen.label(node, notThrowLabel); - pandaGen.loadAccumulator(node, this.retVal); + pandaGen.loadAccumulator(node, this.resumeVal); } cleanUp() { - this.pandaGen.freeTemps(this.genObj, this.retVal); + this.pg.freeTemps(this.funcObj, this.resumeVal); } } diff --git a/ts2panda/src/pandagen.ts b/ts2panda/src/pandagen.ts index 708f382e76..dd46cd8f7a 100644 --- a/ts2panda/src/pandagen.ts +++ b/ts2panda/src/pandagen.ts @@ -138,6 +138,7 @@ import { Div2, Eq, Exp, + Getasynciterator, Getresumemode, Gettemplateobject, Getunmappedargs, @@ -156,6 +157,7 @@ import { Noteq, Or2, Resumegenerator, + Setgeneratorstate, Shl2, Shr2, Stricteq, @@ -194,6 +196,7 @@ import { import * as jshelpers from "./jshelpers"; import { CompilerDriver } from "./compilerDriver"; import { getLiteralKey } from "./base/util"; +import { AsyncGeneratorState } from "./function/asyncGeneratorFunctionBuilder"; export enum FunctionKind { NONE = 0, // represent method for now @@ -511,6 +514,22 @@ export class PandaGen { this.add(node, storeAccumulator(vreg)); } + generatorYield(node: ts.Node, genObj: VReg) { + this.add( + node, + loadAccumulator(genObj), + new Setgeneratorstate(new Imm(AsyncGeneratorState.SUSPENDYIELD)) + ) + } + + generatorComplete(node: ts.Node | NodeKind, genObj: VReg) { + this.add( + node, + loadAccumulator(genObj), + new Setgeneratorstate(new Imm(AsyncGeneratorState.COMPLETED)) + ) + } + loadAccFromArgs(node: ts.Node) { if ((this.scope).getUseArgs()) { let v = this.scope!.findLocal(MandatoryArguments); @@ -796,6 +815,16 @@ export class PandaGen { this.add(node, jumpTarget(target)); } + branchIfNotUndefined(node: ts.Node, target: Label) { + // the compared value is in acc + this.condition(node, ts.SyntaxKind.EqualsEqualsToken, getVregisterCache(this, CacheList.undefined), target); + } + + branchIfUndefined(node: ts.Node, target: Label) { + // the compared value is in acc + this.condition(node, ts.SyntaxKind.ExclamationEqualsToken, getVregisterCache(this, CacheList.undefined), target) + } + isTrue(node: ts.Node) { this.add( node, @@ -1138,7 +1167,7 @@ export class PandaGen { this.add(node, new Createiterresultobj(value, done)); } - Asyncgeneratorresolve(node: ts.Node | NodeKind, genObj: VReg, value: VReg, done: VReg) { + asyncgeneratorresolve(node: ts.Node | NodeKind, genObj: VReg, value: VReg, done: VReg) { this.add(node, new Asyncgeneratorresolve(genObj, value, done)); } @@ -1146,18 +1175,18 @@ export class PandaGen { this.add(node, new Asyncgeneratorreject(genObj)); } - suspendGenerator(node: ts.Node, genObj: VReg) { + suspendGenerator(node: ts.Node | NodeKind, genObj: VReg) { this.add(node, new Suspendgenerator(genObj)); // promise obj is in acc } - resumeGenerator(node: ts.Node, genObj: VReg) { + resumeGenerator(node: ts.Node | NodeKind, genObj: VReg) { this.add( node, loadAccumulator(genObj), new Resumegenerator()); } - getResumeMode(node: ts.Node, genObj: VReg) { + getResumeMode(node: ts.Node | NodeKind, genObj: VReg) { this.add( node, loadAccumulator(genObj), @@ -1168,7 +1197,7 @@ export class PandaGen { this.add(node, new Asyncfunctionenter()); } - asyncFunctionAwaitUncaught(node: ts.Node, asynFuncObj: VReg) { + asyncFunctionAwaitUncaught(node: ts.Node | NodeKind, asynFuncObj: VReg) { this.add(node, new Asyncfunctionawaituncaught(asynFuncObj)); // received value is in acc } @@ -1313,6 +1342,13 @@ export class PandaGen { ); } + getAsyncIterator(node: ts.Node) { + this.add( + node, + new Getasynciterator(new Imm(0)) + ) + } + closeIterator(node: ts.Node, iter: VReg) { this.add( node, @@ -1436,6 +1472,11 @@ export class PandaGen { loadAccumulatorBigInt(str)); } + storeConst(node: ts.Node | NodeKind, dst: VReg, value: CacheList) { + this.loadAccumulator(node, getVregisterCache(this, value)); + this.storeAccumulator(node, dst); + } + private binaryRelation(node: ts.Node, op: BinaryOperator, lhs: VReg) { let falseLabel = new Label(); let endLabel = new Label(); diff --git a/ts2panda/src/statement/forOfStatement.ts b/ts2panda/src/statement/forOfStatement.ts index 12bf09e631..d4f1dede5a 100644 --- a/ts2panda/src/statement/forOfStatement.ts +++ b/ts2panda/src/statement/forOfStatement.ts @@ -68,7 +68,7 @@ export function compileForOfStatement(stmt: ts.ForOfStatement, compiler: Compile let loopEnv = pandaGen.getTemp(); // for now Async is not handled. - let type: IteratorType = IteratorType.Normal; + let type: IteratorType = stmt.awaitModifier ? IteratorType.Async : IteratorType.Normal; if (needCreateLoopEnv) { pandaGen.createLexEnv(stmt, loopScope); @@ -119,8 +119,7 @@ export function getIteratorRecord(pandagen: PandaGen, node: ts.Node, nextMethod: function getIterator(pandagen: PandaGen, node: ts.Node, type: IteratorType) { if (type == IteratorType.Async) { - // support Async Iterator in the future - throw new Error("Async Iterator haven't been supported"); + pandagen.getAsyncIterator(node); } else { pandagen.getIterator(node); } diff --git a/ts2panda/src/statement/returnStatement.ts b/ts2panda/src/statement/returnStatement.ts index 6a1b3cc049..6b4365aa7a 100644 --- a/ts2panda/src/statement/returnStatement.ts +++ b/ts2panda/src/statement/returnStatement.ts @@ -107,10 +107,12 @@ function compileReturnInDerivedCtor(stmt: ts.ReturnStatement, returnValue: VReg, function compileNormalReturn(stmt: ts.ReturnStatement, returnValue: VReg, compiler: Compiler) { let expr = stmt.expression; let pandaGen = compiler.getPandaGen(); + let empty : boolean = false; if (expr) { compiler.compileExpression(expr); } else { + empty = true; pandaGen.loadAccumulator(stmt, getVregisterCache(pandaGen, CacheList.undefined)); } pandaGen.storeAccumulator(stmt, returnValue); @@ -122,16 +124,7 @@ function compileNormalReturn(stmt: ts.ReturnStatement, returnValue: VReg, compil ); pandaGen.loadAccumulator(stmt, returnValue); - let funcBuilder = compiler.getFuncBuilder(); - if (funcBuilder instanceof AsyncFunctionBuilder || funcBuilder instanceof AsyncGeneratorFunctionBuilder) { - let resovledVal = pandaGen.getTemp(); - - pandaGen.storeAccumulator(stmt, resovledVal); - funcBuilder.resolve(stmt, resovledVal); - pandaGen.freeTemps(resovledVal); - } - - pandaGen.return(stmt); + compiler.getFuncBuilder().explicitReturn(stmt, empty); } function isReturnInDerivedCtor(stmt: ts.ReturnStatement) { diff --git a/ts2panda/src/statement/tryStatement.ts b/ts2panda/src/statement/tryStatement.ts index a8404d1fc2..f20de8ef20 100644 --- a/ts2panda/src/statement/tryStatement.ts +++ b/ts2panda/src/statement/tryStatement.ts @@ -25,8 +25,9 @@ import { CacheList, getVregisterCache } from "../base/vregisterCache"; -import { IteratorRecord } from "./forOfStatement"; +import { IteratorRecord, IteratorType } from "./forOfStatement"; import * as jshelpers from "../jshelpers"; +import { AsyncGeneratorFunctionBuilder } from "src/function/asyncGeneratorFunctionBuilder"; // adjust the try...catch...finally into nested try(try...catch) finally export function transformTryCatchFinally(tryStmt: ts.TryStatement, recorder: Recorder): ts.TryStatement { @@ -327,6 +328,9 @@ export class TryBuilderWithForOf extends TryBuilderBase { pandaGen.storeAccumulator(this.stmt, this.iterator.getNextMethod()); pandaGen.condition(this.stmt, ts.SyntaxKind.ExclamationEqualsEqualsToken, getVregisterCache(pandaGen, CacheList.undefined), noReturn); pandaGen.call(this.stmt, [this.iterator.getNextMethod(), this.iterator.getObject()], true); + if (this.iterator.getType() == IteratorType.Async) { + ((this.compiler.getFuncBuilder())).await(this.stmt); + } pandaGen.label(this.stmt, noReturn); pandaGen.loadAccumulator(this.stmt, exceptionVreg); @@ -354,9 +358,10 @@ export class TryBuilderWithForOf extends TryBuilderBase { private compileIteratorNext(stmt: ts.ForOfStatement, pandagen: PandaGen, iterator: IteratorRecord, resultObj: VReg) { pandagen.call(stmt, [iterator.getNextMethod(), iterator.getObject()], true); + if (iterator.getType() == IteratorType.Async) { + ((this.compiler.getFuncBuilder())).await(this.stmt); + } pandagen.storeAccumulator(stmt, resultObj); - - // Support Async Await further pandagen.throwIfNotObject(stmt, resultObj); } } diff --git a/ts2panda/tests/expression/commalist.test.ts b/ts2panda/tests/expression/commalist.test.ts index 9347117340..3a266e101d 100644 --- a/ts2panda/tests/expression/commalist.test.ts +++ b/ts2panda/tests/expression/commalist.test.ts @@ -81,47 +81,47 @@ describe("CommaListExpression", function () { new Tryldglobalbyname(new Imm(2), 'WeakMap'), new Sta(new VReg()), new Newobjrange(new Imm(3), new Imm(1), [new VReg()]), - new Stglobalvar(new Imm(4), '_filed1#a'), - new Tryldglobalbyname(new Imm(5), 'WeakMap'), + new Stglobalvar(new Imm(5), '_filed1#a'), + new Tryldglobalbyname(new Imm(6), 'WeakMap'), new Sta(new VReg()), - new Newobjrange(new Imm(6), new Imm(1), [new VReg()]), - new Stglobalvar(new Imm(7), '_filed2#b'), - new Tryldglobalbyname(new Imm(8), 'WeakMap'), + new Newobjrange(new Imm(7), new Imm(1), [new VReg()]), + new Stglobalvar(new Imm(9), '_filed2#b'), + new Tryldglobalbyname(new Imm(10), 'WeakMap'), new Sta(new VReg()), - new Newobjrange(new Imm(9), new Imm(1), [new VReg()]), - new Stglobalvar(new Imm(10), '_filed3#c'), - new Tryldglobalbyname(new Imm(11), 'WeakMap'), - new Sta(new VReg()), - new Newobjrange(new Imm(12), new Imm(1), [new VReg()]), - new Stglobalvar(new Imm(13), '_filed4#d'), + new Newobjrange(new Imm(11), new Imm(1), [new VReg()]), + new Stglobalvar(new Imm(13), '_filed3#c'), new Tryldglobalbyname(new Imm(14), 'WeakMap'), new Sta(new VReg()), new Newobjrange(new Imm(15), new Imm(1), [new VReg()]), - new Stglobalvar(new Imm(16), '_filed5#e'), - new Tryldglobalbyname(new Imm(17), 'WeakMap'), - new Sta(new VReg()), - new Newobjrange(new Imm(18), new Imm(1), [new VReg()]), - new Stglobalvar(new Imm(19), '_filed6#f'), - new Tryldglobalbyname(new Imm(20), 'WeakMap'), + new Stglobalvar(new Imm(17), '_filed4#d'), + new Tryldglobalbyname(new Imm(18), 'WeakMap'), new Sta(new VReg()), - new Newobjrange(new Imm(21), new Imm(1), [new VReg()]), - new Stglobalvar(new Imm(22), '_filed7#g'), - new Tryldglobalbyname(new Imm(23), 'WeakMap'), + new Newobjrange(new Imm(19), new Imm(1), [new VReg()]), + new Stglobalvar(new Imm(21), '_filed5#e'), + new Tryldglobalbyname(new Imm(22), 'WeakMap'), new Sta(new VReg()), - new Newobjrange(new Imm(24), new Imm(1), [new VReg()]), - new Stglobalvar(new Imm(25), '_filed8#h'), + new Newobjrange(new Imm(23), new Imm(1), [new VReg()]), + new Stglobalvar(new Imm(25), '_filed6#f'), new Tryldglobalbyname(new Imm(26), 'WeakMap'), new Sta(new VReg()), new Newobjrange(new Imm(27), new Imm(1), [new VReg()]), - new Stglobalvar(new Imm(28), '_filed9#i'), - new Tryldglobalbyname(new Imm(29), 'WeakMap'), + new Stglobalvar(new Imm(29), '_filed7#g'), + new Tryldglobalbyname(new Imm(30), 'WeakMap'), + new Sta(new VReg()), + new Newobjrange(new Imm(31), new Imm(1), [new VReg()]), + new Stglobalvar(new Imm(33), '_filed8#h'), + new Tryldglobalbyname(new Imm(34), 'WeakMap'), + new Sta(new VReg()), + new Newobjrange(new Imm(35), new Imm(1), [new VReg()]), + new Stglobalvar(new Imm(37), '_filed9#i'), + new Tryldglobalbyname(new Imm(38), 'WeakMap'), new Sta(new VReg()), - new Newobjrange(new Imm(30), new Imm(1), [new VReg()]), - new Stglobalvar(new Imm(31), '_filed10#j'), - new Tryldglobalbyname(new Imm(32), 'WeakMap'), + new Newobjrange(new Imm(39), new Imm(1), [new VReg()]), + new Stglobalvar(new Imm(41), '_filed10#j'), + new Tryldglobalbyname(new Imm(42), 'WeakMap'), new Sta(new VReg()), - new Newobjrange(new Imm(33), new Imm(1), [new VReg()]), - new Stglobalvar(new Imm(34), '_filed11#k'), + new Newobjrange(new Imm(43), new Imm(1), [new VReg()]), + new Stglobalvar(new Imm(45), '_filed11#k'), new Returnundefined() ] expect(checkInstructions(insns, expected)).to.be.true; diff --git a/ts2panda/tests/expression/functionExpression.test.ts b/ts2panda/tests/expression/functionExpression.test.ts index b4cd1c8e7a..da9270f1ca 100644 --- a/ts2panda/tests/expression/functionExpression.test.ts +++ b/ts2panda/tests/expression/functionExpression.test.ts @@ -323,8 +323,6 @@ describe("compileFunctionExpression", function () { new Sta(new VReg()), beginLabel, new Ldai(new Imm(1)), - new Sta(new VReg()), - new Lda(new VReg()), new Asyncfunctionawaituncaught(new VReg()), new Suspendgenerator(new VReg()), new Lda(new VReg()), @@ -353,6 +351,9 @@ describe("compileFunctionExpression", function () { pandaGens.forEach((pg) => { if (pg.internalName == "UnitTest.a") { + pg.getInsns().forEach(ins => { + console.log(ins.toString()); + }) expect(checkInstructions(pg.getInsns(), expected_func), "check async func insns").to.be.true; checkCount++; } -- Gitee