[pypy-svn] r69879 - in pypy/branch/virtual-forcing/pypy: annotation rlib rlib/test
arigo at codespeak.net
arigo at codespeak.net
Thu Dec 3 21:57:11 CET 2009
Author: arigo
Date: Thu Dec 3 21:57:09 2009
New Revision: 69879
Modified:
pypy/branch/virtual-forcing/pypy/annotation/binaryop.py
pypy/branch/virtual-forcing/pypy/rlib/_jit_vref.py
pypy/branch/virtual-forcing/pypy/rlib/test/test__jit_vref.py
Log:
Mixing with None is fine.
Modified: pypy/branch/virtual-forcing/pypy/annotation/binaryop.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/annotation/binaryop.py (original)
+++ pypy/branch/virtual-forcing/pypy/annotation/binaryop.py Thu Dec 3 21:57:09 2009
@@ -785,6 +785,8 @@
glob = globals()
loc = locals()
source = py.code.Source("""
+ from pypy.tool.pairtype import pairtype
+ from pypy.annotation.model import SomePBC, SomeObject
class __extend__(pairtype(%(classname)s, SomePBC)):
def union((obj, pbc)):
if pbc.isNone():
Modified: pypy/branch/virtual-forcing/pypy/rlib/_jit_vref.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/rlib/_jit_vref.py (original)
+++ pypy/branch/virtual-forcing/pypy/rlib/_jit_vref.py Thu Dec 3 21:57:09 2009
@@ -1,4 +1,5 @@
from pypy.annotation import model as annmodel
+from pypy.annotation.binaryop import _make_none_union
from pypy.rpython.extregistry import ExtRegistryEntry
from pypy.rpython.rclass import getinstancerepr
from pypy.rpython.rmodel import Repr
@@ -11,6 +12,9 @@
def __init__(self, s_instance):
self.s_instance = s_instance
+ def can_be_none(self):
+ return True
+
def simple_call(self):
return self.s_instance
@@ -22,6 +26,8 @@
def rtyper_makekey(self):
return self.__class__,
+_make_none_union('SomeVRef', 'obj.s_instance', globals())
+
class VRefRepr(Repr):
def __init__(self, rtyper):
@@ -33,5 +39,5 @@
def rtype_simple_call(self, hop):
[v] = hop.inputargs(self)
- v = hop.genop('jit_virtual_force', [v], resulttype = OBJECTPTR)
+ v = hop.genop('jit_force_virtual', [v], resulttype = OBJECTPTR)
return hop.genop('cast_pointer', [v], resulttype = hop.r_result)
Modified: pypy/branch/virtual-forcing/pypy/rlib/test/test__jit_vref.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/rlib/test/test__jit_vref.py (original)
+++ pypy/branch/virtual-forcing/pypy/rlib/test/test__jit_vref.py Thu Dec 3 21:57:09 2009
@@ -52,6 +52,18 @@
assert isinstance(s.s_instance, annmodel.SomeInstance)
assert s.s_instance.classdef == a.bookkeeper.getuniqueclassdef(X)
+def test_annotate_4():
+ def f(n):
+ if n > 0:
+ return virtual_ref(X())
+ else:
+ return None
+ a = RPythonAnnotator()
+ s = a.build_types(f, [int])
+ assert isinstance(s, SomeVRef)
+ assert isinstance(s.s_instance, annmodel.SomeInstance)
+ assert s.s_instance.classdef == a.bookkeeper.getuniqueclassdef(X)
+
def test_rtype_1():
def f():
return virtual_ref(X())
More information about the Pypy-commit
mailing list