package Ġcom . gab ri elle eg 1 . pl ank . cli . commands Ċ Ċ import Ġcom . github . aj alt . cli kt . core . Cli kt Command Ċ import Ġcom . github . aj alt . cli kt . parameters . arguments . argument Ċ import Ġcom . github . aj alt . cli kt . parameters . arguments . convert Ċ import Ġcom . github . aj alt . cli kt . parameters . arguments . help Ċ import Ġcom . github . aj alt . cli kt . parameters . options . convert Ċ import Ġcom . github . aj alt . cli kt . parameters . options . default Ċ import Ġcom . github . aj alt . cli kt . parameters . options . flag Ċ import Ġcom . github . aj alt . cli kt . parameters . options . help Ċ import Ġcom . github . aj alt . cli kt . parameters . options . multiple Ċ import Ġcom . github . aj alt . cli kt . parameters . options . option Ċ import Ġcom . github . aj alt . cli kt . parameters . options . required Ċ import Ġcom . github . aj alt . cli kt . parameters . types . file Ċ import Ġcom . gab ri elle eg 1 . pl ank . analyzer . Binding Context Ċ import Ġcom . gab ri elle eg 1 . pl ank . analyzer . render Ċ import Ġcom . gab ri elle eg 1 . pl ank . cli . compiler . Compile Error Ċ import Ġcom . gab ri elle eg 1 . pl ank . cli . compiler . Compiler Options Ċ import Ġcom . gab ri elle eg 1 . pl ank . cli . compiler . Pl ank Compiler Ċ import Ġcom . gab ri elle eg 1 . pl ank . cli . compiler . Target . Ll vm Ċ import Ġcom . gab ri elle eg 1 . pl ank . cli . message . Colo red Logger Ċ import Ġcom . gab ri elle eg 1 . pl ank . cli . pkg . Package Ċ import Ġcom . gab ri elle eg 1 . pl ank . cli . utils . as File Ċ import Ġcom . gab ri elle eg 1 . pl ank . compiler . Ll vm Backend Ċ import Ġcom . gab ri elle eg 1 . pl ank . compiler . instructions . Code gen Error Ċ import Ġcom . gab ri elle eg 1 . pl ank . grammar . element . Pl ank File Ċ import Ġcom . gab ri elle eg 1 . pl ank . grammar . mapper . render Ċ import Ġkotlin . io . path . Experimental Path Api Ċ import Ġkotlin . io . path . create Temp Directory Ċ import Ġpw . bin om . io . file . File Ċ import Ġpw . bin om . io . file . bin om Ċ Ċ @ Experimental Path Api Ċ class ĠPl ank Ġ: ĠCli kt Command () Ġ{ ĊĠ Ġprivate Ġval Ġfile Ġby Ġargument (" file ") ĊĠĠĠ Ġ. help (" The Ġtarget Ġfile ") ĊĠĠĠ Ġ. convert Ġ{ ĠFile ( it ) Ġ} ĊĊĠ Ġprivate Ġval Ġtarget Ġby Ġoption ("-- target ") ĊĠĠĠ Ġ. convert Ġ{ Ġtarget Ġ-> ĊĠĠĠĠĠ Ġwhen Ġ( target ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" llvm " Ġ-> ĠL l vm ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfail (" Unrecognized Ġtarget Ġ$ target ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. default ( Ll vm ) ĊĊĠ Ġprivate Ġval Ġpkg Name Ġby Ġoption ("-- pkg - name ") ĊĠĠĠ Ġ. help (" The Ġpackage Ġname ") ĊĠĠĠ Ġ. default (" Main ") ĊĊĠ Ġprivate Ġval Ġpkg Kind Ġby Ġoption ("-- pkg - kind ") ĊĠĠĠ Ġ. help (" The Ġpackage Ġkind ") ĊĠĠĠ Ġ. convert Ġ{ Ġtype Ġ-> ĊĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" lib " Ġ-> ĠPackage . Kind . Library ĊĠĠĠĠĠĠĠ Ġ" bin " Ġ-> ĠPackage . Kind . Binary ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfail (" Invalid Ġpackage Ġkind : Ġ$ type ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. default ( Package . Kind . Binary ) ĊĊĠ Ġprivate Ġval Ġoutput Ġby Ġoption ("-- output ", Ġ"- O ") ĊĠĠĠ Ġ. help (" Output Ġfile ") ĊĠĠĠ Ġ. file () ĊĠĠĠ Ġ. convert Ġ{ Ġit . bin om Ġ} ĊĠĠĠ Ġ. required () ĊĊĠ Ġprivate Ġval Ġdebug Ġby Ġoption ("-- debug ", Ġ"- D ") ĊĠĠĠ Ġ. help (" Sets Ġthe Ġcompiler Ġon Ġdebug Ġmode ") ĊĠĠĠ Ġ. flag () ĊĊĠ Ġprivate Ġval Ġverbose Ġby Ġoption ("-- verbose ", Ġ"- V ") ĊĠĠĠ Ġ. help (" Sets Ġthe Ġcompiler Ġon Ġverbose Ġmode ") ĊĠĠĠ Ġ. flag () ĊĊĠ Ġprivate Ġval Ġemit IR Ġby Ġoption ("-- emit - ir ") ĊĠĠĠ Ġ. help (" Emit s Ġthe Ġir Ġcode Ġwhen Ġcompiling ") ĊĠĠĠ Ġ. flag () ĊĊĠ Ġprivate Ġval Ġinclude Ġby Ġoption ("-- include ", Ġ"- I ") ĊĠĠĠ Ġ. help (" Include Ġfiles ") ĊĠĠĠ Ġ. convert Ġ{ Ġpath Ġ-> ĠPl ank File . of ( File ( path )) Ġ} ĊĠĠĠ Ġ. multiple () ĊĊĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠ Ġval Ġlogger Ġ= ĠCo lo red Logger ( verbose , Ġdebug , Ġflush Ġ= Ġtrue ) ĊĊĠĠĠ Ġval Ġpl ank Home Ġ= ĠSystem . getenv (" PL ANK _ HOME ") ĊĠĠĠĠĠ Ġ? . let Ġ{ ĠFile ( it ) Ġ} ĊĠĠĠĠĠ Ġ?: Ġreturn Ġlogger . se vere (" Define Ġthe ĠPL ANK _ HOME Ġbefore Ġcompile ") ĊĊĠĠĠ Ġval Ġoptions Ġ= ĠCompiler Options ( pl ank Home ). apply Ġ{ ĊĠĠĠĠĠ Ġdebug Ġ= Ġthis @ Pl ank . debug ĊĠĠĠĠĠ Ġemit IR Ġ= Ġthis @ Pl ank . emit IR ĊĠĠĠĠĠ Ġdist Ġ= Ġ" build _${ pkg Name }_${ System . currentTimeMillis () }" ĊĠĠĠĠĠĠĠ Ġ. let (:: create Temp Directory ) ĊĠĠĠĠĠĠĠ Ġ. as File () ĊĊĠĠĠĠĠ Ġoutput Ġ= Ġthis @ Pl ank . output ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpkg Ġ= ĠPackage ( ĊĠĠĠĠĠ Ġname Ġ= Ġpkg Name , ĊĠĠĠĠĠ Ġoptions Ġ= Ġoptions , ĊĠĠĠĠĠ Ġkind Ġ= Ġwhen Ġ( pkg Kind ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPackage . Kind . Binary Ġ-> Ġpkg Kind ĊĠĠĠĠĠĠĠ ĠPackage . Kind . Library Ġ-> ĠTODO (" unsupported Ġlibrary Ġkind Ġyet ") ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġmain Ġ= ĠPl ank File . of ( file ), ĊĠĠĠĠĠ Ġinclude Ġ= Ġinclude Ġ+ Ġoptions . stdlib ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġcontext Ġ= ĠBinding Context ( pkg . tree ) ĊĠĠĠ Ġval Ġllvm Ġ= ĠL l vm Backend ( pkg . tree , Ġcontext ) ĊĊĠĠĠ Ġlogger . verbose (" Current Ġwork dir : Ġ${ options . dist }") ĊĊĠĠĠ Ġval Ġcompiler Ġ= ĠPl ank Compiler ( pkg , Ġcontext , Ġllvm , Ġlogger ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġcompiler . compile () ĊĠĠĠĠĠ Ġlogger . info (" Successfully Ġcompiled Ġ$ output ") ĊĠĠĠ Ġ} Ġcatch Ġ( error : ĠCompile Error . Binding Vi olations ) Ġ{ ĊĠĠĠĠĠ Ġlogger . se vere (" Please Ġresolve Ġthe Ġfollowing Ġissues Ġbefore Ġcompile :") ĊĠĠĠĠĠ Ġerror . vi olations . render ( logger ) ĊĠĠĠ Ġ} Ġcatch Ġ( error : ĠCompile Error . IR Vi olations ) Ġ{ ĊĠĠĠĠĠ Ġlogger . se vere (" Internal Ġcompiler Ġerror , Ġplease Ġopen Ġan Ġissue .") ĊĊĠĠĠĠĠ Ġerror . vi olations . map ( Code gen Error :: render ). forEach ( logger :: se vere ) ĊĊĠĠĠĠĠ Ġlogger . verbose (" LLVM ĠModule :") ĊĠĠĠĠĠ Ġif Ġ( verbose ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( error . module . get AsString ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( error : ĠCompile Error . Syntax Vi olations ) Ġ{ ĊĠĠĠĠĠ Ġlogger . se vere (" Please Ġresolve Ġthe Ġfollowing Ġissues Ġbefore Ġcompile :") ĊĠĠĠĠĠ Ġerror . vi olations . render ( logger ) ĊĠĠĠ Ġ} Ġcatch Ġ( error : ĠCompile Error . Failed Command ) Ġ{ ĊĠĠĠĠĠ Ġlogger . se vere (" Could Ġnot Ġexecute Ġ'${ error . command }'. ĠFailed Ġwith Ġexit Ġcode : Ġ${ error . exit Code }") Ġ// Ġk tl int - disable Ġmax - line - length ĊĠĠĠ Ġ} Ġcatch Ġ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġlogger . se vere ("${ error :: class . simple Name }: Ġ${ error . message }") ĊĠĠĠĠĠ Ġif Ġ( verbose ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror . printStackTrace () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ