/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 Ġ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 Module Phase Ċ import Ġorg . jetbrains . kotlin . backend . jvm . Jvm Backend Context Ċ import Ġorg . jetbrains . kotlin . backend . jvm . codegen . is Inline Ir Expression Ċ import Ġorg . jetbrains . kotlin . ir . Ir Element Ċ import Ġorg . jetbrains . kotlin . ir . Ir Statement Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Class Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir File Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Function Ċ import Ġorg . jetbrains . kotlin . ir . expressions . Ir Function Reference Ċ import Ġorg . jetbrains . kotlin . ir . visitor s .* Ċ Ċ internal Ġval Ġremove Declarations That Would Be In lined Ġ= Ġmake Ir Module Phase ( ĊĠĠĠ Ġ:: Remove Declarations That Would Be In lined Lower ing , ĊĠĠĠ Ġname Ġ= Ġ" Remove In lined Declarations ", ĊĠĠĠ Ġdescription Ġ= Ġ" Rename Ġdeclaration Ġthat Ġshould Ġbe Ġin lined " Ċ ) Ċ Ċ // ĠRemoves Ġall Ġfunctions Ġwhich Ġare Ġonly Ġused Ġas Ġarguments Ġto Ġinline Ġfunctions . ĠIt 's Ċ // Ġimportant Ġthat Ġthis Ġphase Ġruns Ġright Ġbefore Ġcodegen , Ġsince Ġwe Ġneed Ġthe Ġbodies Ġof Ġlamb das Ġto Ċ // Ġbe Ġlower ed Ġfor Ġinline Ġcodegen . ĠCon verse ly , Ġsince Ġthis Ġphase Ġruns Ġright Ġbefore Ġcodegen Ġwe Ġcan Ċ // Ġassume Ġthat Ġall Ġremaining Ġfunction Ġreferences Ġare Ġonly Ġused Ġas Ġarguments Ġto Ġinline Ġfunctions Ġ- Ċ // Ġotherwise Ġthey Ġwould Ġhave Ġbeen Ġlower ed . Ċ private Ġclass ĠRemove Declarations That Would Be In lined Lower ing ( val Ġcontext : ĠJ vm Backend Context ) Ġ: ĠFile Lower ing Pass Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġlower ( ir File : ĠIr File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlower ed L amb das ToDelete Ġ= Ġmutable Set Of < Ir Function >() ĊĊĠĠĠĠĠĠĠ Ġir File . accept Void ( object Ġ: ĠIr Element Visitor Void Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Element ( element : ĠIr Element ) Ġ= Ġelement . accept Children Void ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Function Reference ( expression : ĠIr Function Reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expression . origin . is Inline Ir Expression ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower ed L amb das ToDelete . add ( expression . symbol . owner ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression . accept Children Void ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġir File . transform Children Void ( object Ġ: ĠIr Element Transformer Void () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Class ( declaration : ĠIr Class ): ĠIr Statement Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Class ( declaration ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration . declarations . removeAll ( lower ed L amb das ToDelete ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ