1
0
forked from VimPlug/jedi

Avoid aborting search for yields when they are still reachable, see #683

This commit is contained in:
Dave Halter
2020-01-28 09:35:58 +01:00
parent bec87f7ff8
commit d630ed55f3
2 changed files with 33 additions and 11 deletions

View File

@@ -201,15 +201,15 @@ class BaseFunctionExecutionContext(ValueContext, TreeContextMixin):
returns = funcdef.iter_return_stmts() returns = funcdef.iter_return_stmts()
for r in returns: for r in returns:
check = flow_analysis.reachability_check(self, funcdef, r)
if check is flow_analysis.UNREACHABLE:
debug.dbg('Return unreachable: %s', r)
else:
if check_yields: if check_yields:
value_set |= ValueSet.from_sets( value_set |= ValueSet.from_sets(
lazy_value.infer() lazy_value.infer()
for lazy_value in self._get_yield_lazy_value(r) for lazy_value in self._get_yield_lazy_value(r)
) )
else:
check = flow_analysis.reachability_check(self, funcdef, r)
if check is flow_analysis.UNREACHABLE:
debug.dbg('Return unreachable: %s', r)
else: else:
try: try:
children = r.children children = r.children

View File

@@ -78,6 +78,28 @@ g = iter([1.0])
#? float() #? float()
next(g) next(g)
x, y = Get()
#? int() str()
x
#? int() str()
x
class Iter:
def __iter__(self):
yield ""
i = 0
while True:
v = 1
yield v
i += 1
a, b, c = Iter()
#? str() int()
a
#? str() int()
b
#? str() int()
c
# ----------------- # -----------------
# __next__ # __next__