The evaluator recursion limitations are now reset in static analysis for each node, otherwise it's incredibly unprecise.

This commit is contained in:
Dave Halter
2015-12-13 17:18:19 +01:00
parent 106f6f7f5a
commit 7b8d4e86ac
6 changed files with 17 additions and 11 deletions

View File

@@ -86,8 +86,6 @@ class Evaluator(object):
# To memorize modules -> equals `sys.modules`.
self.modules = {} # like `sys.modules`.
self.compiled_cache = {} # see `compiled.create()`
self.recursion_detector = recursion.RecursionDetector(self)
self.execution_recursion_detector = recursion.ExecutionRecursionDetector(self)
self.analysis = []
self.predefined_if_name_dict_dict = {}
self.is_analysis = False
@@ -100,9 +98,15 @@ class Evaluator(object):
except ValueError:
pass
self.reset_recursion_limitations()
# Constants
self.BUILTINS = compiled.get_special_object(self, 'BUILTINS')
def reset_recursion_limitations(self):
self.recursion_detector = recursion.RecursionDetector(self)
self.execution_recursion_detector = recursion.ExecutionRecursionDetector(self)
def wrap(self, element):
if isinstance(element, tree.Class):
return er.Class(self, element)