/** Ċ Ġ* ĠĠĠĠĠ Ġfire fly - compiler Ġ- ĠFire fly ĠLanguage Ġparser Ġand Ġcompiler . Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) ĠJon athan xD Ġ< https :// github . com / Jon athan xD /> Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) Ġcontributors Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* ĠĠĠĠĠ Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* ĠĠĠĠĠ Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* ĠĠĠĠĠ Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* ĠĠĠĠĠ Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* ĠĠĠĠĠ Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* ĠĠĠĠĠ Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠĠĠĠĠ ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠĠĠĠĠ ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠĠĠĠĠ ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠĠĠĠĠ ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠĠĠĠĠ ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġio . github . fire fly lang . compiler . ast Ċ Ċ import Ġcom . github . jon athan xd . i utils . data . Typed Data Ċ import Ġcom . github . jon athan xd . i utils . kt . set Ċ import Ġcom . github . jon athan xd . k ores . Mutable Instructions Ċ import Ġcom . github . jon athan xd . k ores . Types Ċ import Ġcom . github . jon athan xd . k ores . base .* Ċ import Ġcom . github . jon athan xd . k ores . type . type Of Ċ import Ġio . github . fire fly lang . compiler .* Ċ Ċ fun Ġcreate Type Declaration ( unit : ĠFire fly Unit , Ġdata : ĠTyped Data ): ĠType Declaration Ġ= ĊĠĠĠ Ġif Ġ( unit . unit Type Ġ== ĠUnit Type . UNIT ) Ġ{ ĊĠĠĠĠĠĠĠ ĠClass Declaration . Builder . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. qualified Name ( unit . qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. modifiers ( K ores Modifier . PUBLIC , ĠK ores Modifier . FINAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. construct ors ( create Construct ors ( unit , Ġdata )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. methods ( create Methods ( unit , Ġdata )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Unit Ġtype Ġ${ unit . unit Type } Ġnot Ġsupported Ġyet .") ĊĠĠĠ Ġ} Ċ Ċ fun Ġcreate Construct ors ( unit : ĠFire fly Unit , Ġdata : ĠTyped Data ): ĠList < Constructor Declaration > Ġ= ĊĠĠĠ Ġif Ġ( unit . unit Type Ġ== ĠUnit Type . UNIT ) Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstructor Declaration . Builder . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. modifiers ( K ores Modifier . PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠ Ġ} Ċ Ċ fun Ġcreate Methods ( unit : ĠFire fly Unit , Ġdata : ĠTyped Data ): ĠList < Method Declaration > Ġ= ĊĠĠĠ Ġif Ġ( unit . unit Type Ġ== ĠUnit Type . UNIT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable ListOf ( create Entry point Method ( unit , Ġdata )) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠ Ġ} Ċ Ċ private Ġfun Ġcreate Entry point Method ( unit : ĠFire fly Unit , Ġdata : ĠTyped Data ): ĠMethod Declaration Ġ= ĊĠĠĠ ĠMethod Declaration . Builder . builder () ĊĠĠĠĠĠĠĠ Ġ. name (" entrypoint ") ĊĠĠĠĠĠĠĠ Ġ. parameters ( create Entry point Method Parameters ( unit , Ġdata )) ĊĠĠĠĠĠĠĠ Ġ. modifiers ( K ores Modifier . PUBLIC , ĠK ores Modifier . STATIC ) ĊĠĠĠĠĠĠĠ Ġ. returnType ( Types . VOID ) ĊĠĠĠĠĠĠĠ Ġ. body ( Mutable Instructions . create ()) ĊĠĠĠĠĠĠĠ Ġ. build (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ ENTRYPOINT _ METHOD ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ ENTRYPOINT _ METHOD _ SOURCE ] Ġ= Ġit . body Ġas ĠMutable Instructions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ CURRENT _ SOURCE ] Ġ= Ġit . body Ġas ĠMutable Instructions ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ private Ġfun Ġcreate Entry point Method Parameters ( unit : ĠFire fly Unit , Ġdata : ĠTyped Data ): ĠList < K ores Parameter > Ġ= ĊĠĠĠ Ġif Ġ( unit . unit Type Ġ== ĠUnit Type . UNIT ) Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK ores Parameter . Builder . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. modifiers ( K ores Modifier . FINAL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. type ( type Of < Array < String >> ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. name (" args ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠ Ġ}