Author: Nicolas Truessel <[email protected]>
Branch: quad-color-gc
Changeset: r86311:cba20e2f61b9
Date: 2016-08-19 13:46 +0200
http://bitbucket.org/pypy/pypy/changeset/cba20e2f61b9/
Log: Extend GC/Transformer (WIP)
diff --git a/rpython/memory/gc/qcgc.py b/rpython/memory/gc/qcgc.py
--- a/rpython/memory/gc/qcgc.py
+++ b/rpython/memory/gc/qcgc.py
@@ -1,5 +1,5 @@
from rpython.memory.gc.base import GCBase
-from rpython.rtyper.lltypesystem import rffi, lltype
+from rpython.rtyper.lltypesystem import rffi, lltype, llgroup, llmemory
class QCGC(GCBase):
_alloc_flavor_ = "raw"
@@ -66,3 +66,29 @@
def get_type_id(self, obj):
return self.header(obj).tid
+
+ def init_gc_object(self, addr, typeid, flags=0):
+ assert flags == 0
+ hdr = llmemory.cast_adr_to_ptr(addr, lltype.Ptr(self.HDR))
+ hdr.tid = typeid
+
+ def init_gc_object_immortal(self, addr, typeid, flags=0): # XXX: Prebuilt
Objects?
+ assert flags == 0
+ self.init_gc_object(addr, typeid, flags)
+ prebuilt_hash = lltype.identityhash_nocache(ptr)
+ assert prebuilt_hash != 0
+ #
+ hdr = llmemory.cast_adr_to_ptr(addr, lltype.Ptr(self.HDR))
+ hdr.hash = prebuilt_hash
+ #
+ # STMGC CODE:
+ #assert flags == 0
+ #assert isinstance(typeid16, llgroup.GroupMemberOffset)
+ #ptr = self.gcheaderbuilder.object_from_header(addr.ptr)
+ #prebuilt_hash = lltype.identityhash_nocache(ptr)
+ #assert prebuilt_hash != 0 # xxx probably good enough
+ ##
+ #hdr = llmemory.cast_adr_to_ptr(addr, lltype.Ptr(self.HDR))
+ #hdr._obj._name = typeid16.index # debug only
+ #hdr._obj.typeid16 = typeid16
+ #hdr._obj.prebuilt_hash = prebuilt_hash
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
@@ -32,11 +32,16 @@
SomePtr(VISIT_FPTR)],
s_None))
- def push_roots(sef, hop, keep_current_args=False):
- raise NotImplementedError
+ def push_roots(self, hop, keep_current_args=False):
+ livevars = self.get_livevars_for_roots(hop, keep_current_args)
+ self.num_pushs += len(livevars)
+ for var in livevars:
+ hop.genop("qcgc_push_root", [var])
+ return livevars
- def pop_roots(sef, hop, livevars):
- raise NotImplementedError
+ def pop_roots(self, hop, livevars):
+ for _ in livevars: # Does not move, so no writing back
+ hop.genop("qcgc_pop_root", [])
class QcgcRootWalker(BaseRootWalker):
def walk_stack_roots(self, collect_stack_root, is_minor=False):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit