1
0
forked from VimPlug/jedi

restructured fast_parent_copy again

This commit is contained in:
David Halter
2012-10-23 18:23:26 +02:00
parent 87cbfc9145
commit e6d9a0a745

View File

@@ -152,34 +152,24 @@ def fast_parent_copy(obj):
new_obj = copy.copy(obj) new_obj = copy.copy(obj)
new_elements[obj] = new_obj new_elements[obj] = new_obj
for key, value in new_obj.__dict__.items(): items = new_obj.__dict__.items()
if key in ['parent', '_parent', '_parent_stmt', 'parent_stmt']: for key, value in items:
continue
if isinstance(value, list):
new_obj.__dict__[key] = list_rec(value)
elif isinstance(value, (parsing.Simple, parsing.Call)):
new_obj.__dict__[key] = recursion(value)
# replace parent (first try _parent and then parent) # replace parent (first try _parent and then parent)
if hasattr(obj, '_parent') and obj._parent is not None: if key in ['parent', '_parent', '_parent_stmt'] \
and value is not None:
if key == 'parent' and '_parent' in items:
# parent can be a property
continue
try: try:
new_obj._parent = weakref.ref(new_elements[obj._parent()]) setattr(new_obj, key, weakref.ref(new_elements[value()]))
except KeyError: except KeyError:
pass pass
elif obj.parent is not None: elif key == 'parent_stmt':
try: continue
new_obj.parent = weakref.ref(new_elements[obj.parent()]) elif isinstance(value, list):
except KeyError: setattr(new_obj, key, list_rec(value))
pass elif isinstance(value, (parsing.Simple, parsing.Call)):
setattr(new_obj, key, recursion(value))
# replace parent_stmt
if hasattr(obj, '_parent_stmt') and obj._parent_stmt is not None:
p = obj.parent_stmt()
try:
new_obj._parent_stmt = weakref.ref(new_elements[p])
except KeyError:
pass
return new_obj return new_obj
def list_rec(list_obj): def list_rec(list_obj):