diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2013-10-15 00:27:56 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2013-10-15 00:27:56 (GMT) |
commit | 21e6601f4971f249f7681508432b98605729fb9d (patch) | |
tree | 7ee2b0d64d3baf69e1ed93317f150a8d59b9b25f /tests | |
parent | 9adfa74f671acd5bcc33247b07176d117eda3357 (diff) | |
download | tcl-21e6601f4971f249f7681508432b98605729fb9d.zip tcl-21e6601f4971f249f7681508432b98605729fb9d.tar.gz tcl-21e6601f4971f249f7681508432b98605729fb9d.tar.bz2 |
Do jump generation at places where INST_RETURN_IMM might occur.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/compile.test | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/compile.test b/tests/compile.test index 51db0a2..36e24de 100644 --- a/tests/compile.test +++ b/tests/compile.test @@ -713,6 +713,70 @@ test compile-19.0 {Bug 3614102: reset stack housekeeping} -body { apply {{} {list [if 1]}} } -returnCodes error -match glob -result * +test compile-20.1 {ensure there are no infinite loops in optimizing} { + tcl::unsupported::disassemble script { + while 1 { + return -code continue -level 0 + } + } + return +} {} +test compile-20.2 {ensure there are no infinite loops in optimizing} { + tcl::unsupported::disassemble script { + while 1 { + while 1 { + return -code break -level 0 + } + } + } + return +} {} + +test compile-21.1 {stack balance management} { + apply {{} { + set result {} + while 1 { + lappend result a + lappend result [list b [break]] + lappend result c + } + return $result + }} +} a +test compile-21.2 {stack balance management} { + apply {{} { + set result {} + while {[incr i] <= 10} { + lappend result $i + lappend result [list b [continue] c] + lappend result c + } + return $result + }} +} {1 2 3 4 5 6 7 8 9 10} +test compile-21.3 {stack balance management} { + apply {args { + set result {} + while 1 { + lappend result a + lappend result [concat {*}$args [break]] + lappend result c + } + return $result + }} P Q R S T +} a +test compile-21.4 {stack balance management} { + apply {args { + set result {} + while {[incr i] <= 10} { + lappend result $i + lappend result [concat {*}$args [continue] c] + lappend result c + } + return $result + }} P Q R S T +} {1 2 3 4 5 6 7 8 9 10} + # TODO sometime - check that bytecode from tbcload is *not* disassembled. # cleanup |