package Ġcom . ree va js . ree va . runtime . functions . generators Ċ Ċ import Ġcom . ree va js . ree va . core . Agent Ċ import Ġcom . ree va js . ree va . core . ExecutionContext Ċ import Ġcom . ree va js . ree va . core . realm . Realm Ċ import Ġcom . ree va js . ree va . core . environment . Env Record Ċ import Ġcom . ree va js . ree va . interpreter . Interpreter Ċ import Ġcom . ree va js . ree va . transformer . Trans formed Source Ċ import Ġcom . ree va js . ree va . runtime . JS Value Ċ import Ġcom . ree va js . ree va . runtime . Operations Ċ import Ġcom . ree va js . ree va . runtime . objects . JS Object Ċ import Ġcom . ree va js . ree va . runtime . objects . Slot Name Ċ import Ġcom . ree va js . ree va . runtime . primitives . JS Undefined Ċ import Ġcom . ree va js . ree va . utils . expect Ċ Ċ class ĠJS Generator Object Ġprivate Ġconstructor ( ĊĠĠĠ Ġrealm : ĠRealm , ĊĠĠĠ Ġval Ġtransformed Source : ĠTrans formed Source , ĊĠĠĠ Ġval Ġreceiver : ĠJS Value , ĊĠĠĠ Ġarguments : ĠList < JS Value >, ĊĠĠĠ Ġval Ġgenerator State : ĠInterpreter . Generator State , ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠExecutionContext , Ċ ) Ġ: ĠJS Object ( realm , Ġrealm . generator Object Proto ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġarguments Ġ= ĠlistOf ( receiver , ĠJS Undefined , Ġgenerator State ) Ġ+ Ġarguments ĊĊĠĠĠ Ġfun Ġnext ( value : ĠJS Value ): ĠJS Value Ġ{ ĊĠĠĠĠĠĠĠ Ġgenerator State . sent Value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġval Ġagent Ġ= ĠAgent . active Agent ĊĊĠĠĠĠĠĠĠ Ġagent . push ExecutionContext ( context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent . pop ExecutionContext () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreturn _( value : ĠJS Value ): ĠJS Value Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġthrow _( value : ĠJS Value ): ĠJS Value Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute (): ĠJS Value Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinterpreter Ġ= ĠInterpreter ( transformed Source , Ġarguments ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġinterpreter . interpret () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result . hasValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOperations . create Iter Result Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . value (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator State . phase Ġ== Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġthrow Ġresult . error () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransformed Source : ĠTrans formed Source , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver : ĠJS Value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments : ĠList < JS Value >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator State : ĠInterpreter . Generator State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecution Context : ĠExecutionContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm : ĠRealm Ġ= ĠAgent . active Agent . getActive Realm (), ĊĠĠĠĠĠĠĠ Ġ) Ġ= ĠJS Generator Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransformed Source , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecution Context , ĊĠĠĠĠĠĠĠ Ġ). initialize () ĊĠĠĠ Ġ} Ċ } Ċ