package Ġcom . github . wh yr ising . re compose Ċ Ċ import Ġcom . github . wh yr ising . re compose . co fx . Co effects Ċ import Ġcom . github . wh yr ising . re compose . interceptor . Context Ċ import Ġcom . github . wh yr ising . re compose . interceptor . Interceptor Ċ import Ġcom . github . wh yr ising . re compose . interceptor . Interceptor Fn Ċ import Ġcom . github . wh yr ising . re compose . interceptor . assoc C of x Ċ import Ġcom . github . wh yr ising . re compose . interceptor . change Direction Ċ import Ġcom . github . wh yr ising . re compose . interceptor . context Ċ import Ġcom . github . wh yr ising . re compose . interceptor . default Interceptor Fn Ċ import Ġcom . github . wh yr ising . re compose . interceptor . enqueue Ċ import Ġcom . github . wh yr ising . re compose . interceptor . execute Ċ import Ġcom . github . wh yr ising . re compose . interceptor . invoke Interceptor Fn Ċ import Ġcom . github . wh yr ising . re compose . interceptor . invoke Intercept ors Ċ import Ġcom . github . wh yr ising . re compose . interceptor . to Interceptor Ċ import Ġcom . github . wh yr ising . re compose . schemas . Co effects Schema . event Ċ import Ġcom . github . wh yr ising . re compose . schemas . Co effects Schema . original Event Ċ import Ġcom . github . wh yr ising . re compose . schemas . Context Schema Ċ import Ġcom . github . wh yr ising . re compose . schemas . Context Schema . co effects Ċ import Ġcom . github . wh yr ising . re compose . schemas . Context Schema . queue Ċ import Ġcom . github . wh yr ising . re compose . schemas . Context Schema . stack Ċ import Ġcom . github . wh yr ising . re compose . schemas . Interceptor Schema Ċ import Ġcom . github . wh yr ising . re compose . schemas . Interceptor Schema . after Ċ import Ġcom . github . wh yr ising . re compose . schemas . Interceptor Schema . before Ċ import Ġcom . github . wh yr ising . re compose . schemas . Interceptor Schema . id Ċ import Ġcom . github . wh yr ising . re compose . schemas . Schema . db Ċ import Ġcom . github . wh yr ising . y . collections . con cret ions . list . Persistent List Ċ import Ġcom . github . wh yr ising . y . collections . core . assoc In Ċ import Ġcom . github . wh yr ising . y . collections . core . get Ċ import Ġcom . github . wh yr ising . y . collections . core . l Ċ import Ġcom . github . wh yr ising . y . collections . core . m Ċ import Ġcom . github . wh yr ising . y . collections . core . v Ċ import Ġcom . github . wh yr ising . y . collections . map . IP ers istent Map Ċ import Ġcom . github . wh yr ising . y . collections . seq . I Seq Ċ import Ġcom . github . wh yr ising . y . collections . vector . IP ers istent Vector Ċ import Ġio . kot est . core . spec . style . Free Spec Ċ import Ġio . kot est . matchers . collections . shouldBe Empty Ċ import Ġio . kot est . matchers . collections . should Contain Exactly Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . matchers . types . shouldBe Same Instance As Ċ Ċ class ĠInter ceptor Test Ġ: ĠFree Spec ({ ĊĠĠĠ Ġ" to Interceptor () Ġshould Ġreturn Ġa Ġmap Ġinterceptor " Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" return Ġa Ġmap Ġwith Ġdefault Ġfunctions " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Interceptor Ġ= Ġm ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġto Ġ": test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġto Ġdefault Interceptor Fn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġafter Ġto Ġdefault Interceptor Fn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Interceptor Ġ= Ġto Interceptor (": test ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Interceptor ĠshouldBe Ġexpected Interceptor ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" return Ġa Ġmap Ġof Ġthe Ġpassed Ġvalues " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf 1 : ĠInter ceptor Fn Ġ= Ġ{ Ġcontext : ĠContext Ġ-> Ġcontext Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf 2 : ĠInter ceptor Fn Ġ= Ġ{ Ġcontext : ĠContext Ġ-> Ġcontext Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterceptor Ġ= Ġto Interceptor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ": test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġ= Ġf 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġafter Ġ= Ġf 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterceptor ĠshouldBe Ġm ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġto Ġ": test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġto Ġf 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġafter Ġto Ġf 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" assoc C of x () Ġshould Ġinject Ġkey / val Ġpair Ġinto Ġ` co effects ` Ġinto Ġcontext " Ġ{ ĊĠĠĠĠĠĠĠ Ġassoc C of x ( m (), Ġevent , Ġ 1 4 ) ĠshouldBe Ġm ( co effects Ġto Ġm ( event Ġto Ġ 1 4 )) ĊĠĠĠĠĠĠĠ Ġassoc C of x ( m ( stack Ġto Ġl < Any > ()), Ġevent , Ġ 1 4 ) ĠshouldBe Ġm ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Ġto Ġl < Any >(), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco effects Ġto Ġm ( event Ġto Ġ 1 4 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" enqueue ()" Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" when Ġintercept ors Ġis Ġnull , Ġuse Ġan Ġempty Ġvec Ġinstead " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue ( m (), Ġnull ) ĠshouldBe Ġm ( queue Ġto Ġl < Any >()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" should Ġinject Ġkey / val Ġpair Ġof Ġqueue / intercept ors " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintercept ors : ĠI Seq < Interceptor > Ġ= Ġl () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue ( m (), Ġintercept ors ) ĠshouldBe Ġm ( queue Ġto Ġintercept ors ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" context ( event , Ġintercept ors ) Ġshould Ġreturn Ġa Ġfresh Ġcontext " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevent Vec Ġ= Ġv < Any >(" : id ", Ġ 1 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġintercept ors Ġ= Ġl < IP ers istent Map < Interceptor Schema , ĠAny >>() ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext ( event Vec , Ġintercept ors ) ĊĊĠĠĠĠĠĠĠ Ġcontext ĠshouldBe Ġm ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco effects Ġto Ġm ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Ġto Ġevent Vec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Event Ġto Ġevent Vec ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġto Ġintercept ors ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" invoke Interceptor Fn () Ġshould Ġcall Ġthe Ġinterceptor Ġfun Ġbased Ġdirection " Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext 0 Ġ= Ġm < Context Schema , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġto Ġv < Any >(), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Ġto Ġv ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġf : Ġsuspend Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIP ers istent Map < Context Schema , ĠAny > ĊĠĠĠĠĠĠĠ Ġ) Ġ-> ĠIP ers istent Map < Context Schema , ĠAny > Ġ= Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġq Ġ= Ġ( context [ queue ] Ġas ĠIP ers istent Vector < Any >). conj ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . assoc ( queue , Ġq ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġg : Ġsuspend Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIP ers istent Map < Context Schema , ĠAny > ĊĠĠĠĠĠĠĠ Ġ) Ġ-> ĠIP ers istent Map < Context Schema , ĠAny > Ġ= Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġq Ġ= Ġ( context [ queue ] Ġas ĠIP ers istent Vector < Any >). plus ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . assoc ( queue , Ġq ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠaddTo Q After Ġ= Ġto Interceptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ": add - to - queue ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Ġ= Ġf ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ" should Ġcall Ġ: before Ġand Ġadd Ġto Ġthe Ġcontext " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠaddTo Q Ġ= Ġto Interceptor ( id Ġ= Ġ": add - to - queue ", Ġbefore Ġ= Ġg ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġinvoke Interceptor Fn ( context 0 , ĠaddTo Q , Ġbefore ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĠshouldBe Ġm < Context Schema , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġto Ġv ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack Ġto Ġv ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" should Ġcall Ġ: after Ġand Ġadd Ġto Ġthe Ġcontext " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Interceptor Fn ( context 0 , ĠaddTo Q After , Ġafter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĠshouldBe Ġm < Context Schema , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġto Ġv ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack Ġto Ġv ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" when Ġsome Ġdirection Ġset Ġto Ġdefault , Ġshould Ġreturn Ġthe Ġsame Ġcontext " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġinvoke Interceptor Fn ( context 0 , ĠaddTo Q After , Ġbefore ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĠshouldBe Same Instance As Ġcontext 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" invoke Intercept ors ( context )" Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" should Ġreturn Ġthe Ġsame Ġgiven Ġcontext Ġwhen Ġthe Ġ: queue Ġis Ġempty " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġm < Context Schema , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġto Ġl < Any >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack Ġto Ġl < Any >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Context Ġ= Ġinvoke Intercept ors ( context , Ġbefore ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Context ĠshouldBe Same Instance As Ġcontext ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIt Ġshould Ġmake Ġa Ġnew Ġcontext Ġby Ġinvoking Ġall Ġintercept ors Ġin Ġ: queue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġstack Ġthen Ġin Ġ: stack Ġwhile Ġempty ing Ġthe Ġqueue ĊĠĠĠĠĠĠĠ Ġ""" Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf 1 : Ġsuspend Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIP ers istent Map < Context Schema , ĠAny > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ-> ĠIP ers istent Map < Context Schema , ĠAny > Ġ= Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġ( context [ co effects ] Ġas ĠCo effects )[ db ] Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . assoc ( co effects , Ġm ( db Ġto Ġi . inc ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf 2 : Ġsuspend Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIP ers istent Map < Context Schema , ĠAny > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ-> ĠIP ers istent Map < Context Schema , ĠAny > Ġ= Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġ( context [ co effects ] Ġas ĠCo effects )[ db ] Ġas ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . assoc ( co effects , Ġm ( db Ġto Ġi Ġ+ Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinc By 1 Ġ= Ġto Interceptor ( id Ġ= Ġ": inc By 1 ", Ġbefore Ġ= Ġf 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinc By 2 Ġ= Ġto Interceptor ( id Ġ= Ġ": inc By 2 ", Ġbefore Ġ= Ġf 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqu Ġ= Ġl < Any >( inc By 1 , Ġinc By 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġst ck Ġ= Ġl < Any >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext : ĠContext Ġ= Ġm ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco effects Ġto Ġm ( db Ġto Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġto Ġqu , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack Ġto Ġst ck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Context Ġ= Ġinvoke Intercept ors ( context , Ġbefore ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Context [ co effects ] ĠshouldBe Ġm ( db Ġto Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( new Context [ queue ] Ġas ĠPersistent List < *> ). shouldBe Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( new Context [ stack ] Ġas ĠPersistent List <* >) Ġshould Contain Exactly ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqu . reversed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" change Direction ( context )" Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" should Ġput Ġthe Ġstack Ġinto Ġa Ġnew Ġthe Ġqueue " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġm < Context Schema , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġto Ġl < Any >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack Ġto Ġl ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġchange Direction ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġc ĠshouldBe Ġm < Context Schema , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġto Ġl < Any >( 1 , Ġ 2 , Ġ 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack Ġto Ġl ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" should Ġfill Ġthe Ġqueue Ġfrom Ġthe Ġstack " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġl < Any >( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġm ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġto Ġl (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack Ġto Ġs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Context Ġ= Ġchange Direction ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( new Context [ queue ] Ġas ĠPersistent List <* >) Ġshould Contain Exactly Ġs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( new Context [ stack ] Ġas ĠPersistent List <* >) Ġshould Contain Exactly Ġs ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġexecute () Ġshould Ġbuild Ġcontext Ġand Ġrun Ġ: before Ġintercept ors Ġin Ġthe Ġgiven ĠĊĠĠĠĠĠĠĠ Ġorder , Ġthen Ġ: after Ġintercept ors Ġin Ġreversed Ġorder ĊĠĠĠ Ġ""" Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevent V Ġ= Ġv (": test ") ĊĠĠĠĠĠĠĠ Ġval Ġinterceptor 1 Ġ= Ġto Interceptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ": i 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassoc In ( context , Ġl ( co effects , Ġdb ), Ġ 3 ) Ġas ĠContext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġinterceptor 2 Ġ= Ġto Interceptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ": i 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Ġ= Ġ{ Ġcontext : ĠContext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġ( context [ co effects ] Ġas ĠCo effects )[ db ] Ġas ĠInt Ġ* Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassoc In ( context , Ġl ( co effects , Ġdb ), Ġvalue ) Ġas ĠContext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġexecute ( event V , Ġl ( interceptor 1 , Ġinterceptor 2 )) ĊĊĠĠĠĠĠĠĠ Ġcontext ĠshouldBe Ġm ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco effects Ġto Ġm ( event Ġto Ġevent V , Ġoriginal Event Ġto Ġevent V , Ġdb Ġto Ġ 1 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġto Ġl < Any >(), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Ġto Ġl ( interceptor 1 , Ġinterceptor 2 , Ġinterceptor 2 , Ġinterceptor 1 ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }) Ċ