Author: Lars Wassermann <[email protected]>
Branch:
Changeset: r254:db4538a2badf
Date: 2013-04-11 15:03 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/db4538a2badf/
Log: (cfbolz, lwassermann): prepared a typetest for s_class field
diff --git a/spyvm/model.py b/spyvm/model.py
--- a/spyvm/model.py
+++ b/spyvm/model.py
@@ -17,7 +17,7 @@
import sys
from spyvm import constants, error
-from rpython.rlib import rrandom, objectmodel, jit
+from rpython.rlib import rrandom, objectmodel, jit, signature
from rpython.rlib.rarithmetic import intmask, r_uint
from rpython.tool.pairtype import extendabletype
from rpython.rlib.objectmodel import instantiate, compute_hash
@@ -373,7 +373,7 @@
def size(self):
return 2
-
[email protected]
class W_AbstractObjectWithClassReference(W_AbstractObjectWithIdentityHash):
"""Objects with arbitrary class (ie not CompiledMethod, SmallInteger or
Float)."""
@@ -422,9 +422,13 @@
def has_class(self):
return self.s_class is not None
+ # we would like the following, but that leads to a recursive import
+ #@signature(signature.types.self(), signature.type.any(),
+ # returns=signature.types.instance(ClassShadow))
def shadow_of_my_class(self, space):
- assert self.s_class is not None
- return self.s_class
+ s_class = self.s_class
+ assert s_class is not None
+ return s_class
class W_PointersObject(W_AbstractObjectWithClassReference):
"""Common object."""
@@ -525,10 +529,13 @@
# Should only be used during squeak-image loading.
def as_class_get_penumbra(self, space):
from spyvm.shadow import ClassShadow
- assert self._shadow is None or isinstance(self._shadow, ClassShadow)
- if self._shadow is None:
- self.store_shadow(ClassShadow(space, self))
- return self._shadow
+ s_class = self._shadow
+ if s_class is None:
+ s_class = ClassShadow(space, self)
+ self.store_shadow(s_class)
+ else:
+ assert isinstance(s_class, ClassShadow)
+ return s_class
def as_blockcontext_get_shadow(self, space):
from spyvm.shadow import BlockContextShadow
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit