/** Ċ Ġ* ĠCreated Ġby Ġice 1 0 0 0 Ġon Ġ 2 0 1 7 / 2 / 1 7 . Ċ Ġ* Ċ Ġ* Ġ@ author Ġice 1 0 0 0 Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 Ċ Ġ*/ Ċ @ file : Jvm Name (" Utilities ") Ċ @ file : Jvm Mult if ile Class Ċ @ file : Suppress (" NOTH ING _ TO _ INLINE ") Ċ Ċ package Ġorg . lice . util Ċ Ċ import Ġorg . lice . model . MetaData Ċ Ċ open Ġclass ĠL ice Exception ( string : ĠString , Ġ@ Jvm Field Ġprotected Ġval Ġmeta : ĠMeta Data ) Ġ: ĠRuntimeException ( string ) Ġ{ Ċ ĉ protected Ġfun Ġprett ify ( cached Code Lines : ĠList < String >): ĠString Ġ{ Ċĉ ĉ val Ġbuilder Ġ= ĠStringBuilder () Ċĉ ĉ builder . append ln (" Error Ġ" Ġ+ Ġmessage ) Ċĉ ĉ if Ġ( meta . begin Line Ġ!= Ġ- 1 ) Ċĉĉ ĉ builder . append (" At Ġ" Ġ+ Ġmeta . begin Line ) Ċĉ ĉ if Ġ( meta . begin Index Ġ!= Ġ- 1 ) Ġ{ Ċĉĉ ĉ builder . append (" :" Ġ+ Ġmeta . begin Index ) Ċĉ ĉ } Ċĉ ĉ builder . append ln (": Ġ" Ġ+ Ġmessage ) Ċĉ ĉ if Ġ( meta . begin Line Ġ!= Ġ- 1 ) Ġ{ Ċĉĉ ĉ builder . append ln ( cached Code Lines [ meta . begin Line Ġ- Ġ 1 ]) Ċĉ ĉ } Ċĉ ĉ if Ġ( meta . begin Index Ġ!= Ġ- 1 ) Ġ{ Ċĉĉ ĉ for Ġ( i Ġin Ġmeta . begin Index . down To ( 2 )) Ċĉĉĉ ĉ builder . append (' Ġ') Ċĉĉ ĉ builder . append (' ^ ') Ċĉĉ ĉ if Ġ( meta . end Index Ġ!= Ġ- 1 ) Ġ{ Ċĉĉĉ ĉ for Ġ( i Ġin Ġmeta . end Index . down To ( meta . begin Index Ġ+ Ġ 2 )) Ċĉĉĉĉ ĉ builder . append (' ~ ') Ċĉĉ ĉ } Ċĉĉ ĉ builder . append ln () Ċĉ ĉ } Ċĉ ĉ builder . append ln () Ċĉ ĉ return Ġbuilder . toString () Ċ ĉ } Ċ } Ċ Ċ class ĠParseException ( string : ĠString , Ġmeta : ĠMeta Data Ġ= ĠMeta Data ()) Ġ: ĠL ice Exception ( string , Ġmeta ) Ġ{ Ċ ĉ fun Ġpretty Print ( cached Code Lines : ĠList < String >) Ġ{ Ċĉ ĉ prett ify ( cached Code Lines ). let ( System . err :: println ) Ċ ĉ } Ċ } Ċ Ċ class ĠInter pret Exception ( string : ĠString , Ġmeta : ĠMeta Data Ġ= ĠMeta Data ()) Ġ: Ċĉ ĉ L ice Exception ( string , Ġmeta ) Ġ{ Ċ ĉ fun Ġpretty Print ( cached Code Lines : ĠList < String >) Ġ{ Ċĉ ĉ prett ify ( cached Code Lines ). let ( System . err :: println ) Ċ ĉ } ĊĊ ĉ comp anion Ġobject ĠFactory Ġ{ Ċĉ ĉ fun Ġundefined Variable ( Ċĉĉĉ ĉ name : ĠString , Ċĉĉĉ ĉ meta : ĠMeta Data ): ĠNothing Ġ= Ġthrow ĠInter pret Exception (" undefined Ġvariable : Ġ$ name ", Ġmeta ) ĊĊĉ ĉ fun Ġnot Symbol ( meta : ĠMeta Data ): ĠNothing Ġ= Ċĉĉĉ ĉ throw ĠInter pret Exception (" type Ġmismatch : Ġsymbol Ġexpected .", Ġmeta ) ĊĊĉ ĉ fun Ġnot Function ( meta : ĠMeta Data ): ĠNothing Ġ= Ċĉĉĉ ĉ throw ĠInter pret Exception (" type Ġmismatch : Ġfunction Ġexpected .", Ġmeta ) ĊĊĉ ĉ fun Ġtype Mis Match ( expected : ĠString , Ġactual : ĠAny ?, Ġmeta : ĠMeta Data ): ĠNothing Ġ= Ċĉĉĉ ĉ throw ĠInter pret Exception (" type Ġmismatch : Ġexpected : Ġ$ expected , Ġfound : Ġ${ actual ?. className () }", Ġmeta ) ĊĊĉ ĉ fun Ġtoo F ew Argument ( expected : ĠInt , Ġactual : ĠInt , Ġmeta : ĠMeta Data ): ĠNothing Ġ= Ċĉĉĉ ĉ throw ĠInter pret Exception (" expected Ġ$ expected Ġor Ġmore Ġarguments , Ġfound : Ġ$ actual ", Ġmeta ) ĊĊĉ ĉ fun ĠnumberOf Argument Not Match ( expected : ĠInt , Ġactual : ĠInt , Ġmeta : ĠMeta Data ): ĠNothing Ġ= Ċĉĉĉ ĉ throw ĠInter pret Exception (" expected Ġ$ expected Ġarguments , Ġfound : Ġ$ actual ", Ġmeta ) Ċ ĉ } Ċ } ĊĊ