/* Ċ Ġ* Ġ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 . types . impl Ċ Ċ import Ġorg . jetbrains . kotlin . ir . expressions . Ir Constructor Call Ċ import Ġorg . jetbrains . kotlin . ir . types .* Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . kotlin . types . Variance Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . safe As Ċ Ċ abstract Ġclass ĠIr Type Base ( val Ġkotlin Type : ĠKotlin Type ?) Ġ: ĠIr Type , ĠIr Type Projection Ġ{ ĊĠĠĠ Ġoverride Ġval Ġtype : ĠIr Type Ġget () Ġ= Ġthis Ċ } Ċ Ċ class ĠIr ErrorType Impl ( ĊĠĠĠ Ġkotlin Type : ĠKotlin Type ?, ĊĠĠĠ Ġoverride Ġval Ġannotations : ĠList < Ir Constructor Call >, ĊĠĠĠ Ġoverride Ġval Ġvariance : ĠVari ance , Ċ ) Ġ: ĠIr Type Base ( kotlin Type ), ĠIr ErrorType Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġother Ġis ĠIr ErrorType Impl ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= ĠIr ErrorType Impl :: class . java . hashCode () Ċ } Ċ Ċ class ĠIr Dynamic Type Impl ( ĊĠĠĠ Ġkotlin Type : ĠKotlin Type ?, ĊĠĠĠ Ġoverride Ġval Ġannotations : ĠList < Ir Constructor Call >, ĊĠĠĠ Ġoverride Ġval Ġvariance : ĠVari ance , Ċ ) Ġ: ĠIr Type Base ( kotlin Type ), ĠIr Dynamic Type Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġother Ġis ĠIr Dynamic Type Impl ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= ĠIr Dynamic Type Impl :: class . java . hashCode () Ċ } ĊĊ Ċ val ĠIr Type . original Kotlin Type : ĠKotlin Type ? ĊĠĠĠ Ġget () Ġ= Ġsafe As < Ir Type Base >() ?. kotlin Type ĊĊ Ċ object ĠIr Star Projection Impl Ġ: ĠIr Star Projection Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġthis Ġ=== Ġother ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= ĠSystem . identity HashCode ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġinstance Ġwhich Ġshould Ġbe Ġused Ġwhen Ġcreating Ġan ĠIR Ġelement Ġwhose Ġtype Ġcannot Ġbe Ġdetermined Ġat Ġthe Ġmoment Ġof Ġcreation . Ċ Ġ* Ċ Ġ* ĠExample : Ġwhen Ġtrans lating Ġgeneric Ġfunctions Ġin Ġpsi 2 ir , Ġwe 're Ġcreating Ġan ĠIr Function Ġfirst , Ġthen Ġadding ĠIr Type Parameter Ġinstances Ġto Ġit , Ċ Ġ* Ġand Ġonly Ġthen Ġtrans lating Ġthe Ġfunction 's Ġreturn Ġtype Ġwith Ġrespect Ġto Ġthose Ġcreated Ġtype Ġparameters . Ċ Ġ* Ċ Ġ* ĠInstead Ġof Ġusing Ġthis Ġspecial Ġinstance , Ġwe Ġcould Ġjust Ġmake ĠIr Function / Ir Constructor Ġconstructors Ġallow Ġto Ġaccept Ġno Ġreturn Ġtype , Ċ Ġ* Ġhowever Ġthis Ġcould Ġlead Ġto Ġa Ġsituation Ġwhere Ġwe Ġforget Ġto Ġset Ġreturn Ġtype Ġsometimes . ĠThis Ġwould Ġresult Ġin Ġcrashes Ġat Ġunexpected Ġmoment s , Ċ Ġ* Ġespecially Ġin ĠKotlin / JS Ġwhere Ġfunction Ġreturn Ġtypes Ġare Ġnot Ġpresent Ġin Ġthe Ġresulting Ġbinary Ġfiles . Ċ Ġ*/ Ċ object ĠIr Un initialized Type Ġ: ĠIr Type Ġ{ ĊĠĠĠ Ġoverride Ġval Ġannotations : ĠList < Ir Constructor Call > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġthis Ġ=== Ġother ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= ĠSystem . identity HashCode ( this ) Ċ } Ċ