Recursions on if statements when using the advanced flow evaluation shouldn't be possible anymore.

This commit is contained in:
Dave Halter
2015-06-29 12:03:31 +02:00
parent a014d4fd38
commit db1ed70318
3 changed files with 15 additions and 8 deletions

View File

@@ -367,10 +367,11 @@ class Evaluator(object):
return types
def goto_definition(self, name):
# TODO rename to goto_definitions
def_ = name.get_definition()
if def_.type == 'expr_stmt' and name in def_.get_defined_names():
return self.eval_statement(def_, name)
call = helpers.call_of_name(name)
call = helpers.call_of_name(name, True)
return self.eval_element(call)
def goto(self, name):

View File

@@ -169,12 +169,18 @@ class NameFinder(object):
except KeyError:
continue
else:
check = flow_analysis.break_check(self._evaluator, self.scope,
origin_scope)
if check is flow_analysis.UNREACHABLE:
self._found_predefined_if_name = []
else:
if self.name_str.start_pos < scope.end_pos:
# It doesn't make any sense to check if
# statements in the if statement itself, just
# deliver types.
self._found_predefined_if_name = types
else:
check = flow_analysis.break_check(self._evaluator, self.scope,
origin_scope)
if check is flow_analysis.UNREACHABLE:
self._found_predefined_if_name = []
else:
self._found_predefined_if_name = types
break
else:
origin_scope = None
@@ -189,7 +195,6 @@ class NameFinder(object):
if check is flow_analysis.REACHABLE:
break
last_names.append(name)
if isinstance(name_scope, er.FunctionExecution):
# Replace params

View File

@@ -47,7 +47,8 @@ def break_check(evaluator, base_scope, stmt, origin_scope=None):
return REACHABLE
origin_scope = origin_scope.parent
"""
return _break_check(evaluator, stmt, base_scope, element_scope)
x = _break_check(evaluator, stmt, base_scope, element_scope)
return x
def _break_check(evaluator, stmt, base_scope, element_scope):