[pypy-svn] r9661 - pypy/dist/pypy/translator/test
arigo at codespeak.net
arigo at codespeak.net
Sat Mar 5 16:51:51 CET 2005
Author: arigo
Date: Sat Mar 5 16:51:51 2005
New Revision: 9661
Modified:
pypy/dist/pypy/translator/test/snippet.py
pypy/dist/pypy/translator/test/test_annrpython.py
Log:
A test to verify that method calls are precise.
Modified: pypy/dist/pypy/translator/test/snippet.py
==============================================================================
--- pypy/dist/pypy/translator/test/snippet.py (original)
+++ pypy/dist/pypy/translator/test/snippet.py Sat Mar 5 16:51:51 2005
@@ -465,6 +465,21 @@
i = MI_D()
return i.a + i.b + i.c + i.d
+class CBase(object):
+ pass
+class CSub1(CBase):
+ def m(self):
+ self.x = 42
+ return self
+class CSub2(CBase):
+ def m(self):
+ self.x = 'world'
+ return self
+
+def methodcall_is_precise():
+ return (CSub1().m(), CSub2().m())
+
+
def flow_type_info(i):
if isinstance(i, int):
a = i + 1
Modified: pypy/dist/pypy/translator/test/test_annrpython.py
==============================================================================
--- pypy/dist/pypy/translator/test/test_annrpython.py (original)
+++ pypy/dist/pypy/translator/test/test_annrpython.py Sat Mar 5 16:51:51 2005
@@ -558,6 +558,19 @@
assert s.knowntype == int
assert not s.is_constant() # !
+ def test_methodcall_is_precise(self):
+ a = RPythonAnnotator()
+ s = a.build_types(snippet.methodcall_is_precise, [])
+ classes = a.bookkeeper.userclasses
+ assert s == annmodel.SomeTuple([
+ annmodel.SomeInstance(classes[snippet.CSub1]),
+ annmodel.SomeInstance(classes[snippet.CSub2])])
+ assert 'x' not in classes[snippet.CBase].attrs
+ assert (classes[snippet.CSub1].attrs['x'].s_value ==
+ a.bookkeeper.immutablevalue(42))
+ assert (classes[snippet.CSub2].attrs['x'].s_value ==
+ a.bookkeeper.immutablevalue('world'))
+
def g(n):
return [0,1,2,n]
More information about the Pypy-commit
mailing list