Author: mattip <matti.pi...@gmail.com> Branch: Changeset: r59794:f84c2c99dbe3 Date: 2013-01-06 00:08 +0200 http://bitbucket.org/pypy/pypy/changeset/f84c2c99dbe3/
Log: merge heads diff --git a/pypy/rlib/rgc.py b/pypy/rlib/rgc.py --- a/pypy/rlib/rgc.py +++ b/pypy/rlib/rgc.py @@ -176,13 +176,12 @@ @specialize.memo() def _contains_gcptr(TP): - TP = TP.OF if not isinstance(TP, lltype.Struct): if isinstance(TP, lltype.Ptr) and TP.TO._gckind == 'gc': return True return False for TP in TP._flds.itervalues(): - if isinstance(TP, lltype.Ptr) and TP.TO._gckind == 'gc': + if _contains_gcptr(TP): return True return False @@ -208,7 +207,7 @@ TP = lltype.typeOf(source).TO assert TP == lltype.typeOf(dest).TO - if _contains_gcptr(TP): + if _contains_gcptr(TP.OF): # perform a write barrier that copies necessary flags from # source to dest if not llop.gc_writebarrier_before_copy(lltype.Bool, source, dest, diff --git a/pypy/rlib/test/test_rgc.py b/pypy/rlib/test/test_rgc.py --- a/pypy/rlib/test/test_rgc.py +++ b/pypy/rlib/test/test_rgc.py @@ -159,17 +159,20 @@ assert a2[2].y == 15 def test__contains_gcptr(): - assert not rgc._contains_gcptr(lltype.GcArray(lltype.Signed)) - assert not rgc._contains_gcptr(lltype.GcArray( - lltype.Struct('x', ('x', lltype.Signed)))) - assert rgc._contains_gcptr(lltype.GcArray( + assert not rgc._contains_gcptr(lltype.Signed) + assert not rgc._contains_gcptr( + lltype.Struct('x', ('x', lltype.Signed))) + assert rgc._contains_gcptr( lltype.Struct('x', ('x', lltype.Signed), - ('y', lltype.Ptr(lltype.GcArray(lltype.Signed)))))) - assert rgc._contains_gcptr(lltype.GcArray( + ('y', lltype.Ptr(lltype.GcArray(lltype.Signed))))) + assert rgc._contains_gcptr( lltype.Struct('x', ('x', lltype.Signed), - ('y', llmemory.GCREF)))) - assert rgc._contains_gcptr(lltype.GcArray(lltype.Ptr(lltype.GcStruct('x')))) - assert not rgc._contains_gcptr(lltype.GcArray(lltype.Ptr(lltype.Struct('x')))) + ('y', llmemory.GCREF))) + assert rgc._contains_gcptr(lltype.Ptr(lltype.GcStruct('x'))) + assert not rgc._contains_gcptr(lltype.Ptr(lltype.Struct('x'))) + GCPTR = lltype.Ptr(lltype.GcStruct('x')) + assert rgc._contains_gcptr( + lltype.Struct('FOO', ('s', lltype.Struct('BAR', ('y', GCPTR))))) def test_ll_arraycopy_small(): TYPE = lltype.GcArray(lltype.Signed) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit