[pypy-commit] lang-smalltalk bitblt: merge default

timfel noreply at buildbot.pypy.org
Sat Mar 16 13:35:39 CET 2013


Author: Tim Felgentreff <timfelgentreff at gmail.com>
Branch: bitblt
Changeset: r186:ec5c2d502e64
Date: 2013-03-16 10:39 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/ec5c2d502e64/

Log:	merge default

diff --git a/spyvm/shadow.py b/spyvm/shadow.py
--- a/spyvm/shadow.py
+++ b/spyvm/shadow.py
@@ -71,7 +71,8 @@
 WORDS = 2
 WEAK_POINTERS = 3
 COMPILED_METHOD = 4
-
+FLOAT = 5
+DISPLAY_SCREEN = 6
 
 class MethodNotFound(error.SmalltalkException):
     pass
@@ -128,7 +129,10 @@
             elif format == 4:
                 self.instance_kind = WEAK_POINTERS
             elif format == 6:
-                self.instance_kind = WORDS
+                if self.space.w_Float.is_same_object(self.w_self()):
+                    self.instance_kind = FLOAT
+                else:
+                    self.instance_kind = WORDS
                 if self.instsize() != 0:
                     raise ClassShadowError("can't have both words and a non-zero "
                                            "base instance size")
@@ -201,6 +205,8 @@
             w_new = model.W_BytesObject(w_cls, extrasize)
         elif self.instance_kind == COMPILED_METHOD:
             w_new = model.W_CompiledMethod(extrasize)
+        elif self.instance_kind == FLOAT:
+            w_new = model.W_Float(0) # Squeak gives a random piece of memory
         else:
             raise NotImplementedError(self.instance_kind)
         return w_new
diff --git a/spyvm/test/test_miniimage.py b/spyvm/test/test_miniimage.py
--- a/spyvm/test/test_miniimage.py
+++ b/spyvm/test/test_miniimage.py
@@ -343,3 +343,8 @@
     assert w_result is not None
     assert isinstance(w_result, model.W_Float)
     assert w_result.value == math.pi
+
+def test_new_float_as_w_float():
+    w_result = perform(interp.space.w_Float, "new")
+    assert w_result is not None
+    assert isinstance(w_result, model.W_Float)


More information about the pypy-commit mailing list