多分バグがあるかと思います...。
#undef yield
#define ctype newiterator(%1) %titr goto *%i:%s1:*%1:newlab iter_%p,1:return:e@iter=0
#define yield(%1) %titr r@iter=%1:newlab iter_%p,1:return:e@iter=0
#define enditerator %titr e@iter=1:return:*%p1:gosub *%o:%o0
#define ctype foriter(%1) gosub *%1:repeat:gosub iter_%1@:if (e@iter){break}
newiterator(iter1)
yield 1
yield 2
yield 3
enditerator
newiterator(iter2)
yield 1*2
yield 2*2
yield 3*2
enditerator
foriter(iter1)
mes r@iter
foriter(iter2)
mes " "+r@iter
loop
loop