/* Ċ Ġ* ĠL 2 _ RE ENTER _ L 1 _ CHUNK _ FROM _ CALL . kt Ċ Ġ* ĠCopyright ĠÂ© Ġ 1 9 9 3 - 2 0 2 1 , ĠThe ĠAv ail ĠFoundation , ĠLLC . Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ* ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* ĠĠ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ* ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* ĠĠ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ* ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder Ġnor Ġthe Ġnames Ġof Ġthe Ġcontributors Ċ Ġ* ĠĠ Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ċ Ġ* ĠĠ Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE Ċ Ġ* ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR ĠCONTRIBUTORS ĠBE Ċ Ġ* ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ Ġ* ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF Ċ Ġ* ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS Ċ Ġ* ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN Ċ Ġ* ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) Ċ Ġ* ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE Ċ Ġ* ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġcom . avail . interpreter . level Two . operation Ċ Ċ import Ġcom . avail . descriptor . functions . A _ Continuation Ċ import Ġcom . avail . descriptor . representation . Nil Descriptor Ċ import Ġcom . avail . interpreter . execution . Interpreter Ċ import Ġcom . avail . interpreter . execution . Interpreter . Companion . log Ċ import Ġcom . avail . interpreter . level Two . L 2 Instruction Ċ import Ġcom . avail . interpreter . level Two . L 2 Operation Ċ import Ġcom . avail . optimizer . jvm . Checked Method Ċ import Ġcom . avail . optimizer . jvm . Checked Method . Companion . static Method Ċ import Ġcom . avail . optimizer . jvm . JVM Translator Ċ import Ġcom . avail . optimizer . jvm . Referenced In GeneratedCode Ċ import Ġorg . object web . asm . Method Visitor Ċ import Ġjava . util . logging . Level Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġthe Ġfirst Ġinstruction Ġof Ġthe ĠL 1 Ġinterpreter 's Ġon - ramp Ġfor Ġres uming Ċ Ġ* Ġafter Ġa Ġcal lee Ġreturns . Ġ ĠThe Ġre ified Ġ[ A _ Continuation ] Ġthat Ġwas Ġcaptured Ċ Ġ* Ġ( and Ġis Ġnow Ġbeing Ġres umed ) Ġpointed Ġto Ġthis Ġ[ L 2 Instruction ]. Ġ ĠThat Ċ Ġ* Ġcontinuation Ġis Ġcurrent Ġin Ġthe Ġ[ Interpreter . get Re ified Continuation ]. Ċ Ġ* ĠPop Ġit Ġfrom Ġthat Ġcontinuation Ġchain , Ġcreate Ġsuitable Ġpointer Ġand Ġinteger Ċ Ġ* Ġregisters Ġas Ġexpected Ġby Ġ[ L 2 _ INTER PRE T _ LEVEL _ ONE ], Ġthen Ġexplode Ġthe Ċ Ġ* Ġcontinuation 's Ġslots Ġinto Ġthose Ġregisters . Ġ ĠThe Ġ[ Interpreter . function ] Ċ Ġ* Ġshould Ġalso Ġhave Ġalready Ġbeen Ġset Ġup Ġto Ġagree Ġwith Ġthe Ġcontinuation 's Ċ Ġ* Ġfunction . Ċ Ġ* Ċ Ġ* ĠThe Ġvalue Ġbeing Ġreturned Ġis Ġin Ġ[ Interpreter . get Latest Result ], Ġand Ċ Ġ* Ġthe Ġtop - of - stack Ġof Ġthe Ġcontinuation Ġcontains Ġthe Ġtype Ġto Ġcheck Ġit Ġagainst . Ċ Ġ* ĠWhether Ġto Ġskip Ġthe Ġreturn Ġcheck Ġis Ġup Ġto Ġthe Ġgenerated ĠL 2 Ġcode Ġafter Ġan Ċ Ġ* Ġentry Ġpoint . Ġ ĠIn Ġthis Ġcase Ġ( re enter ing ĠL 1 ), Ġwe Ġalways Ġdo Ġthe Ġcheck . Ċ Ġ* Ċ Ġ* Ġ@ author ĠMark Ġvan ĠG ul ik Ġ& lt ; mark @ avail lang . org & gt ; Ċ Ġ* Ġ@ author ĠT odd ĠL ĠSmith Ġ& lt ; tod d @ avail lang . org & gt ; Ċ Ġ*/ Ċ object ĠL 2 _ RE ENTER _ L 1 _ CHUNK _ FROM _ CALL Ġ: ĠL 2 Operation () Ċ { Ċ ĉ override Ġfun Ġhas Side Effect () Ġ= Ġtrue ĊĊ ĉ override Ġfun Ġis EntryPoint ( instruction : ĠL 2 Instruction ): ĠBoolean Ġ= Ġtrue ĊĊ ĉ override Ġfun Ġtranslate To JVM ( Ċĉ ĉ translator : ĠJVM Translator , Ċĉ ĉ method : ĠMethod Visitor , Ċĉ ĉ instruction : ĠL 2 Instruction ) Ċ ĉ { Ċĉ ĉ // Ġ:: ĠL 2 _ RE ENTER _ L 1 _ CHUNK _ FROM _ CALL . re enter ( interpreter ); Ċĉ ĉ translator . load Interpreter ( method ) Ċĉ ĉ re enter Method . generate Call ( method ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠRe enter ĠL 1 Ġfrom Ġa Ġcall . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġinterpreter Ċĉ Ġ* ĠThe Ġ[ Interpreter ]. Ċĉ Ġ*/ Ċ ĉ @ Referenced In GeneratedCode Ċ ĉ @ Jvm Static Ċ ĉ fun Ġre enter ( interpreter : ĠInterpreter ) Ċ ĉ { Ċĉ ĉ if Ġ( Interpreter . debug L 1 ) Ċĉ ĉ { Ċĉĉ ĉ log ( Ċĉĉĉ ĉ Interpreter . logger Debug L 1 , Ċĉĉĉ ĉ Level . FIN ER , Ċĉĉĉ ĉ "{ 0 } Re enter ĠL 1 Ġfrom Ġcall ", Ċĉĉĉ ĉ interpreter . debug Mode String ) Ċĉ ĉ } Ċĉ ĉ val Ġcontinuation : ĠA _ Continuation Ġ= Ġinterpreter . get Re ified Continuation () !! Ċĉ ĉ interpreter . set Re ified Continuation ( continu ation . caller ()) Ċĉ ĉ val ĠreturnValue Ġ= Ġinterpreter . get Latest Result () Ċĉ ĉ val Ġreturn ee Function Ġ= Ġinterpreter . function !! Ċĉ ĉ assert ( return ee Function Ġ=== Ġcontinuation . function ()) Ċĉ ĉ val Ġnum Slots Ġ= Ġcontinuation . num Slots () Ċĉ ĉ // ĠShould Ġagree Ġwith ĠL 2 _ PRE PARE _ NEW _ FRAME _ FOR _ L 1 . Ċĉ ĉ val Ġstep per Ġ= Ġinterpreter . level One Step per Ċĉ ĉ step per . pointers Ġ= ĠArray ( num Slots Ġ+ Ġ 1 ) Ċĉ ĉ { Ċĉĉ ĉ if Ġ( it Ġ== Ġ 0 ) Ċĉĉ ĉ { Ċĉĉĉ ĉ Nil Descriptor . nil Ċĉĉ ĉ } Ċĉĉ ĉ else Ċĉĉ ĉ { Ċĉĉĉ ĉ continu ation . stack At ( it ) Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ return ee Function . code (). setUp Instruction Decoder ( Ċĉĉ ĉ step per . instruction Decoder ) Ċĉ ĉ step per . instruction Decoder . pc ( continu ation . pc ()) Ċĉ ĉ step per . stack p Ġ= Ġcontinuation . stack p () Ċĉ ĉ step per . pointer At Put ( step per . stack p , ĠreturnValue ) Ċ ĉ } ĊĊ ĉ /** ĠThe Ġ[ Checked Method ] Ġfor Ġ[ re enter ]. Ġ*/ Ċ ĉ private Ġval Ġre enter Method Ġ= Ġstatic Method ( Ċĉ ĉ L 2 _ RE ENTER _ L 1 _ CHUNK _ FROM _ CALL :: class . java , Ċĉ ĉ :: re enter . name , Ċĉ ĉ Void . TYPE , Ċĉ ĉ Interpreter :: class . java ) Ċ } Ċ