Fix a recursion issue and add a test.

This commit is contained in:
Dave Halter
2016-07-27 19:15:03 +02:00
parent a6dd7bf822
commit 0a4e858d88
5 changed files with 15 additions and 5 deletions

View File

@@ -275,7 +275,7 @@ class Evaluator(object):
return self._eval_element_not_cached(element) return self._eval_element_not_cached(element)
return self._eval_element_cached(element) return self._eval_element_cached(element)
@memoize_default(evaluator_is_first_arg=True) @memoize_default(default=set(), evaluator_is_first_arg=True)
def _eval_element_cached(self, element): def _eval_element_cached(self, element):
return self._eval_element_not_cached(element) return self._eval_element_not_cached(element)

View File

@@ -183,7 +183,6 @@ class Comprehension(IterableWrapper):
last_comp = list(comp_for.get_comp_fors())[-1] last_comp = list(comp_for.get_comp_fors())[-1]
return helpers.deep_ast_copy(self._get_comprehension().children[index], parent=last_comp) return helpers.deep_ast_copy(self._get_comprehension().children[index], parent=last_comp)
@memoize_default()
def _iterate(self): def _iterate(self):
def nested(comp_fors): def nested(comp_fors):
comp_for = comp_fors[0] comp_for = comp_fors[0]

View File

@@ -15,7 +15,6 @@ from jedi.evaluate import iterable
def recursion_decorator(func): def recursion_decorator(func):
def run(evaluator, stmt, *args, **kwargs): def run(evaluator, stmt, *args, **kwargs):
rec_detect = evaluator.recursion_detector rec_detect = evaluator.recursion_detector
# print stmt, len(self.node_statements())
if rec_detect.push_stmt(stmt): if rec_detect.push_stmt(stmt):
return set() return set()
else: else:

View File

@@ -308,6 +308,20 @@ Recursion().a
#? #?
Recursion().b Recursion().b
class X():
def __init__(self):
self.recursive = [1, 3]
def annoying(self):
self.recursive = [self.recursive[0]]
def recurse(self):
self.recursive = [self.recursive[1]]
#? int()
X().recursive[0]
# ----------------- # -----------------
# ducktyping # ducktyping
# ----------------- # -----------------

View File

@@ -172,5 +172,3 @@ def x():
#? 22 #? 22
[a for a in h if hio] [a for a in h if hio]
if hio: pass if hio: pass