Here's a much shorter demo script:

    proc a {} {
        after 0 [info coroutine]
        yield
        coroutine C c
    }

    proc b {} {
        yield
        info frame
    }

    proc c {} {
        tailcall B
    }

    after 0 {
        coroutine A a
        coroutine B b
    }
    vwait forever