summaryrefslogtreecommitdiffstats
path: root/tests/error.test
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2010-11-03 11:08:20 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2010-11-03 11:08:20 (GMT)
commitd4d95330eb4e444b9ed5cbdfbad4fa6e887fd2b9 (patch)
tree544fadeed0b36a19c7d51de61efce0a1365c09ab /tests/error.test
parent4ac4e5c0f9920027f560c0c6234a8249f8724ec5 (diff)
downloadtcl-d4d95330eb4e444b9ed5cbdfbad4fa6e887fd2b9.zip
tcl-d4d95330eb4e444b9ed5cbdfbad4fa6e887fd2b9.tar.gz
tcl-d4d95330eb4e444b9ed5cbdfbad4fa6e887fd2b9.tar.bz2
* generic/tclCmdMZ.c (TryPostBody): Ensure that errors when setting
* tests/error.test (error-19.1[12]): message/opt capture variables get reflected properly to the caller.
Diffstat (limited to 'tests/error.test')
-rw-r--r--tests/error.test46
1 files changed, 45 insertions, 1 deletions
diff --git a/tests/error.test b/tests/error.test
index 6e2aee5..77a96fd 100644
--- a/tests/error.test
+++ b/tests/error.test
@@ -11,7 +11,7 @@
# See the file "license.terms" for information on usage and redistribution of
# this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# RCS: @(#) $Id: error.test,v 1.34 2010/10/20 20:52:28 ferrieux Exp $
+# RCS: @(#) $Id: error.test,v 1.35 2010/11/03 11:08:21 dkf Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest 2
@@ -912,6 +912,50 @@ test error-19.10 {compiled try with chained clauses} -setup {
} -cleanup {
unset RES
} -result {handler {ok good finally}}
+test error-19.11 {compiled try and errors on variable write} -setup {
+ set RES {}
+} -body {
+ apply {{} {
+ array set foo {bar boo}
+ set bar unset
+ catch {
+ try {
+ addmsg body
+ return a
+ } on return {bar foo} {
+ addmsg handler
+ return b
+ } finally {
+ addmsg finally,$bar
+ }
+ } msg
+ addmsg $msg
+ } ::tcl::test::error}
+} -cleanup {
+ unset RES
+} -result {body finally,a {can't set "foo": variable is array}}
+test error-19.12 {interpreted try and errors on variable write} -setup {
+ set RES {}
+} -body {
+ apply {try {
+ array set foo {bar boo}
+ set bar unset
+ catch {
+ $try {
+ addmsg body
+ return a
+ } on return {bar foo} {
+ addmsg handler
+ return b
+ } finally {
+ addmsg finally,$bar
+ }
+ } msg
+ addmsg $msg
+ } ::tcl::test::error} try
+} -cleanup {
+ unset RES
+} -result {body finally,a {can't set "foo": variable is array}}
rename addmsg {}
# FIXME test what vars get set on fallthough ... what is the correct behavior?