From 93e8924ec512bc574d8ced574dce988a2bcf7c5b Mon Sep 17 00:00:00 2001 From: Leo Balter Date: Mon, 15 May 2017 15:47:44 -0400 Subject: [PATCH] Add templates for dstr-binding w/ for-await-of looping over async iterators --- ...r-await-of-async-func-const-async.template | 54 +++++++++++++++++++ ...for-await-of-async-func-let-async.template | 54 +++++++++++++++++++ ...for-await-of-async-func-var-async.template | 54 +++++++++++++++++++ ...or-await-of-async-gen-const-async.template | 54 +++++++++++++++++++ .../for-await-of-async-gen-let-async.template | 54 +++++++++++++++++++ .../for-await-of-async-gen-var-async.template | 54 +++++++++++++++++++ 6 files changed, 324 insertions(+) create mode 100644 src/dstr-binding/default/for-await-of-async-func-const-async.template create mode 100644 src/dstr-binding/default/for-await-of-async-func-let-async.template create mode 100644 src/dstr-binding/default/for-await-of-async-func-var-async.template create mode 100644 src/dstr-binding/default/for-await-of-async-gen-const-async.template create mode 100644 src/dstr-binding/default/for-await-of-async-gen-let-async.template create mode 100644 src/dstr-binding/default/for-await-of-async-gen-var-async.template diff --git a/src/dstr-binding/default/for-await-of-async-func-const-async.template b/src/dstr-binding/default/for-await-of-async-func-const-async.template new file mode 100644 index 0000000000..a897bc9695 --- /dev/null +++ b/src/dstr-binding/default/for-await-of-async-func-const-async.template @@ -0,0 +1,54 @@ +// Copyright (C) 2017 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +path: language/statements/for-await-of/async-func-dstr-const-async- +name: for-await-of statement +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [destructuring-binding, async-iteration] +flags: [async] +info: | + IterationStatement : + for await ( ForDeclaration of AssignmentExpression ) Statement + + [...] + 2. Return ? ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult, + lexicalBinding, labelSet, async). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. Let destructuring be IsDestructuring of lhs. + [...] + 6. Repeat + [...] + j. If destructuring is false, then + [...] + k. Else + i. If lhsKind is assignment, then + [...] + ii. Else if lhsKind is varBinding, then + [...] + iii. Else, + 1. Assert: lhsKind is lexicalBinding. + 2. Assert: lhs is a ForDeclaration. + 3. Let status be the result of performing BindingInitialization + for lhs passing nextValue and iterationEnv as arguments. + [...] +---*/ + +var iterCount = 0; +var asyncIter = (async function*() { + yield* [/*{ vals }*/]; +})(); + +async function fn() { + for await (const /*{ elems }*/ of asyncIter) { + /*{ body }*/ + + iterCount += 1; + } +} + +fn() + .then(() => assert.sameValue(iterCount, 1, 'iteration occurred as expected'), $DONE) + .then($DONE, $DONE); diff --git a/src/dstr-binding/default/for-await-of-async-func-let-async.template b/src/dstr-binding/default/for-await-of-async-func-let-async.template new file mode 100644 index 0000000000..6f971f061d --- /dev/null +++ b/src/dstr-binding/default/for-await-of-async-func-let-async.template @@ -0,0 +1,54 @@ +// Copyright (C) 2017 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +path: language/statements/for-await-of/async-func-dstr-let-async- +name: for-await-of statement +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [destructuring-binding, async-iteration] +flags: [async] +info: | + IterationStatement : + for await ( ForDeclaration of AssignmentExpression ) Statement + + [...] + 2. Return ? ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult, + lexicalBinding, labelSet, async). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. Let destructuring be IsDestructuring of lhs. + [...] + 6. Repeat + [...] + j. If destructuring is false, then + [...] + k. Else + i. If lhsKind is assignment, then + [...] + ii. Else if lhsKind is varBinding, then + [...] + iii. Else, + 1. Assert: lhsKind is lexicalBinding. + 2. Assert: lhs is a ForDeclaration. + 3. Let status be the result of performing BindingInitialization + for lhs passing nextValue and iterationEnv as arguments. + [...] +---*/ + +var iterCount = 0; +var asyncIter = (async function*() { + yield* [/*{ vals }*/]; +})(); + +async function fn() { + for await (let /*{ elems }*/ of asyncIter) { + /*{ body }*/ + + iterCount += 1; + } +} + +fn() + .then(() => assert.sameValue(iterCount, 1, 'iteration occurred as expected'), $DONE) + .then($DONE, $DONE); diff --git a/src/dstr-binding/default/for-await-of-async-func-var-async.template b/src/dstr-binding/default/for-await-of-async-func-var-async.template new file mode 100644 index 0000000000..1682320824 --- /dev/null +++ b/src/dstr-binding/default/for-await-of-async-func-var-async.template @@ -0,0 +1,54 @@ +// Copyright (C) 2017 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +path: language/statements/for-await-of/async-func-dstr-var-async- +name: for-await-of statement +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [destructuring-binding, async-iteration] +flags: [async] +info: | + IterationStatement : + for await ( ForDeclaration of AssignmentExpression ) Statement + + [...] + 2. Return ? ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult, + lexicalBinding, labelSet, async). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. Let destructuring be IsDestructuring of lhs. + [...] + 6. Repeat + [...] + j. If destructuring is false, then + [...] + k. Else + i. If lhsKind is assignment, then + [...] + ii. Else if lhsKind is varBinding, then + [...] + iii. Else, + 1. Assert: lhsKind is lexicalBinding. + 2. Assert: lhs is a ForDeclaration. + 3. Let status be the result of performing BindingInitialization + for lhs passing nextValue and iterationEnv as arguments. + [...] +---*/ + +var iterCount = 0; +var asyncIter = (async function*() { + yield* [/*{ vals }*/]; +})(); + +async function fn() { + for await (var /*{ elems }*/ of asyncIter) { + /*{ body }*/ + + iterCount += 1; + } +} + +fn() + .then(() => assert.sameValue(iterCount, 1, 'iteration occurred as expected'), $DONE) + .then($DONE, $DONE); diff --git a/src/dstr-binding/default/for-await-of-async-gen-const-async.template b/src/dstr-binding/default/for-await-of-async-gen-const-async.template new file mode 100644 index 0000000000..592433e70b --- /dev/null +++ b/src/dstr-binding/default/for-await-of-async-gen-const-async.template @@ -0,0 +1,54 @@ +// Copyright (C) 2017 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +path: language/statements/for-await-of/async-gen-dstr-const-async- +name: for-await-of statement +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [destructuring-binding, async-iteration] +flags: [async] +info: | + IterationStatement : + for await ( ForDeclaration of AssignmentExpression ) Statement + + [...] + 2. Return ? ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult, + lexicalBinding, labelSet, async). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. Let destructuring be IsDestructuring of lhs. + [...] + 6. Repeat + [...] + j. If destructuring is false, then + [...] + k. Else + i. If lhsKind is assignment, then + [...] + ii. Else if lhsKind is varBinding, then + [...] + iii. Else, + 1. Assert: lhsKind is lexicalBinding. + 2. Assert: lhs is a ForDeclaration. + 3. Let status be the result of performing BindingInitialization + for lhs passing nextValue and iterationEnv as arguments. + [...] +---*/ + +var iterCount = 0; +var asyncIter = (async function*() { + yield* [/*{ vals }*/]; +})(); + +async function *fn() { + for await (const /*{ elems }*/ of asyncIter) { + /*{ body }*/ + + iterCount += 1; + } +} + +fn().next() + .then(() => assert.sameValue(iterCount, 1, 'iteration occurred as expected'), $DONE) + .then($DONE, $DONE); diff --git a/src/dstr-binding/default/for-await-of-async-gen-let-async.template b/src/dstr-binding/default/for-await-of-async-gen-let-async.template new file mode 100644 index 0000000000..aeb133ad46 --- /dev/null +++ b/src/dstr-binding/default/for-await-of-async-gen-let-async.template @@ -0,0 +1,54 @@ +// Copyright (C) 2017 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +path: language/statements/for-await-of/async-gen-dstr-let-async- +name: for-await-of statement +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [destructuring-binding, async-iteration] +flags: [async] +info: | + IterationStatement : + for await ( ForDeclaration of AssignmentExpression ) Statement + + [...] + 2. Return ? ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult, + lexicalBinding, labelSet, async). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. Let destructuring be IsDestructuring of lhs. + [...] + 6. Repeat + [...] + j. If destructuring is false, then + [...] + k. Else + i. If lhsKind is assignment, then + [...] + ii. Else if lhsKind is varBinding, then + [...] + iii. Else, + 1. Assert: lhsKind is lexicalBinding. + 2. Assert: lhs is a ForDeclaration. + 3. Let status be the result of performing BindingInitialization + for lhs passing nextValue and iterationEnv as arguments. + [...] +---*/ + +var iterCount = 0; +var asyncIter = (async function*() { + yield* [/*{ vals }*/]; +})(); + +async function *fn() { + for await (let /*{ elems }*/ of asyncIter) { + /*{ body }*/ + + iterCount += 1; + } +} + +fn().next() + .then(() => assert.sameValue(iterCount, 1, 'iteration occurred as expected'), $DONE) + .then($DONE, $DONE); diff --git a/src/dstr-binding/default/for-await-of-async-gen-var-async.template b/src/dstr-binding/default/for-await-of-async-gen-var-async.template new file mode 100644 index 0000000000..c251fda071 --- /dev/null +++ b/src/dstr-binding/default/for-await-of-async-gen-var-async.template @@ -0,0 +1,54 @@ +// Copyright (C) 2017 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +path: language/statements/for-await-of/async-gen-dstr-var-async- +name: for-await-of statement +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [destructuring-binding, async-iteration] +flags: [async] +info: | + IterationStatement : + for await ( ForDeclaration of AssignmentExpression ) Statement + + [...] + 2. Return ? ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult, + lexicalBinding, labelSet, async). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. Let destructuring be IsDestructuring of lhs. + [...] + 6. Repeat + [...] + j. If destructuring is false, then + [...] + k. Else + i. If lhsKind is assignment, then + [...] + ii. Else if lhsKind is varBinding, then + [...] + iii. Else, + 1. Assert: lhsKind is lexicalBinding. + 2. Assert: lhs is a ForDeclaration. + 3. Let status be the result of performing BindingInitialization + for lhs passing nextValue and iterationEnv as arguments. + [...] +---*/ + +var iterCount = 0; +var asyncIter = (async function*() { + yield* [/*{ vals }*/]; +})(); + +async function *fn() { + for await (var /*{ elems }*/ of asyncIter) { + /*{ body }*/ + + iterCount += 1; + } +} + +fn().next() + .then(() => assert.sameValue(iterCount, 1, 'iteration occurred as expected'), $DONE) + .then($DONE, $DONE);