Author: Tim Felgentreff <[email protected]>
Branch:
Changeset: r185:5bdb7538ffe1
Date: 2013-03-16 10:38 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/5bdb7538ffe1/
Log: Make sure we create new W_Float objects, too
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)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit