[pypy-svn] r55062 - in pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk: . test
tverwaes at codespeak.net
tverwaes at codespeak.net
Wed May 21 14:55:57 CEST 2008
Author: tverwaes
Date: Wed May 21 14:55:54 2008
New Revision: 55062
Modified:
pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/model.py
pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/shadow.py
pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/test/test_shadow.py
Log:
fixing shadow replacing
Modified: pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/model.py
==============================================================================
--- pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/model.py (original)
+++ pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/model.py Wed May 21 14:55:54 2008
@@ -306,8 +306,7 @@
if shadow is None:
shadow = self.attach_shadow_of_class(TheClass)
elif not isinstance(shadow, TheClass):
- # TODO Add test for this
- shadow.invalidate_shadow()
+ shadow.detach_shadow()
shadow = self.attach_shadow_of_class(TheClass)
shadow.sync_shadow()
return shadow
Modified: pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/shadow.py
==============================================================================
--- pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/shadow.py (original)
+++ pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/shadow.py Wed May 21 14:55:54 2008
@@ -27,6 +27,10 @@
AbstractShadow.__init__(self, w_self)
self.invalid = True
self.invalidate_shadow()
+
+ def detach_shadow(self):
+ self.invalidate_shadow()
+
def invalidate_shadow(self):
"""This should get called whenever the base Smalltalk
object changes."""
Modified: pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/test/test_shadow.py
==============================================================================
--- pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/test/test_shadow.py (original)
+++ pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/test/test_shadow.py Wed May 21 14:55:54 2008
@@ -165,3 +165,17 @@
s_object.detach_shadow()
assert w_object._vars == old_vars
assert w_object._vars is not old_vars
+
+def test_replace_to_bc():
+ w_object = blockcontext(pc=13)
+ old_vars = w_object._vars
+ s_object = w_object.as_blockcontext_get_shadow()
+ s_object.detach_shadow()
+ s_classshadow = shadow.ClassShadow(w_object)
+ w_object._shadow = s_classshadow
+ s_classshadow.invalid = False
+ s_newobject = w_object.as_blockcontext_get_shadow()
+ assert s_classshadow.invalid
+ assert ([s_newobject.fetch(i) for i in range(s_newobject.size())] ==
+ [s_object.fetch(i) for i in range(s_newobject.size())])
+ assert w_object._shadow is s_newobject
More information about the Pypy-commit
mailing list