1
0
forked from VimPlug/jedi

Remove the need for the check_first param in deep_ast_copy.

This commit is contained in:
Dave Halter
2015-02-11 14:46:51 +01:00
parent bc722a70f2
commit 315c687048
2 changed files with 11 additions and 7 deletions

View File

@@ -4,7 +4,7 @@ from itertools import chain
from jedi.parser import tree as pr
def deep_ast_copy(obj, new_elements_default=None, check_first=False):
def deep_ast_copy(obj, new_elements=None, check_first=False):
"""
Much, much faster than copy.deepcopy, but just for Parser elements (Doesn't
copy parents).
@@ -12,7 +12,8 @@ def deep_ast_copy(obj, new_elements_default=None, check_first=False):
def sort_stmt(key_value):
return key_value[0] not in ('_expression_list', '_assignment_details')
new_elements = new_elements_default or {}
if new_elements is None:
new_elements = {}
def recursion(obj, check_first=False):
# If it's already in the cache, just return it.

View File

@@ -569,10 +569,13 @@ class FunctionExecution(Executed):
def __init__(self, evaluator, base, *args, **kwargs):
super(FunctionExecution, self).__init__(evaluator, base, *args, **kwargs)
# for deep_ast_copy
func = base.base_func
self._copy_dict = {func: self, func.parent: func.parent}
helpers.deep_ast_copy(self.base.base_func, self._copy_dict, check_first=True)
self._copy_dict = {}
new_func = helpers.deep_ast_copy(base.base_func, self._copy_dict)
for child in new_func.children:
if isinstance(child, (pr.Name, pr.BaseNode)):
child.parent = self
self.children = new_func.children
self.names_dict = new_func.names_dict
@memoize_default(default=())
@recursion.execution_recursion_decorator
@@ -610,9 +613,9 @@ class FunctionExecution(Executed):
return types
def names_dicts(self, search_global):
self.children
yield dict((k, [self._copy_dict[v] for v in values])
for k, values in self.base.names_dict.items())
#yield self.names_dict # Replace with this!
@memoize_default(default=NO_DEFAULT)
def _get_params(self):