[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