1
0
forked from VimPlug/jedi

Fix an issue with combined reversed and yield without for loops.

This commit is contained in:
Dave Halter
2015-11-10 09:37:07 +01:00
parent 9f82cce3bb
commit 498e24df94
3 changed files with 20 additions and 9 deletions

View File

@@ -164,7 +164,7 @@ def _execute_array_values(evaluator, array):
"""
if isinstance(array, Array):
values = []
for types in array.per_index_values():
for types in array.py__iter__():
objects = set(chain.from_iterable(_execute_array_values(evaluator, typ) for typ in types))
values.append(AlreadyEvaluated(objects))
return [FakeSequence(evaluator, values, array.type)]

View File

@@ -664,20 +664,28 @@ class FunctionExecution(Executed):
yields_order[-1][1].append(yield_)
else:
yields_order.append((for_stmt, [yield_]))
elif for_stmt == self:
yields_order.append((None, [yield_]))
else:
yield self.get_return_types()
return
last_for_stmt = for_stmt
evaluator = self._evaluator
for for_stmt, yields in yields_order:
for_types = self._evaluator.eval_element(for_stmt.get_input_node())
ordered = iterable.ordered_elements_of_iterable(self._evaluator, for_types, [])
if for_stmt is None:
# No for_stmt, just normal yields.
for yield_ in yields:
yield evaluator.eval_element(yield_.children[1])
else:
for_types = evaluator.eval_element(for_stmt.get_input_node())
ordered = iterable.ordered_elements_of_iterable(evaluator, for_types, [])
for index_types in ordered:
dct = {str(for_stmt.children[1]): index_types}
self._evaluator.predefined_if_name_dict_dict[for_stmt] = dct
evaluator.predefined_if_name_dict_dict[for_stmt] = dct
for yield_in_same_for_stmt in yields:
yield self._evaluator.eval_element(yield_in_same_for_stmt.children[1])
del self._evaluator.predefined_if_name_dict_dict[for_stmt]
yield evaluator.eval_element(yield_in_same_for_stmt.children[1])
del evaluator.predefined_if_name_dict_dict[for_stmt]
def names_dicts(self, search_global):
yield self.names_dict

View File

@@ -77,6 +77,7 @@ def argument_clinic(string, want_obj=False, want_scope=False, want_arguments=Fal
def f(func):
def wrapper(evaluator, obj, arguments):
debug.dbg('builtin start %s' % obj, color='MAGENTA')
try:
lst = list(arguments.eval_argument_clinic(clinic_args))
except ValueError:
@@ -90,6 +91,8 @@ def argument_clinic(string, want_obj=False, want_scope=False, want_arguments=Fal
if want_arguments:
kwargs['arguments'] = arguments
return func(evaluator, *lst, **kwargs)
finally:
debug.dbg('builtin end', color='MAGENTA')
return wrapper
return f