[Python-checkins] python/dist/src/Lib copy.py,1.36,1.37 copy_reg.py,1.21,1.22
gvanrossum@users.sourceforge.net
gvanrossum@users.sourceforge.net
Tue, 18 Feb 2003 17:19:30 -0800
Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1:/tmp/cvs-serv23765
Modified Files:
copy.py copy_reg.py
Log Message:
Use __reduce_ex__ in copy.py. The test_*copy_cant() tests are simpler again.
Index: copy.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/copy.py,v
retrieving revision 1.36
retrieving revision 1.37
diff -C2 -d -r1.36 -r1.37
*** copy.py 7 Feb 2003 17:53:20 -0000 1.36
--- copy.py 19 Feb 2003 01:19:27 -0000 1.37
***************
*** 80,91 ****
reductor = dispatch_table.get(cls)
! if not reductor:
! reductor = getattr(cls, "__reduce__", None)
! if reductor == object.__reduce__:
! reductor = _better_reduce
! elif not reductor:
! raise Error("un(shallow)copyable object of type %s" % cls)
! return _reconstruct(x, reductor(x), 0)
--- 80,97 ----
reductor = dispatch_table.get(cls)
! if reductor:
! rv = reductor(x)
! else:
! reductor = getattr(x, "__reduce_ex__", None)
! if reductor:
! rv = reductor(2)
! else:
! reductor = getattr(x, "__reduce__", None)
! if reductor:
! rv = reductor()
! else:
! raise Error("un(shallow)copyable object of type %s" % cls)
! return _reconstruct(x, rv, 0)
***************
*** 177,195 ****
issc = 0
if issc:
! copier = _deepcopy_atomic
! else:
! copier = getattr(cls, "__deepcopy__", None)
!
! if copier:
! y = copier(x, memo)
else:
! reductor = dispatch_table.get(cls)
! if not reductor:
! reductor = getattr(cls, "__reduce__", None)
! if reductor == object.__reduce__:
! reductor = _better_reduce
! elif not reductor:
! raise Error("un(deep)copyable object of type %s" % cls)
! y = _reconstruct(x, reductor(x), 1, memo)
memo[d] = y
--- 183,207 ----
issc = 0
if issc:
! y = _deepcopy_atomic(x, memo)
else:
! copier = getattr(x, "__deepcopy__", None)
! if copier:
! y = copier(memo)
! else:
! reductor = dispatch_table.get(cls)
! if reductor:
! rv = reductor(x)
! else:
! reductor = getattr(x, "__reduce_ex__", None)
! if reductor:
! rv = reductor(2)
! else:
! reductor = getattr(x, "__reduce__", None)
! if reductor:
! rv = reductor()
! else:
! raise Error(
! "un(deep)copyable object of type %s" % cls)
! y = _reconstruct(x, rv, 1, memo)
memo[d] = y
Index: copy_reg.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/copy_reg.py,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** copy_reg.py 18 Feb 2003 22:05:11 -0000 1.21
--- copy_reg.py 19 Feb 2003 01:19:27 -0000 1.22
***************
*** 114,120 ****
def _reduce_ex(obj, proto=0):
obj_reduce = getattr(obj, "__reduce__", None)
! if obj_reduce and obj.__class__.__reduce__ is not object.__reduce__:
! return obj_reduce()
! elif proto < 2:
return _reduce(obj)
else:
--- 114,125 ----
def _reduce_ex(obj, proto=0):
obj_reduce = getattr(obj, "__reduce__", None)
! # XXX This fails in test_copy.py line 61
! if obj_reduce:
! try:
! if obj.__class__.__reduce__ is not object.__reduce__:
! return obj_reduce()
! except AttributeError:
! pass
! if proto < 2:
return _reduce(obj)
else: