Author: Nicolas Truessel <ntrues...@njsm.de> Branch: quad-color-gc Changeset: r86441:fd79eaeb9674 Date: 2016-08-23 12:01 +0200 http://bitbucket.org/pypy/pypy/changeset/fd79eaeb9674/
Log: Hack around dereferencing (do it with custom llop) diff --git a/rpython/memory/gctransform/qcgcframework.py b/rpython/memory/gctransform/qcgcframework.py --- a/rpython/memory/gctransform/qcgcframework.py +++ b/rpython/memory/gctransform/qcgcframework.py @@ -1,5 +1,6 @@ from rpython.rtyper.llannotation import SomePtr, SomeAddress, s_None from rpython.rtyper.lltypesystem import lltype, llmemory, rffi +from rpython.rtyper.lltypesystem.lloperation import llop from rpython.memory.gctransform.framework import (BaseFrameworkGCTransformer, BaseRootWalker) VISIT_FPTR = lltype.Ptr(lltype.FuncType([llmemory.Address], lltype.Void)) @@ -22,7 +23,8 @@ # s_gcref], s_gcref) # def invokecallback(root, visit_fn): - visit_fn(root) # FIXME: Dereference root before invoking visit_fn + obj = llop.qcgc_dereference(llmemory.Address, root) + visit_fn(obj) def pypy_trace_cb(obj, visit_fn): gc.trace(obj, invokecallback, visit_fn) pypy_trace_cb.c_name = "pypy_trace_cb" diff --git a/rpython/rtyper/lltypesystem/lloperation.py b/rpython/rtyper/lltypesystem/lloperation.py --- a/rpython/rtyper/lltypesystem/lloperation.py +++ b/rpython/rtyper/lltypesystem/lloperation.py @@ -517,6 +517,7 @@ # __________ qcgc operations __________ 'qcgc_allocate': LLOp(canmallocgc=True), 'qcgc_collect': LLOp(), # XXX: No allocations, so no canmallocgc ? + 'qcgc_dereference': LLOp(), # __________ weakrefs __________ diff --git a/rpython/translator/c/funcgen.py b/rpython/translator/c/funcgen.py --- a/rpython/translator/c/funcgen.py +++ b/rpython/translator/c/funcgen.py @@ -959,3 +959,8 @@ def OP_QCGC_COLLECT(self, op): return 'qcgc_collect();' + + def OP_QCGC_DEREFERENCE(self, op): + arg = self.expr(op.args[0]) + result = self.expr(op.result) + return '%s = *((object_t **) %s);' % (result, arg) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit