]> granicus.if.org Git - python/commitdiff
Remove _reduce_2, it's now implemented in C.
authorGuido van Rossum <guido@python.org>
Fri, 21 Feb 2003 22:20:31 +0000 (22:20 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 21 Feb 2003 22:20:31 +0000 (22:20 +0000)
Lib/copy_reg.py

index 20e7bcff32cabb485fe99ebb57438c246f1db0d5..2ebafc736b7a27fba25bb6d53a726e629011f587 100644 (file)
@@ -45,7 +45,10 @@ def _reconstructor(cls, base, state):
 
 _HEAPTYPE = 1<<9
 
-def _reduce(self):
+# Python code for object.__reduce_ex__ for protocols 0 and 1
+
+def _reduce_ex(self, proto):
+    assert proto < 2
     for base in self.__class__.__mro__:
         if hasattr(base, '__flags__') and not base.__flags__ & _HEAPTYPE:
             break
@@ -75,51 +78,11 @@ def _reduce(self):
     else:
         return _reconstructor, args
 
-# A better version of _reduce, used by copy and pickle protocol 2
+# Helper for __reduce_ex__ protocol 2
 
 def __newobj__(cls, *args):
     return cls.__new__(cls, *args)
 
-def _reduce_2(obj):
-    cls = obj.__class__
-    getnewargs = getattr(obj, "__getnewargs__", None)
-    if getnewargs:
-        args = getnewargs()
-    else:
-        args = ()
-    getstate = getattr(obj, "__getstate__", None)
-    if getstate:
-        state = getstate()
-    else:
-        state = getattr(obj, "__dict__", None)
-        names = _slotnames(cls)
-        if names:
-            slots = {}
-            nil = []
-            for name in names:
-                value = getattr(obj, name, nil)
-                if value is not nil:
-                    slots[name] = value
-            if slots:
-                state = (state, slots)
-    listitems = dictitems = None
-    if isinstance(obj, list):
-        listitems = iter(obj)
-    elif isinstance(obj, dict):
-        dictitems = obj.iteritems()
-    return __newobj__, (cls,) + args, state, listitems, dictitems
-
-# Extended reduce:
-
-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:
-        return _reduce_2(obj)
-
 def _slotnames(cls):
     """Return a list of slot names for a given class.