[pypy-svn] pypy default: (lukas) Rerased pointer patch
bivab
commits-noreply at bitbucket.org
Wed Mar 16 14:47:00 CET 2011
Author: David Schneider <david.schneider at picle.org>
Branch:
Changeset: r42713:d1981fab95dd
Date: 2011-03-16 14:43 +0100
http://bitbucket.org/pypy/pypy/changeset/d1981fab95dd/
Log: (lukas) Rerased pointer patch
diff --git a/pypy/rlib/rerased.py b/pypy/rlib/rerased.py
--- a/pypy/rlib/rerased.py
+++ b/pypy/rlib/rerased.py
@@ -220,5 +220,7 @@
bk = self.rtyper.annotator.bookkeeper
s_obj = value._identity.get_input_annotation(bk)
r_obj = self.rtyper.getrepr(s_obj)
+ if r_obj.lowleveltype is lltype.Void:
+ return lltype.nullptr(self.lowleveltype.TO)
v = r_obj.convert_const(value._x)
return lltype.cast_opaque_ptr(self.lowleveltype, v)
diff --git a/pypy/rlib/test/test_rerased.py b/pypy/rlib/test/test_rerased.py
--- a/pypy/rlib/test/test_rerased.py
+++ b/pypy/rlib/test/test_rerased.py
@@ -120,6 +120,28 @@
x = interpret(f, [])
assert x == 16 + 42 + 1
+def test_prebuilt_erased_in_instance():
+ erase_empty, unerase_empty = new_erasing_pair("empty")
+ class FakeList(object):
+ pass
+
+ x1 = X()
+ x1.foobar = 42
+ l1 = FakeList()
+ l1.storage = eraseX(x1)
+ l2 = FakeList()
+ l2.storage = erase_empty(None)
+
+ def f():
+ #assert is_integer(e1)
+ #assert not is_integer(e2)
+ x1.foobar += 1
+ x2 = uneraseX(l1.storage).foobar + (unerase_empty(l2.storage) is None)
+ return x2
+ x = interpret(f, [])
+ assert x == 43 + True
+
+
def test_overflow():
def f(i):
try:
More information about the Pypy-commit
mailing list