9
9
etuple_repr .maxother = 100
10
10
11
11
12
+ class IgnoredGenerator :
13
+ __slots__ = ("gen" ,)
14
+
15
+ def __init__ (self , gen ):
16
+ self .gen = gen
17
+
18
+
12
19
def trampoline_eval (z , res_filter = None ):
13
20
"""Evaluate a stream of generators.
14
21
@@ -19,6 +26,8 @@ def trampoline_eval(z, res_filter=None):
19
26
20
27
if not isinstance (z , Generator ): # pragma: no cover
21
28
return z
29
+ elif isinstance (z , IgnoredGenerator ):
30
+ return z .gen
22
31
23
32
stack = deque ()
24
33
z_args , z_out = None , None
@@ -41,7 +50,10 @@ def trampoline_eval(z, res_filter=None):
41
50
except StopIteration :
42
51
_ = stack .pop ()
43
52
44
- return z_out
53
+ if isinstance (z_out , IgnoredGenerator ):
54
+ return z_out .gen
55
+ else :
56
+ return z_out
45
57
46
58
47
59
class InvalidExpression (Exception ):
@@ -149,7 +161,8 @@ def __init__(self, seq=None, **kwargs):
149
161
@property
150
162
def evaled_obj (self ):
151
163
"""Return the evaluation of this expression tuple."""
152
- return trampoline_eval (self ._eval_step ())
164
+ res = self ._eval_step ()
165
+ return trampoline_eval (res )
153
166
154
167
@property
155
168
def eval_obj (self ):
@@ -201,10 +214,12 @@ def _eval_step(self):
201
214
202
215
_evaled_obj = op (* op_args .args , ** op_args .kwargs )
203
216
204
- # assert not isinstance(_evaled_obj, ExpressionTuple)
205
-
206
- self ._evaled_obj = _evaled_obj
207
- yield self ._evaled_obj
217
+ if isinstance (_evaled_obj , Generator ):
218
+ self ._evaled_obj = _evaled_obj
219
+ yield IgnoredGenerator (_evaled_obj )
220
+ else :
221
+ self ._evaled_obj = _evaled_obj
222
+ yield self ._evaled_obj
208
223
209
224
@evaled_obj .setter
210
225
def evaled_obj (self , obj ):
0 commit comments