@@ -748,6 +748,127 @@ for (const flags of [[], ['--target=es6', '--target=es2017', '--supported:async-
748748 }
749749 ` ,
750750 } , { async : true } ) ,
751+ test ( [ 'in.js' , '--outfile=node.js' , '--format=esm' ] . concat ( flags ) , {
752+ 'in.js' : `
753+ async function* i() {
754+ yield 1
755+ yield 2
756+ }
757+ async function* f() {
758+ yield* i()
759+ }
760+ export let async = async () => {
761+ let it, stateA, stateB
762+ it = f()
763+ stateA = it.next()
764+ stateB = it.next()
765+
766+ stateA = await stateA
767+ stateB = await stateB
768+
769+ if (stateA.done !== false || stateA.value !== 1) throw 'fail: f: next A'
770+ if (stateB.done !== false || stateB.value !== 2) throw 'fail: f: next B'
771+
772+ stateA = await it.next()
773+ if (stateA.done !== true || stateA.value !== void 0) throw 'fail: f: done'
774+ }
775+ ` ,
776+ } , { async : true } ) ,
777+ test ( [ 'in.js' , '--outfile=node.js' , '--format=esm' ] . concat ( flags ) , {
778+ 'in.js' : `
779+ async function* i() {
780+ yield 1
781+ yield 2
782+ }
783+ async function* f() {
784+ for await (const x of i())
785+ yield x;
786+ }
787+ export let async = async () => {
788+ let it, stateA, stateB
789+ it = f()
790+ stateA = it.next()
791+ stateB = it.next()
792+
793+ stateA = await stateA
794+ stateB = await stateB
795+
796+ if (stateA.done !== false || stateA.value !== 1) throw 'fail: f: next A'
797+ if (stateB.done !== false || stateB.value !== 2) throw 'fail: f: next B'
798+
799+ stateA = await it.next()
800+ if (stateA.done !== true || stateA.value !== void 0) throw 'fail: f: done'
801+ }
802+ ` ,
803+ } , { async : true } ) ,
804+ test ( [ 'in.js' , '--outfile=node.js' , '--format=esm' ] . concat ( flags ) , {
805+ 'in.js' : `
806+ async function* f() {
807+ await Promise.resolve()
808+ return yield 1
809+ }
810+ export let async = async () => {
811+ let it, stateA, stateB
812+ it = f()
813+ stateA = it.next()
814+ stateB = it.next(2)
815+
816+ stateA = await stateA
817+ stateB = await stateB
818+
819+ if (stateA.done !== false || stateA.value !== 1) throw 'fail: f: next'
820+ if (stateB.done !== true || stateB.value !== 2) throw 'fail: f: done'
821+ }
822+ ` ,
823+ } , { async : true } ) ,
824+ test ( [ 'in.js' , '--outfile=node.js' , '--format=esm' ] . concat ( flags ) , {
825+ 'in.js' : `
826+ async function* f(order) {
827+ order.push('before')
828+ await Promise.resolve()
829+ return yield 1
830+ }
831+ export let async = async () => {
832+ let it, stateA, stateB, order = []
833+ it = f(order)
834+ stateA = it.next()
835+ stateB = it.next(2)
836+ order.push('after')
837+
838+ stateA = await stateA
839+ stateB = await stateB
840+
841+ if (order[0] !== 'before' || order[1] !== 'after') throw 'fail: f: order: ' + JSON.stringify(order)
842+ if (stateA.done !== false || stateA.value !== 1) throw 'fail: f: next'
843+ if (stateB.done !== true || stateB.value !== 2) throw 'fail: f: done'
844+ }
845+ ` ,
846+ } , { async : true } ) ,
847+ test ( [ 'in.js' , '--outfile=node.js' , '--format=esm' ] . concat ( flags ) , {
848+ 'in.js' : `
849+ async function* f(order) {
850+ yield 0
851+ order.push('before')
852+ await Promise.resolve()
853+ return yield 1
854+ }
855+ export let async = async () => {
856+ let it, stateA, stateB, order = []
857+ it = f(order)
858+ await it.next()
859+ stateA = it.next()
860+ order.push('after')
861+ stateB = it.next(2)
862+
863+ stateA = await stateA
864+ stateB = await stateB
865+
866+ if (order[0] !== 'before' || order[1] !== 'after') throw 'fail: f: order: ' + JSON.stringify(order)
867+ if (stateA.done !== false || stateA.value !== 1) throw 'fail: f: next'
868+ if (stateB.done !== true || stateB.value !== 2) throw 'fail: f: done'
869+ }
870+ ` ,
871+ } , { async : true } ) ,
751872 test ( [ 'in.js' , '--outfile=node.js' , '--format=esm' ] . concat ( flags ) , {
752873 'in.js' : `
753874 async function* f() {
0 commit comments