Posted to tcl by kbk at Fri Apr 23 17:19:34 GMT 2010view pretty

namespace eval ::tcl::unsupported {namespace export yieldTo}
namespace import ::tcl::unsupported::yieldTo

proc pro {} { 
    puts "creating producer"
    yield
    puts "producer starting"
    for {set i 0} {$i < 10} {incr i} {
	yieldTo consumer $i
    }
    puts "producer yielding end of stream"
    yieldTo consumer {}
    puts "producer returning"
}

proc con {} {
    puts "creating consumer"
    yield
    puts "consumer starting"
    while {[set i [yieldTo producer]] != {}} {
	puts $i
    }
    puts "consumer returning"
}


coroutine producer pro
coroutine consumer con
consumer

coroutine producer pro
coroutine consumer con
producer

Comments

Posted by kbk at Fri Apr 23 17:20:22 GMT 2010 [text] [code]

creating producer creating consumer consumer starting Tailcall cannot find the right splicing spot: should not happen! This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.