[pypy-svn] r51803 - in pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk: . test

tverwaes at codespeak.net tverwaes at codespeak.net
Fri Feb 22 16:57:12 CET 2008


Author: tverwaes
Date: Fri Feb 22 16:57:10 2008
New Revision: 51803

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:
adding tests for shadow changes + basic nameprints for object of which we have
a shadow


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	Fri Feb 22 16:57:10 2008
@@ -125,9 +125,8 @@
         return "<%s %s>" % (self.__class__.__name__, self)
 
     def __str__(self):
-        from pypy.lang.smalltalk.shadow import ClassShadow
-        if isinstance(self, W_PointersObject) and isinstance(self._shadow,ClassShadow):
-            return "%s class" % (self.as_class_get_shadow().name or '?',)
+        if isinstance(self, W_PointersObject) and self._shadow is not None:
+            return self._shadow.getname()
         else:
             return "a %s" % (self.shadow_of_my_class().name or '?',)
 
@@ -202,9 +201,6 @@
         return shadow
 
     def as_link_get_shadow(self):
-        from pypy.lang.smalltalk import classtable
-        if self.getclass() == classtable.w_Process:
-            return self.as_process_get_shadow()
         from pypy.lang.smalltalk.shadow import LinkShadow
         return self.as_special_get_shadow(LinkShadow)
     
@@ -213,9 +209,6 @@
         return self.as_special_get_shadow(SemaphoreShadow)
 
     def as_linkedlist_get_shadow(self):
-        from pypy.lang.smalltalk import classtable
-        if self.getclass() == classtable.w_Semaphore:
-            return self.as_semaphore_get_shadow()
         from pypy.lang.smalltalk.shadow import LinkedListShadow
         return self.as_special_get_shadow(LinkedListShadow)
 
@@ -240,14 +233,8 @@
         return self.as_special_get_shadow(MethodContextShadow)
 
     def as_context_get_shadow(self):
-        from pypy.lang.smalltalk import classtable
-        if self.getclass() == classtable.w_MethodContext:
-            return self.as_methodcontext_get_shadow()
-        elif self.getclass() == classtable.w_BlockContext:
-            return self.as_blockcontext_get_shadow()
-        else:
-            # Should not happen...
-            raise Exception()
+        from pypy.lang.smalltalk.shadow import ContextPartShadow
+        return self.as_special_get_shadow(ContextPartShadow)
 
     def equals(self, other):
         if not isinstance(other, W_PointersObject):

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	Fri Feb 22 16:57:10 2008
@@ -10,6 +10,9 @@
         self._w_self = w_self
         self.invalidate()
 
+    def getname(self):
+        return repr(self)
+
     def invalidate(self):
         """XXX This should get called whenever the base Smalltalk
         object changes."""
@@ -56,6 +59,9 @@
         self.s_superclass = None     # the ClassShadow of the super class
         self.name = None
 
+    def getname(self):
+        return "%s class" % (self.name or '?',)
+
     def update_shadow(self):
         from pypy.lang.smalltalk import objtable
 
@@ -409,6 +415,10 @@
     def update_shadow(self):
         pass
 
+    # XXX XXX Remove function when fixing superclass to AbstractShadow
+    def getname(self):
+        return repr(self)
+
     def w_receiver(self):
         " Return self of the method, or the method that contains the block "
         return self.s_home().w_receiver()

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	Fri Feb 22 16:57:10 2008
@@ -205,3 +205,22 @@
     s_object.add_last_link(w_last)
     assert s_object.w_firstlink() == w_first
     assert s_object.w_lastlink() == w_last
+
+def test_shadowchanges():
+    w_object = model.W_PointersObject(None, 2)
+    w_o1 = link('a')
+    w_o2 = link('b')
+    w_object.store(0, w_o1)
+    w_object.store(1, w_o2)
+    s_object = w_object.as_linkedlist_get_shadow()
+    assert s_object.w_firstlink() == w_o1
+    assert s_object.w_lastlink() == w_o2
+    assert w_object._shadow == s_object
+    s_object2 = w_object.as_association_get_shadow()
+    assert s_object2.key() == w_o1
+    assert s_object2.value() == w_o2
+    assert w_object._shadow == s_object2
+    s_object.check_for_updates()
+    assert s_object.w_firstlink() == w_o1
+    assert s_object.w_lastlink() == w_o2
+    assert w_object._shadow == s_object



More information about the Pypy-commit mailing list