1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
import py
from rpython.annotator import model as annmodel, annrpython
from rpython.flowspace.model import Constant
from rpython.rtyper import rmodel
from rpython.rtyper.lltypesystem.lltype import Signed, Void
from rpython.rtyper.rtyper import RPythonTyper
from rpython.rtyper.test.test_llinterp import interpret
from rpython.translator.translator import TranslationContext, graphof
def setup_module(mod):
mod.logstate = py.log._getstate()
py.log.setconsumer("rtyper", py.log.STDOUT)
py.log.setconsumer("annrpython", None)
def teardown_module(mod):
py.log._setstate(mod.logstate)
def test_reprkeys_dont_clash():
stup1 = annmodel.SomeTuple((annmodel.SomeFloat(),
annmodel.SomeInteger()))
stup2 = annmodel.SomeTuple((annmodel.SomeString(),
annmodel.SomeInteger()))
key1 = stup1.rtyper_makekey()
key2 = stup2.rtyper_makekey()
assert key1 != key2
def test_simple():
def dummyfn(x):
return x+1
res = interpret(dummyfn, [7])
assert res == 8
def test_function_call():
def g(x, y):
return x-y
def f(x):
return g(1, x)
res = interpret(f, [4])
assert res == -3
def test_retval():
def f(x):
return x
t = TranslationContext()
t.buildannotator().build_types(f, [int])
t.buildrtyper().specialize()
#t.view()
t.checkgraphs()
graph = graphof(t, f)
assert graph.getreturnvar().concretetype == Signed
assert graph.startblock.exits[0].args[0].concretetype == Signed
def test_retval_None():
def f(x):
pass
t = TranslationContext()
t.buildannotator().build_types(f, [int])
t.buildrtyper().specialize()
#t.view()
t.checkgraphs()
graph = graphof(t, f)
assert graph.getreturnvar().concretetype == Void
assert graph.startblock.exits[0].args[0].concretetype == Void
def test_ll_calling_ll():
import test_llann
tst = test_llann.TestLowLevelAnnotateTestCase()
a, vTs = tst.test_ll_calling_ll()
rt = RPythonTyper(a)
rt.specialize()
assert [vT.concretetype for vT in vTs] == [Void] * 4
def test_ll_calling_ll2():
import test_llann
tst = test_llann.TestLowLevelAnnotateTestCase()
a, vTs = tst.test_ll_calling_ll2()
rt = RPythonTyper(a)
rt.specialize()
assert [vT.concretetype for vT in vTs] == [Void] * 3
def test_getgcflavor():
class A:
pass
class B:
_alloc_flavor_ = "gc"
class R:
_alloc_flavor_ = "raw"
NDF = object()
class DummyClsDescDef:
def __init__(self, cls):
self._cls = cls
self.classdesc = self
self.basedef = None
def getmro(self):
return [self]
def read_attribute(self, attr, default=NDF):
try:
return Constant(getattr(self._cls, attr))
except AttributeError:
if default is NDF:
raise
else:
return default
assert rmodel.getgcflavor(DummyClsDescDef(A)) == 'gc'
assert rmodel.getgcflavor(DummyClsDescDef(B)) == 'gc'
assert rmodel.getgcflavor(DummyClsDescDef(R)) == 'raw'
|