rivet/rivet-tcl/catch.tcl (21 lines of code) (raw):

# -- catch.tcl # # Wrapper of the core [catch] command that checks whether # an error condition is actually raised by [::rivet::abort_page] # or [::rivet::exit]. In case the error is thrown again to allow # the interpreter to interrupt and pass execution to AbortScript # # $Id: $ # namespace eval ::rivet { proc catch {script args} { set catch_ret [uplevel [list ::catch $script {*}$args]] if {$catch_ret && [::rivet::abort_page -aborting]} { return -code error -errorcode {RIVET ABORTPAGE} "Page abort" } elseif {$catch_ret && [::rivet::abort_page -exiting]} { return -code error -errorcode {RIVET THREAD_EXIT} "Thread exit" } else { return $catch_ret } } }