/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 Ġ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 . ir . backend . js . lower . calls Ċ Ċ import Ġorg . jetbrains . kotlin . backend . common . File Lower ing Pass Ċ import Ġorg . jetbrains . kotlin . ir . Ir Statement Ċ import Ġorg . jetbrains . kotlin . ir . backend . js . Js Ir Backend Context Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir File Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Function Ċ import Ġorg . jetbrains . kotlin . ir . expressions . Ir Expression Ċ import Ġorg . jetbrains . kotlin . ir . expressions . Ir Function Access Expression Ċ import Ġorg . jetbrains . kotlin . ir . util . has Annotation Ċ import Ġorg . jetbrains . kotlin . ir . visitor s . Ir Element Transformer Void Ċ import Ġorg . jetbrains . kotlin . ir . visitor s . transform Children Void Ċ Ċ class ĠCalls Lower ing ( val Ġcontext : ĠJs Ir Backend Context ) Ġ: ĠFile Lower ing Pass Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtransform ers Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠNumber Operator Calls Transformer ( context ), ĊĠĠĠĠĠĠĠ ĠNumber Conversion Calls Transformer ( context ), ĊĠĠĠĠĠĠĠ ĠE quality And Comparison Calls Transformer ( context ), ĊĠĠĠĠĠĠĠ ĠPrimitive Container Member Call Transformer ( context ), ĊĠĠĠĠĠĠĠ ĠMethods Of Any Calls Transformer ( context ), ĊĠĠĠĠĠĠĠ ĠReflection Calls Transformer ( context ), ĊĠĠĠĠĠĠĠ ĠEnum Intr insics Transformer ( context ), ĊĠĠĠĠĠĠĠ ĠException Helper Calls Transformer ( context ), ĊĠĠĠĠĠĠĠ ĠBuilt In Constructor Calls ( context ), ĊĠĠĠĠĠĠĠ ĠJson Intr insics ( context ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġlower ( ir File : ĠIr File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġir File . transform Children Void ( object Ġ: ĠIr Element Transformer Void () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Function ( declaration : ĠIr Function ): ĠIr Statement Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( declaration . has Annotation ( context . intr insics . do Not Intr ins ify Annotation Symbol )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdeclaration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Function ( declaration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Function Access ( expression : ĠIr Function Access Expression ): ĠIr Expression Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġsuper . visit Function Access ( expression ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( call Ġis ĠIr Function Access Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( transformer Ġin Ġtransform ers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Call Ġ= Ġtransformer . transform Function Access ( call ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Call Ġ!== Ġcall ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Call ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcall ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠCalls Transformer Ġ{ ĊĠĠĠ Ġfun Ġtransform Function Access ( call : ĠIr Function Access Expression ): ĠIr Expression Ċ } Ċ