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
}
}
}