package Ġnet . fork k . green stone . gr pl Ċ Ċ abstract Ġclass ĠExec Error ( msg : ĠString ) Ġ: ĠException ( msg ) Ġ{ ĊĠĠĠ Ġval Ġtrace Ġ= ĠError Trace () ĊĊĠĠĠ Ġfun Ġpretty Msg (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġthis . trace . location ĊĠĠĠĠĠĠĠ Ġval Ġloc Ġ= Ġif Ġ( location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n Error Ġoccurred Ġhere :\ n ${ location . underline () }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ"" Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Execution Ġerror : Ġ${ this . message }$ loc " ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġtype ErrMsg ( value : ĠValue , Ġexpected : ĠArray < ValueType >): ĠString Ġ{ ĊĠĠĠ Ġval Ġexpected Lst Ġ= Ġexpected . join ToString (", Ġ") ĊĠĠĠ Ġreturn Ġ" Expected Ġtype Ġ$ expected Lst , Ġbut Ġvalue Ġ$ value Ġhad Ġtype Ġ${ value . type } ." Ċ } Ċ class ĠTypeError ( val Ġvalue : ĠValue , Ġval Ġexpected : ĠArray < ValueType >) Ġ: ĠExec Error ( ĊĠĠĠ Ġtype ErrMsg ( value , Ġexpected ) Ċ ) Ġ{ ĊĠĠĠ Ġconstructor ( value : ĠValue , Ġexpected : ĠValueType ) Ġ: Ġthis ( value , ĠarrayOf ( expected )) Ċ } Ċ Ċ class ĠEmpty Stack Error () Ġ: ĠExec Error (" Tri ed Ġto Ġpop Ġempty Ġstack ") Ċ class ĠUnknown Command Error ( val Ġname : ĠString ) Ġ: ĠExec Error (" There Ġis Ġno Ġcommand Ġnamed Ġ$ name .") Ċ class ĠUndefined Name Error ( val Ġname : ĠString ) Ġ: ĠExec Error (" Variable Ġname Ġ$ name Ġis Ġnot Ġdefined .") Ċ class ĠArithmetic Error ( msg : ĠString Ġ= Ġ" Invalid Ġarithmetic Ġoperation ") Ġ: ĠExec Error ( msg ) Ċ class ĠIndexError ( val Ġidx : ĠInt , Ġval Ġrange : ĠInt Range ) Ġ: ĊĠĠĠ ĠExec Error (" Index Ġ$ idx Ġout Ġof Ġrange Ġ${ range . first }, Ġ${ range . last }") Ċ class ĠFile Error ( msg : ĠString Ġ= Ġ" A Ġfile ĠIO Ġerror Ġoccurred ") Ġ: ĠExec Error ( msg ) Ċ Ċ // ĠFor Ġnow Ġjust Ġa Ġsource Ġlocation , Ġbut Ġthis Ġwill Ġbe Ġused Ġfor Ġstack Ġtraces Ġlater . Ċ class ĠError Trace Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ loc : ĠSource Location ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLocation Ġof Ġthe Ġstatement Ġthis Ġerror Ġoccurred Ġat . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlocation : ĠSource Location ? Ġget () Ġ= Ġ_ loc ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTags Ġthe Ġlocation Ġthis Ġerror Ġoccurred Ġat . ĠIf Ġone Ġis Ġalready Ġrecorded , Ġthis Ġdoes Ġnothing . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtag Location ( loc : ĠSource Location ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ loc Ġ== Ġnull ) Ġ_ loc Ġ= Ġloc ĊĠĠĠ Ġ} Ċ } Ċ