/* Ċ Ġ* ĠFrame . java Ċ Ġ* ĠCopyright ĠÂ© Ġ 1 9 9 3 - 2 0 2 0 , Ġ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 . optimizer . values Ċ Ċ import Ġcom . avail . descriptor . functions . A _ Continuation Ċ import Ġcom . avail . descriptor . functions . A _ Raw Function Ċ import Ġcom . avail . descriptor . functions . Compiled Code Descriptor Ċ import Ġcom . avail . interpreter . level Two . L 2 Chunk Ċ Ċ /** Ċ Ġ* ĠAn Ġabstract Ġrepresentation Ġof Ġan Ġinvocation . Ġ ĠNote Ġthat Ġthis Ġis Ġnot Ġitself Ġan Ċ Ġ* Ġ[ L 2 Semantic Value ], Ġbut Ġis Ġused Ġby Ġsome Ġspecific Ġkinds Ġof Ġsemantic Ġvalues . Ċ Ġ* ĠThe Ġout erm ost Ġ` Frame ` Ġhas Ġan Ġ[ outer Frame ] Ġof Ġ` null `, Ġand Ġall Ġother Ġframes Ċ Ġ* Ġhave Ġa Ġnon - null Ġouter Ġframe . Ġ ĠFrame s Ġcompare Ġby Ġidentity . Ċ Ġ* Ċ Ġ* Ġ@ property Ġouter Frame Ċ Ġ* ĠĠ ĠThe Ġframe Ġthat Ġwas Ġactive Ġat Ġthe Ġsite Ġof Ġthe Ġinvocation Ġthat Ġthis Ġframe Ċ Ġ* ĠĠ Ġrepresents . Ċ Ġ* Ġ@ property Ġcode Ċ Ġ* ĠĠ ĠThe Ġactual Ġ[ raw &# 3 2 ; function ][ Compiled Code Descriptor ] Ġthat 's Ġassociated Ċ Ġ* ĠĠ Ġwith Ġsemantic Ġvalues Ġtied Ġto Ġthis Ġframe . Ċ Ġ* Ġ@ property Ġdebug Name Ċ Ġ* ĠĠ ĠThe Ġsymbolic Ġname Ġto Ġuse Ġto Ġdescribe Ġthis Ġframe . Ġ ĠNote Ġthat Ġit Ġdoes Ġnot Ċ Ġ* ĠĠ Ġaffect Ġthe Ġidentity Ġof Ġthe Ġframe , Ġwhich Ġis Ġwhat 's Ġused Ġfor Ġcomparing Ġand Ċ Ġ* ĠĠ Ġhashing . Ċ Ġ* Ċ Ġ* Ġ@ constructor Ċ Ġ* ĠConstruct Ġa Ġnew Ġ` Frame ` Ġrepresenting Ġa Ġcall Ġwithin Ġthe Ġgiven Ġframe . Ċ Ġ* Ċ Ġ* Ġ@ param Ġouter Frame Ċ Ġ* ĠĠ ĠThe Ġframe Ġthat Ġwas Ġactive Ġat Ġthe Ġpoint Ġwhere Ġan Ġinvocation Ġof Ġthis Ġframe Ċ Ġ* ĠĠ Ġoccurred , Ġor Ġ` null ` Ġif Ġthis Ġis Ġthe Ġout erm ost Ġframe . Ċ Ġ* Ġ@ param Ġcode Ċ Ġ* ĠĠ ĠThe Ġactual Ġ[ A _ Raw Function ] Ġthat Ġhas Ġthe ĠL 1 Ġcode Ġfor Ġthis Ġframe . Ċ Ġ* Ġ@ param Ġdebug Name Ċ Ġ* ĠĠ ĠWhat Ġto Ġname Ġthis Ġframe . Ċ Ġ*/ Ċ class ĠFrame Ġconstructor ( Ċ ĉ val Ġouter Frame : ĠFrame ?, Ċ ĉ val Ġcode : ĠA _ Raw Function , Ċ ĉ val Ġdebug Name : ĠString ) Ċ { Ċ ĉ /** Ċĉ Ġ* ĠAnswer Ġthe Ġdepth Ġof Ġthis Ġframe , Ġwhich Ġis Ġhow Ġmany Ġinv ocations Ġdeep Ġit Ċĉ Ġ* Ġis Ġrelative Ġto Ġthe Ġout erm ost Ġframe Ġrepresented Ġby Ġan Ġ[ L 2 Chunk ]. Ċĉ Ġ* ĠNote Ġthat Ġframes Ġcompare Ġby Ġidentity , Ġso Ġtwo Ġframes Ġwith Ġthe Ġsame Ġdepth Ċĉ Ġ* Ġare Ġnot Ġnecessarily Ġequal . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġdepth Ġof Ġthe Ġframe , Ġwhere Ġ` 1 ` Ġis Ġthe Ġout erm ost Ġframe Ġof Ġa Ġchunk . Ċĉ Ġ*/ Ċ ĉ fun Ġdepth (): ĠInt Ċ ĉ { Ċĉ ĉ var Ġf Ġ= Ġouter Frame Ċĉ ĉ var Ġdepth Ġ= Ġ 1 Ċĉ ĉ while Ġ( f Ġ!== Ġnull ) Ċĉ ĉ { Ċĉĉ ĉ depth ++ Ċĉĉ ĉ f Ġ= Ġf . outer Frame Ċĉ ĉ } Ċĉ ĉ return Ġdepth Ċ ĉ } ĊĊ ĉ override Ġfun ĠtoString (): ĠString Ġ= Ġdebug Name ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġthe Ġ[ L 2 Semantic Value ] Ġrepresenting Ġthis Ġframe 's Ġfunction . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThis Ġframe 's Ġ[ L 2 Semantic Function ]. Ċĉ Ġ*/ Ċ ĉ fun Ġfunction (): ĠL 2 Semantic Value Ġ= ĠL 2 Semantic Function ( this ) ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġthe Ġ[ L 2 Semantic Value ] Ġrepresenting Ġthis Ġframe 's Ġlabel . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThis Ġframe 's Ġ[ L 2 Semantic Label ]. Ċĉ Ġ*/ Ċ ĉ fun Ġlabel (): ĠL 2 Semantic Value Ġ= ĠL 2 Semantic Label ( this ) ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġthe Ġ[ L 2 Semantic Value ] Ġrepresenting Ġone Ġof Ġthis Ġframe 's Ċĉ Ġ* Ġfunction 's Ġcaptured Ġouter Ġvalues . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġouter Index Ċĉ Ġ* ĠĠ ĠThe Ġsub script Ġof Ġthe Ġouter Ġvalue Ġto Ġretrieve Ġfrom Ġthe Ġfunction Ġrunning Ċĉ Ġ* ĠĠ Ġfor Ġthis Ġframe . Ċĉ Ġ* Ġ@ param Ġoptional Name Ċĉ Ġ* ĠĠ ĠEither Ġa Ġ[ String ] Ġproviding Ġa Ġnaming Ġhint Ġfor Ġthis Ġouter , Ġor Ġ` null `. Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġ[ L 2 Semantic Value ] Ġrepresenting Ġthe Ġspecified Ġouter . Ċĉ Ġ*/ Ċ ĉ fun Ġouter ( outer Index : ĠInt , Ġoptional Name : ĠString ?): ĠL 2 Semantic Value Ġ= Ċĉ ĉ L 2 Semantic Outer ( this , Ġouter Index , Ġoptional Name ) ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġthe Ġ[ L 2 Semantic Value ] Ġrepresenting Ġone Ġof Ġthis Ġframe 's Ġslots , Ġas Ċĉ Ġ* Ġof Ġjust Ġafter Ġthe Ġparticular Ġny bble code Ġthat Ġwrote Ġit . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġslot Index Ċĉ Ġ* ĠĠ ĠThe Ġsub script Ġof Ġthe Ġslot Ġto Ġretrieve Ġfrom Ġthe Ġvirtual Ġcontinuation Ċĉ Ġ* ĠĠ Ġrunning Ġfor Ġthis Ġframe . Ċĉ Ġ* Ġ@ param Ġafter Pc Ċĉ Ġ* ĠĠ ĠThe Ġlevel - one Ġ[ A _ Continuation . pc ] Ġjust Ġafter Ġthe Ġny bble code Ġinstruction Ċĉ Ġ* ĠĠ Ġthat Ġproduced Ġthe Ġvalue Ġin Ġthis Ġslot . Ċĉ Ġ* Ġ@ param Ġoptional Name Ċĉ Ġ* ĠĠ ĠEither Ġa Ġ[ String ] Ġproviding Ġa Ġnaming Ġhint Ġfor Ġthis Ġslot , Ġor Ġ` null `. Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġ[ L 2 Semantic Value ] Ġrepresenting Ġthe Ġspecified Ġslot . Ċĉ Ġ*/ Ċ ĉ fun Ġslot ( Ċĉ ĉ slot Index : ĠInt , Ċĉ ĉ after Pc : ĠInt , Ċĉ ĉ optional Name : ĠString ? Ċ ĉ ): ĠL 2 Semantic Value Ġ= Ċĉ ĉ L 2 Semantic Slot ( this , Ġslot Index , Ġafter Pc , Ġoptional Name ) ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġthe Ġ[ L 2 Semantic Value ] Ġrepresenting Ġthe Ġreturn Ġresult Ġfrom Ġthis Ċĉ Ġ* Ġframe . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġ[ L 2 Semantic Value ] Ġrepresenting Ġthe Ġreturn Ġresult . Ċĉ Ġ*/ Ċ ĉ fun Ġresult (): ĠL 2 Semantic Value Ġ= ĠL 2 Semantic Result ( this ) ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġthe Ġsemantic Ġvalue Ġrepresenting Ġa Ġnew Ġtemporary Ġvalue . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġunique Id Ċĉ Ġ* ĠĠ ĠThe Ġunique Ġidentifier Ġused Ġto Ġidentify Ġthis Ġtemporary Ġvalue Ġwithin Ġits Ċĉ Ġ* ĠĠ Ġframe . Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠAn Ġ[ L 2 Semantic Temp ] Ġrepresenting Ġthe Ġtemporary Ġvalue , Ġgeneral ized Ġto Ġan Ċĉ Ġ* ĠĠ Ġ[ L 2 Semantic Value ]. Ċĉ Ġ*/ Ċ ĉ fun Ġtemp ( unique Id : ĠInt ): ĠL 2 Semantic Value Ġ= ĠL 2 Semantic Temp ( this , Ġunique Id ) ĊĊ ĉ /** Ċĉ Ġ* ĠAnswer Ġan Ġ[ L 2 Semantic Value ] Ġthat Ġrepresents Ġthe Ġre ified Ġcaller Ċĉ Ġ* Ġcontinuation . Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġre ified Ġcaller Ġ( an Ġ[ A _ Continuation ] Ġat Ġruntime ) Ġof Ġthis Ġ Ġframe . Ċĉ Ġ*/ Ċ ĉ fun Ġre ified Caller (): ĠL 2 Semantic Value Ġ= ĠL 2 Semantic Caller ( this ) ĊĊ ĉ /** Ċĉ Ġ* ĠTransform Ġthe Ġreceiver Ġvia Ġthe Ġgiven Ġ[ Function ]. Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġtop Frame Replacement Ċĉ Ġ* ĠĠ ĠThe Ġ` Frame ` Ġto Ġsubstitute Ġfor Ġthe Ġtop Ġframe Ġof Ġthe Ġcode Ġbeing Ġin lined . Ċĉ Ġ* Ġ@ param Ġframe Transformer Ċĉ Ġ* ĠĠ ĠHow Ġto Ġtransform Ġ` Frame ` Ġparts Ġof Ġthe Ġreceiver . Ċĉ Ġ* Ġ@ return Ċĉ Ġ* ĠĠ ĠThe Ġtransformed Ġ` Frame `, Ġpossibly Ġthe Ġreceiver Ġif Ġthe Ġresult Ġof Ġthe Ċĉ Ġ* ĠĠ Ġtransformation Ġwould Ġhave Ġbeen Ġan Ġequal Ġvalue . Ċĉ Ġ*/ Ċ ĉ fun Ġtransform ( Ċĉ ĉ top Frame Replacement : ĠFrame , Ċĉ ĉ frame Transformer : Ġ( Frame ) Ġ-> ĠFrame ): ĠFrame Ċ ĉ { Ċĉ ĉ if Ġ( outer Frame Ġ=== Ġnull ) Ċĉ ĉ { Ċĉĉ ĉ return Ġtop Frame Replacement Ċĉ ĉ } Ċĉ ĉ val Ġnew Outer Frame Ġ= Ġframe Transformer ( outer Frame ) Ċĉ ĉ return Ġif Ġ( new Outer Frame Ġ== Ġouter Frame ) Ċĉ ĉ { Ċĉĉ ĉ this Ċĉ ĉ } Ċĉ ĉ else ĠFrame ( new Outer Frame , Ġcode , Ġ"$ debug Name Ġ( in lined )") Ċ ĉ } Ċ Ċ } Ċ