[pypy-commit] pypy quad-color-gc: Make some C compilation working (WIP)

ntruessel pypy.commits at gmail.com
Fri Aug 19 09:03:11 EDT 2016


Author: Nicolas Truessel <ntruessel at njsm.de>
Branch: quad-color-gc
Changeset: r86315:025a7647e086
Date: 2016-08-19 15:02 +0200
http://bitbucket.org/pypy/pypy/changeset/025a7647e086/

Log:	Make some C compilation working (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
@@ -18,7 +18,7 @@
     TRANSLATION_PARAMS = {}
     HDR = lltype.Struct(
             'PYPYHDR',
-            ('hdr', rffi.COpaque('object_t')),
+            ('hdr', rffi.COpaque('object_t', hints={"is_qcgc_header": True})),
             ('tid', lltype.Signed),
             ('hash', lltype.Signed))
     #HDR = rffi.COpaque('object_t')
@@ -72,7 +72,7 @@
     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 = llop.combine_ushort(lltype.Signed, typeid, 0)
+        hdr.tid = typeid.index
 
     def init_gc_object_immortal(self, addr, typeid, flags=0): # XXX: Prebuilt Objects?
         assert flags == 0
@@ -83,6 +83,7 @@
         #
         hdr = llmemory.cast_adr_to_ptr(addr, lltype.Ptr(self.HDR))
         hdr.hash = prebuilt_hash
+        #hdr._obj._name = typeid.index
         #
         # STMGC CODE:
         #assert flags == 0
diff --git a/rpython/translator/c/node.py b/rpython/translator/c/node.py
--- a/rpython/translator/c/node.py
+++ b/rpython/translator/c/node.py
@@ -976,12 +976,33 @@
                 args.append('0')
         yield 'RPyOpaque_SETUP_%s(%s);' % (T.tag, ', '.join(args))
 
+class QcgcHeader_OpaqueNode(ContainerNode):
+    nodekind = 'qcgchdr'
+    globalcontainer = True
+    typename = 'object_t @'
+    implementationtypename = typename
+    _funccodegen_owner = None
+
+    def __init__(self, db, T, obj):
+        ContainerNode.__init__(self, db, T, obj)
+
+    def initializationexpr(self, decoration=''):
+        yield '{ QCGC_PREBUILT_OBJECT }'
+
+    def enum_dependencies(self):
+        return []
+
+    def basename(self):
+        return self.nodekind
+
 
 def opaquenode_factory(db, T, obj):
     if T == RuntimeTypeInfo:
         return db.gcpolicy.rtti_node_factory()(db, T, obj)
     if T.hints.get("render_structure", False):
         return ExtType_OpaqueNode(db, T, obj)
+    if T.hints.get("is_qcgc_header", False):
+        return QcgcHeader_OpaqueNode(db, T, obj)
     raise Exception("don't know about %r" % (T,))
 
 


More information about the pypy-commit mailing list