[pypy-svn] r26554 - pypy/dist/lib-python/modified-2.4.1

ericvrp at codespeak.net ericvrp at codespeak.net
Sat Apr 29 06:26:28 CEST 2006


Author: ericvrp
Date: Sat Apr 29 06:26:25 2006
New Revision: 26554

Modified:
   pypy/dist/lib-python/modified-2.4.1/pickle.py
Log:
moduledict pickling support


Modified: pypy/dist/lib-python/modified-2.4.1/pickle.py
==============================================================================
--- pypy/dist/lib-python/modified-2.4.1/pickle.py	(original)
+++ pypy/dist/lib-python/modified-2.4.1/pickle.py	Sat Apr 29 06:26:25 2006
@@ -212,14 +212,25 @@
         self.proto = int(protocol)
         self.bin = protocol >= 1
         self.fast = 0
-        ## Stackless addition BEGIN
-        #XXX support not included yet in pypy
+    
+    def _pickle_moduledict(self, obj):
         try:
-            from stackless import _pickle_moduledict
-        except ImportError:
-            _pickle_moduledict = lambda self, obj:None
-        self._pickle_moduledict = _pickle_moduledict
-        ## Stackless addition END
+            modict = self.module_dict_ids
+        except AttributeError:
+            modict = {}
+            from sys import modules
+            for mod in modules.values():
+                if isinstance(mod, ModuleType):
+                    modict[id(mod.__dict__)] = mod
+            self.module_dict_ids = modict
+    		
+        thisid = id(obj)
+        try:
+            themodule = modict[thisid]
+        except KeyError:
+            return None
+        from __builtin__ import getattr
+        return getattr, (themodule, '__dict__')
 
     def clear_memo(self):
         """Clears the pickler's "memo".
@@ -661,10 +672,11 @@
 
     def save_dict(self, obj):
         ## Stackless addition BEGIN
-        modict_saver = self._pickle_moduledict(self, obj)
+        modict_saver = self._pickle_moduledict(obj)
         if modict_saver is not None:
             return self.save_reduce(*modict_saver)
         ## Stackless addition END
+
         write = self.write
 
         if self.bin:



More information about the Pypy-commit mailing list