[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