fix function execution mutable list issue

This commit is contained in:
Dave Halter
2014-06-16 17:12:27 +02:00
parent eb1f299444
commit a373818965
3 changed files with 22 additions and 2 deletions

View File

@@ -5,5 +5,5 @@ class partial():
self.__keywords = keywords
def __call__(self, *args, **kwargs):
# I know this doesn't work in Python, but Jedi can this ;-)
# I know this doesn't work in Python, but in Jedi it does ;-)
return self.__func(*self.__args, *args, **self.keywords, **kwargs)

View File

@@ -444,7 +444,7 @@ class FunctionExecution(Executable):
if func.is_generator and not evaluate_generator:
return [iterable.Generator(self._evaluator, func, self.var_args)]
else:
stmts = docstrings.find_return_types(self._evaluator, func)
stmts = list(docstrings.find_return_types(self._evaluator, func))
for r in self.returns:
if r is not None:
stmts += self._evaluator.eval_statement(r)

View File

@@ -0,0 +1,20 @@
from jedi import Script
def test_function_execution():
"""
We've been having an issue of a mutable list that was changed inside the
function execution. Test if an execution always returns the same result.
"""
s = """
def x():
return str()
x"""
d = Script(s).goto_definitions()[0]
# Now just use the internals of the result (easiest way to get a fully
# usable function).
func, evaluator = d._definition, d._evaluator
# Should return the same result both times.
assert len(evaluator.execute(func)) == 1
assert len(evaluator.execute(func)) == 1