forked from VimPlug/jedi
Fix an issue with combined reversed and yield without for loops.
This commit is contained in:
@@ -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)]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user