Author: Armin Rigo <ar...@tunes.org> Branch: mapdict-interp Changeset: r44246:59519f8875b6 Date: 2011-05-17 15:38 +0200 http://bitbucket.org/pypy/pypy/changeset/59519f8875b6/
Log: Trying to fix the bug. diff --git a/pypy/config/pypyoption.py b/pypy/config/pypyoption.py --- a/pypy/config/pypyoption.py +++ b/pypy/config/pypyoption.py @@ -269,7 +269,7 @@ "make instances really small but slow without the JIT", default=False, requires=[("objspace.std.getattributeshortcut", True), - ("objspace.std.withtypeversion", True), + ("objspace.std.withmethodcache", True), ]), BoolOption("withrangelist", diff --git a/pypy/objspace/std/callmethod.py b/pypy/objspace/std/callmethod.py --- a/pypy/objspace/std/callmethod.py +++ b/pypy/objspace/std/callmethod.py @@ -64,7 +64,7 @@ not jit.we_are_jitted()): # let mapdict cache stuff LOOKUP_METHOD_mapdict_fill_cache_method( - f.getcode(), nameindex, w_obj, w_type, w_descr) + space, f.getcode(), name, nameindex, w_obj, w_type) return if w_value is None: w_value = space.getattr(w_obj, w_name) diff --git a/pypy/objspace/std/mapdict.py b/pypy/objspace/std/mapdict.py --- a/pypy/objspace/std/mapdict.py +++ b/pypy/objspace/std/mapdict.py @@ -8,6 +8,7 @@ from pypy.objspace.std.dictmultiobject import IteratorImplementation from pypy.objspace.std.dictmultiobject import _is_sane_hash from pypy.objspace.std.objectobject import W_ObjectObject +from pypy.objspace.std.typeobject import TypeCell # ____________________________________________________________ # attribute shapes @@ -790,11 +791,17 @@ return True return False -def LOOKUP_METHOD_mapdict_fill_cache_method(pycode, nameindex, w_obj, w_type, w_method): +def LOOKUP_METHOD_mapdict_fill_cache_method(space, pycode, name, nameindex, + w_obj, w_type): version_tag = w_type.version_tag() if version_tag is None: return map = w_obj._get_mapdict_map() if map is None or isinstance(map.terminator, DevolvedDictTerminator): return + assert space.config.objspace.std.withmethodcache + _, w_method = w_type._pure_lookup_where_with_method_cache(name, + version_tag) + if w_method is None or isinstance(w_method, TypeCell): + return _fill_cache(pycode, nameindex, map, version_tag, -1, w_method) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit