package Ġio . ktor . util . pipeline Ċ Ċ import Ġio . ktor . util .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlin . coroutines .* Ċ import Ġkotlin . coroutines . intr insics .* Ċ Ċ /** Ċ Ġ* ĠRepresents Ġrunning Ġexecution Ġof Ġa Ġpipeline Ċ Ġ*/ Ċ @ Context Dsl Ċ interface ĠPipeline Context < T Subject Ġ: ĠAny , ĠT Context Ġ: ĠAny > Ġ: ĠCor outine Scope Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠObject Ġrepresenting Ġcontext Ġin Ġwhich Ġpipeline Ġexecutes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcontext : ĠT Context ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSubject Ġof Ġthis Ġpipeline Ġexecution Ġthat Ġgoes Ġalong Ġthe Ġpipeline ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsubject : ĠT Subject ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFin ishes Ġcurrent Ġpipeline Ġexecution ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfinish () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCont in ues Ġexecution Ġof Ġthe Ġpipeline Ġwith Ġthe Ġgiven Ġsubject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġproceed With ( subject : ĠT Subject ): ĠT Subject ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCont in ues Ġexecution Ġof Ġthe Ġpipeline Ġwith Ġthe Ġsame Ġsubject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġproceed (): ĠT Subject Ċ } Ċ Ċ /** Ċ Ġ* ĠRepresent Ġan Ġobject Ġthat Ġla unches Ġpipeline Ġexecution Ċ Ġ*/ Ċ @ K tor Experimental API Ċ interface ĠPipeline Executor < R > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStart Ġpipeline Ġexecution Ġor Ġfail Ġif Ġalready Ġrunning Ġand Ġnot Ġyet Ġcompleted . ĊĠĠĠĠ Ġ* ĠIt Ġshould Ġnot Ġbe Ġinvoked Ġconcurrent ly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġexecute ( initial : ĠR ): ĠR Ċ } Ċ Ċ /** Ċ Ġ* ĠBuild Ġa Ġpipeline Ġof Ġthe Ġspecified Ġ[ intercept ors ] Ġand Ġcreate Ġexecutor Ċ Ġ*/ Ċ @ K tor Experimental API Ċ fun Ġ< T Subject Ġ: ĠAny , ĠT Context Ġ: ĠAny > Ġpipeline Executor For ( ĊĠĠĠ Ġcontext : ĠT Context , ĊĠĠĠ Ġintercept ors : ĠList < Pipeline Interceptor < T Subject , ĠT Context >>, ĊĠĠĠ Ġsubject : ĠT Subject Ċ ): ĠPipeline Executor < T Subject > Ġ{ ĊĠĠĠ Ġreturn ĠS uspend Function Gun ( subject , Ġcontext , Ġintercept ors ) Ċ } Ċ Ċ private Ġclass ĠS uspend Function Gun < T Subject Ġ: ĠAny , ĠT Context Ġ: ĠAny >( ĊĠĠĠ Ġinitial : ĠT Subject , ĊĠĠĠ Ġoverride Ġval Ġcontext : ĠT Context , ĊĠĠĠ Ġprivate Ġval Ġblocks : ĠList < Pipeline Interceptor < T Subject , ĠT Context >> Ċ ) Ġ: ĠPipeline Context < T Subject , ĠT Context >, ĠPipeline Executor < T Subject >, ĠCor outine Scope Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context Ġget () Ġ= Ġcontinuation . context ĊĊĠĠĠ Ġ// ĠStack - walk ing Ġstate ĊĠĠĠ Ġprivate Ġvar Ġlast Peek ed Index Ġ= Ġ- 1 ĊĊĠĠĠ Ġ// Ġthis Ġis Ġimpossible Ġto Ġinline Ġbecause Ġof Ġproperty Ġname Ġcl ash ĊĠĠĠ Ġ// Ġbetween ĠPipeline Context . context Ġand ĠContinu ation . context ĊĠĠĠ Ġprivate Ġval Ġcontinuation : ĠContinu ation < Unit > Ġ= Ġobject Ġ: ĠContinu ation < Unit >, ĠCor outine Stack Frame Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcaller Frame : ĠCor outine Stack Frame ? Ġget () Ġ= Ġpeek Continuation () Ġas ? ĠCor outine Stack Frame ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget StackTrace Element (): ĠStack Trace Element ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġpeek Continuation (): ĠContinu ation < *> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Peek ed Index Ġ< Ġ 0 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Continuation Ġ= Ġroot Continuation ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( root Continuation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContinu ation < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-- last Peek ed Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġroot Continuation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠArrayList < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( root Continuation . isEmpty ()) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġroot Continuation [ last Peek ed Index -- ] Ġas ĠContinu ation < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcontext : ĠCor outine Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Ġ() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcont Ġ= Ġroot Continuation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( cont ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġthrow ĠIllegalStateException (" Not Ġstarted ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContinu ation < *> Ġ-> Ġcont . context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList < *> Ġ-> Ġ( cont Ġas ĠList < Continuation <* >> ). last (). context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Unexpected Ġroot Continuation Ġvalue ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresume With ( result : ĠResult < Unit >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . is Failure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresume Root With ( Result . failure ( result . exception OrNull () !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġloop ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġsubject : ĠT Subject Ġ= Ġinitial ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġvar Ġroot Continuation : ĠAny ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġindex Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠ Ġindex Ġ= Ġblocks . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġproceed (): ĠT Subject Ġ= Ġsuspend Coroutine Un intercept ed Or Return Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġblocks . size ) Ġreturn @ suspend Coroutine Un intercept ed Or Return Ġsubject ĊĊĠĠĠĠĠĠĠ Ġadd Continuation ( continu ation ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( loop ( true )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiscard Last Root Continuation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ suspend Coroutine Un intercept ed Or Return Ġsubject ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠCOR OUT INE _ SUS PEN DED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġproceed With ( subject : ĠT Subject ): ĠT Subject Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . subject Ġ= Ġsubject ĊĠĠĠĠĠĠĠ Ġreturn Ġproceed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġexecute ( initial : ĠT Subject ): ĠT Subject Ġ{ ĊĠĠĠĠĠĠĠ Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġblocks . size ) Ġreturn Ġinitial ĊĠĠĠĠĠĠĠ Ġsubject Ġ= Ġinitial ĊĊĠĠĠĠĠĠĠ Ġif Ġ( root Continuation Ġ!= Ġnull ) Ġthrow ĠIllegalStateException (" Already Ġstarted ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġproceed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġit Ġis Ġpossible Ġto Ġreturn Ġresult Ġimmediately ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġloop ( direct : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Ġ Ġ// Ġit Ġis Ġimportant Ġto Ġread Ġindex Ġevery Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġblocks . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! direct ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresume Root With ( Result . success ( subject )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Suspend Function Gun . index Ġ= Ġindex Ġ+ Ġ 1 Ġ Ġ// Ġit Ġis Ġimportant Ġto Ġincrease Ġit Ġbefore Ġfunction Ġinvocation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġblocks [ index ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġme Ġ= Ġthis @ Suspend Function Gun ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrc Ġ= Ġnext . start Coroutine Un intercept ed Or Return 3 ( me , Ġme . subject , Ġme . continu ation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rc Ġ=== ĠCOR OUT INE _ SUS PEN DED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( cause : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresume Root With ( Result . failure ( cause )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresume Root With ( result : ĠResult < T Subject >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Continuation Ġ= Ġroot Continuation ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġwhen Ġ( root Continuation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġthrow ĠIllegalStateException (" No Ġmore Ġcontinu ations Ġto Ġresume ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContinu ation < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . root Continuation Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Peek ed Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Continuation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠArrayList < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( root Continuation . isEmpty ()) Ġthrow ĠIllegalStateException (" No Ġmore Ġcontinu ations Ġto Ġresume ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Peek ed Index Ġ= Ġroot Continuation . last Index Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Continuation . remove At ( root Continuation . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġunexpected Root Continuation Value ( root Continuation ) ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠContinu ation < T Subject > ĊĊĠĠĠĠĠĠĠ Ġnext . resume With ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdiscard Last Root Continuation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Continuation Ġ= Ġroot Continuation ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( root Continuation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġthrow ĠIllegalStateException (" No Ġmore Ġcontinu ations Ġto Ġresume ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContinu ation < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Peek ed Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . root Continuation Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠArrayList < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( root Continuation . isEmpty ()) Ġthrow ĠIllegalStateException (" No Ġmore Ġcontinu ations Ġto Ġresume ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Continuation . remove At ( root Continuation . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Peek ed Index Ġ= Ġroot Continuation . last Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġunexpected Root Continuation Value ( root Continuation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Continuation ( continu ation : ĠContinu ation < T Subject >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Continuation Ġ= Ġroot Continuation ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( root Continuation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Peek ed Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . root Continuation Ġ= Ġcontinuation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContinu ation < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . root Continuation Ġ= ĠArrayList < Continuation < *> >( blocks . size ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( root Continuation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( continu ation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Peek ed Index Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠArrayList < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Continuation Ġas ĠArrayList < Continuation < T Subject >> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Continuation . add ( continu ation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Peek ed Index Ġ= Ġroot Continuation . last Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġunexpected Root Continuation Value ( root Continuation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġunexpected Root Continuation Value ( root Continuation : ĠAny ?): ĠNothing Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Unexpected Ġroot Continuation Ġcontent : Ġ$ root Continuation ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress (" NOTH ING _ TO _ INLINE ") Ċ private Ġinline Ġfun Ġ< R , ĠA > ĊĠĠĠ Ġ( suspend ĠR .( A ) Ġ-> ĠUnit ). start Coroutine Un intercept ed Or Return 3 ( ĊĠĠĠ Ġreceiver : ĠR , ĊĠĠĠ Ġarg : ĠA , ĊĠĠĠ Ġcontinuation : ĠContinu ation < Unit > Ċ ): ĠAny ? Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġval Ġfunction Ġ= Ġ( this Ġas ĠFunction 3 < R , ĠA , ĠContinu ation < Unit >, ĠAny ?> ) ĊĠĠĠ Ġreturn Ġfunction . invoke ( receiver , Ġarg , Ġcontinuation ) Ċ } ĊĊ