Author: Alex Gaynor <[email protected]>
Branch:
Changeset: r65360:d1430383faa5
Date: 2013-07-12 09:19 +1000
http://bitbucket.org/pypy/pypy/changeset/d1430383faa5/
Log: A failing (xfail) test for VirtualizableAnalyzer with indirect
construction of an object.
diff --git a/rpython/jit/codewriter/test/test_effectinfo.py
b/rpython/jit/codewriter/test/test_effectinfo.py
--- a/rpython/jit/codewriter/test/test_effectinfo.py
+++ b/rpython/jit/codewriter/test/test_effectinfo.py
@@ -1,15 +1,22 @@
+import pytest
+
+from rpython.jit.codewriter.effectinfo import (effectinfo_from_writeanalyze,
+ EffectInfo, VirtualizableAnalyzer)
+from rpython.rlib import jit
+from rpython.rtyper.lltypesystem import lltype
from rpython.rtyper.lltypesystem.rclass import OBJECT
-from rpython.rtyper.lltypesystem import lltype
from rpython.rtyper.ootypesystem import ootype
-from rpython.jit.codewriter.effectinfo import effectinfo_from_writeanalyze,\
- EffectInfo
+from rpython.translator.translator import TranslationContext, graphof
-class FakeCPU:
+
+class FakeCPU(object):
def fielddescrof(self, T, fieldname):
return ('fielddescr', T, fieldname)
+
def arraydescrof(self, A):
return ('arraydescr', A)
+
def test_no_oopspec_duplicate():
# check that all the various EffectInfo.OS_* have unique values
oopspecs = set()
@@ -18,6 +25,7 @@
assert value not in oopspecs
oopspecs.add(value)
+
def test_include_read_field():
S = lltype.GcStruct("S", ("a", lltype.Signed))
effects = frozenset([("readstruct", lltype.Ptr(S), "a")])
@@ -26,6 +34,7 @@
assert not effectinfo.write_descrs_fields
assert not effectinfo.write_descrs_arrays
+
def test_include_write_field():
S = lltype.GcStruct("S", ("a", lltype.Signed))
effects = frozenset([("struct", lltype.Ptr(S), "a")])
@@ -34,6 +43,7 @@
assert not effectinfo.readonly_descrs_fields
assert not effectinfo.write_descrs_arrays
+
def test_include_read_array():
A = lltype.GcArray(lltype.Signed)
effects = frozenset([("readarray", lltype.Ptr(A))])
@@ -43,6 +53,7 @@
assert not effectinfo.write_descrs_fields
assert not effectinfo.write_descrs_arrays
+
def test_include_write_array():
A = lltype.GcArray(lltype.Signed)
effects = frozenset([("array", lltype.Ptr(A))])
@@ -51,6 +62,7 @@
assert not effectinfo.write_descrs_fields
assert list(effectinfo.write_descrs_arrays) == [('arraydescr', A)]
+
def test_dont_include_read_and_write_field():
S = lltype.GcStruct("S", ("a", lltype.Signed))
effects = frozenset([("readstruct", lltype.Ptr(S), "a"),
@@ -60,6 +72,7 @@
assert list(effectinfo.write_descrs_fields) == [('fielddescr', S, "a")]
assert not effectinfo.write_descrs_arrays
+
def test_dont_include_read_and_write_array():
A = lltype.GcArray(lltype.Signed)
effects = frozenset([("readarray", lltype.Ptr(A)),
@@ -78,6 +91,7 @@
assert not effectinfo.write_descrs_fields
assert not effectinfo.write_descrs_arrays
+
def test_filter_out_array_of_void():
effects = frozenset([("array", lltype.Ptr(lltype.GcArray(lltype.Void)))])
effectinfo = effectinfo_from_writeanalyze(effects, None)
@@ -85,6 +99,7 @@
assert not effectinfo.write_descrs_fields
assert not effectinfo.write_descrs_arrays
+
def test_filter_out_struct_with_void():
effects = frozenset([("struct", lltype.Ptr(lltype.GcStruct("x", ("a",
lltype.Void))), "a")])
effectinfo = effectinfo_from_writeanalyze(effects, None)
@@ -92,6 +107,7 @@
assert not effectinfo.write_descrs_fields
assert not effectinfo.write_descrs_arrays
+
def test_filter_out_ooarray_of_void():
effects = frozenset([("array", ootype.Array(ootype.Void))])
effectinfo = effectinfo_from_writeanalyze(effects, None)
@@ -99,9 +115,44 @@
assert not effectinfo.write_descrs_fields
assert not effectinfo.write_descrs_arrays
+
def test_filter_out_instance_with_void():
effects = frozenset([("struct", ootype.Instance("x", ootype.ROOT, {"a":
ootype.Void}), "a")])
effectinfo = effectinfo_from_writeanalyze(effects, None)
assert not effectinfo.readonly_descrs_fields
assert not effectinfo.write_descrs_fields
assert not effectinfo.write_descrs_arrays
+
+
+class TestVirtualizableAnalyzer(object):
+ def analyze(self, func, sig):
+ t = TranslationContext()
+ t.buildannotator().build_types(func, sig)
+ t.buildrtyper().specialize()
+ fgraph = graphof(t, func)
+ return
VirtualizableAnalyzer(t).analyze(fgraph.startblock.operations[0])
+
+ @pytest.mark.xfail
+ def test_constructor(self):
+ class A(object):
+ x = 1
+
+ class B(A):
+ x = 2
+
+ @jit.elidable
+ def g(cls):
+ return cls()
+
+ def f(x):
+ if x:
+ cls = A
+ else:
+ cls = B
+ return g(cls).x
+
+ def entry(x):
+ return f(x)
+
+ res = self.analyze(entry, [int])
+ assert not res
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit