[pypy-commit] pypy default: (fijal, arigo, cfbolz) Fix (hopefully) the case where deleting and
fijal
noreply at buildbot.pypy.org
Fri Jan 31 13:59:27 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch:
Changeset: r69035:74b0b82fd9e2
Date: 2014-01-31 13:45 +0100
http://bitbucket.org/pypy/pypy/changeset/74b0b82fd9e2/
Log: (fijal, arigo, cfbolz) Fix (hopefully) the case where deleting and
reinstantiating the attribute does not mark it as mutated
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
@@ -57,7 +57,7 @@
return True
def delete(self, obj, selector):
- return None
+ pass
def find_map_attr(self, selector):
if jit.we_are_jitted():
@@ -291,6 +291,7 @@
def delete(self, obj, selector):
if selector == self.selector:
# ok, attribute is deleted
+ self.ever_mutated = True
return self.back.copy(obj)
new_obj = self.back.delete(obj, selector)
if new_obj is not None:
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
@@ -144,7 +144,17 @@
assert obj2.map.back.ever_mutated == True
assert obj2.map is obj.map
-
+def test_attr_immutability_delete(monkeypatch):
+ cls = Class()
+ obj = cls.instantiate()
+ obj.setdictvalue(space, "a", 10)
+ map1 = obj.map
+ import pdb
+ pdb.set_trace()
+ obj.deldictvalue(space, "a")
+ obj.setdictvalue(space, "a", 20)
+ assert obj.map.ever_mutated == True
+ assert obj.map is map1
def test_delete():
for i, dattr in enumerate(["a", "b", "c"]):
More information about the pypy-commit
mailing list