Posted to tcl by aspect at Tue Apr 04 02:25:54 GMT 2017view pretty

proc coroeval { coro script } {
  uplevel 1 [format {%s;%s} \
    [list ::tcl::unsupported::inject $coro try [format { yield [try {%s} on error {} {}] } $script]] \
    $coro
  ]
}

coroutine foo while 1 yield
for {set i 0} {$i < 1000} {incr i} {
    coroeval foo {incr ::j}
}