/* Ċ Ġ* Ġ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 . native . interop . gen Ċ Ċ import Ġorg . jetbrains . kotlin . native . interop . indexer .* Ċ Ċ val ĠEnum Def . is Anonymous : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġspell ing . contains ("( anonymous Ġ") Ġ// ĠTODO : Ġit Ġis Ġa Ġhack Ċ Ċ val ĠStruct Decl . is Anonymous : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġspell ing . contains ("( anonymous Ġ") Ġ// ĠTODO : Ġit Ġis Ġa Ġhack Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġexpression Ġwhich Ġcould Ġbe Ġused Ġfor Ġthis Ġtype Ġin ĠC Ġcode . Ċ Ġ* ĠNote : Ġthe Ġresulting Ġstring Ġdoesn 't Ġexactly Ġrepresent Ġthis Ġtype , Ġbut Ġit Ġis Ġenough Ġfor Ġcurrent Ġpurposes . Ċ Ġ* Ċ Ġ* ĠTODO : Ġuse Ġlib clang Ġto Ġimplement ? Ċ Ġ*/ Ċ fun ĠType . getString Representation (): ĠString Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠVoid Type Ġ-> Ġ" void " ĊĠĠĠ Ġis ĠChar Type Ġ-> Ġ" char " ĊĠĠĠ Ġis ĠBool Type Ġ-> Ġ" BOOL " ĊĠĠĠ Ġis ĠInteger Type Ġ-> Ġthis . spell ing ĊĠĠĠ Ġis ĠFloating Type Ġ-> Ġthis . spell ing ĊĊĠĠĠ Ġis ĠPointer Type , Ġis ĠArray Type Ġ-> Ġ" void *" ĊĊĠĠĠ Ġis ĠRecord Type Ġ-> Ġthis . decl . spell ing ĊĊĠĠĠ Ġis ĠEnum Type Ġ-> Ġif Ġ( this . def . is Anonymous ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . def . base Type . getString Representation () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . def . spell ing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġis ĠType def Ġ-> Ġthis . def . ali ased . getString Representation () ĊĊĠĠĠ Ġis ĠObj CP o inter Ġ-> Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠObj C IdType Ġ-> Ġ" id $ protocol Qualifier " ĊĠĠĠĠĠĠĠ Ġis ĠObj C Class Pointer Ġ-> Ġ" Class $ protocol Qualifier " ĊĠĠĠĠĠĠĠ Ġis ĠObj C Object Pointer Ġ-> Ġ"${ def . name }$ protocol Qualifier *" ĊĠĠĠĠĠĠĠ Ġis ĠObj C Instance Type Ġ-> ĠTODO ( this . toString ()) Ġ// ĠMust Ġhave Ġalready Ġbeen Ġhandled . ĊĠĠĠĠĠĠĠ Ġis ĠObj C Block Pointer Ġ-> Ġ" id " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġelse Ġ-> Ġthrow Ġkotlin . NotImplemented Error () Ċ } Ċ Ċ fun Ġget Pointer TypeString Representation ( point ee : ĠType ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġ( getString Representation Of Point ee ( point ee ) Ġ?: Ġ" void ") Ġ+ Ġ"*" Ċ Ċ private Ġfun ĠgetString Representation Of Point ee ( type : ĠType ): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġun wrapped Ġ= Ġtype . unwrap Type defs () ĊĊĠĠĠ Ġreturn Ġwhen Ġ( un wrapped ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠPrimitive Type Ġ-> Ġun wrapped . getString Representation () ĊĠĠĠĠĠĠĠ Ġis ĠPointer Type Ġ-> ĠgetString Representation Of Point ee ( un wrapped . point ee Type )?. plus ("* ") ĊĠĠĠĠĠĠĠ Ġis ĠRecord Type Ġ-> Ġif Ġ( un wrapped . decl . is Anonymous Ġ|| Ġun wrapped . decl . spell ing Ġ== Ġ" struct Ġ__ va _ list _ tag ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun wrapped . decl . spell ing ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠObj C Qualified Pointer . protocol Qualifier : ĠString ĊĠĠĠ Ġget () Ġ= Ġif Ġ( this . protocols . isEmpty ()) Ġ"" Ġelse Ġ" Ġ< ${ protocols . join ToString Ġ{ Ġit . name Ġ}} >" Ċ Ċ fun Ġblock TypeString Representation ( type : ĠObj C Block Pointer ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġappend ( type . returnType . getString Representation ()) ĊĠĠĠĠĠĠĠ Ġappend ("( ^ )") ĊĠĠĠĠĠĠĠ Ġappend (" (" ) ĊĠĠĠĠĠĠĠ Ġval Ġblock Parameters Ġ= Ġif Ġ( type . parameter Types . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" void " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype . parameter Types . join ToString Ġ{ Ġit . getString Representation () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġappend ( block Parameters ) ĊĠĠĠĠĠĠĠ Ġappend (" )") ĊĠĠĠ Ġ} Ċ } Ċ