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

Reply via email to