/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . backend . jvm . lower Ċ Ċ import Ġorg . jetbrains . kotlin . backend . common . File Lower ing Pass Ċ import Ġorg . jetbrains . kotlin . backend . common . ph aser . make Ir File Phase Ċ import Ġorg . jetbrains . kotlin . backend . jvm . Jvm Backend Context Ċ import Ġorg . jetbrains . kotlin . config . Jvm Target Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir File Ċ import Ġorg . jetbrains . kotlin . ir . expressions . Ir Call Ċ import Ġorg . jetbrains . kotlin . ir . expressions . Ir Expression Ċ import Ġorg . jetbrains . kotlin . ir . expressions . impl . Ir Call Impl Ċ import Ġorg . jetbrains . kotlin . ir . symbols . Ir Function Symbol Ċ import Ġorg . jetbrains . kotlin . ir . types . Ir Type Ċ import Ġorg . jetbrains . kotlin . ir . util . fq Name For Ir Serialization Ċ import Ġorg . jetbrains . kotlin . ir . visitor s . Ir Element Transformer Void Ċ Ċ internal Ġval Ġj vm Standard Library Built Ins Phase Ġ= Ġmake Ir File Phase ( ĊĠĠĠ Ġ:: Jvm Standard Library Built Ins Lower ing , ĊĠĠĠ Ġname Ġ= Ġ" Jvm Standard Library Built Ins Lower ing ", ĊĠĠĠ Ġdescription Ġ= Ġ" Use ĠJava ĠStandard ĠLibrary Ġimplementations Ġof Ġbuilt - ins " Ċ ) Ċ Ċ class ĠJ vm Standard Library Built Ins Lower ing ( val Ġcontext : ĠJ vm Backend Context ) Ġ: ĠFile Lower ing Pass Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġlower ( ir File : ĠIr File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context . state . target Ġ< ĠJ vm Target . JVM _ 1 _ 8 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġtransformer Ġ= Ġobject Ġ: ĠIr Element Transformer Void () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Call ( expression : ĠIr Call ): ĠIr Expression Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression . transform Children ( this , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Class Ġ= Ġexpression . symbol . owner . parent . fq Name For Ir Serialization . asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Name Ġ= Ġexpression . symbol . owner . name . asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ vm 8 built In Replacement s [ parent Class Ġto Ġfunction Name ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexpression . replace With Call To ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexpression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġir File . transform Children ( transformer , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠJ vm 8 built In Replacement s Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ(" kotlin . UInt " Ġto Ġ" compareTo ") Ġto Ġcontext . ir . symbols . compare Unsigned Int , ĊĠĠĠĠĠĠĠ Ġ(" kotlin . UInt " Ġto Ġ" div ") Ġto Ġcontext . ir . symbols . divide Unsigned Int , ĊĠĠĠĠĠĠĠ Ġ(" kotlin . UInt " Ġto Ġ" rem ") Ġto Ġcontext . ir . symbols . remainder Unsigned Int , ĊĠĠĠĠĠĠĠ Ġ(" kotlin . UInt " Ġto Ġ" toString ") Ġto Ġcontext . ir . symbols . to Unsigned String Int , ĊĠĠĠĠĠĠĠ Ġ(" kotlin . UL ong " Ġto Ġ" compareTo ") Ġto Ġcontext . ir . symbols . compare Unsigned Long , ĊĠĠĠĠĠĠĠ Ġ(" kotlin . UL ong " Ġto Ġ" div ") Ġto Ġcontext . ir . symbols . divide Unsigned Long , ĊĠĠĠĠĠĠĠ Ġ(" kotlin . UL ong " Ġto Ġ" rem ") Ġto Ġcontext . ir . symbols . remainder Unsigned Long , ĊĠĠĠĠĠĠĠ Ġ(" kotlin . UL ong " Ġto Ġ" toString ") Ġto Ġcontext . ir . symbols . to Unsigned String Long ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠOriginal s Ġare Ġso Ġfar Ġonly Ġinstance Ġmethods , Ġand Ġthe Ġreplacement s Ġare ĊĠĠĠ Ġ// Ġstatic s , Ġso Ġwe Ġcopy Ġdispatch Ġreceiv ers Ġto Ġa Ġvalue Ġargument Ġif Ġneeded . ĊĠĠĠ Ġprivate Ġfun ĠIr Call . replace With Call To ( replacement : ĠIr Function Symbol ) Ġ= ĊĠĠĠĠĠĠĠ ĠIr Call Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplacement ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġnew Call Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvalue Argument Offset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dispatch Receiver ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Call . put Value Argument ( value Argument Offset , Ġit . coerce To ( replacement . owner . value Parameters [ value Argument Offset ]. type )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Argument Offset ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġvalue Arguments Count ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Call . put Value Argument ( it Ġ+ Ġvalue Argument Offset , ĠgetValue Argument ( it ) !!. coerce To ( replacement . owner . value Parameters [ it ]. type )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠIr Expression . coerce To ( target : ĠIr Type ): ĠIr Expression Ġ= ĊĠĠĠĠĠĠĠ ĠIr Call Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . ir . symbols . unsafe Co erce Intr insic ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġcall Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . put Type Argument ( 0 , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . put Type Argument ( 1 , Ġtarget ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . put Value Argument ( 0 , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ