summaryrefslogtreecommitdiffstats
path: root/tests/oo.test
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2011-03-04 18:23:04 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2011-03-04 18:23:04 (GMT)
commit80a9e493176e81c6becbb1715367300d20208449 (patch)
treee559bae06f05082eaac70eca9e26bbcf2b9014fe /tests/oo.test
parent6f017f71965cb7b4b9be15054f25c0936c3356a9 (diff)
downloadtcl-80a9e493176e81c6becbb1715367300d20208449.zip
tcl-80a9e493176e81c6becbb1715367300d20208449.tar.gz
tcl-80a9e493176e81c6becbb1715367300d20208449.tar.bz2
[Bug 3185009]: Keep references to resolved object variables so that an unset doesn't leave any dangling pointers for code to trip over.Bug_3185009
Diffstat (limited to 'tests/oo.test')
-rw-r--r--tests/oo.test16
1 files changed, 16 insertions, 0 deletions
diff --git a/tests/oo.test b/tests/oo.test
index 1954d1b..c16d150 100644
--- a/tests/oo.test
+++ b/tests/oo.test
@@ -2580,6 +2580,22 @@ test oo-27.12 {variables declaration: leak per instance} -setup {
} -cleanup {
foo destroy
} -result 0
+# This test will actually (normally) crash if it fails!
+test oo-27.13 {variables declaration: Bug 3185009: require refcount management} -setup {
+ oo::object create foo
+} -body {
+ oo::objdefine foo {
+ variable x
+ method set v {set x $v}
+ method unset {} {unset x}
+ method exists {} {info exists x}
+ method get {} {return $x}
+ }
+ list [foo exists] [foo set 7] [foo exists] [foo get] [foo unset] \
+ [foo exists] [catch {foo get} msg] $msg
+} -cleanup {
+ foo destroy
+} -result {0 7 1 7 {} 0 1 {can't read "x": no such variable}}
# A feature that's not supported because the mechanism may change without
# warning, but is supposed to work...