From 53dbdf22a203dbe631272aa4637627601f71944d Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Tue, 1 Dec 2015 19:55:13 +0100 Subject: [PATCH] Fix: In the py__iter__ version, we didn't respect __next__ being an option. --- jedi/evaluate/representation.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index b7652871..a4d03428 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -34,7 +34,7 @@ import imp import re from itertools import chain -from jedi._compatibility import use_metaclass, unicode, Python3Method +from jedi._compatibility import use_metaclass, unicode, Python3Method, is_py3 from jedi.parser import tree from jedi import debug from jedi import common @@ -218,9 +218,18 @@ class Instance(use_metaclass(CachedMetaClass, Executed)): debug.warning('No __iter__ on %s.' % self) return else: - for generator in self._evaluator.execute(method): - for typ in generator.py__iter__(): - yield typ + iters = self._evaluator.execute(method) + for generator in iters: + if isinstance(generator, Instance): + # `__next__` logic. + name = '__next__' if is_py3 else 'next' + try: + yield generator.execute_subscope_by_name(name) + except KeyError: + debug.warning('Instance has no __next__ function in %s.', generator) + else: + for typ in generator.py__iter__(): + yield typ @property @underscore_memoization