package Ġcom . l hw dev . model . plugin . compiler . util Ċ Ċ import Ġorg . jetbrains . kotlin . descriptors . Declaration Descriptor Ċ import Ġorg . jetbrains . kotlin . ir . Ir Element Ċ import Ġorg . jetbrains . kotlin . ir . Ir Statement Ċ import Ġorg . jetbrains . kotlin . ir . Obsolete Descriptor Based API Ċ import Ġorg . jetbrains . kotlin . ir . declarations .* Ċ import Ġorg . jetbrains . kotlin . ir . declarations . impl .* Ċ import Ġorg . jetbrains . kotlin . ir . expressions .* Ċ import Ġorg . jetbrains . kotlin . ir . expressions . impl .* Ċ import Ġorg . jetbrains . kotlin . ir . symbols .* Ċ import Ġorg . jetbrains . kotlin . ir . symbols . impl .* Ċ import Ġorg . jetbrains . kotlin . ir . types . Ir Type Ċ import Ġorg . jetbrains . kotlin . ir . util .* Ċ import Ġorg . jetbrains . kotlin . ir . visitor s . Ir Element Transformer Void Ċ import Ġorg . jetbrains . kotlin . ir . visitor s . accept Children Void Ċ import Ġorg . jetbrains . kotlin . ir . visitor s . accept Void Ċ import Ġjava . util . HashMap ĊĊ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠIr Element > ĠT . deep Copy Component With Symbol ( Ċ ĉ initial Parent : ĠIr Declaration Parent ? Ġ= Ġnull , Ċ ĉ create Cop ier : Ġ( DeepCopy Component Symbol Rem apper , ĠType Rem apper ) Ġ-> ĠIr DeepCopy Component Transformer Ġ= Ċĉ ĉ :: Ir DeepCopy Component Transformer Impl Ċ ): ĠT Ġ{ Ċ ĉ val Ġsymbol Rem apper Ġ= ĠDeepCopy Component Symbol Rem apper () Ċ ĉ accept Void ( symbol Rem apper ) Ċ ĉ val Ġtype Rem apper Ġ= ĠDeepCopy Type Rem apper ( symbol Rem apper ) Ċ ĉ return Ġtransform ( create Cop ier ( symbol Rem apper , Ġtype Rem apper ), Ġnull ). patch Declaration Parents ( initial Parent ) Ġas ĠT Ċ } Ċ Ċ interface ĠIr DeepCopy Component Transformer Ġ: ĠIr Component Transformer < Nothing ?> Ġ{ Ċ ĉ val Ġsymbol Rem apper : ĠDeepCopy Component Symbol Rem apper Ċ ĉ val Ġtype Rem apper : ĠType Rem apper Ċ ĉ val Ġsymbol Ren amer : ĠSymbol Ren amer ĊĉĊ ĉ fun Ġmap Declaration Origin ( origin : ĠIr Declaration Origin ) Ġ= Ġorigin Ċ ĉ fun Ġmap Statement Origin ( origin : ĠIr Statement Origin ?) Ġ= Ġorigin Ċ } ĊĊ Ċ @ Opt In ( Obsolete Descriptor Based API :: class ) Ċ open Ġclass ĠIr DeepCopy Component Transformer Impl ( Ċ ĉ override Ġval Ġsymbol Rem apper : ĠDeepCopy Component Symbol Rem apper , Ċ ĉ override Ġval Ġtype Rem apper : ĠType Rem apper , Ċ ĉ override Ġval Ġsymbol Ren amer : ĠSymbol Ren amer Ġ= ĠSymbol Ren amer . DEFAULT , Ċ ĉ private Ġval Ġcopy Metadata : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠIr DeepCopy Component Transformer , ĠIr Element Transformer Void () Ġ{ Ċ ĉ constructor ( symbol Rem apper : ĠDeepCopy Component Symbol Rem apper , Ġtype Rem apper : ĠType Rem apper ) Ġ: Ġthis ( Ċĉ ĉ symbol Rem apper , Ċĉ ĉ type Rem apper , Ċĉ ĉ Symbol Ren amer . DEFAULT Ċ ĉ ) ĊĉĊ ĉ override Ġfun Ġmap Declaration Origin ( origin : ĠIr Declaration Origin ) Ġ= Ġorigin Ċ ĉ override Ġfun Ġmap Statement Origin ( origin : ĠIr Statement Origin ?) Ġ= Ġorigin ĊĉĊ ĉ protected Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠIr Element > ĠT . transform () Ġ= Ċĉ ĉ transform ( this @ Ir DeepCopy Component Transformer Impl , Ġnull ) Ġas ĠT ĊĉĊ ĉ protected Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠIr Element > ĠList < T >. transform () Ġ= Ċĉ ĉ map Ġ{ Ġit . transform () Ġ} ĊĉĊ ĉ protected Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠIr Element > ĠList < T >. transform To ( destination : ĠMutable List < T >) Ġ= Ċĉ ĉ map To ( destination ) Ġ{ Ġit . transform () Ġ} ĊĉĊ ĉ protected Ġfun Ġ< T Ġ: ĠIr Declaration Container > ĠT . transform Declarations To ( destination : ĠT ) Ġ= Ċĉ ĉ declarations . transform To ( destination . declarations ) ĊĉĊ ĉ protected Ġfun ĠIr Type . remap Type () Ġ= Ġtype Rem apper . remap Type ( this ) ĊĉĊ ĉ override Ġfun Ġvisit Element ( element : ĠIr Element ): ĠIr Element Ġ= Ċĉ ĉ throw ĠIllegalArgumentException (" Unsupported Ġelement Ġtype : Ġ$ element ") ĊĉĊ ĉ override Ġfun Ġvisit Module Fragment ( declaration : ĠIr Module Fragment ): ĠIr Module Fragment Ġ= ĠIr Module Fragment Impl ( Ċĉ ĉ declaration . descriptor , Ċĉ ĉ declaration . ir Built ins , Ċĉ ĉ declaration . files . transform () Ċ ĉ ) ĊĉĊ ĉ override Ġfun Ġvisit External Package Fragment ( declaration : ĠIr External Package Fragment ): ĠIr External Package Fragment Ġ= Ċĉ ĉ Ir External Package Fragment Impl ( Ċĉĉ ĉ symbol Rem apper . getDeclared External Package Fragment ( declaration . symbol ), Ċĉĉ ĉ symbol Ren amer . get External Package Fragment Name ( declaration . symbol ) Ċĉ ĉ ). apply Ġ{ Ċĉĉ ĉ declaration . transform Declarations To ( this ) Ċĉ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit File ( declaration : ĠIr File ): ĠIr File Ġ= ĠIr File Impl ( Ċĉ ĉ declaration . file Entry , Ċĉ ĉ symbol Rem apper . getDeclared File ( declaration . symbol ), Ċĉ ĉ symbol Ren amer . get FileName ( declaration . symbol ) Ċ ĉ ). apply Ġ{ Ċĉ ĉ transform Annotations ( declaration ) Ċĉ ĉ declaration . transform Declarations To ( this ) Ċĉ ĉ if ( copy Metadata ) Ġmetadata Ġ= Ġdeclaration . metadata Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Declaration ( declaration : ĠIr Declaration Base ): ĠIr Statement Ġ= Ċĉ ĉ throw ĠIllegalArgumentException (" Unsupported Ġdeclaration Ġtype : Ġ$ declaration ") ĊĉĊ ĉ override Ġfun Ġvisit Script ( declaration : ĠIr Script ): ĠIr Script Ġ= ĠIr Script Impl ( Ċĉ ĉ symbol Rem apper . getDeclared Script ( declaration . symbol ), Ċĉ ĉ declaration . name Ċ ĉ ). also Ġ{ Ġscript Copy Ġ-> Ċĉ ĉ script Copy . this Receiver Ġ= Ġdeclaration . this Receiver . transform () Ċĉ ĉ declaration . statements . map To ( script Copy . statements ) Ġ{ Ġit . transform () Ġ} Ċĉ ĉ script Copy . explicit Call Parameters Ġ= Ġdeclaration . explicit Call Parameters . map Ġ{ Ġit . transform () Ġ} Ċĉ ĉ script Copy . implicit Re ceiv ers Parameters Ġ= Ġdeclaration . implicit Re ceiv ers Parameters . map Ġ{ Ġit . transform () Ġ} Ċĉ ĉ script Copy . provided Properties Ġ= Ġdeclaration . provided Properties . map Ġ{ Ġit . first . transform () Ġto Ġit . second Ġ} Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Class ( declaration : ĠIr Class ) Ġ= Ġdeclaration . factory . createClass ( Ċĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉ ĉ map Declaration Origin ( declaration . origin ), Ċĉ ĉ symbol Rem apper . getDeclared Class ( declaration . symbol ), Ċĉ ĉ symbol Ren amer . get ClassName ( declaration . symbol ), Ċĉ ĉ declaration . kind , Ċĉ ĉ declaration . visibility , Ċĉ ĉ declaration . modal ity , Ċĉ ĉ is Companion Ġ= Ġdeclaration . is Companion , Ċĉ ĉ is Inner Ġ= Ġdeclaration . is Inner , Ċĉ ĉ is Data Ġ= Ġdeclaration . is Data , Ċĉ ĉ is External Ġ= Ġdeclaration . is External , Ċĉ ĉ is Inline Ġ= Ġdeclaration . is Inline , Ċĉ ĉ is Expect Ġ= Ġdeclaration . is Expect , Ċĉ ĉ is Fun Ġ= Ġdeclaration . is Fun Ċ ĉ ). apply Ġ{ Ċĉ ĉ transform Annotations ( declaration ) Ċĉ ĉ copy Type Parameters From ( declaration ) Ċĉ ĉ super Types Ġ= Ġdeclaration . super Types . map Ġ{ Ċĉĉ ĉ it . remap Type () Ċĉ ĉ } Ċĉ ĉ this Receiver Ġ= Ġdeclaration . this Receiver ?. transform () Ċĉ ĉ declaration . transform Declarations To ( this ) Ċĉ ĉ if ( copy Metadata ) Ġmetadata Ġ= Ġdeclaration . metadata Ċ ĉ }. copy Attributes ( declaration ) ĊĉĊ ĉ override Ġfun Ġvisit Simple Function ( declaration : ĠIr Simple Function ) Ġ= Ġdeclaration . factory . create Function ( Ċĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉ ĉ map Declaration Origin ( declaration . origin ), Ċĉ ĉ symbol Rem apper . getDeclared Function ( declaration . symbol ), Ċĉ ĉ symbol Ren amer . get FunctionName ( declaration . symbol ), Ċĉ ĉ declaration . visibility , Ċĉ ĉ declaration . modal ity , Ċĉ ĉ declaration . returnType , Ċĉ ĉ is Inline Ġ= Ġdeclaration . is Inline , Ċĉ ĉ is External Ġ= Ġdeclaration . is External , Ċĉ ĉ is Tail rec Ġ= Ġdeclaration . is Tail rec , Ċĉ ĉ is Suspend Ġ= Ġdeclaration . is Suspend , Ċĉ ĉ is Operator Ġ= Ġdeclaration . is Operator , Ċĉ ĉ isIn fix Ġ= Ġdeclaration . isIn fix , Ċĉ ĉ is Expect Ġ= Ġdeclaration . is Expect , Ċĉ ĉ is Fake Override Ġ= Ġdeclaration . is Fake Override , Ċĉ ĉ container Source Ġ= Ġdeclaration . container Source , Ċ ĉ ). apply Ġ{ Ċĉ ĉ over ridden Symbols Ġ= Ġdeclaration . over ridden Symbols . map Ġ{ Ċĉĉ ĉ symbol Rem apper . get Referenced Function ( it ) Ġas ĠIr Simple Function Symbol Ċĉ ĉ } Ċĉ ĉ copy Attributes ( declaration ) Ċĉ ĉ transform Function Children ( declaration ) Ċĉ ĉ if ( copy Metadata ) Ġ{ Ċĉĉ ĉ corre sponding Property Symbol Ġ= Ġdeclaration . corre sponding Property Symbol Ċĉĉ ĉ metadata Ġ= Ġdeclaration . metadata Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Constructor ( declaration : ĠIr Constructor ) Ġ= Ġdeclaration . factory . create Constructor ( Ċĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉ ĉ map Declaration Origin ( declaration . origin ), Ċĉ ĉ symbol Rem apper . getDeclared Constructor ( declaration . symbol ), Ċĉ ĉ declaration . name , Ċĉ ĉ declaration . visibility , Ċĉ ĉ declaration . returnType , Ċĉ ĉ is Inline Ġ= Ġdeclaration . is Inline , Ċĉ ĉ is External Ġ= Ġdeclaration . is External , Ċĉ ĉ is Primary Ġ= Ġdeclaration . is Primary , Ċĉ ĉ is Expect Ġ= Ġdeclaration . is Expect , Ċĉ ĉ container Source Ġ= Ġdeclaration . container Source , Ċ ĉ ). apply Ġ{ Ċĉ ĉ transform Function Children ( declaration ) Ċĉ ĉ if ( copy Metadata ) Ġmetadata Ġ= Ġdeclaration . metadata Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġ< T Ġ: ĠIr Function > ĠT . transform Function Children ( declaration : ĠT ): ĠT Ġ= Ġapply Ġ{ Ċĉ ĉ transform Annotations ( declaration ) Ċĉ ĉ copy Type Parameters From ( declaration ) Ċĉ ĉ type Rem apper . within Scope ( this ) Ġ{ Ċĉĉ ĉ dispatch Receiver Parameter Ġ= Ġdeclaration . dispatch Receiver Parameter ?. transform () Ċĉĉ ĉ extension Receiver Parameter Ġ= Ġdeclaration . extension Receiver Parameter ?. transform () Ċĉĉ ĉ returnType Ġ= Ġtype Rem apper . remap Type ( declaration . returnType ) Ċĉĉ ĉ value Parameters Ġ= Ġdeclaration . value Parameters . transform () Ċĉĉ ĉ body Ġ= Ġdeclaration . body ?. transform () Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ protected Ġfun ĠIr Mutable Annotation Container . transform Annotations ( declaration : ĠIr Annotation Container ) Ġ{ Ċĉ ĉ annotations Ġ= Ġdeclaration . annotations . transform () Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Property ( declaration : ĠIr Property ) Ġ= Ġdeclaration . factory . create Property ( Ċĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉ ĉ map Declaration Origin ( declaration . origin ), Ċĉ ĉ symbol Rem apper . getDeclared Property ( declaration . symbol ), Ċĉ ĉ declaration . name , Ċĉ ĉ declaration . visibility , Ċĉ ĉ declaration . modal ity , Ċĉ ĉ is Var Ġ= Ġdeclaration . is Var , Ċĉ ĉ is Const Ġ= Ġdeclaration . is Const , Ċĉ ĉ is Late init Ġ= Ġdeclaration . is Late init , Ċĉ ĉ is Deleg ated Ġ= Ġdeclaration . is Deleg ated , Ċĉ ĉ is External Ġ= Ġdeclaration . is External , Ċĉ ĉ is Expect Ġ= Ġdeclaration . is Expect , Ċĉ ĉ container Source Ġ= Ġdeclaration . container Source , Ċ ĉ ). apply Ġ{ Ċĉ ĉ transform Annotations ( declaration ) Ċĉ ĉ copy Attributes ( declaration ) Ċĉ ĉ this . back ing Field Ġ= Ġdeclaration . back ing Field ?. transform ()?. also Ġ{ Ċĉĉ ĉ it . corre sponding Property Symbol Ġ= Ġsymbol Ċĉ ĉ } Ċĉ ĉ this . getter Ġ= Ġdeclaration . getter ?. transform ()?. also Ġ{ Ċĉĉ ĉ it . corre sponding Property Symbol Ġ= Ġsymbol Ċĉ ĉ } Ċĉ ĉ this . setter Ġ= Ġdeclaration . setter ?. transform ()?. also Ġ{ Ċĉĉ ĉ it . corre sponding Property Symbol Ġ= Ġsymbol Ċĉ ĉ } Ċĉ ĉ if ( copy Metadata ) Ġmetadata Ġ= Ġdeclaration . metadata Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Field ( declaration : ĠIr Field ) Ġ= Ġdeclaration . factory . create Field ( Ċĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉ ĉ map Declaration Origin ( declaration . origin ), Ċĉ ĉ symbol Rem apper . getDeclared Field ( declaration . symbol ), Ċĉ ĉ symbol Ren amer . getField Name ( declaration . symbol ), Ċĉ ĉ declaration . type . remap Type (), Ċĉ ĉ declaration . visibility , Ċĉ ĉ is Final Ġ= Ġdeclaration . is Final , Ċĉ ĉ is External Ġ= Ġdeclaration . is External , Ċĉ ĉ is Static Ġ= Ġdeclaration . is Static , Ċ ĉ ). apply Ġ{ Ċĉ ĉ transform Annotations ( declaration ) Ċĉ ĉ initializer Ġ= Ġdeclaration . initializer ?. transform () Ċĉ ĉ if ( copy Metadata ) Ġmetadata Ġ= Ġdeclaration . metadata Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Local Deleg ated Property ( declaration : ĠIr Local Deleg ated Property ) Ġ= Ċĉ ĉ declaration . factory . create Local Deleg ated Property ( Ċĉĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉĉ ĉ map Declaration Origin ( declaration . origin ), Ċĉĉ ĉ symbol Rem apper . getDeclared Local Deleg ated Property ( declaration . symbol ), Ċĉĉ ĉ declaration . name , Ċĉĉ ĉ declaration . type . remap Type (), Ċĉĉ ĉ declaration . is Var Ċĉ ĉ ). apply Ġ{ Ċĉĉ ĉ transform Annotations ( declaration ) Ċĉĉ ĉ delegate Ġ= Ġdeclaration . delegate . transform () Ċĉĉ ĉ getter Ġ= Ġdeclaration . getter . transform () Ċĉĉ ĉ setter Ġ= Ġdeclaration . setter ?. transform () Ċĉ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Enum Entry ( declaration : ĠIr Enum Entry ) Ġ= Ġdeclaration . factory . create Enum Entry ( Ċĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉ ĉ map Declaration Origin ( declaration . origin ), Ċĉ ĉ symbol Rem apper . getDeclared Enum Entry ( declaration . symbol ), Ċĉ ĉ symbol Ren amer . get Enum Entry Name ( declaration . symbol ) Ċ ĉ ). apply Ġ{ Ċĉ ĉ transform Annotations ( declaration ) Ċĉ ĉ corre sponding Class Ġ= Ġdeclaration . corre sponding Class ?. transform () Ċĉ ĉ initializer Expression Ġ= Ġdeclaration . initializer Expression ?. transform () Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Anonymous Initializer ( declaration : ĠIr Anonymous Initializer ) Ġ= Ċĉ ĉ declaration . factory . create Anonymous Initializer ( Ċĉĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉĉ ĉ map Declaration Origin ( declaration . origin ), Ċĉĉ ĉ Ir Anonymous Initializer Symbol Impl ( declaration . descriptor ) Ċĉ ĉ ). apply Ġ{ Ċĉĉ ĉ body Ġ= Ġdeclaration . body . transform () Ċĉ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Variable ( declaration : ĠIr Variable ): ĠIr Variable Ġ= ĠIr Variable Impl ( Ċĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉ ĉ map Declaration Origin ( declaration . origin ), Ċĉ ĉ symbol Rem apper . getDeclared Variable ( declaration . symbol ), Ċĉ ĉ symbol Ren amer . get Variable Name ( declaration . symbol ), Ċĉ ĉ declaration . type . remap Type (), Ċĉ ĉ declaration . is Var , Ċĉ ĉ declaration . is Const , Ċĉ ĉ declaration . is Late init Ċ ĉ ). apply Ġ{ Ċĉ ĉ transform Annotations ( declaration ) Ċĉ ĉ initializer Ġ= Ġdeclaration . initializer ?. transform () Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Type Parameter ( declaration : ĠIr Type Parameter ): ĠIr Type Parameter Ġ= Ċĉ ĉ copy Type Parameter ( declaration ). apply Ġ{ Ċĉĉ ĉ // ĠTODO Ġtype Ġparameter Ġscopes ? Ċĉĉ ĉ super Types Ġ= Ġdeclaration . super Types . map Ġ{ Ġit . remap Type () Ġ} Ċĉ ĉ } ĊĉĊ ĉ private Ġfun Ġcopy Type Parameter ( declaration : ĠIr Type Parameter ) Ġ= Ġdeclaration . factory . create Type Parameter ( Ċĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉ ĉ map Declaration Origin ( declaration . origin ), Ċĉ ĉ symbol Rem apper . getDeclared Type Parameter ( declaration . symbol ), Ċĉ ĉ symbol Ren amer . getType ParameterName ( declaration . symbol ), Ċĉ ĉ declaration . index , Ċĉ ĉ declaration . is Re ified , Ċĉ ĉ declaration . variance Ċ ĉ ). apply Ġ{ Ċĉ ĉ transform Annotations ( declaration ) Ċ ĉ } ĊĉĊ ĉ protected Ġfun ĠIr Type Parameters Container . copy Type Parameters From ( other : ĠIr Type Parameters Container ) Ġ{ Ċĉ ĉ this . type Parameters Ġ= Ġother . type Parameters . map Ġ{ Ċĉĉ ĉ copy Type Parameter ( it ) Ċĉ ĉ } ĊĉĉĊĉ ĉ type Rem apper . within Scope ( this ) Ġ{ Ċĉĉ ĉ for (( this Type Parameter , Ġother Type Parameter ) Ġin Ġthis . type Parameters . zip ( other . type Parameters )) Ġ{ Ċĉĉĉ ĉ this Type Parameter . super Types Ġ= Ġother Type Parameter . super Types . map Ġ{ Ċĉĉĉĉ ĉ type Rem apper . remap Type ( it ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Value Parameter ( declaration : ĠIr Value Parameter ) Ġ= Ġdeclaration . factory . create Value Parameter ( Ċĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉ ĉ map Declaration Origin ( declaration . origin ), Ċĉ ĉ symbol Rem apper . getDeclared Value Parameter ( declaration . symbol ), Ċĉ ĉ symbol Ren amer . getValue ParameterName ( declaration . symbol ), Ċĉ ĉ declaration . index , Ċĉ ĉ declaration . type . remap Type (), Ċĉ ĉ declaration . var arg ElementType ?. remap Type (), Ċĉ ĉ declaration . is Cross inline , Ċĉ ĉ declaration . is N oin line , Ċĉ ĉ declaration . is Hidden , Ċĉ ĉ declaration . is Assignable Ċ ĉ ). apply Ġ{ Ċĉ ĉ transform Annotations ( declaration ) Ċĉ ĉ defaultValue Ġ= Ġdeclaration . defaultValue ?. transform () Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Type Alias ( declaration : ĠIr Type Alias ) Ġ= Ġdeclaration . factory . create Type Alias ( Ċĉ ĉ declaration . start Offset , Ġdeclaration . end Offset , Ċĉ ĉ symbol Rem apper . getDeclared Type Alias ( declaration . symbol ), Ċĉ ĉ symbol Ren amer . getType Alias Name ( declaration . symbol ), Ċĉ ĉ declaration . visibility , Ċĉ ĉ declaration . expanded Type . remap Type (), Ċĉ ĉ declaration . is Actual , Ċĉ ĉ map Declaration Origin ( declaration . origin ) Ċ ĉ ). apply Ġ{ Ċĉ ĉ transform Annotations ( declaration ) Ċĉ ĉ copy Type Parameters From ( declaration ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Body ( body : ĠIr Body ): ĠIr Body Ġ= Ċĉ ĉ throw ĠIllegalArgumentException (" Unsupported Ġbody Ġtype : Ġ$ body ") ĊĉĊ ĉ override Ġfun Ġvisit Expression Body ( body : ĠIr Expression Body ): ĠIr Expression Body Ġ= Ċĉ ĉ body . factory . create Expression Body ( body . expression . transform ()) ĊĉĊ ĉ override Ġfun Ġvisit Block Body ( body : ĠIr Block Body ) Ġ= Ġbody . factory . create Block Body ( Ċĉ ĉ body . start Offset , Ġbody . end Offset , Ċĉ ĉ body . statements . map Ġ{ Ġit . transform () Ġ} Ċ ĉ ) ĊĉĊ ĉ override Ġfun Ġvisit Synt hetic Body ( body : ĠIr Synt hetic Body ): ĠIr Synt hetic Body Ġ= Ċĉ ĉ Ir Synt hetic Body Impl ( body . start Offset , Ġbody . end Offset , Ġbody . kind ) ĊĉĊ ĉ override Ġfun Ġvisit Expression ( expression : ĠIr Expression ): ĠIr Expression Ġ= Ċĉ ĉ throw ĠIllegalArgumentException (" Unsupported Ġexpression Ġtype : Ġ$ expression ") ĊĉĊ ĉ override Ġfun Ġ< T > Ġvisit Const ( expression : ĠIr Const < T >): ĠIr Const < T > Ġ= Ċĉ ĉ expression . copy (). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Var arg ( expression : ĠIr Var arg ): ĠIr Var arg Ġ= ĠIr Var arg Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ġexpression . var arg ElementType . remap Type (), Ċĉ ĉ expression . elements . transform () Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Spread Element ( spread : ĠIr Spread Element ): ĠIr Spread Element Ġ= ĠIr Spread Element Impl ( Ċĉ ĉ spread . start Offset , Ġspread . end Offset , Ċĉ ĉ spread . expression . transform () Ċ ĉ ) ĊĉĊ ĉ override Ġfun Ġvisit Block ( expression : ĠIr Block ): ĠIr Block Ġ= Ġif ( expression Ġis ĠIr Return able Block ) Ċĉ ĉ Ir Return able Block Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ symbol Rem apper . get Referenced Return able Block ( expression . symbol ), Ċĉĉ ĉ map Statement Origin ( expression . origin ), Ċĉĉ ĉ expression . statements . map Ġ{ Ġit . transform () Ġ}, Ċĉĉ ĉ expression . inline Function Symbol Ċĉ ĉ ). copy Attributes ( expression ) Ġelse ĠIr Block Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ map Statement Origin ( expression . origin ), Ċĉ ĉ expression . statements . map Ġ{ Ġit . transform () Ġ} Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Composite ( expression : ĠIr Composite ): ĠIr Composite Ġ= ĠIr Composite Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ map Statement Origin ( expression . origin ), Ċĉ ĉ expression . statements . map Ġ{ Ġit . transform () Ġ} Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit String Concatenation ( expression : ĠIr String Concatenation ): ĠIr String Concatenation Ġ= Ċĉ ĉ Ir String Concatenation Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ expression . arguments . map Ġ{ Ġit . transform () Ġ} Ċĉ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit GetObject Value ( expression : ĠIr GetObject Value ): ĠIr GetObject Value Ġ= ĠIr GetObject Value Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ symbol Rem apper . get Referenced Class ( expression . symbol ) Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Get EnumValue ( expression : ĠIr Get EnumValue ): ĠIr Get EnumValue Ġ= ĠIr Get EnumValue Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ symbol Rem apper . get Referenced Enum Entry ( expression . symbol ) Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit GetValue ( expression : ĠIr GetValue ): ĠIr GetValue Ġ= ĠIr GetValue Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ symbol Rem apper . get Referenced Value ( expression . symbol ), Ċĉ ĉ map Statement Origin ( expression . origin ) Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit SetValue ( expression : ĠIr SetValue ): ĠIr SetValue Ġ= ĠIr SetValue Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ symbol Rem apper . get Referenced Value ( expression . symbol ), Ċĉ ĉ expression . value . transform (), Ċĉ ĉ map Statement Origin ( expression . origin ) Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit GetField ( expression : ĠIr GetField ): ĠIr GetField Ġ= ĠIr GetField Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ symbol Rem apper . get Referenced Field ( expression . symbol ), Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ expression . receiver ?. transform (), Ċĉ ĉ map Statement Origin ( expression . origin ), Ċĉ ĉ symbol Rem apper . get Referenced Class OrNull ( expression . super Qualifier Symbol ) Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Set Field ( expression : ĠIr Set Field ): ĠIr Set Field Ġ= ĠIr Set Field Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ symbol Rem apper . get Referenced Field ( expression . symbol ), Ċĉ ĉ expression . receiver ?. transform (), Ċĉ ĉ expression . value . transform (), Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ map Statement Origin ( expression . origin ), Ċĉ ĉ symbol Rem apper . get Referenced Class OrNull ( expression . super Qualifier Symbol ) Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Call ( expression : ĠIr Call ): ĠIr Call Ġ= Ġshallow Copy Call ( expression ). apply Ġ{ Ċĉ ĉ copy Rem apped Type Arguments From ( expression ) Ċĉ ĉ transform Value Arguments ( expression ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Constructor Call ( expression : ĠIr Constructor Call ): ĠIr Constructor Call Ġ{ Ċĉ ĉ val Ġconstructor Symbol Ġ= Ġsymbol Rem apper . get Referenced Constructor ( expression . symbol ) Ċĉ ĉ return ĠIr Constructor Call Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ constructor Symbol , Ċĉĉ ĉ expression . type Arguments Count , Ċĉĉ ĉ expression . constructor Type Arguments Count , Ċĉĉ ĉ expression . value Arguments Count , Ċĉĉ ĉ map Statement Origin ( expression . origin ) Ċĉ ĉ ). apply Ġ{ Ċĉĉ ĉ copy Rem apped Type Arguments From ( expression ) Ċĉĉ ĉ transform Value Arguments ( expression ) Ċĉ ĉ }. copy Attributes ( expression ) Ċ ĉ } ĊĉĊ ĉ private Ġfun ĠIr Member Access Expression <* >. copy Rem apped Type Arguments From ( other : ĠIr Member Access Expression <* >) Ġ{ Ċĉ ĉ assert ( type Arguments Count Ġ== Ġother . type Arguments Count ) Ġ{ Ċĉĉ ĉ " Mis matching Ġtype Ġarguments : Ġ$ type Arguments Count Ġvs Ġ${ other . type Arguments Count } Ġ" Ċĉ ĉ } Ċĉ ĉ for ( i Ġin Ġ 0 Ġuntil Ġtype Arguments Count ) Ġ{ Ċĉĉ ĉ put Type Argument ( i , Ġother . getType Argument ( i )?. remap Type ()) Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġshallow Copy Call ( expression : ĠIr Call ): ĠIr Call Ġ{ Ċĉ ĉ val Ġnew Cal lee Ġ= Ġsymbol Rem apper . get Referenced Simple Function ( expression . symbol ) Ċĉ ĉ return ĠIr Call Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ new Cal lee , Ċĉĉ ĉ expression . type Arguments Count , Ċĉĉ ĉ expression . value Arguments Count , Ċĉĉ ĉ map Statement Origin ( expression . origin ), Ċĉĉ ĉ symbol Rem apper . get Referenced Class OrNull ( expression . super Qualifier Symbol ) Ċĉ ĉ ). apply Ġ{ Ċĉĉ ĉ copy Rem apped Type Arguments From ( expression ) Ċĉ ĉ }. copy Attributes ( expression ) Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġ< T Ġ: ĠIr Member Access Expression <* >> ĠT . transform Receiver Arguments ( original : ĠT ): ĠT Ġ= Ġapply Ġ{ Ċĉ ĉ dispatch Receiver Ġ= Ġoriginal . dispatch Receiver ?. transform () Ċĉ ĉ extension Receiver Ġ= Ġoriginal . extension Receiver ?. transform () Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġ< T Ġ: ĠIr Member Access Expression <* >> ĠT . transform Value Arguments ( original : ĠT ) Ġ{ Ċĉ ĉ transform Receiver Arguments ( original ) Ċĉ ĉ for ( i Ġin Ġ 0 Ġuntil Ġoriginal . value Arguments Count ) Ġ{ Ċĉĉ ĉ put Value Argument ( i , Ġoriginal . getValue Argument ( i )?. transform ()) Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Delegating Constructor Call ( expression : ĠIr Delegating Constructor Call ): ĠIr Delegating Constructor Call Ġ{ Ċĉ ĉ val Ġnew Constructor Ġ= Ġsymbol Rem apper . get Referenced Constructor ( expression . symbol ) Ċĉ ĉ return ĠIr Delegating Constructor Call Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ new Constructor , Ċĉĉ ĉ expression . type Arguments Count , Ċĉĉ ĉ expression . value Arguments Count Ċĉ ĉ ). apply Ġ{ Ċĉĉ ĉ copy Rem apped Type Arguments From ( expression ) Ċĉĉ ĉ transform Value Arguments ( expression ) Ċĉ ĉ }. copy Attributes ( expression ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Enum Constructor Call ( expression : ĠIr Enum Constructor Call ): ĠIr Enum Constructor Call Ġ{ Ċĉ ĉ val Ġnew Constructor Ġ= Ġsymbol Rem apper . get Referenced Constructor ( expression . symbol ) Ċĉ ĉ return ĠIr Enum Constructor Call Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ new Constructor , Ċĉĉ ĉ expression . type Arguments Count , Ċĉĉ ĉ expression . value Arguments Count Ċĉ ĉ ). apply Ġ{ Ċĉĉ ĉ copy Rem apped Type Arguments From ( expression ) Ċĉĉ ĉ transform Value Arguments ( expression ) Ċĉ ĉ }. copy Attributes ( expression ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit GetClass ( expression : ĠIr GetClass ): ĠIr GetClass Ġ= ĠIr GetClass Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ expression . argument . transform () Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Function Reference ( expression : ĠIr Function Reference ): ĠIr Function Reference Ġ{ Ċĉ ĉ val Ġsymbol Ġ= Ġsymbol Rem apper . get Referenced Function ( expression . symbol ) Ċĉ ĉ val Ġreflection Target Ġ= Ġexpression . reflection Target ?. let Ġ{ Ġsymbol Rem apper . get Referenced Function ( it ) Ġ} Ċĉ ĉ return ĠIr Function Reference Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ symbol , Ċĉĉ ĉ expression . type Arguments Count , Ċĉĉ ĉ expression . value Arguments Count , Ċĉĉ ĉ reflection Target , Ċĉĉ ĉ map Statement Origin ( expression . origin ) Ċĉ ĉ ). apply Ġ{ Ċĉĉ ĉ copy Rem apped Type Arguments From ( expression ) Ċĉĉ ĉ transform Value Arguments ( expression ) Ċĉ ĉ }. copy Attributes ( expression ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Property Reference ( expression : ĠIr Property Reference ): ĠIr Property Reference Ġ= ĠIr Property Reference Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ symbol Rem apper . get Referenced Property ( expression . symbol ), Ċĉ ĉ expression . type Arguments Count , Ċĉ ĉ expression . field ?. let Ġ{ Ġsymbol Rem apper . get Referenced Field ( it ) Ġ}, Ċĉ ĉ expression . getter ?. let Ġ{ Ġsymbol Rem apper . get Referenced Simple Function ( it ) Ġ}, Ċĉ ĉ expression . setter ?. let Ġ{ Ġsymbol Rem apper . get Referenced Simple Function ( it ) Ġ}, Ċĉ ĉ map Statement Origin ( expression . origin ) Ċ ĉ ). apply Ġ{ Ċĉ ĉ copy Rem apped Type Arguments From ( expression ) Ċĉ ĉ transform Receiver Arguments ( expression ) Ċ ĉ }. copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Local Deleg ated Property Reference ( expression : ĠIr Local Deleg ated Property Reference ): ĠIr Local Deleg ated Property Reference Ġ= Ċĉ ĉ Ir Local Deleg ated Property Reference Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ symbol Rem apper . get Referenced Local Deleg ated Property ( expression . symbol ), Ċĉĉ ĉ symbol Rem apper . get Referenced Variable ( expression . delegate ), Ċĉĉ ĉ symbol Rem apper . get Referenced Simple Function ( expression . getter ), Ċĉĉ ĉ expression . setter ?. let Ġ{ Ġsymbol Rem apper . get Referenced Simple Function ( it ) Ġ}, Ċĉĉ ĉ map Statement Origin ( expression . origin ) Ċĉ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Function Expression ( expression : ĠIr Function Expression ): ĠIr Function Expression Ġ= Ċĉ ĉ Ir Function Expression Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ expression . function . transform (), Ċĉĉ ĉ map Statement Origin ( expression . origin ) !! Ċĉ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Class Reference ( expression : ĠIr Class Reference ): ĠIr Class Reference Ġ= ĠIr Class Reference Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ symbol Rem apper . get Referenced Classifier ( expression . symbol ), Ċĉ ĉ expression . class Type . remap Type () Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Instance Initializer Call ( expression : ĠIr Instance Initializer Call ): ĠIr Instance Initializer Call Ġ= Ċĉ ĉ Ir Instance Initializer Call Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ symbol Rem apper . get Referenced Class ( expression . class Symbol ), Ċĉĉ ĉ expression . type . remap Type () Ċĉ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Type Operator ( expression : ĠIr Type Operator Call ): ĠIr Type Operator Call Ġ= ĠIr Type Operator Call Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ expression . operator , Ċĉ ĉ expression . type Operand . remap Type (), Ċĉ ĉ expression . argument . transform () Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit When ( expression : ĠIr When ): ĠIr When Ġ= ĠIr When Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ map Statement Origin ( expression . origin ), Ċĉ ĉ expression . branches . map Ġ{ Ġit . transform () Ġ} Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Branch ( branch : ĠIr Branch ): ĠIr Branch Ġ= ĠIr Branch Impl ( Ċĉ ĉ branch . start Offset , Ġbranch . end Offset , Ċĉ ĉ branch . condition . transform (), Ċĉ ĉ branch . result . transform () Ċ ĉ ) ĊĉĊ ĉ override Ġfun Ġvisit Else Branch ( branch : ĠIr Else Branch ): ĠIr Else Branch Ġ= ĠIr Else Branch Impl ( Ċĉ ĉ branch . start Offset , Ġbranch . end Offset , Ċĉ ĉ branch . condition . transform (), Ċĉ ĉ branch . result . transform () Ċ ĉ ) ĊĉĊ ĉ private Ġval Ġtransformed Lo ops Ġ= ĠHashMap < Ir Loop , ĠIr Loop >() ĊĉĊ ĉ private Ġfun Ġget Trans formed Loop ( ir Loop : ĠIr Loop ): ĠIr Loop Ġ= Ċĉ ĉ transformed Lo ops . getOrElse ( ir Loop ) Ġ{ Ġget Non Trans formed Loop ( ir Loop ) Ġ} ĊĉĊ ĉ protected Ġopen Ġfun Ġget Non Trans formed Loop ( ir Loop : ĠIr Loop ): ĠIr Loop Ġ= Ċĉ ĉ throw ĠAssertionError (" Outer Ġloop Ġwas Ġnot Ġtransformed : Ġ${ ir Loop . render () }") ĊĉĊ ĉ override Ġfun Ġvisit While Loop ( loop : ĠIr While Loop ): ĠIr While Loop Ġ= ĠIr While Loop Impl ( Ċĉ ĉ loop . start Offset , Ċĉ ĉ loop . end Offset , Ċĉ ĉ loop . type . remap Type (), Ċĉ ĉ map Statement Origin ( loop . origin ) Ċ ĉ ). also Ġ{ Ġnew Loop Ġ-> Ċĉ ĉ transformed Lo ops [ loop ] Ġ= Ġnew Loop Ċĉ ĉ new Loop . label Ġ= Ġloop . label Ċĉ ĉ new Loop . condition Ġ= Ġloop . condition . transform () Ċĉ ĉ new Loop . body Ġ= Ġloop . body ?. transform () Ċ ĉ }. copy Attributes ( loop ) ĊĉĊ ĉ override Ġfun Ġvisit Do While Loop ( loop : ĠIr Do While Loop ): ĠIr Do While Loop Ġ= ĠIr Do While Loop Impl ( Ċĉ ĉ loop . start Offset , Ċĉ ĉ loop . end Offset , Ċĉ ĉ loop . type . remap Type (), Ċĉ ĉ map Statement Origin ( loop . origin ) Ċ ĉ ). also Ġ{ Ġnew Loop Ġ-> Ċĉ ĉ transformed Lo ops [ loop ] Ġ= Ġnew Loop Ċĉ ĉ new Loop . label Ġ= Ġloop . label Ċĉ ĉ new Loop . condition Ġ= Ġloop . condition . transform () Ċĉ ĉ new Loop . body Ġ= Ġloop . body ?. transform () Ċ ĉ }. copy Attributes ( loop ) ĊĉĊ ĉ override Ġfun Ġvisit Break ( jump : ĠIr Break ): ĠIr Break Ġ= ĠIr Break Impl ( Ċĉ ĉ jump . start Offset , Ġjump . end Offset , Ċĉ ĉ jump . type . remap Type (), Ċĉ ĉ get Trans formed Loop ( jump . loop ) Ċ ĉ ). apply Ġ{ Ġlabel Ġ= Ġjump . label Ġ}. copy Attributes ( jump ) ĊĉĊ ĉ override Ġfun Ġvisit Continue ( jump : ĠIr Continue ): ĠIr Continue Ġ= ĠIr Continue Impl ( Ċĉ ĉ jump . start Offset , Ġjump . end Offset , Ċĉ ĉ jump . type . remap Type (), Ċĉ ĉ get Trans formed Loop ( jump . loop ) Ċ ĉ ). apply Ġ{ Ġlabel Ġ= Ġjump . label Ġ}. copy Attributes ( jump ) ĊĉĊ ĉ override Ġfun Ġvisit Try ( a Try : ĠIr Try ): ĠIr Try Ġ= ĠIr Try Impl ( Ċĉ ĉ a Try . start Offset , Ġa Try . end Offset , Ċĉ ĉ a Try . type . remap Type (), Ċĉ ĉ a Try . try Result . transform (), Ċĉ ĉ a Try . cat ches . map Ġ{ Ġit . transform () Ġ}, Ċĉ ĉ a Try . finally Expression ?. transform () Ċ ĉ ). copy Attributes ( a Try ) ĊĉĊ ĉ override Ġfun Ġvisit Catch ( aC atch : ĠIr Catch ): ĠIr Catch Ġ= ĠIr Catch Impl ( Ċĉ ĉ aC atch . start Offset , Ġa Catch . end Offset , Ċĉ ĉ aC atch . catch Parameter . transform (), Ċĉ ĉ aC atch . result . transform () Ċ ĉ ) ĊĉĊ ĉ override Ġfun Ġvisit Return ( expression : ĠIr Return ): ĠIr Return Ġ= ĠIr Return Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ symbol Rem apper . get Referenced Return Target ( expression . return Target Symbol ), Ċĉ ĉ expression . value . transform () Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ private Ġfun ĠSymbol Rem apper . get Referenced Return Target ( return Target : ĠIr Return Target Symbol ) Ġ= Ġwhen ( return Target ) Ġ{ Ċĉ ĉ is ĠIr Function Symbol Ġ-> Ġget Referenced Function ( return Target ) Ċĉ ĉ is ĠIr Return able Block Symbol Ġ-> Ġget Referenced Return able Block ( return Target ) Ċĉ ĉ else Ġ-> Ġthrow ĠAssertionError (" Unexpected Ġreturn Ġtarget : Ġ${ return Target . java Class } Ġ$ return Target ") Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Throw ( expression : ĠIr Throw ): ĠIr Throw Ġ= ĠIr Throw Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ expression . value . transform () Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Dynamic Operator Expression ( expression : ĠIr Dynamic Operator Expression ): ĠIr Dynamic Operator Expression Ġ= Ċĉ ĉ Ir Dynamic Operator Expression Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ expression . operator Ċĉ ĉ ). apply Ġ{ Ċĉĉ ĉ receiver Ġ= Ġexpression . receiver . transform () Ċĉĉ ĉ expression . arguments . map To ( arguments ) Ġ{ Ġit . transform () Ġ} Ċĉ ĉ }. copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Dynamic Member Expression ( expression : ĠIr Dynamic Member Expression ): ĠIr Dynamic Member Expression Ġ= Ċĉ ĉ Ir Dynamic Member Expression Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ expression . member Name , Ċĉĉ ĉ expression . receiver . transform () Ċĉ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Error Declaration ( declaration : ĠIr Error Declaration ): ĠIr Error Declaration Ġ= Ċĉ ĉ declaration . factory . create Error Declaration ( Ċĉĉ ĉ declaration . start Offset , Ċĉĉ ĉ declaration . end Offset , Ċĉĉ ĉ declaration . descriptor Ċĉ ĉ ) ĊĉĊ ĉ override Ġfun Ġvisit Error Expression ( expression : ĠIr Error Expression ): ĠIr Error Expression Ġ= ĠIr Error Expression Impl ( Ċĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉ ĉ expression . type . remap Type (), Ċĉ ĉ expression . description Ċ ĉ ). copy Attributes ( expression ) ĊĉĊ ĉ override Ġfun Ġvisit Error Call Expression ( expression : ĠIr Error Call Expression ): ĠIr Error Call Expression Ġ= Ċĉ ĉ Ir Error Call Expression Impl ( Ċĉĉ ĉ expression . start Offset , Ġexpression . end Offset , Ċĉĉ ĉ expression . type . remap Type (), Ċĉĉ ĉ expression . description Ċĉ ĉ ). apply Ġ{ Ċĉĉ ĉ explicit Receiver Ġ= Ġexpression . explicit Receiver ?. transform () Ċĉĉ ĉ expression . arguments . transform To ( arguments ) Ċĉ ĉ }. copy Attributes ( expression ) Ċ } ĊĊ Ċ @ Opt In ( Obsolete Descriptor Based API :: class ) Ċ open Ġclass ĠDeepCopy Component Symbol Rem apper ( Ċ ĉ val Ġdescriptors Rem apper : ĠDes cript ors Rem apper Ġ= ĠDes cript ors Rem apper . Default Ċ ) Ġ: ĠIr Component Visitor Void , ĠSymbol Rem apper Ġ{ ĊĉĊ ĉ val Ġclasses Ġ= Ġhash Map Of < Ir Class Symbol , ĠIr Class Symbol >() Ċ ĉ val Ġscripts Ġ= Ġhash Map Of < Ir Script Symbol , ĠIr Script Symbol >() Ċ ĉ val Ġconstructors Ġ= Ġhash Map Of < Ir Constructor Symbol , ĠIr Constructor Symbol >() Ċ ĉ val Ġenum Entries Ġ= Ġhash Map Of < Ir Enum Entry Symbol , ĠIr Enum Entry Symbol >() Ċ ĉ val Ġexternal Package Fragments Ġ= Ġhash Map Of < Ir External Package Fragment Symbol , ĠIr External Package Fragment Symbol >() Ċ ĉ val Ġfields Ġ= Ġhash Map Of < Ir Field Symbol , ĠIr Field Symbol >() Ċ ĉ val Ġfiles Ġ= Ġhash Map Of < Ir File Symbol , ĠIr File Symbol >() Ċ ĉ val Ġfunctions Ġ= Ġhash Map Of < Ir Simple Function Symbol , ĠIr Simple Function Symbol >() Ċ ĉ val Ġproperties Ġ= Ġhash Map Of < Ir Property Symbol , ĠIr Property Symbol >() Ċ ĉ val Ġreturn able Blocks Ġ= Ġhash Map Of < Ir Return able Block Symbol , ĠIr Return able Block Symbol >() Ċ ĉ val Ġtype Parameters Ġ= Ġhash Map Of < Ir Type Parameter Symbol , ĠIr Type Parameter Symbol >() Ċ ĉ val Ġvalue Parameters Ġ= Ġhash Map Of < Ir Value Parameter Symbol , ĠIr Value Parameter Symbol >() Ċ ĉ val Ġvariables Ġ= Ġhash Map Of < Ir Variable Symbol , ĠIr Variable Symbol >() Ċ ĉ val Ġlocal Deleg ated Properties Ġ= Ġhash Map Of < Ir Local Deleg ated Property Symbol , ĠIr Local Deleg ated Property Symbol >() Ċ ĉ val Ġtype Aliases Ġ= Ġhash Map Of < Ir Type Alias Symbol , ĠIr Type Alias Symbol >() ĊĉĊ ĉ override Ġfun Ġvisit Element ( element : ĠIr Element ) Ġ{ Ċĉ ĉ element . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ inline Ġfun Ġ< D Ġ: ĠDeclaration Descriptor , ĠB Ġ: ĠIr Symbol Owner , Ġre ified ĠS Ġ: ĠIr Bind able Symbol < D , ĠB >> Ċĉ ĉ remap Symbol ( map : ĠMutable Map < S , ĠS >, Ġowner : ĠB , Ġcreate New Symbol : Ġ( S ) Ġ-> ĠS ): ĠS Ġ{ Ċĉ ĉ val Ġsymbol Ġ= Ġowner . symbol Ġas ĠS Ċĉ ĉ val Ġnew Symbol Ġ= Ġcreate New Symbol ( symbol ) Ċĉ ĉ map [ symbol ] Ġ= Ġnew Symbol Ċĉ ĉ return Ġnew Symbol Ċ ĉ } ĊĉĊ ĉ inline Ġfun Ġ< D Ġ: ĠDeclaration Descriptor , ĠB Ġ: ĠIr Symbol Owner , Ġre ified ĠS Ġ: ĠIr Bind able Symbol < D , ĠB >> Ċĉ ĉ add Rem apped Symbol ( map : ĠMutable Map < S , ĠS >, Ġowner : ĠB , Ġnew Symbol : ĠS ) Ġ{ Ċĉ ĉ val Ġsymbol Ġ= Ġowner . symbol Ġas ĠS Ċĉ ĉ map [ symbol ] Ġ= Ġnew Symbol Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Component ( component : ĠIr Component <* >, Ġdefault : Ġ() Ġ-> ĠUnit ) Ġ{ Ċĉ ĉ if ( component Ġis ĠIr Symbol Owner Component < *, Ġ* >) Ġcomponent . remap Symbol ( this ) Ċĉ ĉ component . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Class ( declaration : ĠIr Class ) Ġ{ Ċĉ ĉ remap Symbol ( classes , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Class Symbol Impl ( descriptors Rem apper . remap Declared Class ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Script ( declaration : ĠIr Script ) Ġ{ Ċĉ ĉ remap Symbol ( scripts , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Script Symbol Impl ( descriptors Rem apper . remap Declared Script ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Constructor ( declaration : ĠIr Constructor ) Ġ{ Ċĉ ĉ remap Symbol ( construct ors , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Constructor Symbol Impl ( descriptors Rem apper . remap Declared Constructor ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Enum Entry ( declaration : ĠIr Enum Entry ) Ġ{ Ċĉ ĉ remap Symbol ( enum Entries , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Enum Entry Symbol Impl ( descriptors Rem apper . remap Declared Enum Entry ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit External Package Fragment ( declaration : ĠIr External Package Fragment ) Ġ{ Ċĉ ĉ remap Symbol ( external Package Fragments , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir External Package Fragment Symbol Impl ( descriptors Rem apper . remap Declared External Package Fragment ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Field ( declaration : ĠIr Field ) Ġ{ Ċĉ ĉ remap Symbol ( fields , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Field Symbol Impl ( descriptors Rem apper . remap Declared Field ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit File ( declaration : ĠIr File ) Ġ{ Ċĉ ĉ remap Symbol ( files , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir File Symbol Impl ( descriptors Rem apper . remap Declared File Package Fragment ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Simple Function ( declaration : ĠIr Simple Function ) Ġ{ Ċĉ ĉ remap Symbol ( functions , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Simple Function Symbol Impl ( descriptors Rem apper . remap Declared Simple Function ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Property ( declaration : ĠIr Property ) Ġ{ Ċĉ ĉ remap Symbol ( properties , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Property Symbol Impl ( descriptors Rem apper . remap Declared Property ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Type Parameter ( declaration : ĠIr Type Parameter ) Ġ{ Ċĉ ĉ remap Symbol ( type Parameters , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Type Parameter Symbol Impl ( descriptors Rem apper . remap Declared Type Parameter ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Value Parameter ( declaration : ĠIr Value Parameter ) Ġ{ Ċĉ ĉ remap Symbol ( value Parameters , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Value Parameter Symbol Impl ( descriptors Rem apper . remap Declared Value Parameter ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Variable ( declaration : ĠIr Variable ) Ġ{ Ċĉ ĉ remap Symbol ( variables , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Variable Symbol Impl ( descriptors Rem apper . remap Declared Variable ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Local Deleg ated Property ( declaration : ĠIr Local Deleg ated Property ) Ġ{ Ċĉ ĉ remap Symbol ( local Deleg ated Properties , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Local Deleg ated Property Symbol Impl ( descriptors Rem apper . remap Declared Local Deleg ated Property ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Type Alias ( declaration : ĠIr Type Alias ) Ġ{ Ċĉ ĉ remap Symbol ( type Aliases , Ġdeclaration ) Ġ{ Ċĉĉ ĉ Ir Type Alias Symbol Impl ( descriptors Rem apper . remap Declared Type Alias ( it . descriptor )) Ċĉ ĉ } Ċĉ ĉ declaration . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġvisit Block ( expression : ĠIr Block ) Ġ{ Ċĉ ĉ if ( expression Ġis ĠIr Return able Block ) Ġ{ Ċĉĉ ĉ remap Symbol ( return able Blocks , Ġexpression ) Ġ{ Ċĉĉĉ ĉ Ir Return able Block Symbol Impl ( expression . descriptor ) Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ expression . accept Children Void ( this ) Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġ< T Ġ: ĠIr Symbol > ĠMap < T , ĠT >. getDeclared ( symbol : ĠT ) Ġ= Ċĉ ĉ getOrElse ( symbol ) Ġ{ Ċĉĉ ĉ throw ĠIllegalArgumentException (" Non - rem apped Ġsymbol Ġ$ symbol ") Ċĉ ĉ } ĊĉĊ ĉ private Ġfun Ġ< T Ġ: ĠIr Symbol > ĠMap < T , ĠT >. get Referenced ( symbol : ĠT ) Ġ= Ċĉ ĉ getOrElse ( symbol ) Ġ{ Ġsymbol Ġ} ĊĉĊ ĉ override Ġfun Ġget Declared Class ( symbol : ĠIr Class Symbol ): ĠIr Class Symbol Ġ= Ġclasses . getDeclared ( symbol ) Ċ ĉ override Ġfun Ġget Declared Script ( symbol : ĠIr Script Symbol ): ĠIr Script Symbol Ġ= Ġscripts . getDeclared ( symbol ) Ċ ĉ override Ġfun Ġget Declared Function ( symbol : ĠIr Simple Function Symbol ): ĠIr Simple Function Symbol Ġ= Ċĉ ĉ functions . getDeclared ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Declared Property ( symbol : ĠIr Property Symbol ): ĠIr Property Symbol Ġ= Ġproperties . getDeclared ( symbol ) Ċ ĉ override Ġfun Ġget Declared Field ( symbol : ĠIr Field Symbol ): ĠIr Field Symbol Ġ= Ġfields . getDeclared ( symbol ) Ċ ĉ override Ġfun Ġget Declared File ( symbol : ĠIr File Symbol ): ĠIr File Symbol Ġ= Ġfiles . getDeclared ( symbol ) Ċ ĉ override Ġfun Ġget Declared Constructor ( symbol : ĠIr Constructor Symbol ): ĠIr Constructor Symbol Ġ= Ċĉ ĉ construct ors . getDeclared ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Declared Enum Entry ( symbol : ĠIr Enum Entry Symbol ): ĠIr Enum Entry Symbol Ġ= Ġenum Entries . getDeclared ( symbol ) Ċ ĉ override Ġfun Ġget Declared External Package Fragment ( symbol : ĠIr External Package Fragment Symbol ): ĠIr External Package Fragment Symbol Ġ= Ċĉ ĉ external Package Fragments . getDeclared ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Declared Variable ( symbol : ĠIr Variable Symbol ): ĠIr Variable Symbol Ġ= Ġvariables . getDeclared ( symbol ) Ċ ĉ override Ġfun Ġget Declared Type Parameter ( symbol : ĠIr Type Parameter Symbol ): ĠIr Type Parameter Symbol Ġ= Ċĉ ĉ type Parameters . getDeclared ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Declared Value Parameter ( symbol : ĠIr Value Parameter Symbol ): ĠIr Value Parameter Symbol Ġ= Ċĉ ĉ value Parameters . getDeclared ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Declared Local Deleg ated Property ( symbol : ĠIr Local Deleg ated Property Symbol ): ĠIr Local Deleg ated Property Symbol Ġ= Ċĉ ĉ local Deleg ated Properties . getDeclared ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Declared Type Alias ( symbol : ĠIr Type Alias Symbol ): ĠIr Type Alias Symbol Ġ= Ġtype Aliases . getDeclared ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Referenced Class ( symbol : ĠIr Class Symbol ): ĠIr Class Symbol Ġ= Ġclasses . get Referenced ( symbol ) Ċ ĉ override Ġfun Ġget Referenced Script ( symbol : ĠIr Script Symbol ): ĠIr Script Symbol Ġ= Ġscripts . get Referenced ( symbol ) Ċ ĉ override Ġfun Ġget Referenced Class OrNull ( symbol : ĠIr Class Symbol ?): ĠIr Class Symbol ? Ġ= Ċĉ ĉ symbol ?. let Ġ{ Ġclasses . get Referenced ( it ) Ġ} ĊĉĊ ĉ override Ġfun Ġget Referenced Enum Entry ( symbol : ĠIr Enum Entry Symbol ): ĠIr Enum Entry Symbol Ġ= Ċĉ ĉ enum Entries . get Referenced ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Referenced Variable ( symbol : ĠIr Variable Symbol ): ĠIr Variable Symbol Ġ= Ġvariables . get Referenced ( symbol ) Ċ ĉ override Ġfun Ġget Referenced Local Deleg ated Property ( symbol : ĠIr Local Deleg ated Property Symbol ): ĠIr Local Deleg ated Property Symbol Ġ= Ċĉ ĉ local Deleg ated Properties . get Referenced ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Referenced Field ( symbol : ĠIr Field Symbol ): ĠIr Field Symbol Ġ= Ġfields . get Referenced ( symbol ) Ċ ĉ override Ġfun Ġget Referenced Constructor ( symbol : ĠIr Constructor Symbol ): ĠIr Constructor Symbol Ġ= Ċĉ ĉ construct ors . get Referenced ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Referenced Simple Function ( symbol : ĠIr Simple Function Symbol ): ĠIr Simple Function Symbol Ġ= Ċĉ ĉ functions . get Referenced ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Referenced Property ( symbol : ĠIr Property Symbol ): ĠIr Property Symbol Ġ= Ġproperties . get Referenced ( symbol ) Ċ ĉ override Ġfun Ġget Referenced Value ( symbol : ĠIr Value Symbol ): ĠIr Value Symbol Ġ= Ċĉ ĉ when ( symbol ) Ġ{ Ċĉĉ ĉ is ĠIr Value Parameter Symbol Ġ-> Ġvalue Parameters . get Referenced ( symbol ) Ċĉĉ ĉ is ĠIr Variable Symbol Ġ-> Ġvariables . get Referenced ( symbol ) Ċĉĉ ĉ else Ġ-> Ġthrow ĠIllegalArgumentException (" Unexpected Ġsymbol Ġ$ symbol ") Ċĉ ĉ } ĊĉĊ ĉ override Ġfun Ġget Referenced Function ( symbol : ĠIr Function Symbol ): ĠIr Function Symbol Ġ= Ċĉ ĉ when ( symbol ) Ġ{ Ċĉĉ ĉ is ĠIr Simple Function Symbol Ġ-> Ġfunctions . get Referenced ( symbol ) Ċĉĉ ĉ is ĠIr Constructor Symbol Ġ-> Ġconstructors . get Referenced ( symbol ) Ċĉĉ ĉ else Ġ-> Ġthrow ĠIllegalArgumentException (" Unexpected Ġsymbol Ġ$ symbol ") Ċĉ ĉ } ĊĉĊ ĉ override Ġfun Ġget Referenced Return able Block ( symbol : ĠIr Return able Block Symbol ): ĠIr Return able Block Symbol Ġ= Ċĉ ĉ return able Blocks . get Referenced ( symbol ) ĊĉĊ ĉ override Ġfun Ġget Referenced Classifier ( symbol : ĠIr Classifier Symbol ): ĠIr Classifier Symbol Ġ= Ċĉ ĉ when ( symbol ) Ġ{ Ċĉĉ ĉ is ĠIr Class Symbol Ġ-> Ġclasses . get Referenced ( symbol ) Ċĉĉ ĉ is ĠIr Script Symbol Ġ-> Ġscripts . get Referenced ( symbol ) Ċĉĉ ĉ is ĠIr Type Parameter Symbol Ġ-> Ġtype Parameters . get Referenced ( symbol ) Ċĉĉ ĉ else Ġ-> Ġthrow ĠIllegalArgumentException (" Unexpected Ġsymbol Ġ$ symbol ") Ċĉ ĉ } ĊĉĊ ĉ override Ġfun Ġget Referenced Type Alias ( symbol : ĠIr Type Alias Symbol ): ĠIr Type Alias Symbol Ġ= Ċĉ ĉ type Aliases . get Referenced ( symbol ) Ċ } Ċ