summaryrefslogtreecommitdiffstats
path: root/tests/dict.test
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2012-02-15 09:51:12 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2012-02-15 09:51:12 (GMT)
commit5ab653feb0f92621dfa72b70722477353ae22c75 (patch)
tree15ffd01c86b50f1a31f9efed63079cb78f8d839c /tests/dict.test
parent9d25d39845a0c2c1c3282634394e39a542ae0d9e (diff)
downloadtcl-5ab653feb0f92621dfa72b70722477353ae22c75.zip
tcl-5ab653feb0f92621dfa72b70722477353ae22c75.tar.gz
tcl-5ab653feb0f92621dfa72b70722477353ae22c75.tar.bz2
* generic/tclCompCmds.c (TclCompileDictForCmd): [Bug 3487626]: Fix
crash in compilation of [dict for] when its implementation command is used directly rather than through the ensemble.
Diffstat (limited to 'tests/dict.test')
-rw-r--r--tests/dict.test51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/dict.test b/tests/dict.test
index 5821c32..b92893e 100644
--- a/tests/dict.test
+++ b/tests/dict.test
@@ -1194,6 +1194,57 @@ test dict-22.11 {dict with command: no recursive structures [Bug 1786481]} {
string range [append foo OK] end-1 end
} OK
+proc linenumber {} {
+ dict get [info frame -1] line
+}
+test dict-23.1 {dict compilation crash: Bug 3487626} {
+ apply {n {
+ set e {}
+ set k {}
+ dict for {a b} {c {d {e {f g}}}} {
+ ::tcl::dict::for {h i} $b {
+ dict update i e j {
+ ::tcl::dict::update j f k {
+ return [expr {$n - [linenumber]}]
+ }
+ }
+ }
+ }
+ }} [linenumber]
+} 5
+test dict-23.2 {dict compilation crash: Bug 3487626} knownBug {
+ # Something isn't quite right in line number and continuation line
+ # tracking; at time of writing, this test produces 7, not 5, which
+ # indicates that the extra newlines in the non-script argument are
+ # confusing things.
+ apply {n {
+ set e {}
+ set k {}
+ dict for {a {
+b
+}} {c {d {e {f g}}}} {
+ ::tcl::dict::for {h {
+i
+}} ${
+b
+} {
+ dict update {
+i
+} e {
+j
+} {
+ ::tcl::dict::update {
+j
+} f k {
+ return [expr {$n - [linenumber]}]
+ }
+ }
+ }
+ }
+ }} [linenumber]
+} 5
+rename linenumber {}
+
# cleanup
::tcltest::cleanupTests
return