24 lines
387 B
Python
24 lines
387 B
Python
|
import types
|
||
|
|
||
|
class Trampoline:
|
||
|
def __init__(self, g):
|
||
|
self.stack = [g]
|
||
|
|
||
|
def __iter__(self):
|
||
|
return self
|
||
|
|
||
|
def __next__(self):
|
||
|
while True:
|
||
|
while True:
|
||
|
try:
|
||
|
r = next(self.stack[-1])
|
||
|
break
|
||
|
except StopIteration:
|
||
|
self.stack.pop()
|
||
|
if not self.stack:
|
||
|
raise
|
||
|
if isinstance(r, types.GeneratorType):
|
||
|
self.stack.append(r)
|
||
|
else:
|
||
|
return r
|