package Ġorg . jetbrains . research . k fg . ir . value . instruction Ċ Ċ import Ġorg . jetbrains . research . k fg . Class Manager Ċ import Ġorg . jetbrains . research . k fg . ir .* Ċ import Ġorg . jetbrains . research . k fg . ir . value .* Ċ import Ġorg . jetbrains . research . k fg . type . ArrayType Ċ import Ġorg . jetbrains . research . k fg . type . Type Ċ import Ġorg . jetbrains . research . k the l per . collection . List Builder Ċ Ċ class ĠInstruction Factory Ġinternal Ġconstructor ( val Ġcm : ĠClass Manager ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtypes Ġget () Ġ= Ġcm . type ĊĊĠĠĠ Ġfun Ġget New Array ( ctx : ĠUsage Context , Ġname : ĠString , Ġcomponent Type : ĠType , Ġcount : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget New Array ( ctx , ĠString Name ( name ), Ġtypes . get ArrayType ( component Type ), Ġcount ) ĊĊĠĠĠ Ġfun Ġget New Array ( ctx : ĠUsage Context , Ġname : ĠName , Ġcomponent Type : ĠType , Ġcount : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠNew Array Inst ( name , Ġtypes . get ArrayType ( component Type ), ĠarrayOf ( count ), Ġctx ) ĊĊĠĠĠ Ġfun Ġget New Array ( ctx : ĠUsage Context , Ġcomponent Type : ĠType , Ġcount : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠNew Array Inst ( Slot (), Ġtypes . get ArrayType ( component Type ), ĠarrayOf ( count ), Ġctx ) ĊĊĠĠĠ Ġfun Ġget New Array ( ctx : ĠUsage Context , Ġname : ĠString , Ġtype : ĠType , Ġdimensions : ĠArray < Value >): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget New Array ( ctx , ĠString Name ( name ), Ġtype , Ġdimensions ) ĊĊĠĠĠ Ġfun Ġget New Array ( ctx : ĠUsage Context , Ġname : ĠName , Ġtype : ĠType , Ġdimensions : ĠArray < Value >): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠNew Array Inst ( name , Ġtype , Ġdimensions , Ġctx ) ĊĊĠĠĠ Ġfun Ġget New Array ( ctx : ĠUsage Context , Ġtype : ĠType , Ġdimensions : ĠArray < Value >): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠNew Array Inst ( Slot (), Ġtype , Ġdimensions , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Array Load ( ctx : ĠUsage Context , Ġname : ĠString , Ġarray Ref : ĠValue , Ġindex : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget Array Load ( ctx , ĠString Name ( name ), Ġarray Ref , Ġindex ) ĊĊĠĠĠ Ġfun Ġget Array Load ( ctx : ĠUsage Context , Ġname : ĠName , Ġarray Ref : ĠValue , Ġindex : ĠValue ): ĠInstruction Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray Ref . type Ġ=== Ġtypes . null Type Ġ-> Ġtypes . null Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ( array Ref . type Ġas ĠArray Type ). component ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠArray Load Inst ( name , Ġtype , Ġarray Ref , Ġindex , Ġctx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Array Load ( ctx : ĠUsage Context , Ġarray Ref : ĠValue , Ġindex : ĠValue ): ĠInstruction Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray Ref . type Ġ=== Ġtypes . null Type Ġ-> Ġtypes . null Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ( array Ref . type Ġas ĠArray Type ). component ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠArray Load Inst ( Slot (), Ġtype , Ġarray Ref , Ġindex , Ġctx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Array Store ( ctx : ĠUsage Context , Ġarray : ĠValue , Ġindex : ĠValue , Ġvalue : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠArray Store Inst ( array , Ġtypes . void Type , Ġindex , Ġvalue , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Field Load ( ctx : ĠUsage Context , Ġname : ĠString , Ġfield : ĠField ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget Field Load ( ctx , ĠString Name ( name ), Ġfield ) ĊĊĠĠĠ Ġfun Ġget Field Load ( ctx : ĠUsage Context , Ġname : ĠName , Ġfield : ĠField ): ĠInstruction Ġ= ĠField Load Inst ( name , Ġfield , Ġctx ) ĊĠĠĠ Ġfun Ġget Field Load ( ctx : ĠUsage Context , Ġfield : ĠField ): ĠInstruction Ġ= ĠField Load Inst ( Slot (), Ġfield , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Field Load ( ctx : ĠUsage Context , Ġname : ĠString , Ġowner : ĠValue , Ġfield : ĠField ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget Field Load ( ctx , ĠString Name ( name ), Ġowner , Ġfield ) ĊĊĠĠĠ Ġfun Ġget Field Load ( ctx : ĠUsage Context , Ġname : ĠName , Ġowner : ĠValue , Ġfield : ĠField ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠField Load Inst ( name , Ġowner , Ġfield , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Field Load ( ctx : ĠUsage Context , Ġowner : ĠValue , Ġfield : ĠField ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠField Load Inst ( Slot (), Ġowner , Ġfield , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Field Store ( ctx : ĠUsage Context , Ġfield : ĠField , Ġvalue : ĠValue ): ĠInstruction Ġ= ĠField Store Inst ( field , Ġvalue , Ġctx ) ĊĠĠĠ Ġfun Ġget Field Store ( ctx : ĠUsage Context , Ġowner : ĠValue , Ġfield : ĠField , Ġvalue : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠField Store Inst ( owner , Ġfield , Ġvalue , Ġctx ) ĊĊĊĠĠĠ Ġfun Ġget Binary ( ctx : ĠUsage Context , Ġname : ĠString , Ġopcode : ĠBinary Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget Binary ( ctx , ĠString Name ( name ), Ġopcode , Ġl hv , Ġr hv ) ĊĊĠĠĠ Ġfun Ġget Binary ( ctx : ĠUsage Context , Ġname : ĠName , Ġopcode : ĠBinary Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠBinary Inst ( name , Ġopcode , Ġl hv , Ġr hv , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Binary ( ctx : ĠUsage Context , Ġopcode : ĠBinary Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠBinary Inst ( Slot (), Ġopcode , Ġl hv , Ġr hv , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Cmp ( ctx : ĠUsage Context , Ġname : ĠString , Ġtype : ĠType , Ġopcode : ĠC mp Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget Cmp ( ctx , ĠString Name ( name ), Ġtype , Ġopcode , Ġl hv , Ġr hv ) ĊĊĠĠĠ Ġfun Ġget Cmp ( ctx : ĠUsage Context , Ġname : ĠName , Ġtype : ĠType , Ġopcode : ĠC mp Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠC mp Inst ( name , Ġtype , Ġopcode , Ġl hv , Ġr hv , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Cmp ( ctx : ĠUsage Context , Ġtype : ĠType , Ġopcode : ĠC mp Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget Cmp ( ctx , ĠSlot (), Ġtype , Ġopcode , Ġl hv , Ġr hv ) ĊĊĠĠĠ Ġfun Ġget Cast ( ctx : ĠUsage Context , Ġname : ĠString , Ġtype : ĠType , Ġobj : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget Cast ( ctx , ĠString Name ( name ), Ġtype , Ġobj ) ĊĊĠĠĠ Ġfun Ġget Cast ( ctx : ĠUsage Context , Ġname : ĠName , Ġtype : ĠType , Ġobj : ĠValue ): ĠInstruction Ġ= ĠCast Inst ( name , Ġtype , Ġobj , Ġctx ) ĊĠĠĠ Ġfun Ġget Cast ( ctx : ĠUsage Context , Ġtype : ĠType , Ġobj : ĠValue ): ĠInstruction Ġ= ĠCast Inst ( Slot (), Ġtype , Ġobj , Ġctx ) ĊĊĠĠĠ Ġfun Ġget InstanceOf ( ctx : ĠUsage Context , Ġname : ĠString , Ġtarget Type : ĠType , Ġobj : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget InstanceOf ( ctx , ĠString Name ( name ), Ġtarget Type , Ġobj ) ĊĊĠĠĠ Ġfun Ġget InstanceOf ( ctx : ĠUsage Context , Ġname : ĠName , Ġtarget Type : ĠType , Ġobj : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠInstance Of Inst ( name , Ġtypes . bool Type , Ġtarget Type , Ġobj , Ġctx ) ĊĊĠĠĠ Ġfun Ġget InstanceOf ( ctx : ĠUsage Context , Ġtarget Type : ĠType , Ġobj : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠInstance Of Inst ( Slot (), Ġtypes . bool Type , Ġtarget Type , Ġobj , Ġctx ) ĊĊĠĠĠ Ġfun Ġget New ( ctx : ĠUsage Context , Ġname : ĠString , Ġtype : ĠType ): ĠInstruction Ġ= Ġget New ( ctx , ĠString Name ( name ), Ġtype ) ĊĠĠĠ Ġfun Ġget New ( ctx : ĠUsage Context , Ġname : ĠString , Ġ` class `: ĠClass ): ĠInstruction Ġ= Ġget New ( ctx , ĠString Name ( name ), Ġ` class `) ĊĠĠĠ Ġfun Ġget New ( ctx : ĠUsage Context , Ġname : ĠName , Ġ` class `: ĠClass ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget New ( ctx , Ġname , Ġtypes . get Ref Type (` class ` )) ĊĊĠĠĠ Ġfun Ġget New ( ctx : ĠUsage Context , Ġname : ĠName , Ġtype : ĠType ): ĠInstruction Ġ= ĠNew Inst ( name , Ġtype , Ġctx ) ĊĠĠĠ Ġfun Ġget New ( ctx : ĠUsage Context , Ġtype : ĠType ): ĠInstruction Ġ= ĠNew Inst ( Slot (), Ġtype , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Unary ( ctx : ĠUsage Context , Ġname : ĠString , Ġopcode : ĠUnary Opcode , Ġobj : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget Unary ( ctx , ĠString Name ( name ), Ġopcode , Ġobj ) ĊĊĠĠĠ Ġfun Ġget Unary ( ctx : ĠUsage Context , Ġname : ĠName , Ġopcode : ĠUnary Opcode , Ġobj : ĠValue ): ĠInstruction Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġif Ġ( opcode Ġ== ĠUnary Opcode . LENGTH ) Ġtypes . int Type Ġelse Ġobj . type ĊĠĠĠĠĠĠĠ Ġreturn ĠUnary Inst ( name , Ġtype , Ġopcode , Ġobj , Ġctx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Unary ( ctx : ĠUsage Context , Ġopcode : ĠUnary Opcode , Ġobj : ĠValue ): ĠInstruction Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġif Ġ( opcode Ġ== ĠUnary Opcode . LENGTH ) Ġtypes . int Type Ġelse Ġobj . type ĊĠĠĠĠĠĠĠ Ġreturn ĠUnary Inst ( Slot (), Ġtype , Ġopcode , Ġobj , Ġctx ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Enter Monitor ( ctx : ĠUsage Context , Ġowner : ĠValue ): ĠInstruction Ġ= ĠEnter Monitor Inst ( types . void Type , Ġowner , Ġctx ) ĊĠĠĠ Ġfun Ġget Exit Monitor ( ctx : ĠUsage Context , Ġowner : ĠValue ): ĠInstruction Ġ= ĠExit Monitor Inst ( types . void Type , Ġowner , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Jump ( ctx : ĠUsage Context , Ġsuccess or : ĠBasic Block ): ĠInstruction Ġ= ĠJump Inst ( types . void Type , Ġsuccess or , Ġctx ) ĊĠĠĠ Ġfun Ġget Branch ( ctx : ĠUsage Context , Ġcond : ĠValue , Ġtrue Suc c : ĠBasic Block , Ġfalse Suc c : ĠBasic Block ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠBranch Inst ( cond , Ġtypes . void Type , Ġtrue Suc c , Ġfalse Suc c , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Switch ( ctx : ĠUsage Context , Ġkey : ĠValue , Ġdefault : ĠBasic Block , Ġbranches : ĠMap < Value , ĠBasic Block >): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠSwitch Inst ( key , Ġtypes . void Type , Ġdefault , Ġbranches , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Table Switch ( ĊĠĠĠĠĠĠĠ Ġctx : ĠUsage Context , ĊĠĠĠĠĠĠĠ Ġindex : ĠValue , ĊĠĠĠĠĠĠĠ Ġmin : ĠValue , ĊĠĠĠĠĠĠĠ Ġmax : ĠValue , ĊĠĠĠĠĠĠĠ Ġdefault : ĠBasic Block , ĊĠĠĠĠĠĠĠ Ġbranches : ĠArray < BasicBlock > ĊĠĠĠ Ġ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠTable Switch Inst ( types . void Type , Ġindex , Ġmin , Ġmax , Ġdefault , Ġbranches , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Phi ( ctx : ĠUsage Context , Ġname : ĠString , Ġtype : ĠType , Ġin com ings : ĠMap < BasicBlock , ĠValue >): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġget Phi ( ctx , ĠString Name ( name ), Ġtype , Ġin com ings ) ĊĊĠĠĠ Ġfun Ġget Phi ( ctx : ĠUsage Context , Ġname : ĠName , Ġtype : ĠType , Ġin com ings : ĠMap < BasicBlock , ĠValue >): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠPhi Inst ( name , Ġtype , Ġin com ings , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Phi ( ctx : ĠUsage Context , Ġtype : ĠType , Ġin com ings : ĠMap < BasicBlock , ĠValue >): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ ĠPhi Inst ( Slot (), Ġtype , Ġin com ings , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Call ( ĊĠĠĠĠĠĠĠ Ġctx : ĠUsage Context , ĊĠĠĠĠĠĠĠ Ġopcode : ĠCall Opcode , ĊĠĠĠĠĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠĠĠĠĠ Ġ` class `: ĠClass , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < Value >, ĊĠĠĠĠĠĠĠ Ġis Named : ĠBoolean ĊĠĠĠ Ġ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Named Ġ-> ĠCall Inst ( opcode , ĠSlot (), Ġmethod , Ġ` class `, Ġargs , Ġctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCall Inst ( opcode , Ġmethod , Ġ` class `, Ġargs , Ġctx ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Call ( ĊĠĠĠĠĠĠĠ Ġctx : ĠUsage Context , ĊĠĠĠĠĠĠĠ Ġopcode : ĠCall Opcode , ĊĠĠĠĠĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠĠĠĠĠ Ġ` class `: ĠClass , ĊĠĠĠĠĠĠĠ Ġobj : ĠValue , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < Value >, ĊĠĠĠĠĠĠĠ Ġis Named : ĠBoolean ĊĠĠĠ Ġ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Named Ġ-> ĠCall Inst ( opcode , ĠSlot (), Ġmethod , Ġ` class `, Ġobj , Ġargs , Ġctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCall Inst ( opcode , Ġmethod , Ġ` class `, Ġobj , Ġargs , Ġctx ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Call ( ĊĠĠĠĠĠĠĠ Ġctx : ĠUsage Context , ĊĠĠĠĠĠĠĠ Ġopcode : ĠCall Opcode , ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠĠĠĠĠ Ġ` class `: ĠClass , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < Value > ĊĠĠĠ Ġ) Ġ= ĊĠĠĠĠĠĠĠ Ġget Call ( ctx , Ġopcode , ĠString Name ( name ), Ġmethod , Ġ` class `, Ġargs ) ĊĊĠĠĠ Ġfun Ġget Call ( ctx : ĠUsage Context , Ġopcode : ĠCall Opcode , Ġname : ĠName , Ġmethod : ĠMethod , Ġ` class `: ĠClass , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ ĠCall Inst ( opcode , Ġname , Ġmethod , Ġ` class `, Ġargs , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Call ( ĊĠĠĠĠĠĠĠ Ġctx : ĠUsage Context , ĊĠĠĠĠĠĠĠ Ġopcode : ĠCall Opcode , ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠĠĠĠĠ Ġ` class `: ĠClass , ĊĠĠĠĠĠĠĠ Ġobj : ĠValue , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < Value > ĊĠĠĠ Ġ) Ġ= ĊĠĠĠĠĠĠĠ Ġget Call ( ctx , Ġopcode , ĠString Name ( name ), Ġmethod , Ġ` class `, Ġobj , Ġargs ) ĊĊĠĠĠ Ġfun Ġget Call ( ĊĠĠĠĠĠĠĠ Ġctx : ĠUsage Context , ĊĠĠĠĠĠĠĠ Ġopcode : ĠCall Opcode , ĊĠĠĠĠĠĠĠ Ġname : ĠName , ĊĠĠĠĠĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠĠĠĠĠ Ġ` class `: ĠClass , ĊĠĠĠĠĠĠĠ Ġobj : ĠValue , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < Value > ĊĠĠĠ Ġ) Ġ= ĊĠĠĠĠĠĠĠ ĠCall Inst ( opcode , Ġname , Ġmethod , Ġ` class `, Ġobj , Ġargs , Ġctx ) ĊĊĊĠĠĠ Ġfun Ġget Invoke Dynamic ( ĊĠĠĠĠĠĠĠ Ġctx : ĠUsage Context , ĊĠĠĠĠĠĠĠ Ġname : ĠName , ĊĠĠĠĠĠĠĠ ĠmethodName : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod Desc : ĠMethod Desc , ĊĠĠĠĠĠĠĠ Ġbootstrap Method : ĠHandle , ĊĠĠĠĠĠĠĠ Ġbootstrap Method Args : ĠArray < Any >, ĊĠĠĠĠĠĠĠ Ġoperands : ĠArray < Value > ĊĠĠĠ Ġ) Ġ= ĠInvoke Dynamic Inst ( name , ĠmethodName , Ġmethod Desc , Ġbootstrap Method , Ġbootstrap Method Args , Ġoperands , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Invoke Dynamic ( ĊĠĠĠĠĠĠĠ Ġctx : ĠUsage Context , ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ ĠmethodName : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod Desc : ĠMethod Desc , ĊĠĠĠĠĠĠĠ Ġbootstrap Method : ĠHandle , ĊĠĠĠĠĠĠĠ Ġbootstrap Method Args : ĠArray < Any >, ĊĠĠĠĠĠĠĠ Ġoperands : ĠArray < Value > ĊĠĠĠ Ġ) Ġ= Ġget Invoke Dynamic ( ctx , ĠString Name ( name ), ĠmethodName , Ġmethod Desc , Ġbootstrap Method , Ġbootstrap Method Args , Ġoperands ) ĊĊĠĠĠ Ġfun Ġget Invoke Dynamic ( ĊĠĠĠĠĠĠĠ Ġctx : ĠUsage Context , ĊĠĠĠĠĠĠĠ ĠmethodName : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod Desc : ĠMethod Desc , ĊĠĠĠĠĠĠĠ Ġbootstrap Method : ĠHandle , ĊĠĠĠĠĠĠĠ Ġbootstrap Method Args : ĠArray < Any >, ĊĠĠĠĠĠĠĠ Ġoperands : ĠArray < Value > ĊĠĠĠ Ġ) Ġ= ĠInvoke Dynamic Inst ( methodName , Ġmethod Desc , Ġbootstrap Method , Ġbootstrap Method Args , Ġoperands , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Catch ( ctx : ĠUsage Context , Ġname : ĠString , Ġtype : ĠType ): ĠInstruction Ġ= Ġget Catch ( ctx , ĠString Name ( name ), Ġtype ) ĊĠĠĠ Ġfun Ġget Catch ( ctx : ĠUsage Context , Ġname : ĠName , Ġtype : ĠType ): ĠInstruction Ġ= ĠCatch Inst ( name , Ġtype , Ġctx ) ĊĠĠĠ Ġfun Ġget Catch ( ctx : ĠUsage Context , Ġtype : ĠType ): ĠInstruction Ġ= ĠCatch Inst ( Slot (), Ġtype , Ġctx ) ĊĠĠĠ Ġfun Ġget Throw ( ctx : ĠUsage Context , Ġthrowable : ĠValue ): ĠInstruction Ġ= ĠThrow Inst ( types . void Type , Ġthrowable , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Return ( ctx : ĠUsage Context ): ĠInstruction Ġ= ĠReturn Inst ( types . void Type , Ġctx ) ĊĠĠĠ Ġfun Ġget Return ( ctx : ĠUsage Context , Ġretval : ĠValue ): ĠInstruction Ġ= ĠReturn Inst ( retval , Ġctx ) ĊĊĠĠĠ Ġfun Ġget Un reachable ( ctx : ĠUsage Context ): ĠInstruction Ġ= ĠUn reachable Inst ( types . void Type , Ġctx ) Ċ } Ċ Ċ interface ĠInstruction Builder Ġ{ ĊĠĠĠ Ġval Ġcm : ĠClass Manager ĊĠĠĠ Ġval Ġctx : ĠUsage Context ĊĊĠĠĠ Ġval Ġvalues Ġget () Ġ= Ġcm . value ĊĠĠĠ Ġval Ġinstructions Ġget () Ġ= Ġcm . instruction ĊĠĠĠ Ġval Ġtypes Ġget () Ġ= Ġcm . type ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġvalue Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠBoolean . as Value Ġget () Ġ= Ġvalues . get Bool ( this ) ĊĠĠĠ Ġval ĠNumber . as Value Ġget () Ġ= Ġvalues . getNumber ( this ) ĊĠĠĠ Ġval ĠString . as Value Ġget () Ġ= Ġvalues . getString ( this ) ĊĊĠĠĠ Ġval ĠType . as Array Ġget () Ġ= Ġtypes . get ArrayType ( this ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġnew Ġarray Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠType . new Array ( name : ĠString , Ġlength : ĠInt ) Ġ= Ġthis . new Array ( name , Ġvalues . getInt ( length )) ĊĠĠĠ Ġfun ĠType . new Array ( name : ĠName , Ġlength : ĠInt ) Ġ= Ġthis . new Array ( name , Ġvalues . getInt ( length )) ĊĊĠĠĠ Ġfun ĠType . new Array ( length : ĠInt ) Ġ= Ġinstructions . getNew Array ( ctx , Ġthis , Ġvalues . getInt ( length )) ĊĠĠĠ Ġfun ĠType . new Array ( length : ĠValue ) Ġ= Ġinstructions . getNew Array ( ctx , Ġthis , Ġlength ) ĊĊĠĠĠ Ġfun ĠType . new Array ( name : ĠString , Ġlength : ĠValue ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . getNew Array ( ctx , Ġname , Ġthis , Ġlength ) ĊĊĠĠĠ Ġfun ĠType . new Array ( name : ĠName , Ġlength : ĠValue ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . getNew Array ( ctx , Ġname , Ġthis , Ġlength ) ĊĊĊĠĠĠ Ġfun ĠType . new Array ( name : ĠString , Ġdimensions : ĠArray < Int >) Ġ= ĊĠĠĠĠĠĠĠ Ġthis . new Array ( name , Ġdimensions . map Ġ{ Ġvalues . getInt ( it ) Ġ}. to Typed Array ()) ĊĊĠĠĠ Ġfun ĠType . new Array ( name : ĠName , Ġdimensions : ĠArray < Int >) Ġ= ĊĠĠĠĠĠĠĠ Ġthis . new Array ( name , Ġdimensions . map Ġ{ Ġvalues . getInt ( it ) Ġ}. to Typed Array ()) ĊĊĠĠĠ Ġfun ĠType . new Array ( dimensions : ĠArray < Int >) Ġ= ĊĠĠĠĠĠĠĠ Ġthis . new Array ( dimensions . map Ġ{ Ġvalues . getInt ( it ) Ġ}. to Typed Array ()) ĊĊĠĠĠ Ġfun ĠType . new Array ( name : ĠString , Ġdimensions : ĠList < Value >) Ġ= Ġnew Array ( name , Ġdimensions . to Typed Array ()) ĊĠĠĠ Ġfun ĠType . new Array ( name : ĠString , Ġdimensions : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . getNew Array ( ctx , Ġname , Ġthis , Ġdimensions ) ĊĊĠĠĠ Ġfun ĠType . new Array ( name : ĠName , Ġdimensions : ĠList < Value >) Ġ= Ġnew Array ( name , Ġdimensions . to Typed Array ()) ĊĠĠĠ Ġfun ĠType . new Array ( name : ĠName , Ġdimensions : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . getNew Array ( ctx , Ġname , Ġthis , Ġdimensions ) ĊĊĠĠĠ Ġfun ĠType . new Array ( dimensions : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . getNew Array ( ctx , Ġthis , Ġdimensions ) ĊĊĠĠĠ Ġfun ĠType . new Array ( dimensions : ĠList < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġnew Array ( dimensions . to Typed Array ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġarray Ġload Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠValue . load ( name : ĠString , Ġindex : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Array Load ( ctx , Ġname , Ġthis , Ġindex ) ĊĊĠĠĠ Ġfun ĠValue . load ( name : ĠName , Ġindex : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Array Load ( ctx , Ġname , Ġthis , Ġindex ) ĊĊĠĠĠ Ġoperator Ġfun ĠValue . get ( index : ĠValue ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Array Load ( ctx , Ġthis , Ġindex ) ĊĊĠĠĠ Ġfun ĠValue . load ( name : ĠString , Ġindex : ĠInt ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġthis . load ( name , Ġvalues . getInt ( index )) ĊĊĠĠĠ Ġfun ĠValue . load ( name : ĠName , Ġindex : ĠInt ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġthis . load ( name , Ġvalues . getInt ( index )) ĊĊĠĠĠ Ġoperator Ġfun ĠValue . get ( index : ĠInt ): ĠInstruction Ġ= ĊĠĠĠĠĠĠĠ Ġthis [ values . getInt ( index )] ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġarray Ġstore Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠValue . store ( index : ĠValue , Ġvalue : ĠValue ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Array Store ( ctx , Ġthis , Ġindex , Ġvalue ) ĊĊĠĠĠ Ġfun ĠValue . store ( index : ĠInt , Ġvalue : ĠValue ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Array Store ( ctx , Ġthis , Ġvalues . getInt ( index ), Ġvalue ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġfield Ġload Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠField . load ( name : ĠString ) Ġ= Ġinstructions . getField Load ( ctx , Ġname , Ġthis ) ĊĠĠĠ Ġfun ĠField . load ( name : ĠName ) Ġ= Ġinstructions . getField Load ( ctx , Ġname , Ġthis ) ĊĠĠĠ Ġfun ĠField . load () Ġ= Ġinstructions . getField Load ( ctx , Ġthis ) ĊĊĠĠĠ Ġfun ĠValue . load ( name : ĠString , Ġfield : ĠField ) Ġ= Ġinstructions . getField Load ( ctx , Ġname , Ġthis , Ġfield ) ĊĠĠĠ Ġfun ĠValue . load ( name : ĠName , Ġfield : ĠField ) Ġ= Ġinstructions . getField Load ( ctx , Ġname , Ġthis , Ġfield ) ĊĠĠĠ Ġfun ĠValue . load ( field : ĠField ) Ġ= Ġinstructions . getField Load ( ctx , Ġthis , Ġfield ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġfield Ġstore Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠField . store ( value : ĠValue ) Ġ= Ġinstructions . getField Store ( ctx , Ġthis , Ġvalue ) ĊĠĠĠ Ġfun ĠValue . store ( field : ĠField , Ġvalue : ĠValue ) Ġ= Ġinstructions . getField Store ( ctx , Ġthis , Ġfield , Ġvalue ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbinary Ġoperator Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbinary ( name : ĠString , Ġopcode : ĠBinary Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Binary ( ctx , Ġname , Ġopcode , Ġl hv , Ġr hv ) ĊĊĠĠĠ Ġfun Ġbinary ( name : ĠName , Ġopcode : ĠBinary Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Binary ( ctx , Ġname , Ġopcode , Ġl hv , Ġr hv ) ĊĊĠĠĠ Ġfun Ġbinary ( opcode : ĠBinary Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Binary ( ctx , Ġopcode , Ġl hv , Ġr hv ) ĊĊĠĠĠ Ġoperator Ġfun ĠValue . plus ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . ADD , Ġthis , Ġr hv ) ĊĠĠĠ Ġoperator Ġfun ĠValue . plus ( rh v : ĠNumber ) Ġ= Ġbinary ( Binary Opcode . ADD , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġoperator Ġfun ĠValue . minus ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . SUB , Ġthis , Ġr hv ) ĊĠĠĠ Ġoperator Ġfun ĠValue . minus ( rh v : ĠNumber ) Ġ= Ġbinary ( Binary Opcode . SUB , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġoperator Ġfun ĠValue . times ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . MUL , Ġthis , Ġr hv ) ĊĠĠĠ Ġoperator Ġfun ĠValue . times ( rh v : ĠNumber ) Ġ= Ġbinary ( Binary Opcode . MUL , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġoperator Ġfun ĠValue . div ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . DIV , Ġthis , Ġr hv ) ĊĠĠĠ Ġoperator Ġfun ĠValue . div ( rh v : ĠNumber ) Ġ= Ġbinary ( Binary Opcode . DIV , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġoperator Ġfun ĠValue . rem ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . REM , Ġthis , Ġr hv ) ĊĠĠĠ Ġoperator Ġfun ĠValue . rem ( rh v : ĠNumber ) Ġ= Ġbinary ( Binary Opcode . REM , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . sh l ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . SH L , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . sh l ( rh v : ĠNumber ) Ġ= Ġbinary ( Binary Opcode . SH L , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . shr ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . SH R , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . shr ( rh v : ĠNumber ) Ġ= Ġbinary ( Binary Opcode . SH R , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . ush r ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . US HR , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . ush r ( rh v : ĠNumber ) Ġ= Ġbinary ( Binary Opcode . US HR , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . and ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . AND , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . and ( rh v : ĠNumber ) Ġ= Ġbinary ( Binary Opcode . AND , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . or ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . OR , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . or ( rh v : ĠNumber ) Ġ= Ġbinary ( Binary Opcode . OR , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . xor ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . XOR , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . xor ( rh v : ĠNumber ) Ġ= Ġbinary ( Binary Opcode . XOR , Ġthis , Ġvalues . getNumber ( rh v )) ĊĊĠĠĠ Ġoperator Ġfun ĠNumber . plus ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . ADD , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġoperator Ġfun ĠNumber . minus ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . SUB , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġoperator Ġfun ĠNumber . times ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . MUL , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġoperator Ġfun ĠNumber . div ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . DIV , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġoperator Ġfun ĠNumber . rem ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . REM , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . sh l ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . SH L , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . shr ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . SH R , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . ush r ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . US HR , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . and ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . AND , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . or ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . OR , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . xor ( rh v : ĠValue ) Ġ= Ġbinary ( Binary Opcode . XOR , Ġvalues . getNumber ( this ), Ġr hv ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcmp Ġoperator Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcmp ( type : ĠType , Ġopcode : ĠC mp Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ) Ġ= Ġinstructions . getC mp ( ctx , Ġtype , Ġopcode , Ġl hv , Ġr hv ) ĊĠĠĠ Ġfun Ġcmp ( name : ĠString , Ġtype : ĠType , Ġopcode : ĠC mp Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . getC mp ( ctx , Ġname , Ġtype , Ġopcode , Ġl hv , Ġr hv ) ĊĊĠĠĠ Ġfun Ġcmp ( name : ĠName , Ġtype : ĠType , Ġopcode : ĠC mp Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . getC mp ( ctx , Ġname , Ġtype , Ġopcode , Ġl hv , Ġr hv ) ĊĊĠĠĠ Ġfun Ġcmp ( opcode : ĠC mp Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ) Ġ= Ġcmp ( getC mp Result Type ( types , Ġopcode ), Ġopcode , Ġl hv , Ġr hv ) ĊĠĠĠ Ġfun Ġcmp ( name : ĠString , Ġopcode : ĠC mp Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ) Ġ= ĊĠĠĠĠĠĠĠ Ġcmp ( name , Ġget Cmp Result Type ( types , Ġopcode ), Ġopcode , Ġl hv , Ġr hv ) ĊĊĠĠĠ Ġfun Ġcmp ( name : ĠName , Ġopcode : ĠC mp Opcode , Ġl hv : ĠValue , Ġr hv : ĠValue ) Ġ= ĊĠĠĠĠĠĠĠ Ġcmp ( name , Ġget Cmp Result Type ( types , Ġopcode ), Ġopcode , Ġl hv , Ġr hv ) ĊĊĠĠĠ Ġin fix Ġfun ĠValue . eq ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . EQ , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . eq ( rh v : ĠNumber ) Ġ= Ġcmp ( Cmp Opcode . EQ , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . neq ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . N EQ , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . neq ( rh v : ĠNumber ) Ġ= Ġcmp ( Cmp Opcode . N EQ , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . lt ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . LT , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . lt ( rh v : ĠNumber ) Ġ= Ġcmp ( Cmp Opcode . LT , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . gt ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . GT , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . gt ( rh v : ĠNumber ) Ġ= Ġcmp ( Cmp Opcode . GT , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . le ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . LE , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . le ( rh v : ĠNumber ) Ġ= Ġcmp ( Cmp Opcode . LE , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . ge ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . GE , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . ge ( rh v : ĠNumber ) Ġ= Ġcmp ( Cmp Opcode . GE , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . cmp ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . CMP , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . cmp ( rh v : ĠNumber ) Ġ= Ġcmp ( Cmp Opcode . CMP , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . cmp g ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . CMP G , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . cmp g ( rh v : ĠNumber ) Ġ= Ġcmp ( Cmp Opcode . CMP G , Ġthis , Ġvalues . getNumber ( rh v )) ĊĠĠĠ Ġin fix Ġfun ĠValue . cmp l ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . CMP L , Ġthis , Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠValue . cmp l ( rh v : ĠNumber ) Ġ= Ġcmp ( Cmp Opcode . CMP L , Ġthis , Ġvalues . getNumber ( rh v )) ĊĊĠĠĠ Ġin fix Ġfun ĠNumber . eq ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . EQ , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . neq ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . N EQ , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . lt ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . LT , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . gt ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . GT , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . le ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . LE , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . ge ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . GE , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . cmp ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . CMP , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . cmp g ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . CMP G , Ġvalues . getNumber ( this ), Ġr hv ) ĊĠĠĠ Ġin fix Ġfun ĠNumber . cmp l ( rh v : ĠValue ) Ġ= Ġcmp ( Cmp Opcode . CMP L , Ġvalues . getNumber ( this ), Ġr hv ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcast Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠValue . cast ( name : ĠString , Ġtype : ĠType ) Ġ= Ġinstructions . get Cast ( ctx , Ġname , Ġtype , Ġthis ) ĊĠĠĠ Ġfun ĠValue . cast ( name : ĠName , Ġtype : ĠType ) Ġ= Ġinstructions . get Cast ( ctx , Ġname , Ġtype , Ġthis ) ĊĠĠĠ Ġfun ĠValue . cast ( type : ĠType ) Ġ= Ġinstructions . get Cast ( ctx , Ġtype , Ġthis ) ĊĊĠĠĠ Ġin fix Ġfun ĠValue .` as `( type : ĠType ) Ġ= Ġthis . cast ( type ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġinstanceof Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠValue . instance Of ( name : ĠString , Ġtype : ĠType ) Ġ= Ġinstructions . getInstance Of ( ctx , Ġname , Ġtype , Ġthis ) ĊĠĠĠ Ġfun ĠValue . instance Of ( name : ĠName , Ġtype : ĠType ) Ġ= Ġinstructions . getInstance Of ( ctx , Ġname , Ġtype , Ġthis ) ĊĠĠĠ Ġfun ĠValue . instance Of ( type : ĠType ) Ġ= Ġinstructions . getInstance Of ( ctx , Ġtype , Ġthis ) ĊĊĠĠĠ Ġin fix Ġfun ĠValue .` is `( type : ĠType ) Ġ= Ġthis . instance Of ( type ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġnew Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠType . new () Ġ= Ġinstructions . getNew ( ctx , Ġthis ) ĊĠĠĠ Ġfun ĠType . new ( name : ĠString ) Ġ= Ġinstructions . getNew ( ctx , Ġname , Ġthis ) ĊĠĠĠ Ġfun ĠType . new ( name : ĠName ) Ġ= Ġinstructions . getNew ( ctx , Ġname , Ġthis ) ĊĊĠĠĠ Ġfun ĠClass . new () Ġ= Ġto Type (). new () ĊĠĠĠ Ġfun ĠClass . new ( name : ĠString ) Ġ= Ġto Type (). new ( name ) ĊĠĠĠ Ġfun ĠClass . new ( name : ĠName ) Ġ= Ġto Type (). new ( name ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġunary Ġoperator Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠValue . unary ( opcode : ĠUnary Opcode ) Ġ= Ġinstructions . get Unary ( ctx , Ġopcode , Ġthis ) ĊĠĠĠ Ġfun ĠValue . unary ( name : ĠString , Ġopcode : ĠUnary Opcode ) Ġ= Ġinstructions . get Unary ( ctx , Ġname , Ġopcode , Ġthis ) ĊĠĠĠ Ġfun ĠValue . unary ( name : ĠName , Ġopcode : ĠUnary Opcode ) Ġ= Ġinstructions . get Unary ( ctx , Ġname , Ġopcode , Ġthis ) ĊĊĠĠĠ Ġoperator Ġfun ĠValue . unary Minus () Ġ= Ġthis . unary ( Unary Opcode . NEG ) ĊĠĠĠ Ġval ĠValue . length Ġget () Ġ= Ġthis . unary ( Unary Opcode . LENGTH ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġmonitor Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠValue . lock () Ġ= Ġinstructions . get Enter Monitor ( ctx , Ġthis ) ĊĠĠĠ Ġfun ĠValue . unlock () Ġ= Ġinstructions . get Exit Monitor ( ctx , Ġthis ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġtermination Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġgoto ( success or : ĠBasic Block ) Ġ= Ġinstructions . get Jump ( ctx , Ġsuccess or ) ĊĠĠĠ Ġfun Ġit e ( cond : ĠValue , Ġtrue Branch : ĠBasic Block , Ġfalse Branch : ĠBasic Block ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Branch ( ctx , Ġcond , Ġtrue Branch , Ġfalse Branch ) ĊĊĠĠĠ Ġfun ĠInt . switch ( branches : ĠMap < Value , ĠBasic Block >, Ġdefault : ĠBasic Block ) Ġ= ĊĠĠĠĠĠĠĠ Ġvalues . getInt ( this ). switch ( branches , Ġdefault ) ĊĊĠĠĠ Ġfun ĠValue . switch ( branches : ĠMap < Value , ĠBasic Block >, Ġdefault : ĠBasic Block ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Switch ( ctx , Ġthis , Ġdefault , Ġbranches ) ĊĊĠĠĠ Ġfun ĠInt . table Switch ( range : ĠInt Range , Ġbranches : ĠArray < BasicBlock >, Ġdefault : ĠBasic Block ) Ġ= ĊĠĠĠĠĠĠĠ Ġvalues . getInt ( this ). table Switch ( range , Ġbranches , Ġdefault ) ĊĊĠĠĠ Ġfun ĠValue . table Switch ( range : ĠInt Range , Ġbranches : ĠArray < BasicBlock >, Ġdefault : ĠBasic Block ) Ġ= ĊĠĠĠĠĠĠĠ Ġthis . table Switch ( values . getInt ( range . first ), Ġvalues . getInt ( range . last ), Ġbranches , Ġdefault ) ĊĊĠĠĠ Ġfun ĠValue . table Switch ( min : ĠValue , Ġmax : ĠValue , Ġbranches : ĠArray < BasicBlock >, Ġdefault : ĠBasic Block ) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . getTable Switch ( ctx , Ġthis , Ġmin , Ġmax , Ġdefault , Ġbranches ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġphi Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġphi ( type : ĠType , Ġin com ings : ĠMap < BasicBlock , ĠValue >) Ġ= Ġinstructions . get Phi ( ctx , Ġtype , Ġin com ings ) ĊĠĠĠ Ġfun Ġphi ( name : ĠString , Ġtype : ĠType , Ġin com ings : ĠMap < BasicBlock , ĠValue >) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Phi ( ctx , Ġname , Ġtype , Ġin com ings ) ĊĊĠĠĠ Ġfun Ġphi ( name : ĠName , Ġtype : ĠType , Ġin com ings : ĠMap < BasicBlock , ĠValue >) Ġ= Ġinstructions . get Phi ( ctx , Ġname , Ġtype , Ġin com ings ) ĊĊĠĠĠ Ġfun ĠMethod . call ( klass : ĠClass , Ġopcode : ĠCall Opcode , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Call ( ctx , Ġopcode , Ġthis , Ġklass , Ġargs , Ġ! returnType . is Void ) ĊĊĠĠĠ Ġfun ĠMethod . call ( klass : ĠClass , Ġname : ĠString , Ġopcode : ĠCall Opcode , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Call ( ctx , Ġopcode , Ġname , Ġthis , Ġklass , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . call ( klass : ĠClass , Ġname : ĠName , Ġopcode : ĠCall Opcode , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Call ( ctx , Ġopcode , Ġname , Ġthis , Ġklass , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . call ( klass : ĠClass , Ġopcode : ĠCall Opcode , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Call ( ctx , Ġopcode , Ġthis , Ġklass , Ġinstance , Ġargs , Ġ! returnType . is Void ) ĊĊĠĠĠ Ġfun ĠMethod . call ( klass : ĠClass , Ġname : ĠString , Ġopcode : ĠCall Opcode , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Call ( ctx , Ġopcode , Ġname , Ġthis , Ġklass , Ġinstance , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . call ( klass : ĠClass , Ġname : ĠName , Ġopcode : ĠCall Opcode , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinstructions . get Call ( ctx , Ġopcode , Ġname , Ġthis , Ġklass , Ġinstance , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . static Call ( klass : ĠClass , Ġargs : ĠArray < Value >) Ġ= Ġcall ( klass , ĠCall Opcode . STATIC , Ġargs ) ĊĠĠĠ Ġfun ĠMethod . static Call ( klass : ĠClass , Ġargs : ĠList < Value >) Ġ= Ġstatic Call ( klass , Ġargs . to Typed Array ()) ĊĊĠĠĠ Ġfun ĠMethod . virtual Call ( klass : ĠClass , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġcall ( klass , ĠCall Opcode . VIRTUAL , Ġinstance , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . virtual Call ( klass : ĠClass , Ġinstance : ĠValue , Ġargs : ĠList < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġvirtual Call ( klass , Ġinstance , Ġargs . to Typed Array ()) ĊĊĠĠĠ Ġfun ĠMethod . interface Call ( klass : ĠClass , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġcall ( klass , ĠCall Opcode . INTERFACE , Ġinstance , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . interface Call ( klass : ĠClass , Ġinstance : ĠValue , Ġargs : ĠList < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinterface Call ( klass , Ġinstance , Ġargs . to Typed Array ()) ĊĊĠĠĠ Ġfun ĠMethod . special Call ( klass : ĠClass , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġcall ( klass , ĠCall Opcode . SPECIAL , Ġinstance , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . special Call ( klass : ĠClass , Ġinstance : ĠValue , Ġargs : ĠList < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġspecial Call ( klass , Ġinstance , Ġargs . to Typed Array ()) ĊĊĠĠĠ Ġfun ĠMethod . static Call ( klass : ĠClass , Ġname : ĠString , Ġargs : ĠArray < Value >) Ġ= Ġcall ( klass , Ġname , ĠCall Opcode . STATIC , Ġargs ) ĊĠĠĠ Ġfun ĠMethod . static Call ( klass : ĠClass , Ġname : ĠString , Ġargs : ĠList < Value >) Ġ= Ġstatic Call ( klass , Ġname , Ġargs . to Typed Array ()) ĊĊĠĠĠ Ġfun ĠMethod . virtual Call ( klass : ĠClass , Ġname : ĠString , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġcall ( klass , Ġname , ĠCall Opcode . VIRTUAL , Ġinstance , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . virtual Call ( klass : ĠClass , Ġname : ĠString , Ġinstance : ĠValue , Ġargs : ĠList < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġvirtual Call ( klass , Ġname , Ġinstance , Ġargs . to Typed Array ()) ĊĊĠĠĠ Ġfun ĠMethod . interface Call ( klass : ĠClass , Ġname : ĠString , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġcall ( klass , Ġname , ĠCall Opcode . INTERFACE , Ġinstance , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . interface Call ( klass : ĠClass , Ġname : ĠString , Ġinstance : ĠValue , Ġargs : ĠList < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinterface Call ( klass , Ġname , Ġinstance , Ġargs . to Typed Array ()) ĊĊĠĠĠ Ġfun ĠMethod . special Call ( klass : ĠClass , Ġname : ĠString , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġcall ( klass , Ġname , ĠCall Opcode . SPECIAL , Ġinstance , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . special Call ( klass : ĠClass , Ġname : ĠString , Ġinstance : ĠValue , Ġargs : ĠList < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġspecial Call ( klass , Ġname , Ġinstance , Ġargs . to Typed Array ()) ĊĊĠĠĠ Ġfun ĠMethod . static Call ( klass : ĠClass , Ġname : ĠName , Ġargs : ĠArray < Value >) Ġ= Ġcall ( klass , Ġname , ĠCall Opcode . STATIC , Ġargs ) ĊĠĠĠ Ġfun ĠMethod . static Call ( klass : ĠClass , Ġname : ĠName , Ġargs : ĠList < Value >) Ġ= Ġstatic Call ( klass , Ġname , Ġargs . to Typed Array ()) ĊĠĠĠ Ġfun ĠMethod . virtual Call ( klass : ĠClass , Ġname : ĠName , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġcall ( klass , Ġname , ĠCall Opcode . VIRTUAL , Ġinstance , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . virtual Call ( klass : ĠClass , Ġname : ĠName , Ġinstance : ĠValue , Ġargs : ĠList < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġvirtual Call ( klass , Ġname , Ġinstance , Ġargs . to Typed Array ()) ĊĊĠĠĠ Ġfun ĠMethod . interface Call ( klass : ĠClass , Ġname : ĠName , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġcall ( klass , Ġname , ĠCall Opcode . INTERFACE , Ġinstance , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . interface Call ( klass : ĠClass , Ġname : ĠName , Ġinstance : ĠValue , Ġargs : ĠList < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġinterface Call ( klass , Ġname , Ġinstance , Ġargs . to Typed Array ()) ĊĊĠĠĠ Ġfun ĠMethod . special Call ( klass : ĠClass , Ġname : ĠName , Ġinstance : ĠValue , Ġargs : ĠArray < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġcall ( klass , Ġname , ĠCall Opcode . SPECIAL , Ġinstance , Ġargs ) ĊĊĠĠĠ Ġfun ĠMethod . special Call ( klass : ĠClass , Ġname : ĠName , Ġinstance : ĠValue , Ġargs : ĠList < Value >) Ġ= ĊĠĠĠĠĠĠĠ Ġspecial Call ( klass , Ġname , Ġinstance , Ġargs . to Typed Array ()) ĊĊĠĠĠ Ġfun Ġinvoke Dynamic ( ĊĠĠĠĠĠĠĠ Ġname : ĠName , ĊĠĠĠĠĠĠĠ ĠmethodName : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod Desc : ĠMethod Desc , ĊĠĠĠĠĠĠĠ Ġbootstrap Method : ĠHandle , ĊĠĠĠĠĠĠĠ Ġbootstrap Method Args : ĠArray < Any >, ĊĠĠĠĠĠĠĠ Ġoperands : ĠArray < Value > ĊĠĠĠ Ġ) Ġ= Ġinstructions . get Invoke Dynamic ( ctx , Ġname , ĠmethodName , Ġmethod Desc , Ġbootstrap Method , Ġbootstrap Method Args , Ġoperands ) ĊĊĠĠĠ Ġfun Ġinvoke Dynamic ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ ĠmethodName : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod Desc : ĠMethod Desc , ĊĠĠĠĠĠĠĠ Ġbootstrap Method : ĠHandle , ĊĠĠĠĠĠĠĠ Ġbootstrap Method Args : ĠArray < Any >, ĊĠĠĠĠĠĠĠ Ġoperands : ĠArray < Value > ĊĠĠĠ Ġ) Ġ= Ġinstructions . get Invoke Dynamic ( ctx , Ġname , ĠmethodName , Ġmethod Desc , Ġbootstrap Method , Ġbootstrap Method Args , Ġoperands ) ĊĊĠĠĠ Ġfun Ġinvoke Dynamic ( ĊĠĠĠĠĠĠĠ ĠmethodName : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod Desc : ĠMethod Desc , ĊĠĠĠĠĠĠĠ Ġbootstrap Method : ĠHandle , ĊĠĠĠĠĠĠĠ Ġbootstrap Method Args : ĠArray < Any >, ĊĠĠĠĠĠĠĠ Ġoperands : ĠArray < Value > ĊĠĠĠ Ġ) Ġ= Ġinstructions . get Invoke Dynamic ( ctx , ĠmethodName , Ġmethod Desc , Ġbootstrap Method , Ġbootstrap Method Args , Ġoperands ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcatch / throw Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠType . catch () Ġ= Ġinstructions . getC atch ( ctx , Ġthis ) ĊĠĠĠ Ġfun ĠType . catch ( name : ĠString ) Ġ= Ġinstructions . getC atch ( ctx , Ġname , Ġthis ) ĊĠĠĠ Ġfun ĠType . catch ( name : ĠName ) Ġ= Ġinstructions . getC atch ( ctx , Ġname , Ġthis ) ĊĊĠĠĠ Ġfun ĠValue .` throw `() Ġ= Ġinstructions . get Throw ( ctx , Ġthis ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreturn Ġwrappers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ` return `() Ġ= Ġinstructions . get Return ( ctx ) ĊĠĠĠ Ġfun Ġ` return `( retval : ĠValue ) Ġ= Ġinstructions . get Return ( ctx , Ġretval ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġunreachable Ġwrapper ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġunreachable () Ġ= Ġinstructions . getUn reachable ( ctx ) Ċ } Ċ Ċ class ĠInstruction Builder Impl ( ĊĠĠĠ Ġoverride Ġval Ġcm : ĠClass Manager , ĊĠĠĠ Ġoverride Ġval Ġctx : ĠUsage Context Ċ ) Ġ: ĠInstruction Builder Ċ Ċ class ĠInstruction List Builder Impl ( ĊĠĠĠ Ġoverride Ġval Ġcm : ĠClass Manager , ĊĠĠĠ Ġoverride Ġval Ġctx : ĠUsage Context Ċ ) Ġ: ĠList Builder < Instruction >(), ĠInstruction Builder Ċ Ċ fun Ġinst ( cm : ĠClass Manager , Ġctx : ĠUsage Context , Ġbody : ĠInstruction Builder . () Ġ-> ĠInstruction ): ĠInstruction Ġ= ĊĠĠĠ ĠInstruction Builder Impl ( cm , Ġctx ). body () Ċ Ċ fun Ġinst s ( cm : ĠClass Manager , Ġctx : ĠUsage Context , Ġbody : ĠInstruction List Builder Impl . () Ġ-> ĠList < Instruction >): ĠList < Instruction > Ġ= ĊĠĠĠ ĠInstruction List Builder Impl ( cm , Ġctx ). body ()