package Ġcom . step an ov . bbf . red uk tor . executor . error Ċ Ċ data Ġclass ĠError ( val ĠerrorMessage : ĠString ) Ġ{ ĊĊĠĠĠ Ġvar Ġtype : ĠError Type ĊĠĠĠ Ġvar Ġline Ġ= Ġ- 1 ĊĠĠĠ Ġvar Ġposition Ġ= Ġ- 1 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( errorMessage . contains ( Error Constants . codegen Error )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠError Type . CODE GEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Line Position Ġ= ĠerrorMessage . indexOf (" File Ġbeing Ġcompiled Ġat Ġposition :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Line Position Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= ĠerrorMessage . substring ( error Line Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Sub str Ġ= Ġtmp . substring ( 0 , Ġtmp . indexOf First Ġ{ Ġit Ġ== Ġ'\ n ' Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Location ( error Sub str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path ToFile . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ToFile Ġ= Ġerror Sub str . substring ( error Sub str . indexOf (" in Ġ") Ġ+ Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( errorMessage . contains ( Error Constants . analysis Error )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠError Type . ANAL YS IS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Line Position Ġ= ĠerrorMessage . indexOf ( Error Constants . analysis Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Line Position Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= ĠerrorMessage . substring ( error Line Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Sub str Ġ= Ġtmp . substring ( 0 , Ġtmp . indexOf First Ġ{ Ġit Ġ== Ġ'\ n ' Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Location ( error Sub str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path ToFile . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ToFile Ġ= Ġerror Sub str . substring ( error Sub str . indexOf (" in Ġ") Ġ+ Ġ 3 , Ġerror Sub str . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( errorMessage . contains ( Error Constants . il legal State Error )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠError Type . IL LEG AL STATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse Location ( errorMessage ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( errorMessage . contains ( Error Constants . runtime Exception )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠError Type . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast At Ġ= ĠerrorMessage . split ("\ n "). drop Last ( 1 ). last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= ĠInteger . parseInt ( last At . substring After (" (" ). substring Before (" ) "). substring After (" :" )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠError Type . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse Location ( errorMessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Location ( error Sub str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠRegex (""" \ (\ d + ,\ d +\ ) "" "). find ( error Sub str )?. value Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( location . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= ĠInteger . parseInt ( location . substring ( 1 , Ġlocation . indexOf (',' ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= ĠInteger . parseInt ( location . substring ( location . indexOf (',') Ġ+ Ġ 1 , Ġlocation . indexOf (' )' ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġstr . append (" Type Ġ= Ġ$ type \ n ") ĊĠĠĠĠĠĠĠ Ġstr . append (" File Ġ= Ġ$ path ToFile \ n ") ĊĠĠĠĠĠĠĠ Ġstr . append (" Position Ġ= Ġ($ line ,$ position )\ n ") ĊĠĠĠĠĠĠĠ Ġreturn Ġstr . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpath ToFile Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġfun Ġinit Path ( path ToFile : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp anion . path ToFile Ġ= Ġpath ToFile ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ enum Ġclass ĠError Type Ġ{ ĊĠĠĠ ĠCODE GEN , ĠAN AL YS IS , ĠIL LEG AL STATE , ĠEXCEPTION , ĠUNKNOWN Ċ }