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):
|
if isinstance(array, Array):
|
||||||
values = []
|
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))
|
objects = set(chain.from_iterable(_execute_array_values(evaluator, typ) for typ in types))
|
||||||
values.append(AlreadyEvaluated(objects))
|
values.append(AlreadyEvaluated(objects))
|
||||||
return [FakeSequence(evaluator, values, array.type)]
|
return [FakeSequence(evaluator, values, array.type)]
|
||||||
|
|||||||
@@ -664,20 +664,28 @@ class FunctionExecution(Executed):
|
|||||||
yields_order[-1][1].append(yield_)
|
yields_order[-1][1].append(yield_)
|
||||||
else:
|
else:
|
||||||
yields_order.append((for_stmt, [yield_]))
|
yields_order.append((for_stmt, [yield_]))
|
||||||
|
elif for_stmt == self:
|
||||||
|
yields_order.append((None, [yield_]))
|
||||||
else:
|
else:
|
||||||
yield self.get_return_types()
|
yield self.get_return_types()
|
||||||
return
|
return
|
||||||
last_for_stmt = for_stmt
|
last_for_stmt = for_stmt
|
||||||
|
|
||||||
|
evaluator = self._evaluator
|
||||||
for for_stmt, yields in yields_order:
|
for for_stmt, yields in yields_order:
|
||||||
for_types = self._evaluator.eval_element(for_stmt.get_input_node())
|
if for_stmt is None:
|
||||||
ordered = iterable.ordered_elements_of_iterable(self._evaluator, for_types, [])
|
# 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:
|
for index_types in ordered:
|
||||||
dct = {str(for_stmt.children[1]): index_types}
|
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:
|
for yield_in_same_for_stmt in yields:
|
||||||
yield self._evaluator.eval_element(yield_in_same_for_stmt.children[1])
|
yield evaluator.eval_element(yield_in_same_for_stmt.children[1])
|
||||||
del self._evaluator.predefined_if_name_dict_dict[for_stmt]
|
del evaluator.predefined_if_name_dict_dict[for_stmt]
|
||||||
|
|
||||||
def names_dicts(self, search_global):
|
def names_dicts(self, search_global):
|
||||||
yield self.names_dict
|
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 f(func):
|
||||||
def wrapper(evaluator, obj, arguments):
|
def wrapper(evaluator, obj, arguments):
|
||||||
|
debug.dbg('builtin start %s' % obj, color='MAGENTA')
|
||||||
try:
|
try:
|
||||||
lst = list(arguments.eval_argument_clinic(clinic_args))
|
lst = list(arguments.eval_argument_clinic(clinic_args))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@@ -90,6 +91,8 @@ def argument_clinic(string, want_obj=False, want_scope=False, want_arguments=Fal
|
|||||||
if want_arguments:
|
if want_arguments:
|
||||||
kwargs['arguments'] = arguments
|
kwargs['arguments'] = arguments
|
||||||
return func(evaluator, *lst, **kwargs)
|
return func(evaluator, *lst, **kwargs)
|
||||||
|
finally:
|
||||||
|
debug.dbg('builtin end', color='MAGENTA')
|
||||||
|
|
||||||
return wrapper
|
return wrapper
|
||||||
return f
|
return f
|
||||||
|
|||||||
Reference in New Issue
Block a user