From 76345c0b584d1d3185070dff061eb3825fa07f57 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Fri, 4 Dec 2015 00:15:48 +0100 Subject: [PATCH] Final fixes for pure usage of py__iter__. --- jedi/evaluate/iterable.py | 14 +++++++------- jedi/evaluate/stdlib.py | 7 ++++--- jedi/evaluate/sys_path.py | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index e4120e87..bf31b1ad 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -447,7 +447,7 @@ def unpack_tuple_to_dict(evaluator, types, exprlist): 'testlist_star_expr'): dct = {} parts = iter(exprlist.children[::2]) - for iter_types in py__iter__(evaluator, types): + for iter_types in py__iter__(evaluator, types, exprlist): try: part = next(parts) except StopIteration: @@ -656,14 +656,14 @@ class _ArrayInstance(IterableWrapper): types = set() else: types = unite(self._evaluator.eval_element(node) for node in first_nodes) - for types in py__iter__(self._evaluator, types, first_nodes[0]): yield types - module = self.var_args.get_parent_until() - is_list = str(self.instance.name) == 'list' - additions = _check_array_additions(self._evaluator, self.instance, module, is_list) - if additions: - yield additions + + module = self.var_args.get_parent_until() + is_list = str(self.instance.name) == 'list' + additions = _check_array_additions(self._evaluator, self.instance, module, is_list) + if additions: + yield additions class Slice(object): diff --git a/jedi/evaluate/stdlib.py b/jedi/evaluate/stdlib.py index 98d5351b..bab0d9cc 100644 --- a/jedi/evaluate/stdlib.py +++ b/jedi/evaluate/stdlib.py @@ -154,12 +154,13 @@ def builtins_super(evaluator, types, objects, scope): return set() -@argument_clinic('sequence, /', want_obj=True) -def builtins_reversed(evaluator, sequences, obj): +@argument_clinic('sequence, /', want_obj=True, want_arguments=True) +def builtins_reversed(evaluator, sequences, obj, arguments): # While we could do without this variable (just by using sequences), we # want static analysis to work well. Therefore we need to generated the # values again. - ordered = list(iterable.py__iter__(evaluator, sequences)) + first_arg = next(arguments.as_tuple())[0] + ordered = list(iterable.py__iter__(evaluator, sequences, first_arg)) rev = [iterable.AlreadyEvaluated(o) for o in reversed(ordered)] # Repack iterator values and then run it the normal way. This is diff --git a/jedi/evaluate/sys_path.py b/jedi/evaluate/sys_path.py index 6d177504..d2c1ac92 100644 --- a/jedi/evaluate/sys_path.py +++ b/jedi/evaluate/sys_path.py @@ -121,7 +121,7 @@ def _paths_from_assignment(evaluator, expr_stmt): from jedi.evaluate.iterable import py__iter__ from jedi.evaluate.precedence import is_string types = evaluator.eval_element(expr_stmt) - for types in py__iter__(evaluator, types): + for types in py__iter__(evaluator, types, expr_stmt): for typ in types: if is_string(typ): yield typ.obj