[pypy-svn] r73089 - in pypy/branch/reduce-instance-size-experiments/pypy/rlib: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Mon Mar 29 17:35:48 CEST 2010


Author: cfbolz
Date: Mon Mar 29 17:35:46 2010
New Revision: 73089

Modified:
   pypy/branch/reduce-instance-size-experiments/pypy/rlib/rerased.py
   pypy/branch/reduce-instance-size-experiments/pypy/rlib/test/test_rerased.py
Log:
needed support for erasing of None


Modified: pypy/branch/reduce-instance-size-experiments/pypy/rlib/rerased.py
==============================================================================
--- pypy/branch/reduce-instance-size-experiments/pypy/rlib/rerased.py	(original)
+++ pypy/branch/reduce-instance-size-experiments/pypy/rlib/rerased.py	Mon Mar 29 17:35:46 2010
@@ -49,7 +49,7 @@
     _about_ = erase
 
     def compute_result_annotation(self, s_obj):
-        return someErased
+        return SomeErased()
 
     def specialize_call(self, hop):
         return hop.r_result.specialize_call(hop)
@@ -94,7 +94,7 @@
     def compute_annotation(self):
         from pypy.rlib import _jit_vref
         s_obj = self.bookkeeper.immutablevalue(self.instance._x)
-        return someErased
+        return SomeErased()
 
 # annotation and rtyping support 
 
@@ -112,8 +112,6 @@
     def rtyper_makekey(self):
         return self.__class__,
 
-someErased = SomeErased()
-
 class __extend__(pairtype(SomeErased, SomeErased)):
 
     def union((serased1, serased2)):
@@ -127,8 +125,9 @@
 
     def specialize_call(self, hop):
         s_arg, = hop.args_s
-        if isinstance(s_arg, annmodel.SomeInstance):
-            r_generic_object = getinstancerepr(hop.rtyper, None)
+        r_generic_object = getinstancerepr(hop.rtyper, None)
+        if (isinstance(s_arg, annmodel.SomeInstance) or
+                (s_arg.is_constant() and s_arg.const is None)):
             hop.exception_cannot_occur()
             [v] = hop.inputargs(r_generic_object)   # might generate a cast_pointer
             return v

Modified: pypy/branch/reduce-instance-size-experiments/pypy/rlib/test/test_rerased.py
==============================================================================
--- pypy/branch/reduce-instance-size-experiments/pypy/rlib/test/test_rerased.py	(original)
+++ pypy/branch/reduce-instance-size-experiments/pypy/rlib/test/test_rerased.py	Mon Mar 29 17:35:46 2010
@@ -117,3 +117,10 @@
     assert x == 16
     x = interpret(f, [sys.maxint])
     assert x == -1
+
+def test_none():
+    def foo():
+        return unerase(erase(None), X)
+    assert foo() is None
+    res = interpret(foo, [])
+    assert not res



More information about the Pypy-commit mailing list