From 99febfe6c2059fd766fab164c10c52995c6a278e Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Tue, 2 Dec 2014 04:19:22 +0100 Subject: [PATCH] Fixed a very nasty bug in deep_ast_copy. --- jedi/evaluate/helpers.py | 2 +- jedi/evaluate/representation.py | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index f46ac3e3..fecf49db 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -51,7 +51,7 @@ def deep_ast_copy(obj, new_elements_default=None): # tree in there. items = sorted(items, key=sort_stmt) else: - items = sorted(items, key=lambda x: x[0] != 'params') + items = sorted(items, key=lambda x: (x[0] != 'params', x[0] == 'names_dict')) # Actually copy and set attributes. new_obj = copy.copy(obj) diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index c532ab7a..ab9745a4 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -92,6 +92,11 @@ class Instance(use_metaclass(CachedMetaClass, Executed)): """ def __init__(self, evaluator, base, var_args, is_generated=False): super(Instance, self).__init__(evaluator, base, var_args) + self.decorates = None + # Generated instances are classes that are just generated by self + # (No var_args) used. + self.is_generated = is_generated + if base.name.get_code() in ['list', 'set'] \ and compiled.builtin == base.get_parent_until(): # compare the module path with the builtin name. @@ -105,10 +110,6 @@ class Instance(use_metaclass(CachedMetaClass, Executed)): pass else: evaluator.execute(method, self.var_args) - # Generated instances are classes that are just generated by self - # (No var_args) used. - self.is_generated = is_generated - self.decorates = None @property def py__call__(self): @@ -622,6 +623,7 @@ class FunctionExecution(Executed): @common.safe_property @underscore_memoization def names_dict(self): + self.children d = {} for key, values in self.base.names_dict.items(): d[key] = self._copy_list(values) @@ -697,9 +699,10 @@ class FunctionExecution(Executed): @common.safe_property @memoize_default([]) def children(self): - children = self.base.children if isinstance(self.base, InstanceElement): children = self.base.var.children + else: + children = self.base.children return self._copy_list(children) @common.safe_property