Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r55426:2fc954d5e462 Date: 2012-06-06 11:26 +0200 http://bitbucket.org/pypy/pypy/changeset/2fc954d5e462/
Log: Simplify the custom logic to pickle module dictionary (as per Stackless Python). Now it should only work with normal, imported, correctly-__name__ed modules, without needing to walk all of sys.modules. diff --git a/lib-python/2.7/pickle.py b/lib-python/2.7/pickle.py --- a/lib-python/2.7/pickle.py +++ b/lib-python/2.7/pickle.py @@ -638,7 +638,7 @@ # else tmp is empty, and we're done def save_dict(self, obj): - modict_saver = self._pickle_moduledict(obj) + modict_saver = self._pickle_maybe_moduledict(obj) if modict_saver is not None: return self.save_reduce(*modict_saver) @@ -691,26 +691,17 @@ write(SETITEM) # else tmp is empty, and we're done - def _pickle_moduledict(self, obj): + def _pickle_maybe_moduledict(self, obj): # save module dictionary as "getattr(module, '__dict__')" + try: + themodule = sys.modules[obj['__name__']] + if type(themodule) is not ModuleType: + return None + if themodule.__dict__ is not obj: + return None + except (AttributeError, KeyError, TypeError): + return None - # build index of module dictionaries - try: - 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__') _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit