1
0
forked from VimPlug/jedi

Restructure yield code to make it less error prone.

This commit is contained in:
Dave Halter
2017-01-07 12:43:15 +01:00
parent 1f15ee8bc7
commit d3c437e891
3 changed files with 23 additions and 18 deletions

View File

@@ -27,7 +27,7 @@ def execution_allowed(evaluator, node):
pushed_nodes = evaluator.recursion_detector.pushed_nodes
if node in pushed_nodes:
debug.warning('catched stmt recursion: %s against %s @%s', node,
debug.warning('catched stmt recursion: %s @%s', node,
node.start_pos)
yield False
else:
@@ -36,17 +36,21 @@ def execution_allowed(evaluator, node):
pushed_nodes.pop()
def execution_recursion_decorator(func):
def run(execution, **kwargs):
detector = execution.evaluator.execution_recursion_detector
if detector.push_execution(execution):
result = set()
else:
result = func(execution, **kwargs)
detector.pop_execution()
return result
return run
def execution_recursion_decorator(default=set()):
def decorator(func):
def wrapper(execution, **kwargs):
detector = execution.evaluator.execution_recursion_detector
allowed = detector.push_execution(execution)
try:
if allowed:
result = default
else:
result = func(execution, **kwargs)
finally:
detector.pop_execution()
return result
return wrapper
return decorator
class ExecutionRecursionDetector(object):