/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . backend . common . ir Ċ Ċ import Ġorg . jetbrains . kotlin . backend . common . Dump Ir Tree With Descriptors Visitor Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Annotations Ċ import Ġorg . jetbrains . kotlin . descriptors . impl . Class Constructor Descriptor Impl Ċ import Ġorg . jetbrains . kotlin . ir . Ir Element Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Class Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Constructor Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Declaration Origin Ċ import Ġorg . jetbrains . kotlin . ir . declarations . impl . Ir Constructor Impl Ċ import Ġorg . jetbrains . kotlin . ir . declarations . impl . Ir Value Parameter Impl Ċ import Ġorg . jetbrains . kotlin . ir . descriptors . Ir Built Ins Ċ import Ġorg . jetbrains . kotlin . ir . expressions . impl . Ir Block Body Impl Ċ import Ġorg . jetbrains . kotlin . ir . expressions . impl .* Ċ import Ġorg . jetbrains . kotlin . ir . util . Dump Ir Tree Visitor Ċ import Ġorg . jetbrains . kotlin . ir . util . default Type Ċ import Ġjava . io . String Writer ĊĊ Ċ fun Ġir 2 string ( ir : ĠIr Element ?): ĠString Ġ= Ġir 2 string Whole ( ir ). take While Ġ{ Ġit Ġ!= Ġ'\ n ' Ġ} Ċ Ċ fun Ġir 2 string Whole ( ir : ĠIr Element ?, Ġwith Descriptors : ĠBoolean Ġ= Ġfalse ): ĠString Ġ{ ĊĠĠĠ Ġval Ġstr Writer Ġ= ĠString Writer () ĊĊĠĠĠ Ġif Ġ( with Descriptors ) ĊĠĠĠĠĠĠĠ Ġir ?. accept ( Dump Ir Tree With Descriptors Visitor ( str Writer ), Ġ"") ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġir ?. accept ( Dump Ir Tree Visitor ( str Writer ), Ġ"") ĊĠĠĠ Ġreturn Ġstr Writer . toString () Ċ } Ċ Ċ fun ĠDeclaration Descriptor . create Fake Override Descriptor ( owner : ĠClass Descriptor ): ĠDeclaration Descriptor ? Ġ{ ĊĠĠĠ Ġ// ĠWe Ġneed Ġto Ġcopy Ġdescriptors Ġfor Ġv table Ġbuilding , Ġthus Ġtake Ġonly Ġfunctions Ġand Ġproperties . ĊĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠCallable Member Descriptor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġnew Owner ĠĠĠĠĠ Ġ= Ġ*/ Ġowner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġmod ality ĠĠĠĠĠ Ġ= Ġ*/ Ġmod ality , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġvisibility ĠĠĠ Ġ= Ġ*/ Ġvisibility , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġkind ĠĠĠĠĠĠĠĠĠ Ġ= Ġ*/ ĠCallable Member Descriptor . Kind . FA KE _ OVERRIDE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġcopy Overrides Ġ= Ġ*/ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden Descriptors Ġ+= Ġthis @ create Fake Override Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠFunction Descriptor . create Over ridden Descriptor ( owner : ĠClass Descriptor , Ġfinal : ĠBoolean Ġ= Ġtrue ): ĠFunction Descriptor Ġ{ ĊĠĠĠ Ġreturn Ġthis . new Copy Builder () ĊĠĠĠĠĠĠĠ Ġ. set Owner ( owner ) ĊĠĠĠĠĠĠĠ Ġ. set Copy Overrides ( true ) ĊĠĠĠĠĠĠĠ Ġ. set Modal ity ( if Ġ( final ) ĠMod ality . FINAL Ġelse ĠMod ality . OPEN ) ĊĠĠĠĠĠĠĠ Ġ. set Dispatch Receiver Parameter ( owner . this As Receiver Parameter ) ĊĠĠĠĠĠĠĠ Ġ. build () !!. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġoverridden Descriptors Ġ+= Ġthis @ create Over ridden Descriptor ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠIr Class . add Simple Delegating Constructor ( ĊĠĠĠĠĠĠĠ Ġsuper Constructor : ĠIr Constructor , ĊĠĠĠĠĠĠĠ Ġir Built Ins : ĠIr Built Ins , ĊĠĠĠĠĠĠĠ Ġorigin : ĠIr Declaration Origin , ĊĠĠĠĠĠĠĠ Ġis Primary : ĠBoolean Ġ= Ġfalse Ċ ): ĠIr Constructor Ġ{ ĊĠĠĠ Ġval Ġsuper Constructor Descriptor Ġ= Ġsuper Constructor . descriptor ĊĠĠĠ Ġval Ġconstructor Descriptor Ġ= ĠClass Constructor Descriptor Impl . create Synt hesized ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġcontaining Declaration Ġ= Ġ*/ Ġthis . descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġannotations ĠĠĠĠĠĠĠĠĠĠ Ġ= Ġ*/ ĠAn notations . EMPTY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġis Primary ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġ*/ Ġis Primary , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġsource ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġ*/ ĠSource Element . NO _ SOURCE ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġvalue Parameters Ġ= Ġsuper Constructor . value Parameters . map Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġit . descriptor Ġas ĠValue Parameter Descriptor ĊĠĠĠĠĠĠĠ Ġval Ġnew Descriptor Ġ= Ġdescriptor . copy ( constructor Descriptor , Ġdescriptor . name , Ġdescriptor . index ) ĊĠĠĠĠĠĠĠ ĠIr Value Parameter Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIr Declaration Origin . DEFINED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . var arg ElementType ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġconstructor Descriptor . initialize ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Parameters . map Ġ{ Ġit . descriptor Ġas ĠValue Parameter Descriptor Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Constructor Descriptor . visibility ĊĠĠĠ Ġ) ĊĠĠĠ Ġconstructor Descriptor . returnType Ġ= Ġsuper Constructor Descriptor . returnType ĊĊĠĠĠ Ġreturn ĠIr Constructor Impl ( start Offset , Ġend Offset , Ġorigin , Ġconstructor Descriptor ). also Ġ{ Ġconstructor Ġ-> ĊĊĠĠĠĠĠĠĠ Ġassert ( super Constructor . dispatch Receiver Parameter Ġ== Ġnull ) Ġ// ĠInner Ġclasses Ġaren 't Ġsupported . ĊĊĠĠĠĠĠĠĠ Ġconstructor . value Parameters Ġ+= Ġvalue Parameters ĊĠĠĠĠĠĠĠ Ġconstructor . returnType Ġ= Ġthis . default Type ĊĊĠĠĠĠĠĠĠ Ġconstructor . body Ġ= ĠIr Block Body Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset , Ġend Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIr Delegating Constructor Call Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset , Ġend Offset , Ġir Built Ins . unit Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Constructor . symbol , Ġsuper Constructor . descriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor . value Parameters . forEach Indexed Ġ{ Ġidx , Ġparameter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Value Argument ( idx , ĠIr GetValue Impl ( start Offset , Ġend Offset , Ġparameter . type , Ġparameter . symbol )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIr Instance Initializer Call Impl ( start Offset , Ġend Offset , Ġthis . symbol , Ġir Built Ins . unit Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġconstructor . parent Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġthis . declarations . add ( constructor ) ĊĠĠĠ Ġ} Ċ } Ċ