Author: Armin Rigo <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit