[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