diff options
author | Steve Bennett <steveb@workware.net.au> | 2010-01-27 14:22:43 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-10-15 11:02:47 +1000 |
commit | 8819f3aecc3496ab20237689a252ac46255b0477 (patch) | |
tree | 622205cb8a932b8dedda47e72046defd8e0c34cd /tests/case.test | |
parent | c9324c18e63eb67b1d3f7418c345d1dd1e6d3bdb (diff) | |
download | jimtcl-8819f3aecc3496ab20237689a252ac46255b0477.zip jimtcl-8819f3aecc3496ab20237689a252ac46255b0477.tar.gz jimtcl-8819f3aecc3496ab20237689a252ac46255b0477.tar.bz2 |
Enhance catch and 'info returncodes'
*: Add optional arg to catch, opts, like Tcl 8.5 to allow access to the
code given by 'return -code'
*: Use -- to signify end of options to catch
*: 'info returncodes' can give the name of a single code
*: Fix 'case' to handle 'return -code' properly
Diffstat (limited to 'tests/case.test')
-rw-r--r-- | tests/case.test | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/tests/case.test b/tests/case.test index ce6075a..a74f265 100644 --- a/tests/case.test +++ b/tests/case.test @@ -6,8 +6,11 @@ proc control {cond code} { set iscond [uplevel 1 expr $cond] #puts "$cond -> $iscond" if {$iscond} { - set rc [catch [list uplevel 1 $code] error] - #puts "$code -> rc=$rc, error=$error" + set rc [catch [list uplevel 1 $code] error opts] + #puts "$code -> rc=$rc, error=$error, opts=$opts" + if {$rc == 2 && $opts(-code) != 0} { + set rc $opts(-code) + } return -code $rc $error } } @@ -52,19 +55,19 @@ proc do_case {var} { return one } 2 { - return two + return -code ok two } 3 { - continue + return -code continue three } 4 { return 44 } 5 { - break + return -code break five } 6 { - return six + return eight } } return zero |