[pypy-commit] pypy default: add the equivalent test for LOAD_ATTR. that already works, update the comment
cfbolz
pypy.commits at gmail.com
Wed Aug 24 06:53:03 EDT 2016
Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch:
Changeset: r86492:c25842df0d7d
Date: 2016-08-24 11:51 +0100
http://bitbucket.org/pypy/pypy/changeset/c25842df0d7d/
Log: add the equivalent test for LOAD_ATTR. that already works, update
the comment explaining why
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
@@ -992,7 +992,8 @@
if index != INVALID:
attr = map.find_map_attr(attrname, index)
if attr is not None:
- # Note that if map.terminator is a DevolvedDictTerminator,
+ # Note that if map.terminator is a DevolvedDictTerminator
+ # or the class provides its own dict, not using mapdict, then:
# map.find_map_attr will always return None if index==DICT.
_fill_cache(pycode, nameindex, map, version_tag, attr.storageindex)
return w_obj._mapdict_read_storage(attr.storageindex)
diff --git a/pypy/objspace/std/test/test_mapdict.py b/pypy/objspace/std/test/test_mapdict.py
--- a/pypy/objspace/std/test/test_mapdict.py
+++ b/pypy/objspace/std/test/test_mapdict.py
@@ -1233,6 +1233,25 @@
assert res1 == "mymethod"
assert res2 == "foobar"
+ def test_bug_builtin_types_load_attr(self):
+ import sys
+ class D(type(sys)):
+ def mymethod(self):
+ return "mymethod"
+
+ def foobar():
+ return "foobar"
+
+ d = D('d')
+ m = d.mymethod
+ res1 = m()
+ d.mymethod = foobar
+ m = d.mymethod
+ res2 = m()
+ assert res1 == "mymethod"
+ assert res2 == "foobar"
+
+
class AppTestGlobalCaching(AppTestWithMapDict):
spaceconfig = {"objspace.std.withmethodcachecounter": True}
More information about the pypy-commit
mailing list